@assistant-ui/react-ag-ui 0.0.65 → 0.0.67

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.
@@ -1 +1 @@
1
- {"version":3,"file":"run-aggregator.js","names":[],"sources":["../../../src/runtime/adapter/run-aggregator.ts"],"sourcesContent":["\"use client\";\n\nimport {\n isMcpAppUri,\n type ChatModelRunResult,\n type MessagePartTiming,\n type MessageStatus,\n type MessageTiming,\n type ThreadAssistantMessagePart,\n type ThreadMessage,\n type ToolCallMessagePart,\n type ToolModelContentPart,\n} from \"@assistant-ui/core\";\nimport {\n applyA2uiOperations,\n convertSurfaceToUISpec,\n surfaceToOperations,\n type A2uiState,\n type A2uiSurfaceState,\n} from \"@assistant-ui/react-generative-ui/a2ui\";\nimport jsonpatch, { type Operation } from \"fast-json-patch\";\nimport { readMcpAppResourceUri } from \"../mcp-tool-result\";\nimport { projectAgUiToolApprovals } from \"./tool-approval\";\nimport type { AgUiEvent, AgUiInterrupt } from \"../types\";\nimport type { Logger } from \"../logger\";\n\nexport const AG_UI_METADATA_NAMESPACE = \"agui\";\n\nconst ROOT_SCOPE = \"\";\n\n// Defensive guard against a malformed or cyclic parentToolCallId /\n// parentSubagentRunId chain, not a realistic nesting depth.\nconst MAX_SUBAGENT_DEPTH = 16;\n\ntype SubagentRunState = {\n subagentRunId: string;\n name: string;\n description?: string;\n parentSubagentRunId?: string;\n parentToolCallId?: string;\n parentMessageId?: string;\n createdAt: Date;\n status: MessageStatus;\n result?: unknown;\n interruptIds?: string[];\n errorCode?: string;\n};\n\ntype ToolApproval = NonNullable<ToolCallMessagePart[\"approval\"]>;\n\ntype PartOrderEntry =\n | { kind: \"text\"; key: string; subagentRunId?: string }\n | { kind: \"reasoning\"; key: string; subagentRunId?: string }\n | { kind: \"tool-call\"; toolCallId: string }\n | { kind: \"data\"; name: string; value: unknown; subagentRunId?: string };\n\ntype BuildContext = {\n subagentsByParentToolCallId: Map<string, string[]>;\n reachable: Set<string>;\n approvals: ReadonlyMap<string, ToolApproval>;\n // partOrder bucketed by the scope each part renders in, so one emit walks\n // every part once however many subagents the run spawned.\n partsByScope: Map<string, { index: number; part: PartOrderEntry }[]>;\n // Present only for the root walk: the pass that builds the snapshot is also\n // the one that decides where a retracted reasoning signature anchors, so the\n // two can never disagree about what materialized.\n root?: {\n opaqueCandidates: (AgUiOpaqueReasoning & { anchor: number })[];\n lastMaterializedIndex: number;\n };\n};\n\nexport type AgUiOpaqueReasoning = {\n id: string;\n encryptedValue: string;\n after?: boolean;\n};\n\nexport type AgUiCustomMetadata = {\n /** Wire role restored on export for messages the internal model cannot\n * represent (a developer record rides as a system message). */\n role?: \"developer\";\n interrupts?: AgUiInterrupt[];\n opaqueReasoning?: AgUiOpaqueReasoning[];\n};\n\ntype Emit = (update: ChatModelRunResult) => void;\n\ntype ToolCallState = {\n toolCallId: string;\n toolCallName: string;\n argsText: string;\n argsTextScanner?: JSONContainerScanner | undefined;\n parsedArgs: Record<string, unknown> | undefined;\n result: unknown;\n isError: boolean | undefined;\n parentMessageId?: string;\n toolMessageId?: string;\n mcpAppResourceUri?: string;\n mcpAppServerId?: string;\n artifact?: unknown;\n modelContent?: ToolModelContentPart[];\n snapshotResultApplied: boolean;\n subagentRunId?: string;\n};\n\ntype JSONContainerScanner = {\n state: \"pending\" | \"open\" | \"complete\" | \"invalid\";\n stack: (\"{\" | \"[\")[];\n inString: boolean;\n escaped: boolean;\n};\n\nconst createJSONContainerScanner = (): JSONContainerScanner => ({\n state: \"pending\",\n stack: [],\n inString: false,\n escaped: false,\n});\n\nconst isJSONWhitespace = (char: string): boolean =>\n char === \" \" || char === \"\\t\" || char === \"\\n\" || char === \"\\r\";\n\nconst scanJSONContainerDelta = (\n scanner: JSONContainerScanner,\n delta: string,\n): boolean => {\n let completed = false;\n\n for (const char of delta) {\n if (scanner.state === \"invalid\") continue;\n if (scanner.state === \"complete\") {\n if (isJSONWhitespace(char)) continue;\n scanner.state = \"invalid\";\n continue;\n }\n if (scanner.state === \"pending\") {\n if (isJSONWhitespace(char)) continue;\n if (char !== \"{\" && char !== \"[\") {\n scanner.state = \"invalid\";\n continue;\n }\n scanner.state = \"open\";\n scanner.stack.push(char);\n continue;\n }\n if (scanner.inString) {\n if (scanner.escaped) {\n scanner.escaped = false;\n } else if (char === \"\\\\\") {\n scanner.escaped = true;\n } else if (char === '\"') {\n scanner.inString = false;\n }\n continue;\n }\n if (char === '\"') {\n scanner.inString = true;\n continue;\n }\n if (char === \"{\" || char === \"[\") {\n scanner.stack.push(char);\n continue;\n }\n if (char === \"}\" || char === \"]\") {\n const expected = char === \"}\" ? \"{\" : \"[\";\n if (scanner.stack.pop() !== expected) {\n scanner.state = \"invalid\";\n continue;\n }\n if (scanner.stack.length === 0) {\n scanner.state = \"complete\";\n completed = true;\n }\n }\n }\n\n return completed && scanner.state === \"complete\";\n};\n\nexport const MCP_APPS_ACTIVITY_TYPE = \"mcp-apps\";\n\nexport const A2UI_SURFACE_ACTIVITY_TYPE = \"a2ui-surface\";\n\nexport const isPlainObject = (\n value: unknown,\n): value is Record<string, unknown> =>\n !!value && typeof value === \"object\" && !Array.isArray(value);\n\nexport type RunAggregatorOptions = {\n showThinking: boolean;\n logger: Logger;\n emit: Emit;\n onServerMessageId?: (messageId: string) => void;\n onTextMessageStart?: (messageId: string) => void;\n};\n\n/**\n * Collects AG-UI events into assistant-ui run snapshots that can be yielded from a ChatModelAdapter.\n *\n * The aggregator keeps a single assistant message worth of parts. Each incoming event updates the parts and\n * emits a fresh snapshot through the provided `emit` callback. `CUSTOM` events\n * become canonical data parts; integration plumbing names such as\n * `on_interrupt`, `PredictState`, `Exit`, `hook_error`, `state_update_error`,\n * `system:*`, and `MultiAgentHandoff` are forwarded the same way, so apps only\n * need data renderers for names they own.\n */\nexport class RunAggregator {\n private readonly emitUpdate: Emit;\n private readonly showThinking: boolean;\n private readonly logger: Logger;\n private readonly onServerMessageId: ((messageId: string) => void) | undefined;\n private readonly onTextMessageStart:\n | ((messageId: string) => void)\n | undefined;\n\n private status: ChatModelRunResult[\"status\"] | undefined;\n private interrupts: AgUiInterrupt[] | undefined;\n private readonly textParts = new Map<string, { buffer: string }>();\n private readonly activeTextMessageIdByScope = new Map<string, string>();\n private readonly reasoningParts = new Map<\n string,\n { buffer: string; timing?: MessagePartTiming }\n >();\n private readonly reasoningSignatures = new Map<string, string>();\n private readonly reasoningSignatureIds = new Map<string, string>();\n // Signatures captured while thinking is hidden have no block to live on;\n // they are transport state that must survive to the next run input. The\n // claim rules mirror the visible path: an id-carrying block, or an open\n // anonymous one.\n private readonly hiddenSignatures = new Map<string, string>();\n private readonly hiddenSignatureAnchors = new Map<string, number>();\n private readonly hiddenBlockAnchors = new Map<string, number>();\n private hiddenAnonymousAnchor: number | undefined;\n private readonly hiddenReasoningIds = new Set<string>();\n private hiddenActiveReasoning: \"none\" | \"anonymous\" | \"identified\" = \"none\";\n private hasEmittedOpaqueReasoning = false;\n private readonly loggedDroppedOpaqueIds = new Set<string>();\n private readonly reasoningMessageIds = new Map<string, string>();\n private readonly anonymousReasoningKeys = new Set<string>();\n private readonly activeReasoningKeyByScope = new Map<string, string>();\n private readonly subagentRuns = new Map<string, SubagentRunState>();\n // The nesting graph only moves when a run is announced or a tool call is\n // created, which is rare next to emit(), so it is derived once per change\n // rather than per streamed delta.\n private nestingMemo:\n | {\n subagentsByParentToolCallId: Map<string, string[]>;\n reachable: Set<string>;\n }\n | undefined;\n private reasoningPartCounter = 0;\n private readonly toolCalls = new Map<string, ToolCallState>();\n private readonly a2uiBuckets = new Map<string, A2uiState>();\n private readonly a2uiToolCallIds = new Set<string>();\n private readonly activityParts = new Map<\n string,\n { kind: \"data\"; name: string; value: unknown; subagentRunId?: string }\n >();\n private readonly lastResolvedToolCallIdByScope = new Map<string, string>();\n private readonly partOrder: PartOrderEntry[] = [];\n private textPartCounter = 0;\n private serverMessageIdReported = false;\n private reportedServerMessageId: string | undefined;\n private lastTextMessageId: string | undefined;\n\n private streamStartTime: number | undefined;\n private firstTokenTime: number | undefined;\n private totalChunks = 0;\n\n constructor(options: RunAggregatorOptions) {\n this.emitUpdate = options.emit;\n this.showThinking = options.showThinking;\n this.logger = options.logger;\n this.onServerMessageId = options.onServerMessageId;\n this.onTextMessageStart = options.onTextMessageStart;\n }\n\n hasToolCall(toolCallId: string): boolean {\n return this.toolCalls.has(toolCallId);\n }\n\n handle(event: AgUiEvent): void {\n switch (event.type) {\n case \"RUN_STARTED\": {\n this.resetMessageParts();\n this.interrupts = undefined;\n this.serverMessageIdReported = false;\n this.lastTextMessageId = undefined;\n this.reportedServerMessageId = undefined;\n this.streamStartTime = Date.now();\n this.firstTokenTime = undefined;\n this.totalChunks = 0;\n this.status = { type: \"running\" };\n this.emit();\n break;\n }\n case \"RUN_FINISHED\": {\n if (event.outcome?.type === \"interrupt\") {\n this.interrupts = event.outcome.interrupts;\n this.status = { type: \"requires-action\", reason: \"interrupt\" };\n this.emit();\n break;\n }\n\n this.interrupts = undefined;\n // A call nested inside a subagent message is answerable the same way\n // a root call is: getPendingToolCalls and addToolResult walk\n // ToolCallMessagePart.messages, so any unresolved call keeps the run\n // resumable.\n const hasUnresolvedToolCalls = Array.from(this.toolCalls.values()).some(\n (tc) => tc.result === undefined,\n );\n\n this.status = hasUnresolvedToolCalls\n ? { type: \"requires-action\", reason: \"tool-calls\" }\n : { type: \"complete\", reason: \"unknown\" };\n this.closeOpenSubagentRuns(this.status);\n this.emit();\n break;\n }\n case \"RUN_ERROR\": {\n this.status = {\n type: \"incomplete\",\n reason: \"error\",\n ...(event.message !== undefined ? { error: event.message } : {}),\n };\n this.closeOpenSubagentRuns(this.status);\n this.emit();\n break;\n }\n case \"RUN_CANCELLED\": {\n // A cancel can land after RUN_FINISHED while the response is still\n // closing, and the answer it finished is already persisted as complete.\n if (this.status?.type === \"complete\") break;\n this.status = { type: \"incomplete\", reason: \"cancelled\" };\n this.closeOpenSubagentRuns(this.status);\n this.emit();\n break;\n }\n\n case \"TEXT_MESSAGE_START\": {\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) {\n this.beginDistinctTextMessage(event.messageId);\n this.reportServerMessageId(event.messageId);\n if (event.messageId) this.lastTextMessageId = event.messageId;\n }\n this.startTextMessage(scope, event.messageId);\n this.emit();\n break;\n }\n case \"TEXT_MESSAGE_CONTENT\":\n case \"TEXT_MESSAGE_CHUNK\": {\n const incomingId = \"messageId\" in event ? event.messageId : undefined;\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) {\n this.beginDistinctTextMessage(incomingId);\n this.reportServerMessageId(incomingId);\n if (incomingId) this.lastTextMessageId = incomingId;\n }\n if (!event.delta) break;\n this.recordFirstToken();\n const id = this.resolveTextMessageId(scope, incomingId);\n this.appendText(id, event.delta);\n this.totalChunks++;\n this.emit();\n break;\n }\n case \"TEXT_MESSAGE_END\": {\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) this.reportServerMessageId(event.messageId);\n if (\n event.messageId &&\n this.activeTextMessageIdByScope.get(scope) ===\n this.partKey(scope, event.messageId)\n ) {\n this.activeTextMessageIdByScope.delete(scope);\n }\n this.emit();\n break;\n }\n\n case \"CUSTOM\": {\n this.activeTextMessageIdByScope.delete(ROOT_SCOPE);\n this.partOrder.push({\n kind: \"data\",\n name: event.name,\n value: event.value,\n });\n this.emit();\n break;\n }\n\n case \"THINKING_START\":\n case \"THINKING_TEXT_MESSAGE_START\":\n case \"REASONING_START\":\n case \"REASONING_MESSAGE_START\":\n this.handleReasoningStart(\n this.scopeOf(\"subagentRunId\" in event ? event : {}),\n \"messageId\" in event ? event.messageId : undefined,\n event.type === \"REASONING_MESSAGE_START\",\n event.timestamp,\n );\n break;\n case \"REASONING_ENCRYPTED_VALUE\":\n if (event.subtype === \"message\") {\n const scope = this.scopeOf(event);\n // entityId names any message, not necessarily a reasoning one, so an\n // unmatched id may only claim a block that has no id to contradict it.\n const active = this.activeReasoningKeyByScope.get(scope);\n const entityKey = this.partKey(scope, event.entityId);\n const key = this.showThinking\n ? this.reasoningParts.has(entityKey)\n ? entityKey\n : active !== undefined && this.anonymousReasoningKeys.has(active)\n ? active\n : undefined\n : undefined;\n if (key !== undefined) {\n this.reasoningSignatures.set(key, event.encryptedValue);\n this.reasoningSignatureIds.set(key, event.entityId);\n this.emit();\n } else if (\n !this.showThinking &&\n // Hidden-reasoning bookkeeping stays root-only for this task — a\n // subagent's opaque/hidden reasoning signatures are not preserved.\n scope === ROOT_SCOPE &&\n event.entityId.trim().length > 0 &&\n event.encryptedValue.trim().length > 0 &&\n (this.hiddenReasoningIds.has(event.entityId) ||\n this.hiddenActiveReasoning === \"anonymous\")\n ) {\n this.hiddenSignatures.set(event.entityId, event.encryptedValue);\n this.hiddenSignatureAnchors.set(\n event.entityId,\n this.hiddenBlockAnchors.get(event.entityId) ??\n this.hiddenAnonymousAnchor ??\n this.partOrder.length,\n );\n this.emit();\n }\n }\n break;\n case \"THINKING_TEXT_MESSAGE_CONTENT\":\n this.handleReasoningContent(ROOT_SCOPE, event.delta);\n this.totalChunks++;\n this.recordFirstToken();\n break;\n case \"REASONING_MESSAGE_CONTENT\":\n this.handleReasoningContent(\n this.scopeOf(event),\n event.delta,\n \"messageId\" in event ? event.messageId : undefined,\n true,\n );\n this.totalChunks++;\n this.recordFirstToken();\n break;\n case \"THINKING_TEXT_MESSAGE_END\":\n case \"THINKING_END\":\n this.handleReasoningEnd(ROOT_SCOPE, event.timestamp);\n break;\n case \"REASONING_MESSAGE_END\":\n case \"REASONING_END\":\n this.handleReasoningEnd(this.scopeOf(event), event.timestamp);\n break;\n\n case \"TOOL_CALL_START\": {\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) {\n this.reportServerMessageId(event.parentMessageId);\n }\n this.startToolCall(\n scope,\n event.toolCallId,\n event.toolCallName,\n event.parentMessageId,\n );\n this.emit();\n break;\n }\n case \"TOOL_CALL_ARGS\":\n case \"TOOL_CALL_CHUNK\": {\n if (\n event.type === \"TOOL_CALL_CHUNK\" &&\n this.scopeOf(event) === ROOT_SCOPE\n ) {\n this.reportServerMessageId(event.parentMessageId);\n }\n if (!event.delta) break;\n this.appendToolArgs(event.toolCallId, event.delta);\n this.emit();\n break;\n }\n case \"TOOL_CALL_END\": {\n this.emit();\n break;\n }\n case \"TOOL_CALL_RESULT\": {\n this.finishToolCall(\n this.scopeOf(event),\n event.toolCallId,\n event.content ?? \"\",\n typeof event.mcpResult?.isError === \"boolean\"\n ? event.mcpResult.isError\n : event.role === \"tool\"\n ? false\n : undefined,\n event.messageId,\n event.mcpResult,\n );\n this.emit();\n break;\n }\n case \"ACTIVITY_SNAPSHOT\": {\n if (event.activityType === A2UI_SURFACE_ACTIVITY_TYPE) {\n this.handleA2uiActivitySnapshot(event);\n break;\n }\n if (event.activityType !== MCP_APPS_ACTIVITY_TYPE) {\n this.handleActivitySnapshot(event);\n break;\n }\n const activityScope = this.scopeOf(event);\n const toolCallId = event.content.toolCallId;\n const fallbackId =\n this.lastResolvedToolCallIdByScope.get(activityScope);\n const entry =\n typeof toolCallId === \"string\"\n ? this.toolCalls.get(toolCallId)\n : fallbackId\n ? this.toolCalls.get(fallbackId)\n : undefined;\n const resourceUri = event.content.resourceUri;\n if (\n entry &&\n typeof resourceUri === \"string\" &&\n isMcpAppUri(resourceUri)\n ) {\n entry.mcpAppResourceUri = resourceUri;\n const id = event.content.serverId;\n const hash = event.content.serverHash;\n if (typeof id === \"string\" && id.length > 0) {\n entry.mcpAppServerId = id;\n } else if (typeof hash === \"string\" && hash.length > 0) {\n entry.mcpAppServerId = hash;\n }\n const result = event.content.result;\n if (isPlainObject(result)) {\n if (\n entry.result !== undefined &&\n entry.modelContent === undefined\n ) {\n entry.modelContent = [\n {\n type: \"text\",\n text:\n typeof entry.result === \"string\"\n ? entry.result\n : JSON.stringify(entry.result),\n },\n ];\n }\n entry.result = result;\n entry.snapshotResultApplied = true;\n if (typeof result.isError === \"boolean\") {\n entry.isError = result.isError;\n }\n }\n this.emit();\n }\n break;\n }\n\n case \"SUBAGENT_STARTED\": {\n // A suspended subagent is re-announced with the same id on resume, so\n // a repeat is a continuation: it may refresh the descriptive fields\n // and reopen the status, but re-parenting an established run would\n // move its already-rendered output to a different tool call.\n const existing = this.subagentRuns.get(event.subagentRunId);\n if (existing) {\n existing.name = event.name;\n if (event.description !== undefined)\n existing.description = event.description;\n existing.status = { type: \"running\" };\n this.emit();\n break;\n }\n this.nestingMemo = undefined;\n this.subagentRuns.set(event.subagentRunId, {\n subagentRunId: event.subagentRunId,\n name: event.name,\n ...(event.description !== undefined\n ? { description: event.description }\n : {}),\n ...(event.parentSubagentRunId !== undefined\n ? { parentSubagentRunId: event.parentSubagentRunId }\n : {}),\n ...(event.parentToolCallId !== undefined\n ? { parentToolCallId: event.parentToolCallId }\n : {}),\n ...(event.parentMessageId !== undefined\n ? { parentMessageId: event.parentMessageId }\n : {}),\n createdAt: new Date(),\n status: { type: \"running\" },\n });\n this.emit();\n break;\n }\n case \"SUBAGENT_FINISHED\": {\n const run = this.subagentRuns.get(event.subagentRunId);\n if (run) {\n run.status =\n event.outcome?.type === \"suspended\"\n ? { type: \"requires-action\", reason: \"interrupt\" }\n : { type: \"complete\", reason: \"unknown\" };\n if (event.result !== undefined) run.result = event.result;\n if (event.outcome?.type === \"suspended\" && event.outcome.interruptIds)\n run.interruptIds = event.outcome.interruptIds;\n }\n this.emit();\n break;\n }\n case \"SUBAGENT_ERROR\": {\n const run = this.subagentRuns.get(event.subagentRunId);\n if (run) {\n run.status = {\n type: \"incomplete\",\n reason: \"error\",\n ...(event.message !== undefined ? { error: event.message } : {}),\n };\n if (event.code !== undefined) run.errorCode = event.code;\n }\n this.emit();\n break;\n }\n\n case \"ACTIVITY_DELTA\": {\n this.handleActivityDelta(event);\n break;\n }\n\n default: {\n this.logger.debug?.(\"[agui] aggregator ignored event\", event);\n }\n }\n }\n\n private handleActivityDelta(\n event: Extract<AgUiEvent, { type: \"ACTIVITY_DELTA\" }>,\n ): void {\n const scope = this.scopeOf(event);\n const existing = this.activityParts.get(\n this.partKey(scope, `message:${event.messageId}`),\n );\n if (!existing) {\n this.logger.debug?.(\"[agui] activity delta has no snapshot\", event);\n return;\n }\n if (event.patch.length === 0) return;\n try {\n const result = jsonpatch.applyPatch(\n existing.value,\n event.patch as Operation[],\n /* validateOperation */ true,\n /* mutateDocument */ false,\n );\n if (!isPlainObject(result.newDocument)) {\n this.logger.debug?.(\n \"[agui] activity delta produced non-object content\",\n event,\n );\n return;\n }\n existing.name = `agui-activity/${event.activityType}`;\n existing.value = result.newDocument;\n this.emit();\n } catch (error) {\n this.logger.error?.(\"[agui] failed to apply activity delta\", error);\n }\n }\n\n private handleA2uiActivitySnapshot(\n event: Extract<AgUiEvent, { type: \"ACTIVITY_SNAPSHOT\" }>,\n ): void {\n const operations = event.content[\"a2ui_operations\"];\n if (!Array.isArray(operations)) return;\n\n const messageId = event.messageId ?? \"a2ui:anonymous\";\n if (event.replace === false && this.a2uiBuckets.has(messageId)) return;\n\n const { state, warnings } = applyA2uiOperations(new Map(), operations);\n for (const warning of warnings) {\n this.logger.debug(\"[agui] a2ui operation warning\", warning);\n }\n this.a2uiBuckets.delete(messageId);\n this.a2uiBuckets.set(messageId, state);\n this.synthesizeA2uiToolCalls();\n this.emit();\n }\n\n private handleActivitySnapshot(\n event: Extract<AgUiEvent, { type: \"ACTIVITY_SNAPSHOT\" }>,\n ): void {\n const scope = this.scopeOf(event);\n const key = this.partKey(\n scope,\n event.messageId !== undefined\n ? `message:${event.messageId}`\n : `type:${event.activityType}`,\n );\n const existing = this.activityParts.get(key);\n if (existing) {\n if (event.replace === false) return;\n existing.name = `agui-activity/${event.activityType}`;\n existing.value = event.content;\n } else {\n const part =\n scope === ROOT_SCOPE\n ? {\n kind: \"data\" as const,\n name: `agui-activity/${event.activityType}`,\n value: event.content,\n }\n : {\n kind: \"data\" as const,\n name: `agui-activity/${event.activityType}`,\n value: event.content,\n subagentRunId: scope,\n };\n this.activityParts.set(key, part);\n this.partOrder.push(part);\n this.activeTextMessageIdByScope.delete(scope);\n }\n this.emit();\n }\n\n private synthesizeA2uiToolCalls(): void {\n const surfaces = new Map<string, A2uiSurfaceState>();\n\n for (const bucket of this.a2uiBuckets.values()) {\n for (const [surfaceId, surface] of bucket) {\n surfaces.set(surfaceId, surface);\n }\n }\n\n const activeToolCallIds = new Set<string>();\n for (const [surfaceId, surface] of surfaces) {\n const toolCallId = `a2ui:${surfaceId}`;\n const { spec, warnings } = convertSurfaceToUISpec(surface);\n for (const warning of warnings) {\n this.logger.debug(\"[agui] a2ui surface conversion warning\", warning);\n }\n if (!spec) continue;\n\n activeToolCallIds.add(toolCallId);\n\n const entry: ToolCallState = {\n toolCallId,\n toolCallName: \"present\",\n argsText: JSON.stringify(spec),\n parsedArgs: spec,\n result: {},\n isError: undefined,\n artifact: { a2ui: surfaceToOperations(surface) },\n snapshotResultApplied: false,\n };\n if (!this.toolCalls.has(toolCallId)) {\n this.partOrder.push({ kind: \"tool-call\", toolCallId });\n }\n this.nestingMemo = undefined;\n this.toolCalls.set(toolCallId, entry);\n this.a2uiToolCallIds.add(toolCallId);\n }\n\n for (const toolCallId of this.a2uiToolCallIds) {\n if (activeToolCallIds.has(toolCallId)) continue;\n this.nestingMemo = undefined;\n this.toolCalls.delete(toolCallId);\n const partIndex = this.partOrder.findIndex(\n (part) => part.kind === \"tool-call\" && part.toolCallId === toolCallId,\n );\n if (partIndex !== -1) this.partOrder.splice(partIndex, 1);\n this.a2uiToolCallIds.delete(toolCallId);\n }\n }\n\n private reportServerMessageId(messageId: string | undefined): void {\n if (!messageId) return;\n if (this.lastTextMessageId === undefined) {\n this.lastTextMessageId = messageId;\n }\n if (this.serverMessageIdReported) return;\n this.serverMessageIdReported = true;\n this.reportedServerMessageId = messageId;\n this.onServerMessageId?.(messageId);\n }\n\n private clearTextParts(): void {\n this.textParts.clear();\n }\n\n private resetMessageParts(): void {\n this.clearTextParts();\n this.reasoningParts.clear();\n this.reasoningSignatures.clear();\n this.reasoningSignatureIds.clear();\n this.reasoningMessageIds.clear();\n this.hiddenSignatures.clear();\n this.hiddenSignatureAnchors.clear();\n this.hiddenBlockAnchors.clear();\n this.hiddenAnonymousAnchor = undefined;\n this.hiddenReasoningIds.clear();\n this.hiddenActiveReasoning = \"none\";\n this.loggedDroppedOpaqueIds.clear();\n this.anonymousReasoningKeys.clear();\n this.activeReasoningKeyByScope.clear();\n this.nestingMemo = undefined;\n this.subagentRuns.clear();\n this.reasoningPartCounter = 0;\n this.toolCalls.clear();\n this.a2uiBuckets.clear();\n this.a2uiToolCallIds.clear();\n this.activityParts.clear();\n this.lastResolvedToolCallIdByScope.clear();\n this.partOrder.length = 0;\n this.textPartCounter = 0;\n this.activeTextMessageIdByScope.clear();\n this.reportedServerMessageId = undefined;\n }\n\n // A subagent only ever reports its own terminal, so a run that ends while\n // one is still streaming would leave that nested message spinning forever.\n private closeOpenSubagentRuns(status: MessageStatus): void {\n for (const run of this.subagentRuns.values()) {\n if (run.status.type === \"running\") run.status = status;\n }\n }\n\n private scopeOf(event: { subagentRunId?: string }): string {\n return event.subagentRunId ?? ROOT_SCOPE;\n }\n\n // Nothing in the AG-UI schema makes a messageId unique across subagent runs,\n // so the accumulators key on the scope too. Root keys stay bare, which is\n // what the wire-id collision checks against reported message ids compare on.\n private partKey(scope: string, id: string): string {\n return scope === ROOT_SCOPE ? id : `${scope}\\u0000${id}`;\n }\n\n private beginDistinctTextMessage(messageId: string | undefined): void {\n if (\n !messageId ||\n this.lastTextMessageId === undefined ||\n this.lastTextMessageId === messageId ||\n !this.onTextMessageStart\n ) {\n return;\n }\n this.resetMessageParts();\n this.onTextMessageStart(messageId);\n }\n\n private generateTextKey(): string {\n this.textPartCounter += 1;\n return `text-${this.textPartCounter}`;\n }\n\n private startTextMessage(scope: string, messageId?: string): string {\n const id = messageId ?? this.generateTextKey();\n const key = this.ensureTextPart(scope, id);\n this.activeTextMessageIdByScope.set(scope, key);\n return key;\n }\n\n private resolveTextMessageId(scope: string, messageId?: string): string {\n if (messageId) {\n const key = this.ensureTextPart(scope, messageId);\n this.activeTextMessageIdByScope.set(scope, key);\n return key;\n }\n\n const active = this.activeTextMessageIdByScope.get(scope);\n if (active) {\n return active;\n }\n\n const key = this.ensureTextPart(scope, this.generateTextKey());\n this.activeTextMessageIdByScope.set(scope, key);\n return key;\n }\n\n private ensureTextPart(scope: string, id: string): string {\n const key = this.partKey(scope, id);\n if (!this.textParts.has(key)) {\n this.textParts.set(key, { buffer: \"\" });\n if (\n !this.partOrder.some((part) => part.kind === \"text\" && part.key === key)\n ) {\n this.partOrder.push(\n scope === ROOT_SCOPE\n ? { kind: \"text\", key }\n : { kind: \"text\", key, subagentRunId: scope },\n );\n }\n }\n return key;\n }\n\n private appendText(id: string, delta: string): void {\n const entry = this.textParts.get(id);\n if (!entry) return;\n entry.buffer += delta;\n }\n\n private startToolCall(\n scope: string,\n id: string | undefined,\n name?: string,\n parentMessageId?: string,\n ) {\n if (!id) return;\n // A new tool call acts as a boundary: any anonymous text that arrives\n // after it should be a new part, not appended to the pre-tool text —\n // scoped, so a subagent's tool call doesn't break the root run's text\n // and vice versa.\n this.activeTextMessageIdByScope.delete(scope);\n if (\n !this.partOrder.some(\n (part) => part.kind === \"tool-call\" && part.toolCallId === id,\n )\n ) {\n this.insertToolPart(scope, id, parentMessageId);\n }\n const state: ToolCallState = {\n toolCallId: id,\n toolCallName: name ?? \"tool\",\n argsText: \"\",\n parsedArgs: undefined,\n result: undefined,\n isError: undefined,\n snapshotResultApplied: false,\n };\n if (parentMessageId) {\n state.parentMessageId = parentMessageId;\n }\n if (scope !== ROOT_SCOPE) {\n state.subagentRunId = scope;\n }\n this.nestingMemo = undefined;\n this.toolCalls.set(id, state);\n }\n\n // The message and tool-call channels are unordered on the wire, so anchor a\n // tool call under its parentMessageId text part instead of appending it.\n private insertToolPart(scope: string, id: string, parentMessageId?: string) {\n const entry = { kind: \"tool-call\", toolCallId: id } as const;\n if (parentMessageId) {\n const parentKey = this.partKey(scope, parentMessageId);\n const parentIndex = this.partOrder.findIndex(\n (part) => part.kind === \"text\" && part.key === parentKey,\n );\n if (parentIndex !== -1) {\n let insertAt = parentIndex + 1;\n while (insertAt < this.partOrder.length) {\n const part = this.partOrder[insertAt];\n if (\n part?.kind === \"tool-call\" &&\n this.toolCalls.get(part.toolCallId)?.parentMessageId ===\n parentMessageId\n ) {\n insertAt += 1;\n continue;\n }\n break;\n }\n this.partOrder.splice(insertAt, 0, entry);\n return;\n }\n }\n this.partOrder.push(entry);\n }\n\n private appendToolArgs(id: string | undefined, delta: string) {\n const entry = id ? this.toolCalls.get(id) : undefined;\n if (!entry) return;\n if (!entry.argsTextScanner) {\n entry.argsTextScanner = createJSONContainerScanner();\n }\n entry.argsText += delta;\n const shouldParse = scanJSONContainerDelta(entry.argsTextScanner, delta);\n if (!shouldParse) {\n if (entry.argsTextScanner.state === \"invalid\") {\n entry.parsedArgs = undefined;\n }\n return;\n }\n try {\n const parsed = JSON.parse(entry.argsText);\n if (parsed && typeof parsed === \"object\") {\n entry.parsedArgs = parsed as Record<string, unknown>;\n } else {\n entry.parsedArgs = undefined;\n }\n } catch {\n entry.parsedArgs = undefined;\n }\n }\n\n private finishToolCall(\n scope: string,\n id: string,\n content: string,\n isError?: boolean,\n toolMessageId?: string,\n mcpResult?: Record<string, unknown>,\n ) {\n if (!id) return;\n let entry = this.toolCalls.get(id);\n if (!entry) {\n entry = {\n toolCallId: id,\n toolCallName: \"tool\",\n argsText: \"\",\n parsedArgs: undefined,\n result: undefined,\n isError: undefined,\n snapshotResultApplied: false,\n ...(scope !== ROOT_SCOPE ? { subagentRunId: scope } : {}),\n };\n this.nestingMemo = undefined;\n this.toolCalls.set(id, entry);\n }\n if (\n !this.partOrder.some(\n (part) => part.kind === \"tool-call\" && part.toolCallId === id,\n )\n ) {\n this.partOrder.push({ kind: \"tool-call\", toolCallId: id });\n }\n if (mcpResult !== undefined && !entry.snapshotResultApplied) {\n entry.result = mcpResult;\n entry.modelContent = [{ type: \"text\", text: content }];\n entry.snapshotResultApplied = true;\n entry.isError = isError;\n if (entry.mcpAppResourceUri === undefined) {\n const uri = readMcpAppResourceUri(mcpResult._meta);\n if (uri !== undefined) entry.mcpAppResourceUri = uri;\n }\n } else if (entry.snapshotResultApplied) {\n if (entry.modelContent === undefined) {\n entry.modelContent = [{ type: \"text\", text: content }];\n }\n if (entry.isError === undefined) {\n entry.isError = isError;\n }\n } else {\n entry.result = tryParseJSON(content);\n entry.isError = isError;\n }\n if (toolMessageId) {\n entry.toolMessageId = toolMessageId;\n }\n this.lastResolvedToolCallIdByScope.set(scope, id);\n }\n\n private nesting(): {\n subagentsByParentToolCallId: Map<string, string[]>;\n reachable: Set<string>;\n } {\n if (!this.nestingMemo) {\n const subagentsByParentToolCallId = this.subagentsByParentToolCallId();\n this.nestingMemo = {\n subagentsByParentToolCallId,\n reachable: this.reachableSubagentRunIds(subagentsByParentToolCallId),\n };\n }\n return this.nestingMemo;\n }\n\n private subagentsByParentToolCallId(): Map<string, string[]> {\n const map = new Map<string, string[]>();\n for (const run of this.subagentRuns.values()) {\n if (!run.parentToolCallId) continue;\n const list = map.get(run.parentToolCallId) ?? [];\n list.push(run.subagentRunId);\n map.set(run.parentToolCallId, list);\n }\n return map;\n }\n\n // A subagent nests under its spawning tool call only when that call is itself\n // reachable from the root scope. A run with no parentToolCallId, one naming a\n // call this run never saw, or one in a cycle has nowhere to hang; the visited\n // set also keeps a malformed chain to one visit per run instead of branching\n // at every level.\n private reachableSubagentRunIds(\n subagentsByParentToolCallId: Map<string, string[]>,\n ): Set<string> {\n const reachable = new Set<string>();\n const walk = (scope: string, depth: number): void => {\n if (depth > MAX_SUBAGENT_DEPTH) return;\n for (const entry of this.toolCalls.values()) {\n if ((entry.subagentRunId ?? ROOT_SCOPE) !== scope) continue;\n for (const id of subagentsByParentToolCallId.get(entry.toolCallId) ??\n []) {\n if (reachable.has(id)) continue;\n reachable.add(id);\n walk(id, depth + 1);\n }\n }\n };\n walk(ROOT_SCOPE, 0);\n return reachable;\n }\n\n // Nested messages rather than a discovery hook (the shape react-langchain\n // uses): ToolCallMessagePart.messages is the contract core consumers already\n // walk, and SUBAGENT_STARTED.parentToolCallId names the spawning call\n // outright, so the join needs no namespace scheme of its own.\n private materializeSubagentMessage(\n subagentRunId: string,\n depth: number,\n ctx: BuildContext,\n ): ThreadMessage | undefined {\n const run = this.subagentRuns.get(subagentRunId);\n if (!run || depth > MAX_SUBAGENT_DEPTH) return undefined;\n const content = this.buildParts(subagentRunId, depth + 1, ctx);\n return {\n id: run.subagentRunId,\n role: \"assistant\",\n createdAt: run.createdAt,\n status: run.status,\n content,\n metadata: {\n unstable_state: null,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n custom: {\n [AG_UI_METADATA_NAMESPACE]: {\n name: run.name,\n ...(run.description !== undefined\n ? { description: run.description }\n : {}),\n ...(run.parentSubagentRunId !== undefined\n ? { parentSubagentRunId: run.parentSubagentRunId }\n : {}),\n ...(run.result !== undefined ? { result: run.result } : {}),\n ...(run.interruptIds !== undefined\n ? { interruptIds: run.interruptIds }\n : {}),\n ...(run.errorCode !== undefined\n ? { errorCode: run.errorCode }\n : {}),\n },\n },\n },\n } as ThreadMessage;\n }\n\n private buildParts(\n scope: string,\n depth: number,\n ctx: BuildContext,\n ): ThreadAssistantMessagePart[] {\n const snapshot: ThreadAssistantMessagePart[] = [];\n const isRoot = scope === ROOT_SCOPE;\n\n for (const { index, part } of ctx.partsByScope.get(scope) ?? []) {\n const materialized = () => {\n if (isRoot && ctx.root) ctx.root.lastMaterializedIndex = index;\n };\n\n if (part.kind === \"tool-call\") {\n const entry = this.toolCalls.get(part.toolCallId);\n if (!entry) continue;\n const approval = ctx.approvals.get(entry.toolCallId);\n const nestedMessages = (\n ctx.subagentsByParentToolCallId.get(entry.toolCallId) ?? []\n )\n .filter((id) => ctx.reachable.has(id))\n .map((id) => this.materializeSubagentMessage(id, depth, ctx))\n .filter((m): m is ThreadMessage => m !== undefined);\n const toolPart: ToolCallMessagePart = {\n type: \"tool-call\",\n toolCallId: entry.toolCallId,\n toolName: entry.toolCallName,\n args: (entry.parsedArgs ?? {}) as any,\n argsText: entry.argsText,\n ...(approval ? { approval } : {}),\n ...(entry.result !== undefined ? { result: entry.result } : {}),\n ...(entry.artifact !== undefined ? { artifact: entry.artifact } : {}),\n ...(entry.modelContent !== undefined\n ? { modelContent: entry.modelContent }\n : {}),\n ...(entry.isError !== undefined ? { isError: entry.isError } : {}),\n ...(entry.mcpAppResourceUri\n ? {\n mcp: {\n app: {\n resourceUri: entry.mcpAppResourceUri,\n ...(entry.mcpAppServerId\n ? { serverId: entry.mcpAppServerId }\n : {}),\n },\n },\n }\n : {}),\n ...(entry.parentMessageId ? { parentId: entry.parentMessageId } : {}),\n ...(entry.toolMessageId\n ? { unstable_toolMessageId: entry.toolMessageId }\n : {}),\n ...(nestedMessages.length > 0 ? { messages: nestedMessages } : {}),\n } as ToolCallMessagePart & { unstable_toolMessageId?: string };\n snapshot.push(toolPart);\n materialized();\n continue;\n }\n\n const rawScope =\n \"subagentRunId\" in part\n ? (part.subagentRunId ?? ROOT_SCOPE)\n : ROOT_SCOPE;\n\n if (part.kind === \"reasoning\") {\n if (this.showThinking) {\n const entry = this.reasoningParts.get(part.key);\n const buffer = entry?.buffer ?? \"\";\n const isActive =\n this.activeReasoningKeyByScope.get(rawScope) === part.key;\n if (buffer.length > 0 || isActive) {\n const encryptedValue = this.reasoningSignatures.get(part.key);\n const reasoningId = this.reasoningMessageIds.get(part.key);\n const meta = {\n ...(reasoningId !== undefined ? { reasoningId } : {}),\n ...(encryptedValue !== undefined ? { encryptedValue } : {}),\n };\n snapshot.push({\n type: \"reasoning\",\n text: buffer,\n ...(entry?.timing ? { timing: entry.timing } : {}),\n ...(Object.keys(meta).length > 0\n ? { providerMetadata: { [AG_UI_METADATA_NAMESPACE]: meta } }\n : {}),\n } as const);\n materialized();\n } else if (isRoot && ctx.root) {\n // A retracted empty block still carries transport state: without\n // a part to live on, its signature rides the message metadata,\n // matching the shape a snapshot reload produces.\n const encryptedValue = this.reasoningSignatures.get(part.key);\n const id = this.reasoningSignatureIds.get(part.key);\n if (id?.trim() && encryptedValue?.trim()) {\n ctx.root.opaqueCandidates.push({\n id,\n encryptedValue,\n anchor: index + 1,\n });\n }\n }\n }\n continue;\n }\n\n if (part.kind === \"text\") {\n const entry = this.textParts.get(part.key);\n if (entry && entry.buffer.trim().length > 0) {\n snapshot.push({ type: \"text\", text: entry.buffer } as const);\n materialized();\n }\n continue;\n }\n\n if (part.kind === \"data\") {\n snapshot.push({\n type: \"data\",\n name: part.name,\n data: part.value,\n });\n materialized();\n continue;\n }\n }\n\n return snapshot;\n }\n\n private emit(): void {\n const { subagentsByParentToolCallId, reachable } = this.nesting();\n const root = {\n opaqueCandidates: Array.from(\n this.hiddenSignatures,\n ([id, encryptedValue]) => ({\n id,\n encryptedValue,\n anchor: this.hiddenSignatureAnchors.get(id)!,\n }),\n ) as (AgUiOpaqueReasoning & { anchor: number })[],\n lastMaterializedIndex: -1,\n };\n // A run that ended incomplete can no longer be resumed, so a gate left over\n // from an earlier interrupt outcome is unanswerable and must not stay\n // projected. The interrupts themselves are kept on the message, since the\n // bespoke hooks read that payload. Bound ids cover every call the run\n // produced, root or nested: the approval seams walk\n // ToolCallMessagePart.messages, so a gate naming a subagent-scoped call is\n // answerable and projects onto the nested part.\n const partsByScope = new Map<\n string,\n { index: number; part: PartOrderEntry }[]\n >();\n for (const [index, part] of this.partOrder.entries()) {\n const rawScope =\n part.kind === \"tool-call\"\n ? (this.toolCalls.get(part.toolCallId)?.subagentRunId ?? ROOT_SCOPE)\n : \"subagentRunId\" in part\n ? (part.subagentRunId ?? ROOT_SCOPE)\n : ROOT_SCOPE;\n const bucketScope =\n rawScope === ROOT_SCOPE || reachable.has(rawScope)\n ? rawScope\n : ROOT_SCOPE;\n const bucket = partsByScope.get(bucketScope);\n if (bucket) bucket.push({ index, part });\n else partsByScope.set(bucketScope, [{ index, part }]);\n }\n const ctx: BuildContext = {\n subagentsByParentToolCallId,\n reachable,\n partsByScope,\n approvals: projectAgUiToolApprovals(\n this.status?.type === \"requires-action\" ? this.interrupts : undefined,\n new Set(\n Array.from(this.toolCalls.values()).map((entry) => entry.toolCallId),\n ),\n ),\n root,\n };\n const snapshot = this.buildParts(ROOT_SCOPE, 0, ctx);\n const { opaqueCandidates, lastMaterializedIndex } = root;\n\n // An anonymous claim promotes the signature's entityId to a wire message\n // id; when that id actually names a text message or the adopted assistant\n // message id (which can also arrive via TOOL_CALL_START.parentMessageId),\n // replaying it as its own record would put two wire records under one id,\n // so such entries are dropped instead — the same outcome the visible\n // path's claim guard produces for a signature that is \"not for this\n // block\". Entries with no materialized part after their anchor trail the\n // assistant record, matching the snapshot path's anchor/after\n // bookkeeping.\n const toolMessageIds = new Set<string>();\n for (const call of this.toolCalls.values()) {\n if (call.toolMessageId) toolMessageIds.add(call.toolMessageId);\n }\n opaqueCandidates.sort((a, b) => a.anchor - b.anchor);\n const publishableOpaqueReasoning = opaqueCandidates\n .filter((entry) => {\n const collides =\n this.textParts.has(entry.id) ||\n entry.id === this.reportedServerMessageId ||\n toolMessageIds.has(entry.id);\n if (collides && !this.loggedDroppedOpaqueIds.has(entry.id)) {\n this.loggedDroppedOpaqueIds.add(entry.id);\n this.logger.debug?.(\n \"[agui] aggregator dropped opaque reasoning signature: id collides with a message id\",\n entry.id,\n );\n }\n return !collides;\n })\n .map(({ anchor, ...entry }) =>\n lastMaterializedIndex < anchor ? { ...entry, after: true } : entry,\n );\n if (publishableOpaqueReasoning.length > 0)\n this.hasEmittedOpaqueReasoning = true;\n // Once an opaque entry has been published this run, the key keeps being\n // emitted (empty when withdrawn) so the namespace merge can retract it.\n const includeOpaque = this.hasEmittedOpaqueReasoning;\n const timing = this.getTiming();\n const metadata = {\n ...(timing ? { timing } : {}),\n ...(this.interrupts || includeOpaque\n ? {\n custom: {\n [AG_UI_METADATA_NAMESPACE]: {\n ...(this.interrupts ? { interrupts: this.interrupts } : {}),\n ...(includeOpaque\n ? { opaqueReasoning: publishableOpaqueReasoning }\n : {}),\n } satisfies AgUiCustomMetadata,\n },\n }\n : {}),\n };\n const result: ChatModelRunResult = {\n content: snapshot,\n ...(this.status ? { status: this.status } : undefined),\n ...(Object.keys(metadata).length > 0 ? { metadata } : undefined),\n };\n this.emitUpdate(result);\n }\n\n private recordFirstToken(): void {\n if (\n this.firstTokenTime === undefined &&\n this.streamStartTime !== undefined\n ) {\n this.firstTokenTime = Date.now() - this.streamStartTime;\n }\n }\n\n private getTiming(): MessageTiming | undefined {\n if (this.streamStartTime === undefined) return undefined;\n\n const now = Date.now();\n const totalStreamTime = now - this.streamStartTime;\n const tokenCount =\n this.totalChunks > 0\n ? Math.ceil(\n Array.from(this.textParts.values()).reduce(\n (sum, p) => sum + p.buffer.length,\n 0,\n ) / 4,\n )\n : undefined;\n const tokensPerSecond =\n tokenCount && totalStreamTime > 0\n ? (tokenCount / totalStreamTime) * 1000\n : undefined;\n\n return {\n streamStartTime: this.streamStartTime,\n ...(this.firstTokenTime !== undefined\n ? { firstTokenTime: this.firstTokenTime }\n : {}),\n totalStreamTime,\n ...(tokenCount !== undefined ? { tokenCount } : {}),\n ...(tokensPerSecond !== undefined ? { tokensPerSecond } : {}),\n totalChunks: this.totalChunks,\n toolCallCount: this.toolCalls.size,\n };\n }\n\n private handleReasoningStart(\n scope: string,\n messageId?: string,\n isMessageId = false,\n timestamp?: number,\n ): void {\n if (!this.showThinking) {\n // Hidden-reasoning bookkeeping stays root-only for this task — a\n // subagent's opaque/hidden reasoning signatures are not preserved.\n if (scope !== ROOT_SCOPE) return;\n const anchor = this.partOrder.length;\n if (messageId === undefined) {\n this.hiddenActiveReasoning = \"anonymous\";\n this.hiddenAnonymousAnchor = anchor;\n } else {\n this.hiddenReasoningIds.add(messageId);\n this.hiddenBlockAnchors.set(messageId, anchor);\n this.hiddenActiveReasoning = \"identified\";\n }\n return;\n }\n // A reasoning block acts as a boundary: anonymous text arriving after it\n // should be a new part, not appended to any pre-reasoning text — scoped.\n this.activeTextMessageIdByScope.delete(scope);\n const key = this.partKey(\n scope,\n messageId ?? `__auto-reasoning-${++this.reasoningPartCounter}`,\n );\n // Two different questions: which id may be replayed as a ReasoningMessage.id\n // (only the message-scoped aliases carry one), and which block an unmatched\n // signature may claim (any block opened without an id at all).\n if (messageId === undefined) {\n this.anonymousReasoningKeys.add(key);\n } else if (isMessageId) {\n this.reasoningMessageIds.set(key, messageId);\n }\n if (!this.reasoningParts.has(key)) {\n this.reasoningParts.set(key, { buffer: \"\" });\n this.partOrder.push(\n scope === ROOT_SCOPE\n ? { kind: \"reasoning\", key }\n : { kind: \"reasoning\", key, subagentRunId: scope },\n );\n }\n const entry = this.reasoningParts.get(key);\n if (entry?.timing) {\n entry.timing = { startedAt: entry.timing.startedAt };\n } else if (\n entry &&\n typeof timestamp === \"number\" &&\n Number.isFinite(timestamp)\n ) {\n entry.timing = { startedAt: timestamp };\n }\n this.activeReasoningKeyByScope.set(scope, key);\n this.emit();\n }\n\n private handleReasoningContent(\n scope: string,\n delta: string,\n messageId?: string,\n isMessageId = false,\n ): void {\n if (!delta) return;\n if (!this.showThinking) {\n // Content without a preceding START still names the block (the visible\n // path opens it lazily); register it so a signature can claim it.\n if (scope !== ROOT_SCOPE) return;\n if (this.hiddenActiveReasoning === \"none\") {\n this.handleReasoningStart(scope, messageId, isMessageId);\n }\n return;\n }\n if (!this.activeReasoningKeyByScope.has(scope)) {\n // Content arrived without a preceding START — create the slot lazily.\n this.handleReasoningStart(scope, messageId, isMessageId);\n }\n const key = this.activeReasoningKeyByScope.get(scope);\n if (!key) return;\n const entry = this.reasoningParts.get(key);\n if (entry) entry.buffer += delta;\n this.emit();\n }\n\n private handleReasoningEnd(scope: string, timestamp?: number): void {\n if (!this.showThinking) {\n if (scope === ROOT_SCOPE) this.hiddenActiveReasoning = \"none\";\n return;\n }\n const key = this.activeReasoningKeyByScope.get(scope);\n const entry = key ? this.reasoningParts.get(key) : undefined;\n if (\n entry?.timing &&\n typeof timestamp === \"number\" &&\n Number.isFinite(timestamp)\n ) {\n entry.timing = { ...entry.timing, completedAt: timestamp };\n }\n this.activeReasoningKeyByScope.delete(scope);\n this.emit();\n }\n}\n\nexport function tryParseJSON(value: string): unknown {\n if (!value) return value;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"run-aggregator.js","names":[],"sources":["../../../src/runtime/adapter/run-aggregator.ts"],"sourcesContent":["\"use client\";\n\nimport {\n isMcpAppUri,\n type ChatModelRunResult,\n type MessagePartTiming,\n type MessageStatus,\n type MessageTiming,\n type ThreadAssistantMessagePart,\n type ThreadMessage,\n type ToolCallMessagePart,\n type ToolModelContentPart,\n} from \"@assistant-ui/core\";\nimport {\n applyA2uiOperations,\n surfaceToPresentToolCall,\n type A2uiState,\n type A2uiSurfaceState,\n} from \"@assistant-ui/generative-ui/a2ui\";\nimport jsonpatch, { type Operation } from \"fast-json-patch\";\nimport { readMcpAppResourceUri } from \"../mcp-tool-result\";\nimport { projectAgUiToolApprovals } from \"./tool-approval\";\nimport {\n AG_UI_METADATA_NAMESPACE,\n A2UI_SURFACE_ACTIVITY_TYPE,\n MCP_APPS_ACTIVITY_TYPE,\n type AgUiCustomMetadata,\n type AgUiEvent,\n type AgUiInterrupt,\n type AgUiOpaqueReasoning,\n} from \"../types\";\nimport type { Logger } from \"../logger\";\n\nconst ROOT_SCOPE = \"\";\n\n// Defensive guard against a malformed or cyclic parentToolCallId /\n// parentSubagentRunId chain, not a realistic nesting depth.\nconst MAX_SUBAGENT_DEPTH = 16;\n\ntype SubagentRunState = {\n subagentRunId: string;\n name: string;\n description?: string;\n parentSubagentRunId?: string;\n parentToolCallId?: string;\n parentMessageId?: string;\n createdAt: Date;\n status: MessageStatus;\n result?: unknown;\n interruptIds?: string[];\n errorCode?: string;\n};\n\ntype ToolApproval = NonNullable<ToolCallMessagePart[\"approval\"]>;\n\ntype PartOrderEntry =\n | { kind: \"text\"; key: string; subagentRunId?: string }\n | { kind: \"reasoning\"; key: string; subagentRunId?: string }\n | { kind: \"tool-call\"; toolCallId: string }\n | { kind: \"data\"; name: string; value: unknown; subagentRunId?: string };\n\ntype BuildContext = {\n subagentsByParentToolCallId: Map<string, string[]>;\n reachable: Set<string>;\n approvals: ReadonlyMap<string, ToolApproval>;\n // partOrder bucketed by the scope each part renders in, so one emit walks\n // every part once however many subagents the run spawned.\n partsByScope: Map<string, { index: number; part: PartOrderEntry }[]>;\n // Present only for the root walk: the pass that builds the snapshot is also\n // the one that decides where a retracted reasoning signature anchors, so the\n // two can never disagree about what materialized.\n root?: {\n opaqueCandidates: (AgUiOpaqueReasoning & { anchor: number })[];\n lastMaterializedIndex: number;\n };\n};\n\ntype Emit = (update: ChatModelRunResult) => void;\n\ntype ToolCallState = {\n toolCallId: string;\n toolCallName: string;\n argsText: string;\n argsTextScanner?: JSONContainerScanner | undefined;\n parsedArgs: Record<string, unknown> | undefined;\n result: unknown;\n isError: boolean | undefined;\n parentMessageId?: string;\n toolMessageId?: string;\n mcpAppResourceUri?: string;\n mcpAppServerId?: string;\n artifact?: unknown;\n modelContent?: ToolModelContentPart[];\n snapshotResultApplied: boolean;\n subagentRunId?: string;\n};\n\ntype JSONContainerScanner = {\n state: \"pending\" | \"open\" | \"complete\" | \"invalid\";\n stack: (\"{\" | \"[\")[];\n inString: boolean;\n escaped: boolean;\n};\n\nconst createJSONContainerScanner = (): JSONContainerScanner => ({\n state: \"pending\",\n stack: [],\n inString: false,\n escaped: false,\n});\n\nconst isJSONWhitespace = (char: string): boolean =>\n char === \" \" || char === \"\\t\" || char === \"\\n\" || char === \"\\r\";\n\nconst scanJSONContainerDelta = (\n scanner: JSONContainerScanner,\n delta: string,\n): boolean => {\n let completed = false;\n\n for (const char of delta) {\n if (scanner.state === \"invalid\") continue;\n if (scanner.state === \"complete\") {\n if (isJSONWhitespace(char)) continue;\n scanner.state = \"invalid\";\n continue;\n }\n if (scanner.state === \"pending\") {\n if (isJSONWhitespace(char)) continue;\n if (char !== \"{\" && char !== \"[\") {\n scanner.state = \"invalid\";\n continue;\n }\n scanner.state = \"open\";\n scanner.stack.push(char);\n continue;\n }\n if (scanner.inString) {\n if (scanner.escaped) {\n scanner.escaped = false;\n } else if (char === \"\\\\\") {\n scanner.escaped = true;\n } else if (char === '\"') {\n scanner.inString = false;\n }\n continue;\n }\n if (char === '\"') {\n scanner.inString = true;\n continue;\n }\n if (char === \"{\" || char === \"[\") {\n scanner.stack.push(char);\n continue;\n }\n if (char === \"}\" || char === \"]\") {\n const expected = char === \"}\" ? \"{\" : \"[\";\n if (scanner.stack.pop() !== expected) {\n scanner.state = \"invalid\";\n continue;\n }\n if (scanner.stack.length === 0) {\n scanner.state = \"complete\";\n completed = true;\n }\n }\n }\n\n return completed && scanner.state === \"complete\";\n};\n\nexport const isPlainObject = (\n value: unknown,\n): value is Record<string, unknown> =>\n !!value && typeof value === \"object\" && !Array.isArray(value);\n\nexport type RunAggregatorOptions = {\n showThinking: boolean;\n logger: Logger;\n emit: Emit;\n onServerMessageId?: (messageId: string) => void;\n onTextMessageStart?: (messageId: string) => void;\n};\n\n/**\n * Collects AG-UI events into assistant-ui run snapshots that can be yielded from a ChatModelAdapter.\n *\n * The aggregator keeps a single assistant message worth of parts. Each incoming event updates the parts and\n * emits a fresh snapshot through the provided `emit` callback. `CUSTOM` events\n * become canonical data parts; integration plumbing names such as\n * `on_interrupt`, `PredictState`, `Exit`, `hook_error`, `state_update_error`,\n * `system:*`, and `MultiAgentHandoff` are forwarded the same way, so apps only\n * need data renderers for names they own.\n */\nexport class RunAggregator {\n private readonly emitUpdate: Emit;\n private readonly showThinking: boolean;\n private readonly logger: Logger;\n private readonly onServerMessageId: ((messageId: string) => void) | undefined;\n private readonly onTextMessageStart:\n | ((messageId: string) => void)\n | undefined;\n\n private status: ChatModelRunResult[\"status\"] | undefined;\n private interrupts: AgUiInterrupt[] | undefined;\n private readonly textParts = new Map<string, { buffer: string }>();\n private readonly activeTextMessageIdByScope = new Map<string, string>();\n private readonly reasoningParts = new Map<\n string,\n { buffer: string; timing?: MessagePartTiming }\n >();\n private readonly reasoningSignatures = new Map<string, string>();\n private readonly reasoningSignatureIds = new Map<string, string>();\n // Signatures captured while thinking is hidden have no block to live on;\n // they are transport state that must survive to the next run input. The\n // claim rules mirror the visible path: an id-carrying block, or an open\n // anonymous one.\n private readonly hiddenSignatures = new Map<string, string>();\n private readonly hiddenSignatureAnchors = new Map<string, number>();\n private readonly hiddenBlockAnchors = new Map<string, number>();\n private hiddenAnonymousAnchor: number | undefined;\n private readonly hiddenReasoningIds = new Set<string>();\n private hiddenActiveReasoning: \"none\" | \"anonymous\" | \"identified\" = \"none\";\n private hasEmittedOpaqueReasoning = false;\n private readonly loggedDroppedOpaqueIds = new Set<string>();\n private readonly reasoningMessageIds = new Map<string, string>();\n private readonly anonymousReasoningKeys = new Set<string>();\n private readonly activeReasoningKeyByScope = new Map<string, string>();\n private readonly subagentRuns = new Map<string, SubagentRunState>();\n // The nesting graph only moves when a run is announced or a tool call is\n // created, which is rare next to emit(), so it is derived once per change\n // rather than per streamed delta.\n private nestingMemo:\n | {\n subagentsByParentToolCallId: Map<string, string[]>;\n reachable: Set<string>;\n }\n | undefined;\n private reasoningPartCounter = 0;\n private readonly toolCalls = new Map<string, ToolCallState>();\n private readonly a2uiBuckets = new Map<string, A2uiState>();\n private readonly a2uiToolCallIds = new Set<string>();\n private readonly activityParts = new Map<\n string,\n { kind: \"data\"; name: string; value: unknown; subagentRunId?: string }\n >();\n private readonly lastResolvedToolCallIdByScope = new Map<string, string>();\n private readonly partOrder: PartOrderEntry[] = [];\n private lastReasoningBeforeToolCall: PartOrderEntry | undefined;\n private textPartCounter = 0;\n private serverMessageIdReported = false;\n private reportedServerMessageId: string | undefined;\n private lastTextMessageId: string | undefined;\n\n private streamStartTime: number | undefined;\n private firstTokenTime: number | undefined;\n private totalChunks = 0;\n\n constructor(options: RunAggregatorOptions) {\n this.emitUpdate = options.emit;\n this.showThinking = options.showThinking;\n this.logger = options.logger;\n this.onServerMessageId = options.onServerMessageId;\n this.onTextMessageStart = options.onTextMessageStart;\n }\n\n hasToolCall(toolCallId: string): boolean {\n return this.toolCalls.has(toolCallId);\n }\n\n handle(event: AgUiEvent): void {\n switch (event.type) {\n case \"RUN_STARTED\": {\n this.resetMessageParts();\n this.interrupts = undefined;\n this.serverMessageIdReported = false;\n this.lastTextMessageId = undefined;\n this.reportedServerMessageId = undefined;\n this.streamStartTime = Date.now();\n this.firstTokenTime = undefined;\n this.totalChunks = 0;\n this.status = { type: \"running\" };\n this.emit();\n break;\n }\n case \"RUN_FINISHED\": {\n if (event.outcome?.type === \"interrupt\") {\n this.interrupts = event.outcome.interrupts;\n this.status = { type: \"requires-action\", reason: \"interrupt\" };\n this.emit();\n break;\n }\n\n this.interrupts = undefined;\n // A call nested inside a subagent message is answerable the same way\n // a root call is: getPendingToolCalls and addToolResult walk\n // ToolCallMessagePart.messages, so any unresolved call keeps the run\n // resumable.\n const hasUnresolvedToolCalls = Array.from(this.toolCalls.values()).some(\n (tc) => tc.result === undefined,\n );\n\n this.status = hasUnresolvedToolCalls\n ? { type: \"requires-action\", reason: \"tool-calls\" }\n : { type: \"complete\", reason: \"unknown\" };\n this.closeOpenSubagentRuns(this.status);\n this.emit();\n break;\n }\n case \"RUN_ERROR\": {\n this.status = {\n type: \"incomplete\",\n reason: \"error\",\n ...(event.message !== undefined ? { error: event.message } : {}),\n };\n this.closeOpenSubagentRuns(this.status);\n this.emit();\n break;\n }\n case \"RUN_CANCELLED\": {\n // A cancel can land after RUN_FINISHED while the response is still\n // closing, and the answer it finished is already persisted as complete.\n if (this.status?.type === \"complete\") break;\n this.status = { type: \"incomplete\", reason: \"cancelled\" };\n this.closeOpenSubagentRuns(this.status);\n this.emit();\n break;\n }\n\n case \"TEXT_MESSAGE_START\": {\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) {\n this.beginDistinctTextMessage(event.messageId);\n this.reportServerMessageId(event.messageId);\n if (event.messageId) this.lastTextMessageId = event.messageId;\n }\n this.startTextMessage(scope, event.messageId);\n this.emit();\n break;\n }\n case \"TEXT_MESSAGE_CONTENT\":\n case \"TEXT_MESSAGE_CHUNK\": {\n const incomingId = \"messageId\" in event ? event.messageId : undefined;\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) {\n this.beginDistinctTextMessage(incomingId);\n this.reportServerMessageId(incomingId);\n if (incomingId) this.lastTextMessageId = incomingId;\n }\n if (!event.delta) break;\n this.recordFirstToken();\n const id = this.resolveTextMessageId(scope, incomingId);\n this.appendText(id, event.delta);\n this.totalChunks++;\n this.emit();\n break;\n }\n case \"TEXT_MESSAGE_END\": {\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) this.reportServerMessageId(event.messageId);\n if (\n event.messageId &&\n this.activeTextMessageIdByScope.get(scope) ===\n this.partKey(scope, event.messageId)\n ) {\n this.activeTextMessageIdByScope.delete(scope);\n }\n this.emit();\n break;\n }\n\n case \"CUSTOM\": {\n this.activeTextMessageIdByScope.delete(ROOT_SCOPE);\n this.partOrder.push({\n kind: \"data\",\n name: event.name,\n value: event.value,\n });\n this.emit();\n break;\n }\n\n case \"THINKING_START\":\n case \"THINKING_TEXT_MESSAGE_START\":\n case \"REASONING_START\":\n case \"REASONING_MESSAGE_START\":\n this.handleReasoningStart(\n this.scopeOf(\"subagentRunId\" in event ? event : {}),\n \"messageId\" in event ? event.messageId : undefined,\n event.type === \"REASONING_MESSAGE_START\",\n event.timestamp,\n );\n break;\n case \"REASONING_ENCRYPTED_VALUE\":\n if (event.subtype === \"message\") {\n const scope = this.scopeOf(event);\n // entityId names any message, not necessarily a reasoning one, so an\n // unmatched id may only claim a block that has no id to contradict it.\n const active = this.activeReasoningKeyByScope.get(scope);\n const entityKey = this.partKey(scope, event.entityId);\n const key = this.showThinking\n ? this.reasoningParts.has(entityKey)\n ? entityKey\n : active !== undefined && this.anonymousReasoningKeys.has(active)\n ? active\n : undefined\n : undefined;\n if (key !== undefined) {\n this.reasoningSignatures.set(key, event.encryptedValue);\n this.reasoningSignatureIds.set(key, event.entityId);\n this.emit();\n } else if (\n !this.showThinking &&\n // Hidden-reasoning bookkeeping stays root-only for this task — a\n // subagent's opaque/hidden reasoning signatures are not preserved.\n scope === ROOT_SCOPE &&\n event.entityId.trim().length > 0 &&\n event.encryptedValue.trim().length > 0 &&\n (this.hiddenReasoningIds.has(event.entityId) ||\n this.hiddenActiveReasoning === \"anonymous\")\n ) {\n this.hiddenSignatures.set(event.entityId, event.encryptedValue);\n this.hiddenSignatureAnchors.set(\n event.entityId,\n this.hiddenBlockAnchors.get(event.entityId) ??\n this.hiddenAnonymousAnchor ??\n this.partOrder.length,\n );\n this.emit();\n }\n }\n break;\n case \"THINKING_TEXT_MESSAGE_CONTENT\":\n this.handleReasoningContent(ROOT_SCOPE, event.delta);\n this.totalChunks++;\n this.recordFirstToken();\n break;\n case \"REASONING_MESSAGE_CONTENT\":\n this.handleReasoningContent(\n this.scopeOf(event),\n event.delta,\n \"messageId\" in event ? event.messageId : undefined,\n true,\n );\n this.totalChunks++;\n this.recordFirstToken();\n break;\n case \"THINKING_TEXT_MESSAGE_END\":\n case \"THINKING_END\":\n this.handleReasoningEnd(ROOT_SCOPE, event.timestamp);\n break;\n case \"REASONING_MESSAGE_END\":\n case \"REASONING_END\":\n this.handleReasoningEnd(this.scopeOf(event), event.timestamp);\n break;\n\n case \"TOOL_CALL_START\": {\n const scope = this.scopeOf(event);\n if (scope === ROOT_SCOPE) {\n this.reportServerMessageId(event.parentMessageId);\n }\n this.startToolCall(\n scope,\n event.toolCallId,\n event.toolCallName,\n event.parentMessageId,\n );\n this.emit();\n break;\n }\n case \"TOOL_CALL_ARGS\":\n case \"TOOL_CALL_CHUNK\": {\n if (\n event.type === \"TOOL_CALL_CHUNK\" &&\n this.scopeOf(event) === ROOT_SCOPE\n ) {\n this.reportServerMessageId(event.parentMessageId);\n }\n if (!event.delta) break;\n this.appendToolArgs(event.toolCallId, event.delta);\n this.emit();\n break;\n }\n case \"TOOL_CALL_END\": {\n this.emit();\n break;\n }\n case \"TOOL_CALL_RESULT\": {\n this.finishToolCall(\n this.scopeOf(event),\n event.toolCallId,\n event.content ?? \"\",\n typeof event.mcpResult?.isError === \"boolean\"\n ? event.mcpResult.isError\n : event.role === \"tool\"\n ? false\n : undefined,\n event.messageId,\n event.mcpResult,\n );\n this.emit();\n break;\n }\n case \"ACTIVITY_SNAPSHOT\": {\n if (event.activityType === A2UI_SURFACE_ACTIVITY_TYPE) {\n this.handleA2uiActivitySnapshot(event);\n break;\n }\n if (event.activityType !== MCP_APPS_ACTIVITY_TYPE) {\n this.handleActivitySnapshot(event);\n break;\n }\n const activityScope = this.scopeOf(event);\n const toolCallId = event.content.toolCallId;\n const fallbackId =\n this.lastResolvedToolCallIdByScope.get(activityScope);\n const entry =\n typeof toolCallId === \"string\"\n ? this.toolCalls.get(toolCallId)\n : fallbackId\n ? this.toolCalls.get(fallbackId)\n : undefined;\n const resourceUri = event.content.resourceUri;\n if (\n entry &&\n typeof resourceUri === \"string\" &&\n isMcpAppUri(resourceUri)\n ) {\n entry.mcpAppResourceUri = resourceUri;\n const id = event.content.serverId;\n const hash = event.content.serverHash;\n if (typeof id === \"string\" && id.length > 0) {\n entry.mcpAppServerId = id;\n } else if (typeof hash === \"string\" && hash.length > 0) {\n entry.mcpAppServerId = hash;\n }\n const result = event.content.result;\n if (isPlainObject(result)) {\n if (\n entry.result !== undefined &&\n entry.modelContent === undefined\n ) {\n entry.modelContent = [\n {\n type: \"text\",\n text:\n typeof entry.result === \"string\"\n ? entry.result\n : JSON.stringify(entry.result),\n },\n ];\n }\n entry.result = result;\n entry.snapshotResultApplied = true;\n if (typeof result.isError === \"boolean\") {\n entry.isError = result.isError;\n }\n }\n this.emit();\n }\n break;\n }\n\n case \"SUBAGENT_STARTED\": {\n // A suspended subagent is re-announced with the same id on resume, so\n // a repeat is a continuation: it may refresh the descriptive fields\n // and reopen the status, but re-parenting an established run would\n // move its already-rendered output to a different tool call.\n const existing = this.subagentRuns.get(event.subagentRunId);\n if (existing) {\n existing.name = event.name;\n if (event.description !== undefined)\n existing.description = event.description;\n existing.status = { type: \"running\" };\n this.emit();\n break;\n }\n this.nestingMemo = undefined;\n this.subagentRuns.set(event.subagentRunId, {\n subagentRunId: event.subagentRunId,\n name: event.name,\n ...(event.description !== undefined\n ? { description: event.description }\n : {}),\n ...(event.parentSubagentRunId !== undefined\n ? { parentSubagentRunId: event.parentSubagentRunId }\n : {}),\n ...(event.parentToolCallId !== undefined\n ? { parentToolCallId: event.parentToolCallId }\n : {}),\n ...(event.parentMessageId !== undefined\n ? { parentMessageId: event.parentMessageId }\n : {}),\n createdAt: new Date(),\n status: { type: \"running\" },\n });\n this.emit();\n break;\n }\n case \"SUBAGENT_FINISHED\": {\n const run = this.subagentRuns.get(event.subagentRunId);\n if (run) {\n run.status =\n event.outcome?.type === \"suspended\"\n ? { type: \"requires-action\", reason: \"interrupt\" }\n : { type: \"complete\", reason: \"unknown\" };\n if (event.result !== undefined) run.result = event.result;\n if (event.outcome?.type === \"suspended\" && event.outcome.interruptIds)\n run.interruptIds = event.outcome.interruptIds;\n }\n this.emit();\n break;\n }\n case \"SUBAGENT_ERROR\": {\n const run = this.subagentRuns.get(event.subagentRunId);\n if (run) {\n run.status = {\n type: \"incomplete\",\n reason: \"error\",\n ...(event.message !== undefined ? { error: event.message } : {}),\n };\n if (event.code !== undefined) run.errorCode = event.code;\n }\n this.emit();\n break;\n }\n\n case \"ACTIVITY_DELTA\": {\n this.handleActivityDelta(event);\n break;\n }\n\n default: {\n this.logger.debug?.(\"[agui] aggregator ignored event\", event);\n }\n }\n }\n\n private handleActivityDelta(\n event: Extract<AgUiEvent, { type: \"ACTIVITY_DELTA\" }>,\n ): void {\n const scope = this.scopeOf(event);\n const existing = this.activityParts.get(\n this.partKey(scope, `message:${event.messageId}`),\n );\n if (!existing) {\n this.logger.debug?.(\"[agui] activity delta has no snapshot\", event);\n return;\n }\n if (event.patch.length === 0) return;\n try {\n const result = jsonpatch.applyPatch(\n existing.value,\n event.patch as Operation[],\n /* validateOperation */ true,\n /* mutateDocument */ false,\n );\n if (!isPlainObject(result.newDocument)) {\n this.logger.debug?.(\n \"[agui] activity delta produced non-object content\",\n event,\n );\n return;\n }\n existing.name = `agui-activity/${event.activityType}`;\n existing.value = result.newDocument;\n this.emit();\n } catch (error) {\n this.logger.error?.(\"[agui] failed to apply activity delta\", error);\n }\n }\n\n private handleA2uiActivitySnapshot(\n event: Extract<AgUiEvent, { type: \"ACTIVITY_SNAPSHOT\" }>,\n ): void {\n const operations = event.content[\"a2ui_operations\"];\n if (!Array.isArray(operations)) return;\n\n const messageId = event.messageId ?? \"a2ui:anonymous\";\n if (event.replace === false && this.a2uiBuckets.has(messageId)) return;\n\n const { state, warnings } = applyA2uiOperations(new Map(), operations);\n for (const warning of warnings) {\n this.logger.debug(\"[agui] a2ui operation warning\", warning);\n }\n this.a2uiBuckets.delete(messageId);\n this.a2uiBuckets.set(messageId, state);\n this.synthesizeA2uiToolCalls();\n this.emit();\n }\n\n private handleActivitySnapshot(\n event: Extract<AgUiEvent, { type: \"ACTIVITY_SNAPSHOT\" }>,\n ): void {\n const scope = this.scopeOf(event);\n const key = this.partKey(\n scope,\n event.messageId !== undefined\n ? `message:${event.messageId}`\n : `type:${event.activityType}`,\n );\n const existing = this.activityParts.get(key);\n if (existing) {\n if (event.replace === false) return;\n existing.name = `agui-activity/${event.activityType}`;\n existing.value = event.content;\n } else {\n const part =\n scope === ROOT_SCOPE\n ? {\n kind: \"data\" as const,\n name: `agui-activity/${event.activityType}`,\n value: event.content,\n }\n : {\n kind: \"data\" as const,\n name: `agui-activity/${event.activityType}`,\n value: event.content,\n subagentRunId: scope,\n };\n this.activityParts.set(key, part);\n this.partOrder.push(part);\n this.activeTextMessageIdByScope.delete(scope);\n }\n this.emit();\n }\n\n private synthesizeA2uiToolCalls(): void {\n const surfaces = new Map<string, A2uiSurfaceState>();\n\n for (const bucket of this.a2uiBuckets.values()) {\n for (const [surfaceId, surface] of bucket) {\n surfaces.set(surfaceId, surface);\n }\n }\n\n const activeToolCallIds = new Set<string>();\n for (const [surfaceId, surface] of surfaces) {\n const { toolCall, warnings } = surfaceToPresentToolCall(\n surfaceId,\n surface,\n );\n for (const warning of warnings) {\n this.logger.debug(\"[agui] a2ui surface conversion warning\", warning);\n }\n if (!toolCall) continue;\n\n const { toolCallId } = toolCall;\n\n activeToolCallIds.add(toolCallId);\n\n const entry: ToolCallState = {\n toolCallId: toolCall.toolCallId,\n toolCallName: toolCall.toolName,\n argsText: toolCall.argsText,\n parsedArgs: toolCall.args,\n result: toolCall.result,\n isError: undefined,\n artifact: toolCall.artifact,\n snapshotResultApplied: false,\n };\n if (!this.toolCalls.has(toolCallId)) {\n this.partOrder.push({ kind: \"tool-call\", toolCallId });\n }\n this.nestingMemo = undefined;\n this.toolCalls.set(toolCallId, entry);\n this.a2uiToolCallIds.add(toolCallId);\n }\n\n for (const toolCallId of this.a2uiToolCallIds) {\n if (activeToolCallIds.has(toolCallId)) continue;\n this.nestingMemo = undefined;\n this.toolCalls.delete(toolCallId);\n const partIndex = this.partOrder.findIndex(\n (part) => part.kind === \"tool-call\" && part.toolCallId === toolCallId,\n );\n if (partIndex !== -1) this.partOrder.splice(partIndex, 1);\n this.a2uiToolCallIds.delete(toolCallId);\n }\n }\n\n private reportServerMessageId(messageId: string | undefined): void {\n if (!messageId) return;\n if (this.lastTextMessageId === undefined) {\n this.lastTextMessageId = messageId;\n }\n if (this.serverMessageIdReported) return;\n this.serverMessageIdReported = true;\n this.reportedServerMessageId = messageId;\n this.onServerMessageId?.(messageId);\n }\n\n private clearTextParts(): void {\n this.textParts.clear();\n }\n\n private resetMessageParts(): void {\n this.clearTextParts();\n this.reasoningParts.clear();\n this.reasoningSignatures.clear();\n this.reasoningSignatureIds.clear();\n this.reasoningMessageIds.clear();\n this.hiddenSignatures.clear();\n this.hiddenSignatureAnchors.clear();\n this.hiddenBlockAnchors.clear();\n this.hiddenAnonymousAnchor = undefined;\n this.hiddenReasoningIds.clear();\n this.hiddenActiveReasoning = \"none\";\n this.loggedDroppedOpaqueIds.clear();\n this.anonymousReasoningKeys.clear();\n this.activeReasoningKeyByScope.clear();\n this.nestingMemo = undefined;\n this.subagentRuns.clear();\n this.reasoningPartCounter = 0;\n this.toolCalls.clear();\n this.a2uiBuckets.clear();\n this.a2uiToolCallIds.clear();\n this.activityParts.clear();\n this.lastResolvedToolCallIdByScope.clear();\n this.partOrder.length = 0;\n this.lastReasoningBeforeToolCall = undefined;\n this.textPartCounter = 0;\n this.activeTextMessageIdByScope.clear();\n this.reportedServerMessageId = undefined;\n }\n\n // A subagent only ever reports its own terminal, so a run that ends while\n // one is still streaming would leave that nested message spinning forever.\n private closeOpenSubagentRuns(status: MessageStatus): void {\n for (const run of this.subagentRuns.values()) {\n if (run.status.type === \"running\") run.status = status;\n }\n }\n\n private scopeOf(event: { subagentRunId?: string }): string {\n return event.subagentRunId ?? ROOT_SCOPE;\n }\n\n // Nothing in the AG-UI schema makes a messageId unique across subagent runs,\n // so the accumulators key on the scope too. Root keys stay bare, which is\n // what the wire-id collision checks against reported message ids compare on.\n private partKey(scope: string, id: string): string {\n return scope === ROOT_SCOPE ? id : `${scope}\\u0000${id}`;\n }\n\n private beginDistinctTextMessage(messageId: string | undefined): void {\n if (\n !messageId ||\n this.lastTextMessageId === undefined ||\n this.lastTextMessageId === messageId ||\n !this.onTextMessageStart\n ) {\n return;\n }\n const carried = this.takeTrailingReasoning();\n if (carried.parts.length > 0 || carried.hiddenSignatures.length > 0) {\n this.emit();\n }\n const reasoningPartCounter = this.reasoningPartCounter;\n this.resetMessageParts();\n this.onTextMessageStart(messageId);\n this.reasoningPartCounter = reasoningPartCounter;\n this.restoreReasoning(carried);\n }\n\n private takeTrailingReasoning() {\n const parts: {\n key: string;\n entry: { buffer: string; timing?: MessagePartTiming };\n signature: string | undefined;\n signatureId: string | undefined;\n reasoningId: string | undefined;\n anonymous: boolean;\n }[] = [];\n let last = this.partOrder.at(-1);\n while (\n last?.kind === \"reasoning\" &&\n last.subagentRunId === undefined &&\n last !== this.lastReasoningBeforeToolCall\n ) {\n this.partOrder.pop();\n parts.unshift({\n key: last.key,\n entry: this.reasoningParts.get(last.key) ?? { buffer: \"\" },\n signature: this.reasoningSignatures.get(last.key),\n signatureId: this.reasoningSignatureIds.get(last.key),\n reasoningId: this.reasoningMessageIds.get(last.key),\n anonymous: this.anonymousReasoningKeys.has(last.key),\n });\n last = this.partOrder.at(-1);\n }\n const cut = this.partOrder.length;\n const hiddenSignatures = Array.from(this.hiddenSignatures).filter(\n ([id]) => this.hiddenSignatureAnchors.get(id)! >= cut,\n );\n for (const [id] of hiddenSignatures) {\n this.hiddenSignatures.delete(id);\n this.hiddenSignatureAnchors.delete(id);\n }\n const hiddenBlockIds = Array.from(this.hiddenBlockAnchors)\n .filter(([, anchor]) => anchor >= cut)\n .map(([id]) => id);\n const hiddenAnonymous =\n this.hiddenAnonymousAnchor !== undefined &&\n this.hiddenAnonymousAnchor >= cut;\n const activeCarried =\n (this.hiddenActiveReasoning === \"identified\" &&\n hiddenBlockIds.length > 0) ||\n (this.hiddenActiveReasoning === \"anonymous\" && hiddenAnonymous);\n return {\n parts,\n activeKey: this.activeReasoningKeyByScope.get(ROOT_SCOPE),\n hiddenSignatures,\n hiddenBlockIds,\n hiddenAnonymous,\n hiddenActiveReasoning: activeCarried\n ? this.hiddenActiveReasoning\n : (\"none\" as const),\n };\n }\n\n private restoreReasoning(\n carried: ReturnType<RunAggregator[\"takeTrailingReasoning\"]>,\n ): void {\n for (const part of carried.parts) {\n this.partOrder.push({ kind: \"reasoning\", key: part.key });\n this.reasoningParts.set(part.key, part.entry);\n if (part.signature !== undefined)\n this.reasoningSignatures.set(part.key, part.signature);\n if (part.signatureId !== undefined)\n this.reasoningSignatureIds.set(part.key, part.signatureId);\n if (part.reasoningId !== undefined)\n this.reasoningMessageIds.set(part.key, part.reasoningId);\n if (part.anonymous) this.anonymousReasoningKeys.add(part.key);\n }\n if (\n carried.activeKey !== undefined &&\n this.reasoningParts.has(carried.activeKey)\n ) {\n this.activeReasoningKeyByScope.set(ROOT_SCOPE, carried.activeKey);\n }\n for (const [id, encryptedValue] of carried.hiddenSignatures) {\n this.hiddenSignatures.set(id, encryptedValue);\n this.hiddenSignatureAnchors.set(id, 0);\n }\n for (const id of carried.hiddenBlockIds) {\n this.hiddenReasoningIds.add(id);\n this.hiddenBlockAnchors.set(id, 0);\n }\n if (carried.hiddenAnonymous) this.hiddenAnonymousAnchor = 0;\n this.hiddenActiveReasoning = carried.hiddenActiveReasoning;\n }\n\n private generateTextKey(): string {\n this.textPartCounter += 1;\n return `text-${this.textPartCounter}`;\n }\n\n private startTextMessage(scope: string, messageId?: string): string {\n const id = messageId ?? this.generateTextKey();\n const key = this.ensureTextPart(scope, id);\n this.activeTextMessageIdByScope.set(scope, key);\n return key;\n }\n\n private resolveTextMessageId(scope: string, messageId?: string): string {\n if (messageId) {\n const key = this.ensureTextPart(scope, messageId);\n this.activeTextMessageIdByScope.set(scope, key);\n return key;\n }\n\n const active = this.activeTextMessageIdByScope.get(scope);\n if (active) {\n return active;\n }\n\n const key = this.ensureTextPart(scope, this.generateTextKey());\n this.activeTextMessageIdByScope.set(scope, key);\n return key;\n }\n\n private ensureTextPart(scope: string, id: string): string {\n const key = this.partKey(scope, id);\n if (!this.textParts.has(key)) {\n this.textParts.set(key, { buffer: \"\" });\n if (\n !this.partOrder.some((part) => part.kind === \"text\" && part.key === key)\n ) {\n this.partOrder.push(\n scope === ROOT_SCOPE\n ? { kind: \"text\", key }\n : { kind: \"text\", key, subagentRunId: scope },\n );\n }\n }\n return key;\n }\n\n private appendText(id: string, delta: string): void {\n const entry = this.textParts.get(id);\n if (!entry) return;\n entry.buffer += delta;\n }\n\n private startToolCall(\n scope: string,\n id: string | undefined,\n name?: string,\n parentMessageId?: string,\n ) {\n if (!id) return;\n // A new tool call acts as a boundary: any anonymous text that arrives\n // after it should be a new part, not appended to the pre-tool text —\n // scoped, so a subagent's tool call doesn't break the root run's text\n // and vice versa.\n this.activeTextMessageIdByScope.delete(scope);\n if (\n !this.partOrder.some(\n (part) => part.kind === \"tool-call\" && part.toolCallId === id,\n )\n ) {\n // Tool insertion can precede existing reasoning in display order.\n if (scope === ROOT_SCOPE) {\n this.lastReasoningBeforeToolCall = this.partOrder.findLast(\n (part) =>\n part.kind === \"reasoning\" && part.subagentRunId === undefined,\n );\n }\n this.insertToolPart(scope, id, parentMessageId);\n }\n const state: ToolCallState = {\n toolCallId: id,\n toolCallName: name ?? \"tool\",\n argsText: \"\",\n parsedArgs: undefined,\n result: undefined,\n isError: undefined,\n snapshotResultApplied: false,\n };\n if (parentMessageId) {\n state.parentMessageId = parentMessageId;\n }\n if (scope !== ROOT_SCOPE) {\n state.subagentRunId = scope;\n }\n this.nestingMemo = undefined;\n this.toolCalls.set(id, state);\n }\n\n // The message and tool-call channels are unordered on the wire, so anchor a\n // tool call under its parentMessageId text part instead of appending it.\n private insertToolPart(scope: string, id: string, parentMessageId?: string) {\n const entry = { kind: \"tool-call\", toolCallId: id } as const;\n if (parentMessageId) {\n const parentKey = this.partKey(scope, parentMessageId);\n const parentIndex = this.partOrder.findIndex(\n (part) => part.kind === \"text\" && part.key === parentKey,\n );\n if (parentIndex !== -1) {\n let insertAt = parentIndex + 1;\n while (insertAt < this.partOrder.length) {\n const part = this.partOrder[insertAt];\n if (\n part?.kind === \"tool-call\" &&\n this.toolCalls.get(part.toolCallId)?.parentMessageId ===\n parentMessageId\n ) {\n insertAt += 1;\n continue;\n }\n break;\n }\n this.partOrder.splice(insertAt, 0, entry);\n return;\n }\n }\n this.partOrder.push(entry);\n }\n\n private appendToolArgs(id: string | undefined, delta: string) {\n const entry = id ? this.toolCalls.get(id) : undefined;\n if (!entry) return;\n if (!entry.argsTextScanner) {\n entry.argsTextScanner = createJSONContainerScanner();\n }\n entry.argsText += delta;\n const shouldParse = scanJSONContainerDelta(entry.argsTextScanner, delta);\n if (!shouldParse) {\n if (entry.argsTextScanner.state === \"invalid\") {\n entry.parsedArgs = undefined;\n }\n return;\n }\n try {\n const parsed = JSON.parse(entry.argsText);\n if (parsed && typeof parsed === \"object\") {\n entry.parsedArgs = parsed as Record<string, unknown>;\n } else {\n entry.parsedArgs = undefined;\n }\n } catch {\n entry.parsedArgs = undefined;\n }\n }\n\n private finishToolCall(\n scope: string,\n id: string,\n content: string,\n isError?: boolean,\n toolMessageId?: string,\n mcpResult?: Record<string, unknown>,\n ) {\n if (!id) return;\n let entry = this.toolCalls.get(id);\n if (!entry) {\n entry = {\n toolCallId: id,\n toolCallName: \"tool\",\n argsText: \"\",\n parsedArgs: undefined,\n result: undefined,\n isError: undefined,\n snapshotResultApplied: false,\n ...(scope !== ROOT_SCOPE ? { subagentRunId: scope } : {}),\n };\n this.nestingMemo = undefined;\n this.toolCalls.set(id, entry);\n }\n if (\n !this.partOrder.some(\n (part) => part.kind === \"tool-call\" && part.toolCallId === id,\n )\n ) {\n this.partOrder.push({ kind: \"tool-call\", toolCallId: id });\n }\n if (mcpResult !== undefined && !entry.snapshotResultApplied) {\n entry.result = mcpResult;\n entry.modelContent = [{ type: \"text\", text: content }];\n entry.snapshotResultApplied = true;\n entry.isError = isError;\n if (entry.mcpAppResourceUri === undefined) {\n const uri = readMcpAppResourceUri(mcpResult._meta);\n if (uri !== undefined) entry.mcpAppResourceUri = uri;\n }\n } else if (entry.snapshotResultApplied) {\n if (entry.modelContent === undefined) {\n entry.modelContent = [{ type: \"text\", text: content }];\n }\n if (entry.isError === undefined) {\n entry.isError = isError;\n }\n } else {\n entry.result = tryParseJSON(content);\n entry.isError = isError;\n }\n if (toolMessageId) {\n entry.toolMessageId = toolMessageId;\n }\n this.lastResolvedToolCallIdByScope.set(scope, id);\n }\n\n private nesting(): {\n subagentsByParentToolCallId: Map<string, string[]>;\n reachable: Set<string>;\n } {\n if (!this.nestingMemo) {\n const subagentsByParentToolCallId = this.subagentsByParentToolCallId();\n this.nestingMemo = {\n subagentsByParentToolCallId,\n reachable: this.reachableSubagentRunIds(subagentsByParentToolCallId),\n };\n }\n return this.nestingMemo;\n }\n\n private subagentsByParentToolCallId(): Map<string, string[]> {\n const map = new Map<string, string[]>();\n for (const run of this.subagentRuns.values()) {\n if (!run.parentToolCallId) continue;\n const list = map.get(run.parentToolCallId) ?? [];\n list.push(run.subagentRunId);\n map.set(run.parentToolCallId, list);\n }\n return map;\n }\n\n // A subagent nests under its spawning tool call only when that call is itself\n // reachable from the root scope. A run with no parentToolCallId, one naming a\n // call this run never saw, or one in a cycle has nowhere to hang; the visited\n // set also keeps a malformed chain to one visit per run instead of branching\n // at every level.\n private reachableSubagentRunIds(\n subagentsByParentToolCallId: Map<string, string[]>,\n ): Set<string> {\n const reachable = new Set<string>();\n const walk = (scope: string, depth: number): void => {\n if (depth > MAX_SUBAGENT_DEPTH) return;\n for (const entry of this.toolCalls.values()) {\n if ((entry.subagentRunId ?? ROOT_SCOPE) !== scope) continue;\n for (const id of subagentsByParentToolCallId.get(entry.toolCallId) ??\n []) {\n if (reachable.has(id)) continue;\n reachable.add(id);\n walk(id, depth + 1);\n }\n }\n };\n walk(ROOT_SCOPE, 0);\n return reachable;\n }\n\n // Nested messages rather than a discovery hook (the shape react-langchain\n // uses): ToolCallMessagePart.messages is the contract core consumers already\n // walk, and SUBAGENT_STARTED.parentToolCallId names the spawning call\n // outright, so the join needs no namespace scheme of its own.\n private materializeSubagentMessage(\n subagentRunId: string,\n depth: number,\n ctx: BuildContext,\n ): ThreadMessage | undefined {\n const run = this.subagentRuns.get(subagentRunId);\n if (!run || depth > MAX_SUBAGENT_DEPTH) return undefined;\n const content = this.buildParts(subagentRunId, depth + 1, ctx);\n return {\n id: run.subagentRunId,\n role: \"assistant\",\n createdAt: run.createdAt,\n status: run.status,\n content,\n metadata: {\n unstable_state: null,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n custom: {\n [AG_UI_METADATA_NAMESPACE]: {\n name: run.name,\n ...(run.description !== undefined\n ? { description: run.description }\n : {}),\n ...(run.parentSubagentRunId !== undefined\n ? { parentSubagentRunId: run.parentSubagentRunId }\n : {}),\n ...(run.result !== undefined ? { result: run.result } : {}),\n ...(run.interruptIds !== undefined\n ? { interruptIds: run.interruptIds }\n : {}),\n ...(run.errorCode !== undefined\n ? { errorCode: run.errorCode }\n : {}),\n },\n },\n },\n } as ThreadMessage;\n }\n\n private buildParts(\n scope: string,\n depth: number,\n ctx: BuildContext,\n ): ThreadAssistantMessagePart[] {\n const snapshot: ThreadAssistantMessagePart[] = [];\n const isRoot = scope === ROOT_SCOPE;\n\n for (const { index, part } of ctx.partsByScope.get(scope) ?? []) {\n const materialized = () => {\n if (isRoot && ctx.root) ctx.root.lastMaterializedIndex = index;\n };\n\n if (part.kind === \"tool-call\") {\n const entry = this.toolCalls.get(part.toolCallId);\n if (!entry) continue;\n const approval = ctx.approvals.get(entry.toolCallId);\n const nestedMessages = (\n ctx.subagentsByParentToolCallId.get(entry.toolCallId) ?? []\n )\n .filter((id) => ctx.reachable.has(id))\n .map((id) => this.materializeSubagentMessage(id, depth, ctx))\n .filter((m): m is ThreadMessage => m !== undefined);\n const toolPart: ToolCallMessagePart = {\n type: \"tool-call\",\n toolCallId: entry.toolCallId,\n toolName: entry.toolCallName,\n args: (entry.parsedArgs ?? {}) as any,\n argsText: entry.argsText,\n ...(approval ? { approval } : {}),\n ...(entry.result !== undefined ? { result: entry.result } : {}),\n ...(entry.artifact !== undefined ? { artifact: entry.artifact } : {}),\n ...(entry.modelContent !== undefined\n ? { modelContent: entry.modelContent }\n : {}),\n ...(entry.isError !== undefined ? { isError: entry.isError } : {}),\n ...(entry.mcpAppResourceUri\n ? {\n mcp: {\n app: {\n resourceUri: entry.mcpAppResourceUri,\n ...(entry.mcpAppServerId\n ? { serverId: entry.mcpAppServerId }\n : {}),\n },\n },\n }\n : {}),\n ...(entry.parentMessageId ? { parentId: entry.parentMessageId } : {}),\n ...(entry.toolMessageId\n ? { unstable_toolMessageId: entry.toolMessageId }\n : {}),\n ...(nestedMessages.length > 0 ? { messages: nestedMessages } : {}),\n } as ToolCallMessagePart & { unstable_toolMessageId?: string };\n snapshot.push(toolPart);\n materialized();\n continue;\n }\n\n const rawScope =\n \"subagentRunId\" in part\n ? (part.subagentRunId ?? ROOT_SCOPE)\n : ROOT_SCOPE;\n\n if (part.kind === \"reasoning\") {\n if (this.showThinking) {\n const entry = this.reasoningParts.get(part.key);\n const buffer = entry?.buffer ?? \"\";\n const isActive =\n this.activeReasoningKeyByScope.get(rawScope) === part.key;\n if (buffer.length > 0 || isActive) {\n const encryptedValue = this.reasoningSignatures.get(part.key);\n const reasoningId = this.reasoningMessageIds.get(part.key);\n const meta = {\n ...(reasoningId !== undefined ? { reasoningId } : {}),\n ...(encryptedValue !== undefined ? { encryptedValue } : {}),\n };\n snapshot.push({\n type: \"reasoning\",\n text: buffer,\n ...(entry?.timing ? { timing: entry.timing } : {}),\n ...(Object.keys(meta).length > 0\n ? { providerMetadata: { [AG_UI_METADATA_NAMESPACE]: meta } }\n : {}),\n } as const);\n materialized();\n } else if (isRoot && ctx.root) {\n // A retracted empty block still carries transport state: without\n // a part to live on, its signature rides the message metadata,\n // matching the shape a snapshot reload produces.\n const encryptedValue = this.reasoningSignatures.get(part.key);\n const id = this.reasoningSignatureIds.get(part.key);\n if (id?.trim() && encryptedValue?.trim()) {\n ctx.root.opaqueCandidates.push({\n id,\n encryptedValue,\n anchor: index + 1,\n });\n }\n }\n }\n continue;\n }\n\n if (part.kind === \"text\") {\n const entry = this.textParts.get(part.key);\n if (entry && entry.buffer.trim().length > 0) {\n snapshot.push({ type: \"text\", text: entry.buffer } as const);\n materialized();\n }\n continue;\n }\n\n if (part.kind === \"data\") {\n snapshot.push({\n type: \"data\",\n name: part.name,\n data: part.value,\n });\n materialized();\n continue;\n }\n }\n\n return snapshot;\n }\n\n private emit(): void {\n const { subagentsByParentToolCallId, reachable } = this.nesting();\n const root = {\n opaqueCandidates: Array.from(\n this.hiddenSignatures,\n ([id, encryptedValue]) => ({\n id,\n encryptedValue,\n anchor: this.hiddenSignatureAnchors.get(id)!,\n }),\n ) as (AgUiOpaqueReasoning & { anchor: number })[],\n lastMaterializedIndex: -1,\n };\n // A run that ended incomplete can no longer be resumed, so a gate left over\n // from an earlier interrupt outcome is unanswerable and must not stay\n // projected. The interrupts themselves are kept on the message, since the\n // bespoke hooks read that payload. Bound ids cover every call the run\n // produced, root or nested: the approval seams walk\n // ToolCallMessagePart.messages, so a gate naming a subagent-scoped call is\n // answerable and projects onto the nested part.\n const partsByScope = new Map<\n string,\n { index: number; part: PartOrderEntry }[]\n >();\n for (const [index, part] of this.partOrder.entries()) {\n const rawScope =\n part.kind === \"tool-call\"\n ? (this.toolCalls.get(part.toolCallId)?.subagentRunId ?? ROOT_SCOPE)\n : \"subagentRunId\" in part\n ? (part.subagentRunId ?? ROOT_SCOPE)\n : ROOT_SCOPE;\n const bucketScope =\n rawScope === ROOT_SCOPE || reachable.has(rawScope)\n ? rawScope\n : ROOT_SCOPE;\n const bucket = partsByScope.get(bucketScope);\n if (bucket) bucket.push({ index, part });\n else partsByScope.set(bucketScope, [{ index, part }]);\n }\n const ctx: BuildContext = {\n subagentsByParentToolCallId,\n reachable,\n partsByScope,\n approvals: projectAgUiToolApprovals(\n this.status?.type === \"requires-action\" ? this.interrupts : undefined,\n new Set(\n Array.from(this.toolCalls.values()).map((entry) => entry.toolCallId),\n ),\n ),\n root,\n };\n const snapshot = this.buildParts(ROOT_SCOPE, 0, ctx);\n const { opaqueCandidates, lastMaterializedIndex } = root;\n\n // An anonymous claim promotes the signature's entityId to a wire message\n // id; when that id actually names a text message or the adopted assistant\n // message id (which can also arrive via TOOL_CALL_START.parentMessageId),\n // replaying it as its own record would put two wire records under one id,\n // so such entries are dropped instead — the same outcome the visible\n // path's claim guard produces for a signature that is \"not for this\n // block\". Entries with no materialized part after their anchor trail the\n // assistant record, matching the snapshot path's anchor/after\n // bookkeeping.\n const toolMessageIds = new Set<string>();\n for (const call of this.toolCalls.values()) {\n if (call.toolMessageId) toolMessageIds.add(call.toolMessageId);\n }\n opaqueCandidates.sort((a, b) => a.anchor - b.anchor);\n const publishableOpaqueReasoning = opaqueCandidates\n .filter((entry) => {\n const collides =\n this.textParts.has(entry.id) ||\n entry.id === this.reportedServerMessageId ||\n toolMessageIds.has(entry.id);\n if (collides && !this.loggedDroppedOpaqueIds.has(entry.id)) {\n this.loggedDroppedOpaqueIds.add(entry.id);\n this.logger.debug?.(\n \"[agui] aggregator dropped opaque reasoning signature: id collides with a message id\",\n entry.id,\n );\n }\n return !collides;\n })\n .map(({ anchor, ...entry }) =>\n lastMaterializedIndex < anchor ? { ...entry, after: true } : entry,\n );\n if (publishableOpaqueReasoning.length > 0)\n this.hasEmittedOpaqueReasoning = true;\n // Once an opaque entry has been published this run, the key keeps being\n // emitted (empty when withdrawn) so the namespace merge can retract it.\n const includeOpaque = this.hasEmittedOpaqueReasoning;\n const timing = this.getTiming();\n const metadata = {\n ...(timing ? { timing } : {}),\n ...(this.interrupts || includeOpaque\n ? {\n custom: {\n [AG_UI_METADATA_NAMESPACE]: {\n ...(this.interrupts ? { interrupts: this.interrupts } : {}),\n ...(includeOpaque\n ? { opaqueReasoning: publishableOpaqueReasoning }\n : {}),\n } satisfies AgUiCustomMetadata,\n },\n }\n : {}),\n };\n const result: ChatModelRunResult = {\n content: snapshot,\n ...(this.status ? { status: this.status } : undefined),\n ...(Object.keys(metadata).length > 0 ? { metadata } : undefined),\n };\n this.emitUpdate(result);\n }\n\n private recordFirstToken(): void {\n if (\n this.firstTokenTime === undefined &&\n this.streamStartTime !== undefined\n ) {\n this.firstTokenTime = Date.now() - this.streamStartTime;\n }\n }\n\n private getTiming(): MessageTiming | undefined {\n if (this.streamStartTime === undefined) return undefined;\n\n const now = Date.now();\n const totalStreamTime = now - this.streamStartTime;\n const tokenCount =\n this.totalChunks > 0\n ? Math.ceil(\n Array.from(this.textParts.values()).reduce(\n (sum, p) => sum + p.buffer.length,\n 0,\n ) / 4,\n )\n : undefined;\n const tokensPerSecond =\n tokenCount && totalStreamTime > 0\n ? (tokenCount / totalStreamTime) * 1000\n : undefined;\n\n return {\n streamStartTime: this.streamStartTime,\n ...(this.firstTokenTime !== undefined\n ? { firstTokenTime: this.firstTokenTime }\n : {}),\n totalStreamTime,\n ...(tokenCount !== undefined ? { tokenCount } : {}),\n ...(tokensPerSecond !== undefined ? { tokensPerSecond } : {}),\n totalChunks: this.totalChunks,\n toolCallCount: this.toolCalls.size,\n };\n }\n\n private handleReasoningStart(\n scope: string,\n messageId?: string,\n isMessageId = false,\n timestamp?: number,\n ): void {\n if (!this.showThinking) {\n // Hidden-reasoning bookkeeping stays root-only for this task — a\n // subagent's opaque/hidden reasoning signatures are not preserved.\n if (scope !== ROOT_SCOPE) return;\n const anchor = this.partOrder.length;\n if (messageId === undefined) {\n this.hiddenActiveReasoning = \"anonymous\";\n this.hiddenAnonymousAnchor = anchor;\n } else {\n this.hiddenReasoningIds.add(messageId);\n this.hiddenBlockAnchors.set(messageId, anchor);\n this.hiddenActiveReasoning = \"identified\";\n }\n return;\n }\n // A reasoning block acts as a boundary: anonymous text arriving after it\n // should be a new part, not appended to any pre-reasoning text — scoped.\n this.activeTextMessageIdByScope.delete(scope);\n const key = this.partKey(\n scope,\n messageId ?? `__auto-reasoning-${++this.reasoningPartCounter}`,\n );\n // Two different questions: which id may be replayed as a ReasoningMessage.id\n // (only the message-scoped aliases carry one), and which block an unmatched\n // signature may claim (any block opened without an id at all).\n if (messageId === undefined) {\n this.anonymousReasoningKeys.add(key);\n } else if (isMessageId) {\n this.reasoningMessageIds.set(key, messageId);\n }\n if (!this.reasoningParts.has(key)) {\n this.reasoningParts.set(key, { buffer: \"\" });\n this.partOrder.push(\n scope === ROOT_SCOPE\n ? { kind: \"reasoning\", key }\n : { kind: \"reasoning\", key, subagentRunId: scope },\n );\n }\n const entry = this.reasoningParts.get(key);\n if (entry?.timing) {\n entry.timing = { startedAt: entry.timing.startedAt };\n } else if (\n entry &&\n typeof timestamp === \"number\" &&\n Number.isFinite(timestamp)\n ) {\n entry.timing = { startedAt: timestamp };\n }\n this.activeReasoningKeyByScope.set(scope, key);\n this.emit();\n }\n\n private handleReasoningContent(\n scope: string,\n delta: string,\n messageId?: string,\n isMessageId = false,\n ): void {\n if (!delta) return;\n if (!this.showThinking) {\n // Content without a preceding START still names the block (the visible\n // path opens it lazily); register it so a signature can claim it.\n if (scope !== ROOT_SCOPE) return;\n if (this.hiddenActiveReasoning === \"none\") {\n this.handleReasoningStart(scope, messageId, isMessageId);\n }\n return;\n }\n if (!this.activeReasoningKeyByScope.has(scope)) {\n // Content arrived without a preceding START — create the slot lazily.\n this.handleReasoningStart(scope, messageId, isMessageId);\n }\n const key = this.activeReasoningKeyByScope.get(scope);\n if (!key) return;\n const entry = this.reasoningParts.get(key);\n if (entry) entry.buffer += delta;\n this.emit();\n }\n\n private handleReasoningEnd(scope: string, timestamp?: number): void {\n if (!this.showThinking) {\n if (scope === ROOT_SCOPE) this.hiddenActiveReasoning = \"none\";\n return;\n }\n const key = this.activeReasoningKeyByScope.get(scope);\n const entry = key ? this.reasoningParts.get(key) : undefined;\n if (\n entry?.timing &&\n typeof timestamp === \"number\" &&\n Number.isFinite(timestamp)\n ) {\n entry.timing = { ...entry.timing, completedAt: timestamp };\n }\n this.activeReasoningKeyByScope.delete(scope);\n this.emit();\n }\n}\n\nexport function tryParseJSON(value: string): unknown {\n if (!value) return value;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n"],"mappings":"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"}
@@ -3,11 +3,26 @@ import type { AbstractAgent } from "@ag-ui/client";
3
3
  import type { Logger } from "./logger.js";
4
4
  import type { ReadonlyJSONValue } from "assistant-stream/utils";
5
5
  import type { McpToolCallResult } from "./mcp-tool-result.js";
6
+ export declare const AG_UI_METADATA_NAMESPACE = "agui";
7
+ export declare const MCP_APPS_ACTIVITY_TYPE = "mcp-apps";
8
+ export declare const A2UI_SURFACE_ACTIVITY_TYPE = "a2ui-surface";
9
+ export type AgUiOpaqueReasoning = {
10
+ id: string;
11
+ encryptedValue: string;
12
+ after?: boolean;
13
+ };
14
+ export type AgUiCustomMetadata = {
15
+ /** Wire role restored on export for messages the internal model cannot
16
+ * represent (a developer record rides as a system message). */
17
+ role?: "developer";
18
+ interrupts?: AgUiInterrupt[];
19
+ opaqueReasoning?: AgUiOpaqueReasoning[];
20
+ };
6
21
  /**
7
- * @experimental This API is still under active development and might change without notice.
8
- *
9
22
  * Same as ExternalStoreThreadListAdapter, except `onSwitchToThread` returns
10
23
  * the messages (and optional state) to hydrate the thread with.
24
+ *
25
+ * @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release.
11
26
  */
12
27
  type SwitchToThreadResult = {
13
28
  messages: readonly ThreadMessage[];
@@ -16,6 +31,8 @@ type SwitchToThreadResult = {
16
31
  * Set when the thread has a run in flight. The runtime resumes the run
17
32
  * after hydrating, the same way `ThreadHistoryAdapter.load()` does when it
18
33
  * returns `unstable_resume: true`.
34
+ *
35
+ * @deprecated Experimental since 2025-03-31. Not scheduled for removal; the API may change in any release.
19
36
  */
20
37
  unstable_resume?: boolean;
21
38
  };
@@ -29,9 +46,7 @@ export type UseAgUiRuntimeAdapters = {
29
46
  voice?: RealtimeVoiceAdapter;
30
47
  feedback?: FeedbackAdapter;
31
48
  history?: ThreadHistoryAdapter;
32
- /**
33
- * @experimental This API is still under active development and might change without notice.
34
- */
49
+ /** @deprecated Experimental since 2026-01-28. Not scheduled for removal; the API may change in any release. */
35
50
  threadList?: UseAgUiThreadListAdapter;
36
51
  };
37
52
  export type AgUiResumeTranscript = "full" | "appended";
@@ -79,6 +94,8 @@ export type UseAgUiRuntimeOptions = ExternalStoreSharedOptions & {
79
94
  * settles, exposing it on `composer.queue` for `ComposerPrimitive.Queue`.
80
95
  * The runtime owns the queue lifecycle because flushing needs the agent's
81
96
  * send path and the run's own busy and idle edges.
97
+ *
98
+ * @deprecated Experimental since 2026-06-04. Not scheduled for removal; the API may change in any release.
82
99
  */
83
100
  unstable_enableMessageQueue?: boolean | undefined;
84
101
  onError?: (e: Error) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ //#region src/runtime/types.ts
2
+ const AG_UI_METADATA_NAMESPACE = "agui";
3
+ const MCP_APPS_ACTIVITY_TYPE = "mcp-apps";
4
+ const A2UI_SURFACE_ACTIVITY_TYPE = "a2ui-surface";
5
+ //#endregion
6
+ export { A2UI_SURFACE_ACTIVITY_TYPE, AG_UI_METADATA_NAMESPACE, MCP_APPS_ACTIVITY_TYPE };
7
+
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/runtime/types.ts"],"sourcesContent":["import type {\n CreateAppendMessage,\n AttachmentAdapter,\n DictationAdapter,\n ExternalStoreSharedOptions,\n ExternalStoreThreadListAdapter,\n FeedbackAdapter,\n RealtimeVoiceAdapter,\n SpeechSynthesisAdapter,\n ThreadHistoryAdapter,\n ThreadMessage,\n} from \"@assistant-ui/core\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport type { Logger } from \"./logger\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { McpToolCallResult } from \"./mcp-tool-result\";\n\nexport const AG_UI_METADATA_NAMESPACE = \"agui\";\nexport const MCP_APPS_ACTIVITY_TYPE = \"mcp-apps\";\nexport const A2UI_SURFACE_ACTIVITY_TYPE = \"a2ui-surface\";\n\nexport type AgUiOpaqueReasoning = {\n id: string;\n encryptedValue: string;\n after?: boolean;\n};\n\nexport type AgUiCustomMetadata = {\n /** Wire role restored on export for messages the internal model cannot\n * represent (a developer record rides as a system message). */\n role?: \"developer\";\n interrupts?: AgUiInterrupt[];\n opaqueReasoning?: AgUiOpaqueReasoning[];\n};\n\n/**\n * Same as ExternalStoreThreadListAdapter, except `onSwitchToThread` returns\n * the messages (and optional state) to hydrate the thread with.\n *\n * @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release.\n */\ntype SwitchToThreadResult = {\n messages: readonly ThreadMessage[];\n state?: ReadonlyJSONValue;\n /**\n * Set when the thread has a run in flight. The runtime resumes the run\n * after hydrating, the same way `ThreadHistoryAdapter.load()` does when it\n * returns `unstable_resume: true`.\n *\n * @deprecated Experimental since 2025-03-31. Not scheduled for removal; the API may change in any release.\n */\n unstable_resume?: boolean;\n};\n\nexport type UseAgUiThreadListAdapter = Omit<\n ExternalStoreThreadListAdapter,\n \"onSwitchToThread\"\n> & {\n onSwitchToThread?:\n | ((\n threadId: string,\n ) => Promise<SwitchToThreadResult> | SwitchToThreadResult)\n | undefined;\n};\n\nexport type UseAgUiRuntimeAdapters = {\n attachments?: AttachmentAdapter;\n speech?: SpeechSynthesisAdapter;\n dictation?: DictationAdapter;\n voice?: RealtimeVoiceAdapter;\n feedback?: FeedbackAdapter;\n history?: ThreadHistoryAdapter;\n /** @deprecated Experimental since 2026-01-28. Not scheduled for removal; the API may change in any release. */\n threadList?: UseAgUiThreadListAdapter;\n};\n\nexport type AgUiResumeTranscript = \"full\" | \"appended\";\n\nexport type UseAgUiRuntimeOptions = ExternalStoreSharedOptions & {\n agent: AbstractAgent;\n logger?: Partial<Logger>;\n showThinking?: boolean;\n /**\n * What `messages` carries on a resume run, meaning a `RunAgentInput` that\n * also carries `resume`. The AG-UI interrupt spec leaves this undefined: its\n * contract rules constrain the thread id, interrupt coverage, idempotency,\n * and expiry, and none of them mentions `messages`. Hosts therefore disagree,\n * and both readings are conformant.\n *\n * `\"full\"` sends the whole thread, which is what `@ag-ui/client` itself does.\n * Hosts that resume from a checkpoint ignore the transcript, and hosts that\n * rebuild the interrupted run from it need it.\n *\n * `\"appended\"` sends only what was appended locally after the interrupted\n * assistant message, which is nothing for an approval or a denial and the new\n * user turn for `steerAway`. Choose it for a host that owns the thread and\n * seeds a resume request from its own stored snapshot, because such a host\n * appends the request body to that snapshot and a re-sent transcript\n * duplicates the interrupted turn in its stored history. A host that rebuilds\n * the run from `messages` has nothing to resume from under `\"appended\"`, and\n * a host that derives its outgoing `MESSAGES_SNAPSHOT` from the request body\n * emits a truncated one.\n *\n * Defaults to `\"full\"`.\n */\n resumeTranscript?: AgUiResumeTranscript | undefined;\n /**\n * When the user sends, edits, or reloads a message while client-side tool\n * calls are still pending, automatically cancel the unresolved tool calls\n * with an error result so the agent's tool-call accounting stays\n * consistent. Pending AG-UI interrupts are exempt: they still reject the\n * run and must be answered with `useAgUiSubmitInterruptResponses` or\n * discarded with `useAgUiSteerAway`. When disabled, `useAgUiSteerAway`\n * remains the explicit way to cancel pending tool calls.\n * Defaults to `true`.\n */\n autoCancelPendingToolCalls?: boolean | undefined;\n /**\n * Buffer a message sent while a run is in flight and send it once the run\n * settles, exposing it on `composer.queue` for `ComposerPrimitive.Queue`.\n * The runtime owns the queue lifecycle because flushing needs the agent's\n * send path and the run's own busy and idle edges.\n *\n * @deprecated Experimental since 2026-06-04. Not scheduled for removal; the API may change in any release.\n */\n unstable_enableMessageQueue?: boolean | undefined;\n onError?: (e: Error) => void;\n onCancel?: () => void;\n adapters?: UseAgUiRuntimeAdapters;\n};\n\nexport type AgUiInterruptReason =\n | \"tool_call\"\n | \"input_required\"\n | \"confirmation\"\n | (string & {});\n\nexport type AgUiInterrupt = {\n id: string;\n reason: AgUiInterruptReason;\n message?: string;\n toolCallId?: string;\n responseSchema?: Record<string, unknown>;\n expiresAt?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type AgUiResumeEntry = {\n interruptId: string;\n status: \"resolved\" | \"cancelled\";\n payload?: unknown;\n};\n\nexport type AgUiRuntimeExtras = {\n interrupts: readonly AgUiInterrupt[];\n sendA2uiAction: (action: Record<string, unknown>) => void;\n submitInterruptResponses: (\n responses: readonly AgUiResumeEntry[],\n ) => Promise<void>;\n steerAway: (\n message: CreateAppendMessage,\n responses?: readonly AgUiResumeEntry[],\n ) => Promise<void>;\n state: ReadonlyJSONValue | undefined;\n setState: (\n next:\n | ReadonlyJSONValue\n | ((prev: ReadonlyJSONValue | undefined) => ReadonlyJSONValue),\n ) => void;\n};\n\nexport type AgUiRunFinishedOutcome =\n | { type: \"success\" }\n | { type: \"interrupt\"; interrupts: AgUiInterrupt[] };\n\nexport type AgUiSubagentFinishedOutcome =\n | { type: \"success\" }\n | { type: \"suspended\"; interruptIds?: string[] };\n\nexport type AgUiEvent =\n | { type: \"RUN_STARTED\"; runId: string }\n | {\n type: \"RUN_FINISHED\";\n runId: string;\n outcome?: AgUiRunFinishedOutcome;\n }\n | { type: \"RUN_CANCELLED\"; runId?: string }\n | { type: \"RUN_ERROR\"; message?: string; code?: string }\n | { type: \"TEXT_MESSAGE_START\"; messageId?: string; subagentRunId?: string }\n | {\n type: \"TEXT_MESSAGE_CONTENT\";\n messageId?: string;\n delta: string;\n subagentRunId?: string;\n }\n | { type: \"TEXT_MESSAGE_END\"; messageId?: string; subagentRunId?: string }\n | {\n type: \"TEXT_MESSAGE_CHUNK\";\n messageId?: string;\n delta: string;\n subagentRunId?: string;\n }\n | { type: \"THINKING_START\"; title?: string; timestamp?: number }\n | { type: \"THINKING_TEXT_MESSAGE_START\"; timestamp?: number }\n | { type: \"THINKING_TEXT_MESSAGE_CONTENT\"; delta: string }\n | { type: \"THINKING_TEXT_MESSAGE_END\"; timestamp?: number }\n | { type: \"THINKING_END\"; timestamp?: number }\n | {\n type: \"REASONING_START\";\n messageId?: string;\n subagentRunId?: string;\n timestamp?: number;\n }\n | {\n type: \"REASONING_MESSAGE_START\";\n messageId?: string;\n subagentRunId?: string;\n timestamp?: number;\n }\n | {\n type: \"REASONING_MESSAGE_CONTENT\";\n messageId?: string;\n delta: string;\n subagentRunId?: string;\n }\n | {\n type: \"REASONING_MESSAGE_END\";\n messageId?: string;\n subagentRunId?: string;\n timestamp?: number;\n }\n | {\n type: \"REASONING_ENCRYPTED_VALUE\";\n subtype: \"message\" | \"tool-call\";\n entityId: string;\n encryptedValue: string;\n subagentRunId?: string;\n }\n | {\n type: \"REASONING_END\";\n messageId?: string;\n subagentRunId?: string;\n timestamp?: number;\n }\n | {\n type: \"TOOL_CALL_START\";\n toolCallId: string;\n toolCallName?: string;\n parentMessageId?: string;\n subagentRunId?: string;\n }\n | {\n type: \"TOOL_CALL_ARGS\";\n toolCallId: string;\n delta: string;\n subagentRunId?: string;\n }\n | { type: \"TOOL_CALL_END\"; toolCallId: string; subagentRunId?: string }\n | {\n type: \"TOOL_CALL_CHUNK\";\n toolCallId?: string;\n toolCallName?: string;\n parentMessageId?: string;\n delta?: string;\n subagentRunId?: string;\n }\n | {\n type: \"TOOL_CALL_RESULT\";\n messageId?: string;\n toolCallId: string;\n content: string;\n role?: \"tool\";\n mcpResult?: McpToolCallResult;\n subagentRunId?: string;\n }\n | {\n type: \"ACTIVITY_SNAPSHOT\";\n activityType: string;\n content: Record<string, unknown>;\n messageId?: string;\n replace?: boolean;\n subagentRunId?: string;\n }\n | {\n type: \"ACTIVITY_DELTA\";\n messageId: string;\n activityType: string;\n patch: any[];\n subagentRunId?: string;\n }\n | { type: \"RAW\"; event: any; source?: string }\n | { type: \"CUSTOM\"; name: string; value: any }\n | { type: \"STATE_SNAPSHOT\"; snapshot: any }\n | { type: \"STATE_DELTA\"; delta: any[] }\n | { type: \"MESSAGES_SNAPSHOT\"; messages: any[] }\n | {\n type: \"SUBAGENT_STARTED\";\n subagentRunId: string;\n name: string;\n description?: string;\n parentSubagentRunId?: string;\n parentToolCallId?: string;\n parentMessageId?: string;\n }\n | {\n type: \"SUBAGENT_FINISHED\";\n subagentRunId: string;\n result?: unknown;\n outcome?: AgUiSubagentFinishedOutcome;\n }\n | {\n type: \"SUBAGENT_ERROR\";\n subagentRunId: string;\n message: string;\n code?: string;\n };\n"],"mappings":";AAiBA,MAAa,2BAA2B;AACxC,MAAa,yBAAyB;AACtC,MAAa,6BAA6B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAgUiRuntime.d.ts","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACtB,2BAAwB;AASzB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD;;;OAGG;IACH,6BAA6B,EAAE,MAAM,SAAS,aAAa,EAAE,CAAC;IAC9D;;;;OAIG;IACH,iCAAiC,EAAE,CACjC,SAAS,EAAE,SAAS,eAAe,EAAE,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CA6StB"}
1
+ {"version":3,"file":"useAgUiRuntime.d.ts","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACtB,2BAAwB;AASzB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD;;;OAGG;IACH,6BAA6B,EAAE,MAAM,SAAS,aAAa,EAAE,CAAC;IAC9D;;;;OAIG;IACH,iCAAiC,EAAE,CACjC,SAAS,EAAE,SAAS,eAAe,EAAE,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAoWtB"}