@anvia/client 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters.ts","../src/messages.ts","../src/protocol.ts","../src/types.ts","../src/client-transport.ts","../src/index.ts","../src/reducer.ts"],"sourcesContent":["import type { AgentChildStreamEvent, AgentStreamEvent } from \"@anvia/core/agent\";\nimport {\n type AssistantContentPart,\n type CompletionResponse,\n type CompletionSource,\n type CompletionStreamEvent,\n isJsonValue,\n type JsonObject,\n type JsonValue,\n type ProviderToolCall,\n type ToolCallPart,\n type ToolResultContentPart,\n type ToolResultOutput,\n} from \"@anvia/core/completion\";\nimport { createClientId } from \"./messages\";\nimport { maskedClientError } from \"./protocol\";\nimport type {\n ClientDataMap,\n ClientErrorMapper,\n ClientOutputMapper,\n ClientStream,\n ClientStreamError,\n ClientStreamEvent,\n ClientStreamScope,\n UIAttachment,\n UIMessagePart,\n UIToolMessagePart,\n} from \"./types\";\n\nexport type ClientStreamAdapterOptions<Metadata extends JsonObject = JsonObject> = {\n /** Stable correlation ID for this client-visible run. */\n runId?: string;\n metadata?: Metadata;\n mapError?: ClientErrorMapper;\n mapOutput?: ClientOutputMapper;\n};\n\nexport type CompletionClientStreamOptions<Metadata extends JsonObject = JsonObject> =\n ClientStreamAdapterOptions<Metadata> & {\n model?: { provider: string; modelId: string };\n };\n\nexport type AgentClientStreamContext = {\n runId: string;\n turn?: number;\n scope?: ClientStreamScope;\n};\n\nexport type AgentClientStreamOptions<\n CustomEvent = unknown,\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = ClientStreamAdapterOptions<Metadata> & {\n mapCustomEvent?: (\n event: CustomEvent,\n context: AgentClientStreamContext,\n ) => ClientStreamEvent<Metadata, Data> | readonly ClientStreamEvent<Metadata, Data>[] | undefined;\n};\n\ntype ReasoningState = {\n partId: string;\n reasoningId?: string;\n text: string;\n ended: boolean;\n};\n\ntype ToolState = {\n partId: string;\n toolCallId: string;\n callId?: string;\n internalCallId?: string;\n toolName?: string;\n input: JsonValue;\n signature?: string;\n result?:\n | { status: \"success\"; output: JsonValue; content?: readonly ToolResultContentPart[] }\n | { status: \"error\"; error: ClientStreamError };\n started: boolean;\n ended: boolean;\n};\n\ntype MessageState = {\n runId: string;\n messageId: string;\n turn?: number;\n scope?: ClientStreamScope;\n started: boolean;\n ended: boolean;\n textPartId: string;\n text: string;\n textStarted: boolean;\n textEnded: boolean;\n reasoning: Map<string, ReasoningState>;\n tools: Map<string, ToolState>;\n sourceFingerprints: Set<string>;\n providerToolCallFingerprints: Set<string>;\n modelMessageId?: string;\n};\n\ntype FinalMessageMetadata = Pick<CompletionResponse, \"usage\" | \"contextUsage\"> & {\n sources?: readonly CompletionSource[];\n providerToolCalls?: readonly ProviderToolCall[];\n};\n\ntype AgentAdapterRuntime = {\n runId: string;\n options: AgentClientStreamOptions;\n messages: Map<string, MessageState>;\n startedScopes: Set<string>;\n};\n\ntype WithoutEventBase<T> = T extends unknown ? Omit<T, \"runId\" | \"turn\" | \"scope\"> : never;\ntype ClientEventPayload = WithoutEventBase<ClientStreamEvent>;\ntype ClientEventOf<Type extends ClientEventPayload[\"type\"]> = Extract<\n ClientEventPayload,\n { type: Type }\n>;\n\nexport function completionToClientStream<\n Output = string,\n RawResponse = unknown,\n Metadata extends JsonObject = JsonObject,\n>(\n options: CompletionClientStreamOptions<Metadata> & {\n events: AsyncIterable<CompletionStreamEvent<Output, RawResponse>>;\n },\n): ClientStream<Metadata> {\n const { events } = options;\n const runId = options.runId ?? createClientId(\"run\");\n\n return propagateCancellation(events, (source) => ({\n async *[Symbol.asyncIterator]() {\n const state = createMessageState({ runId });\n const runStart: ClientEventOf<\"run_start\"> = {\n type: \"run_start\",\n source: \"completion\",\n };\n if (options.metadata !== undefined) runStart.metadata = options.metadata;\n yield clientEvent(state, runStart);\n if (options.model !== undefined) {\n yield clientEvent(state, { type: \"generation_start\", model: options.model });\n }\n yield* startMessage(state);\n\n let terminal = false;\n try {\n for await (const event of source) {\n if (terminal) break;\n switch (event.type) {\n case \"text_delta\":\n yield* appendText(state, event.delta);\n break;\n case \"reasoning_delta\":\n yield* appendReasoning(state, event);\n break;\n case \"tool_call_delta\":\n yield* appendToolCall(state, event);\n break;\n case \"tool_call\":\n yield* finishToolCall(state, event.toolCall);\n break;\n case \"source\":\n yield* emitSource(state, event.source);\n break;\n case \"provider_tool_call\":\n yield* emitProviderToolCall(state, event.toolCall);\n break;\n case \"message_id\":\n state.modelMessageId = event.id;\n break;\n case \"final\": {\n const result = event.result;\n if (result.messageId !== undefined) state.modelMessageId = result.messageId;\n const finalMetadata: FinalMessageMetadata = {\n usage: result.usage,\n };\n if (result.contextUsage !== undefined) {\n finalMetadata.contextUsage = result.contextUsage;\n }\n if (result.sources !== undefined) finalMetadata.sources = result.sources;\n if (result.providerToolCalls !== undefined) {\n finalMetadata.providerToolCalls = result.providerToolCalls;\n }\n yield* finishMessage(state, result.content, finalMetadata);\n const output = clientOutput(result.output, options.mapOutput);\n const runEnd: ClientEventOf<\"run_end\"> = {\n type: \"run_end\",\n status: \"completed\",\n text: result.text,\n usage: result.usage,\n };\n if (output !== undefined) runEnd.output = output;\n if (result.contextUsage !== undefined) runEnd.contextUsage = result.contextUsage;\n yield clientEvent(state, runEnd);\n terminal = true;\n break;\n }\n case \"error\":\n yield* finishErroredRun(state, event.error, event.usage, options.mapError);\n terminal = true;\n break;\n }\n }\n\n if (!terminal) {\n yield* finishErroredRun(\n state,\n new Error(\"Completion stream ended without a terminal event.\"),\n undefined,\n options.mapError,\n );\n }\n } catch (error) {\n if (!terminal) yield* finishErroredRun(state, error, undefined, options.mapError);\n }\n },\n })) as ClientStream<Metadata>;\n}\n\nexport function agentToClientStream<\n Output = string,\n RawResponse = unknown,\n Metadata extends JsonObject = JsonObject,\n>(\n options: AgentClientStreamOptions<unknown, Metadata> & {\n events: AsyncIterable<AgentStreamEvent<Output, RawResponse>>;\n },\n): ClientStream<Metadata> {\n const { events } = options;\n const runId = options.runId ?? createClientId(\"run\");\n return propagateCancellation(events, (source) => ({\n async *[Symbol.asyncIterator]() {\n const runtime: AgentAdapterRuntime = {\n runId,\n options,\n messages: new Map(),\n startedScopes: new Set([\"root\"]),\n };\n const runStart: ClientEventOf<\"run_start\"> = {\n type: \"run_start\",\n source: \"agent\",\n };\n if (options.metadata !== undefined) runStart.metadata = options.metadata;\n yield rootEvent(runId, runStart);\n\n let terminal = false;\n try {\n for await (const event of source) {\n if (terminal) break;\n yield* translateAgentEvent(runtime, event, undefined);\n terminal = isRootTerminalAgentEvent(event);\n }\n if (!terminal) {\n const error = mapClientError(\n new Error(\"Agent stream ended without a terminal event.\"),\n options.mapError,\n );\n yield rootEvent(runId, { type: \"error\", error });\n yield rootEvent(runId, { type: \"run_end\", status: \"error\" });\n }\n } catch (error) {\n if (!terminal) {\n yield rootEvent(runId, {\n type: \"error\",\n error: mapClientError(error, options.mapError),\n });\n yield rootEvent(runId, { type: \"run_end\", status: \"error\" });\n }\n }\n },\n })) as ClientStream<Metadata>;\n}\n\nexport function customAgentEventsToClientStream<\n CustomEvent,\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n options: AgentClientStreamOptions<CustomEvent, Metadata, Data> & {\n events: AsyncIterable<AgentStreamEvent<unknown, unknown> | CustomEvent>;\n mapCustomEvent: NonNullable<\n AgentClientStreamOptions<CustomEvent, Metadata, Data>[\"mapCustomEvent\"]\n >;\n },\n): ClientStream<Metadata, Data> {\n return agentToClientStream(\n options as unknown as AgentClientStreamOptions<unknown, Metadata> & {\n events: AsyncIterable<AgentStreamEvent<unknown, unknown>>;\n },\n ) as ClientStream<Metadata, Data>;\n}\n\nasync function* translateAgentEvent(\n runtime: AgentAdapterRuntime,\n event: AgentStreamEvent<unknown, unknown> | AgentChildStreamEvent<unknown, unknown>,\n scope: ClientStreamScope | undefined,\n): AsyncIterable<ClientStreamEvent> {\n if (event.type === \"agent_tool_event\") {\n const childScope: ClientStreamScope = {\n agentId: event.agentId,\n parentRunId: runtime.runId,\n parentToolName: event.toolName,\n parentToolCallId: event.toolCallId ?? event.internalCallId,\n parentInternalToolCallId: event.internalCallId,\n };\n if (event.agentName !== undefined) childScope.agentName = event.agentName;\n const key = scopeKey(childScope);\n if (!runtime.startedScopes.has(key)) {\n runtime.startedScopes.add(key);\n yield rootEvent(runtime.runId, { type: \"run_start\", source: \"agent\" }, childScope);\n }\n yield* translateAgentEvent(runtime, event.event, childScope);\n return;\n }\n\n const turn = \"turn\" in event && typeof event.turn === \"number\" ? event.turn : undefined;\n switch (event.type) {\n case \"memory_compaction\":\n yield scopedEvent(runtime.runId, turn, scope, {\n type: \"memory_compaction\",\n originalMessageCount: event.originalMessageCount,\n compactedMessageCount: event.compactedMessageCount,\n retainedMessageCount: event.retainedMessageCount,\n originalTokenCount: event.originalTokenCount,\n compactedTokenCount: event.compactedTokenCount,\n retainedTokenCount: event.retainedTokenCount,\n resultTokenCount: event.resultTokenCount,\n attempts: event.attempts,\n usage: event.usage,\n });\n return;\n case \"turn_start\":\n yield scopedEvent(runtime.runId, turn, scope, { type: \"turn_start\" });\n return;\n case \"generation_start\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield scopedEvent(runtime.runId, event.turn, scope, {\n type: \"generation_start\",\n model: {\n provider: event.modelInfo.provider,\n modelId: event.modelInfo.modelId,\n },\n });\n yield* startMessage(state);\n return;\n }\n case \"text_delta\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* appendText(state, event.delta);\n return;\n }\n case \"reasoning_delta\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* appendReasoning(state, event);\n return;\n }\n case \"tool_call_delta\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* appendToolCall(state, event);\n return;\n }\n case \"tool_call\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* finishToolCall(state, event.toolCall);\n return;\n }\n case \"source\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* emitSource(state, event.source);\n return;\n }\n case \"provider_tool_call\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* emitProviderToolCall(state, event.toolCall);\n return;\n }\n case \"tool_result\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n const tool = getToolResultState(\n state,\n event.toolName,\n event.toolCallId,\n event.callId,\n event.internalCallId,\n );\n tool.result = clientToolResult(event.output, event.result);\n const resultEvent: ClientEventOf<\"tool_result\"> = {\n type: \"tool_result\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: tool.toolCallId,\n internalCallId: event.internalCallId,\n toolName: event.toolName,\n input: parseJsonOrString(event.args),\n result: tool.result,\n };\n if (tool.callId !== undefined) resultEvent.callId = tool.callId;\n yield clientEvent(state, resultEvent);\n return;\n }\n case \"turn_end\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n if (event.response.messageId !== undefined) state.modelMessageId = event.response.messageId;\n const finalMetadata: FinalMessageMetadata = {\n usage: event.response.usage,\n };\n if (event.response.contextUsage !== undefined) {\n finalMetadata.contextUsage = event.response.contextUsage;\n }\n if (event.response.sources !== undefined) finalMetadata.sources = event.response.sources;\n if (event.response.providerToolCalls !== undefined) {\n finalMetadata.providerToolCalls = event.response.providerToolCalls;\n }\n yield* finishMessage(state, event.response.choice, finalMetadata);\n const turnEnd: ClientEventOf<\"turn_end\"> = {\n type: \"turn_end\",\n usage: event.response.usage,\n };\n if (event.response.contextUsage !== undefined) {\n turnEnd.contextUsage = event.response.contextUsage;\n }\n if (event.firstDeltaMs !== undefined) turnEnd.firstDeltaMs = event.firstDeltaMs;\n yield scopedEvent(runtime.runId, event.turn, scope, turnEnd);\n return;\n }\n case \"guardrail_decision\":\n yield scopedEvent(runtime.runId, event.turn, scope, {\n type: \"guardrail_decision\",\n decision: event.decision,\n });\n return;\n case \"response\":\n case \"interaction\":\n case \"blocked\": {\n const result = event;\n if (result.type === \"interaction\" && scope === undefined) {\n yield scopedEvent(runtime.runId, turn, scope, {\n type: \"interaction\",\n interaction: result.interaction,\n });\n }\n const output =\n result.type === \"response\"\n ? clientOutput(result.output, runtime.options.mapOutput)\n : undefined;\n const runEnd: ClientEventOf<\"run_end\"> = {\n type: \"run_end\",\n status: agentOutcomeStatus(result.type),\n text: result.text,\n usage: result.usage,\n };\n if (output !== undefined) runEnd.output = output;\n if (result.contextUsage !== undefined) runEnd.contextUsage = result.contextUsage;\n if (result.trace !== undefined) runEnd.trace = clientTrace(result.trace);\n if (result.memoryCompaction !== undefined) {\n runEnd.memoryCompaction = result.memoryCompaction;\n }\n if (runtime.options.metadata !== undefined) runEnd.metadata = runtime.options.metadata;\n yield scopedEvent(runtime.runId, turn, scope, runEnd);\n return;\n }\n case \"error\": {\n const error = mapClientError(event.error, runtime.options.mapError);\n yield scopedEvent(runtime.runId, turn, scope, { type: \"error\", error, usage: event.usage });\n yield scopedEvent(runtime.runId, turn, scope, {\n type: \"run_end\",\n status: \"error\",\n usage: event.usage,\n });\n return;\n }\n default: {\n const context: { runId: string; turn?: number; scope?: ClientStreamScope } = {\n runId: runtime.runId,\n };\n if (turn !== undefined) context.turn = turn;\n if (scope !== undefined) context.scope = scope;\n const mapped = runtime.options.mapCustomEvent?.(event as unknown, context);\n if (mapped === undefined) return;\n if (Array.isArray(mapped)) {\n yield* mapped;\n } else {\n yield mapped as ClientStreamEvent;\n }\n }\n }\n}\n\nfunction createMessageState(input: {\n runId: string;\n turn?: number;\n scope?: ClientStreamScope;\n}): MessageState {\n const state: MessageState = {\n runId: input.runId,\n messageId: createClientId(\"msg\"),\n started: false,\n ended: false,\n textPartId: createClientId(\"text\"),\n text: \"\",\n textStarted: false,\n textEnded: false,\n reasoning: new Map(),\n tools: new Map(),\n sourceFingerprints: new Set(),\n providerToolCallFingerprints: new Set(),\n };\n if (input.turn !== undefined) state.turn = input.turn;\n if (input.scope !== undefined) state.scope = input.scope;\n return state;\n}\n\nfunction getAgentMessage(\n runtime: AgentAdapterRuntime,\n turn: number,\n scope: ClientStreamScope | undefined,\n): MessageState {\n const key = `${scopeKey(scope)}:${turn}`;\n const current = runtime.messages.get(key);\n if (current !== undefined) return current;\n const input: { runId: string; turn: number; scope?: ClientStreamScope } = {\n runId: runtime.runId,\n turn,\n };\n if (scope !== undefined) input.scope = scope;\n const created = createMessageState(input);\n runtime.messages.set(key, created);\n return created;\n}\n\nasync function* startMessage(state: MessageState): AsyncIterable<ClientStreamEvent> {\n if (state.started) return;\n state.started = true;\n yield clientEvent(state, {\n type: \"message_start\",\n messageId: state.messageId,\n role: \"assistant\",\n });\n}\n\nasync function* appendText(state: MessageState, delta: string): AsyncIterable<ClientStreamEvent> {\n if (!state.textStarted) {\n state.textStarted = true;\n yield clientEvent(state, {\n type: \"text_start\",\n messageId: state.messageId,\n partId: state.textPartId,\n });\n }\n state.text += delta;\n yield clientEvent(state, {\n type: \"text_delta\",\n messageId: state.messageId,\n partId: state.textPartId,\n delta,\n });\n}\n\nasync function* emitSource(\n state: MessageState,\n source: CompletionSource,\n): AsyncIterable<ClientStreamEvent> {\n const fingerprint = valueFingerprint(source);\n if (state.sourceFingerprints.has(fingerprint)) return;\n state.sourceFingerprints.add(fingerprint);\n yield clientEvent(state, {\n type: \"source\",\n messageId: state.messageId,\n partId: createClientId(\"source\"),\n source,\n });\n}\n\nasync function* emitProviderToolCall(\n state: MessageState,\n toolCall: ProviderToolCall,\n): AsyncIterable<ClientStreamEvent> {\n const fingerprint = valueFingerprint(toolCall);\n if (state.providerToolCallFingerprints.has(fingerprint)) return;\n state.providerToolCallFingerprints.add(fingerprint);\n yield clientEvent(state, { type: \"provider_tool_call\", toolCall });\n}\n\nasync function* appendReasoning(\n state: MessageState,\n event: {\n delta: string;\n id?: string;\n contentType?: \"text\" | \"summary\" | \"encrypted\" | \"redacted\";\n signature?: string;\n },\n): AsyncIterable<ClientStreamEvent> {\n const key = event.id ?? \"default\";\n let reasoning = state.reasoning.get(key);\n if (reasoning === undefined) {\n reasoning = {\n partId: createClientId(\"reasoning\"),\n text: \"\",\n ended: false,\n };\n if (event.id !== undefined) reasoning.reasoningId = event.id;\n state.reasoning.set(key, reasoning);\n const reasoningStart: ClientEventOf<\"reasoning_start\"> = {\n type: \"reasoning_start\",\n messageId: state.messageId,\n partId: reasoning.partId,\n };\n if (event.id !== undefined) reasoningStart.reasoningId = event.id;\n yield clientEvent(state, reasoningStart);\n }\n reasoning.text += event.delta;\n const reasoningDelta: ClientEventOf<\"reasoning_delta\"> = {\n type: \"reasoning_delta\",\n messageId: state.messageId,\n partId: reasoning.partId,\n delta: event.delta,\n };\n if (event.contentType !== undefined) reasoningDelta.contentType = event.contentType;\n if (event.signature !== undefined) reasoningDelta.signature = event.signature;\n yield clientEvent(state, reasoningDelta);\n}\n\nasync function* appendToolCall(\n state: MessageState,\n event: {\n id: string;\n callId?: string;\n name?: string;\n argumentsDelta?: string;\n argumentsMode?: \"append\" | \"replace\";\n signature?: string;\n },\n): AsyncIterable<ClientStreamEvent> {\n const tool = getToolState(state, event.id, event.name);\n if (!tool.started) {\n tool.started = true;\n const toolCallStart: ClientEventOf<\"tool_call_start\"> = {\n type: \"tool_call_start\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: event.id,\n };\n if (event.callId !== undefined) toolCallStart.callId = event.callId;\n if (event.name !== undefined) toolCallStart.toolName = event.name;\n yield clientEvent(state, toolCallStart);\n }\n if (event.callId !== undefined) tool.callId = event.callId;\n if (event.name !== undefined) tool.toolName = event.name;\n if (event.signature !== undefined) tool.signature = event.signature;\n if (event.argumentsDelta === undefined) return;\n const mode = event.argumentsMode ?? \"append\";\n const prior = typeof tool.input === \"string\" ? tool.input : \"\";\n tool.input = mode === \"replace\" ? event.argumentsDelta : `${prior}${event.argumentsDelta}`;\n const toolCallDelta: ClientEventOf<\"tool_call_delta\"> = {\n type: \"tool_call_delta\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: event.id,\n delta: event.argumentsDelta,\n mode,\n };\n if (event.callId !== undefined) toolCallDelta.callId = event.callId;\n if (event.name !== undefined) toolCallDelta.toolName = event.name;\n if (event.signature !== undefined) toolCallDelta.signature = event.signature;\n yield clientEvent(state, toolCallDelta);\n}\n\nasync function* finishToolCall(\n state: MessageState,\n toolCall: ToolCallPart,\n): AsyncIterable<ClientStreamEvent> {\n const tool = getToolState(state, toolCall.toolCallId, toolCall.toolName);\n const wasEnded = tool.ended;\n if (!tool.started) {\n tool.started = true;\n const toolCallStart: ClientEventOf<\"tool_call_start\"> = {\n type: \"tool_call_start\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n };\n if (toolCall.callId !== undefined) toolCallStart.callId = toolCall.callId;\n yield clientEvent(state, toolCallStart);\n }\n if (toolCall.callId === undefined) delete tool.callId;\n else tool.callId = toolCall.callId;\n tool.toolName = toolCall.toolName;\n tool.input = toolCall.input;\n if (toolCall.signature === undefined) delete tool.signature;\n else tool.signature = toolCall.signature;\n if (wasEnded) return;\n tool.ended = true;\n const toolCallEnd: ClientEventOf<\"tool_call_end\"> = {\n type: \"tool_call_end\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input,\n };\n if (toolCall.callId !== undefined) toolCallEnd.callId = toolCall.callId;\n if (toolCall.signature !== undefined) toolCallEnd.signature = toolCall.signature;\n yield clientEvent(state, toolCallEnd);\n}\n\nasync function* finishMessage(\n state: MessageState,\n content: readonly AssistantContentPart[],\n metadata: FinalMessageMetadata,\n): AsyncIterable<ClientStreamEvent> {\n if (state.ended) return;\n const textContent = content.filter(\n (part): part is Extract<AssistantContentPart, { type: \"text\" }> => part.type === \"text\",\n );\n const text = textContent.map((part) => part.text).join(\"\");\n if (state.textStarted || text.length > 0) {\n if (!state.textStarted) {\n state.textStarted = true;\n yield clientEvent(state, {\n type: \"text_start\",\n messageId: state.messageId,\n partId: state.textPartId,\n });\n }\n state.text = text;\n state.textEnded = true;\n const textEnd: ClientEventOf<\"text_end\"> = {\n type: \"text_end\",\n messageId: state.messageId,\n partId: state.textPartId,\n text,\n };\n if (textContent.length === 1 && textContent[0]?.signature !== undefined) {\n textEnd.signature = textContent[0].signature;\n }\n yield clientEvent(state, textEnd);\n }\n\n const finalReasoning = content.filter(\n (part): part is Extract<AssistantContentPart, { type: \"reasoning\" }> =>\n part.type === \"reasoning\",\n );\n const anonymousReasoning = [...state.reasoning.values()].filter(\n (reasoning) => reasoning.reasoningId === undefined,\n );\n let anonymousIndex = 0;\n for (const [index, reasoning] of finalReasoning.entries()) {\n const existing =\n reasoning.id === undefined\n ? anonymousReasoning[anonymousIndex++]\n : state.reasoning.get(reasoning.id);\n const current = existing ?? createReasoningState(reasoning.id);\n if (existing === undefined) {\n state.reasoning.set(reasoning.id ?? `final:${index}`, current);\n const reasoningStart: ClientEventOf<\"reasoning_start\"> = {\n type: \"reasoning_start\",\n messageId: state.messageId,\n partId: current.partId,\n };\n if (reasoning.id !== undefined) reasoningStart.reasoningId = reasoning.id;\n yield clientEvent(state, reasoningStart);\n }\n if (!current.ended) {\n current.ended = true;\n current.text = reasoning.text;\n const reasoningEnd: ClientEventOf<\"reasoning_end\"> = {\n type: \"reasoning_end\",\n messageId: state.messageId,\n partId: current.partId,\n text: reasoning.text,\n };\n if (reasoning.details !== undefined) reasoningEnd.content = reasoning.details;\n yield clientEvent(state, reasoningEnd);\n }\n }\n for (const reasoning of state.reasoning.values()) {\n if (reasoning.ended) continue;\n reasoning.ended = true;\n yield clientEvent(state, {\n type: \"reasoning_end\",\n messageId: state.messageId,\n partId: reasoning.partId,\n text: reasoning.text,\n });\n }\n\n for (const part of content) {\n if (part.type === \"tool-call\") yield* finishToolCall(state, part);\n if (part.type === \"image\" || part.type === \"file\") {\n const attachment = contentAttachment(part);\n yield clientEvent(state, {\n type: \"attachment\",\n messageId: state.messageId,\n partId: createClientId(\"attachment_part\"),\n attachment,\n });\n }\n }\n\n for (const source of metadata.sources ?? []) yield* emitSource(state, source);\n for (const toolCall of metadata.providerToolCalls ?? []) {\n yield* emitProviderToolCall(state, toolCall);\n }\n\n state.ended = true;\n const messageEnd: ClientEventOf<\"message_end\"> = {\n type: \"message_end\",\n messageId: state.messageId,\n parts: contentToUIMessageParts(content, state),\n usage: metadata.usage,\n };\n if (state.modelMessageId !== undefined) messageEnd.modelMessageId = state.modelMessageId;\n if (metadata.contextUsage !== undefined) messageEnd.contextUsage = metadata.contextUsage;\n yield clientEvent(state, messageEnd);\n}\n\nasync function* finishErroredRun(\n state: MessageState,\n error: unknown,\n usage: CompletionResponse[\"usage\"] | undefined,\n mapper: ClientErrorMapper | undefined,\n): AsyncIterable<ClientStreamEvent> {\n const mapped = mapClientError(error, mapper);\n if (state.textStarted && !state.textEnded) {\n state.textEnded = true;\n yield clientEvent(state, {\n type: \"text_end\",\n messageId: state.messageId,\n partId: state.textPartId,\n text: state.text,\n });\n }\n const errorEvent: ClientEventOf<\"error\"> = {\n type: \"error\",\n error: mapped,\n };\n if (usage !== undefined) errorEvent.usage = usage;\n yield clientEvent(state, errorEvent);\n if (!state.ended) {\n state.ended = true;\n const messageEnd: ClientEventOf<\"message_end\"> = {\n type: \"message_end\",\n messageId: state.messageId,\n };\n if (state.modelMessageId !== undefined) messageEnd.modelMessageId = state.modelMessageId;\n if (usage !== undefined) messageEnd.usage = usage;\n yield clientEvent(state, messageEnd);\n }\n const runEnd: ClientEventOf<\"run_end\"> = {\n type: \"run_end\",\n status: \"error\",\n };\n if (usage !== undefined) runEnd.usage = usage;\n yield clientEvent(state, runEnd);\n}\n\nfunction contentToUIMessageParts(\n content: readonly AssistantContentPart[],\n state: MessageState,\n): UIMessagePart[] {\n let textIndex = 0;\n let anonymousReasoningIndex = 0;\n const anonymousReasoning = [...state.reasoning.values()].filter(\n (reasoning) => reasoning.reasoningId === undefined,\n );\n return content.map((contentPart) => {\n if (contentPart.type === \"text\") {\n const part: Extract<UIMessagePart, { type: \"text\" }> = {\n id: textIndex === 0 ? state.textPartId : createClientId(\"text\"),\n type: \"text\",\n text: contentPart.text,\n };\n textIndex += 1;\n if (contentPart.signature !== undefined) part.signature = contentPart.signature;\n return part;\n }\n if (contentPart.type === \"reasoning\") {\n const current =\n contentPart.id === undefined\n ? anonymousReasoning[anonymousReasoningIndex++]\n : state.reasoning.get(contentPart.id);\n const part: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: current?.partId ?? createClientId(\"reasoning\"),\n type: \"reasoning\",\n text: contentPart.text,\n };\n if (contentPart.id !== undefined) part.reasoningId = contentPart.id;\n if (contentPart.details !== undefined) part.content = contentPart.details;\n return part;\n }\n if (contentPart.type === \"tool-call\") {\n const tool = getToolState(state, contentPart.toolCallId, contentPart.toolName);\n const partBase = {\n id: tool.partId,\n type: \"tool\" as const,\n toolName: contentPart.toolName,\n toolCallId: contentPart.toolCallId,\n };\n if (contentPart.callId !== undefined) Object.assign(partBase, { callId: contentPart.callId });\n if (tool.internalCallId !== undefined) {\n Object.assign(partBase, { internalCallId: tool.internalCallId });\n }\n if (state.turn !== undefined) Object.assign(partBase, { turn: state.turn });\n if (contentPart.signature !== undefined) {\n Object.assign(partBase, { signature: contentPart.signature });\n }\n if (tool.result?.status === \"success\") {\n const part: Extract<UIToolMessagePart, { state: \"output-available\" }> = {\n ...partBase,\n state: \"output-available\",\n input: contentPart.input,\n output: tool.result.output,\n };\n if (tool.result.content !== undefined) part.resultContent = tool.result.content;\n return part;\n }\n if (tool.result?.status === \"error\") {\n return {\n ...partBase,\n state: \"error\",\n input: contentPart.input,\n error: tool.result.error,\n };\n }\n return {\n ...partBase,\n state: \"input-available\",\n input: contentPart.input,\n };\n }\n const attachment = contentAttachment(contentPart);\n return {\n id: createClientId(\"attachment_part\"),\n type: \"attachment\",\n attachment,\n };\n });\n}\n\nfunction getToolState(state: MessageState, id: string, name?: string): ToolState {\n let tool = state.tools.get(id);\n if (tool === undefined) {\n tool = {\n partId: createClientId(\"tool\"),\n toolCallId: id,\n input: \"\",\n started: false,\n ended: false,\n };\n if (name !== undefined) tool.toolName = name;\n state.tools.set(id, tool);\n } else if (name !== undefined) {\n tool.toolName = name;\n }\n return tool;\n}\n\nfunction getToolResultState(\n state: MessageState,\n toolName: string,\n toolCallId: string,\n callId: string | undefined,\n internalCallId: string,\n): ToolState {\n const matchedByToolCallId = state.tools.get(toolCallId);\n const matchedByCallId =\n callId === undefined\n ? undefined\n : [...state.tools.values()].find((tool) => tool.callId === callId);\n const tool = matchedByToolCallId ?? matchedByCallId ?? getToolState(state, toolCallId, toolName);\n tool.toolName = toolName;\n if (callId !== undefined) tool.callId = callId;\n tool.internalCallId = internalCallId;\n return tool;\n}\n\nfunction createReasoningState(id?: string): ReasoningState {\n const state: ReasoningState = {\n partId: createClientId(\"reasoning\"),\n text: \"\",\n ended: false,\n };\n if (id !== undefined) state.reasoningId = id;\n return state;\n}\n\nfunction contentAttachment(\n content: Extract<AssistantContentPart, { type: \"image\" | \"file\" }>,\n): UIAttachment {\n const attachment: UIAttachment = {\n id: createClientId(\"attachment\"),\n type: content.type === \"image\" ? \"image\" : \"file\",\n };\n if (content.type === \"image\") {\n if (content.detail !== undefined) attachment.detail = content.detail;\n if (content.mediaType !== undefined) attachment.mediaType = content.mediaType;\n if (content.image.type === \"url\") attachment.url = content.image.url;\n else attachment.data = content.image.data;\n return attachment;\n }\n attachment.mediaType = content.mediaType;\n if (content.filename !== undefined) attachment.name = content.filename;\n if (content.data.type === \"url\") {\n attachment.url = content.data.url;\n } else if (content.data.type === \"data\") {\n attachment.data = content.data.data;\n } else {\n attachment.text = content.data.text;\n }\n return attachment;\n}\n\nfunction clientToolResult(\n output: ToolResultOutput,\n result: string,\n): NonNullable<ToolState[\"result\"]> {\n switch (output.type) {\n case \"text\":\n return { status: \"success\", output: output.value };\n case \"json\":\n return { status: \"success\", output: output.value };\n case \"content\":\n return { status: \"success\", output: result, content: output.value };\n case \"execution-denied\":\n return {\n status: \"error\",\n error: {\n message: output.reason ?? \"Tool execution was denied.\",\n code: \"tool_execution_denied\",\n },\n };\n case \"error-text\":\n return {\n status: \"error\",\n error: { message: output.value, code: \"tool_execution_error\" },\n };\n case \"error-json\":\n return {\n status: \"error\",\n error: {\n message: \"Tool execution failed.\",\n code: \"tool_execution_error\",\n details: output.value,\n },\n };\n }\n}\n\nfunction parseJsonOrString(value: string): JsonValue {\n try {\n const parsed: unknown = JSON.parse(value);\n return isJsonValue(parsed) ? parsed : value;\n } catch {\n return value;\n }\n}\n\nfunction clientOutput(\n output: unknown,\n mapper: ClientOutputMapper | undefined,\n): JsonValue | undefined {\n const mapped = mapper === undefined ? (isJsonValue(output) ? output : undefined) : mapper(output);\n if (mapped !== undefined && !isJsonValue(mapped)) {\n throw new TypeError(\"mapOutput must return a strict JSON value or undefined.\");\n }\n return mapped;\n}\n\nfunction valueFingerprint(value: unknown): string {\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (Array.isArray(value)) return `[${value.map(valueFingerprint).join(\",\")}]`;\n if (typeof value === \"object\") {\n return `{${Object.entries(value)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${valueFingerprint(entry)}`)\n .join(\",\")}}`;\n }\n return `${typeof value}:${JSON.stringify(value)}`;\n}\n\nfunction clientTrace(trace: {\n readonly observer: string;\n readonly traceId?: string | undefined;\n readonly observationId?: string | undefined;\n}): { observer: string; traceId?: string; observationId?: string } {\n const result: { observer: string; traceId?: string; observationId?: string } = {\n observer: trace.observer,\n };\n if (trace.traceId !== undefined) result.traceId = trace.traceId;\n if (trace.observationId !== undefined) result.observationId = trace.observationId;\n return result;\n}\n\nfunction mapClientError(error: unknown, mapper: ClientErrorMapper | undefined): ClientStreamError {\n const mapped = mapper?.(error) ?? maskedClientError();\n if (\n typeof mapped.message !== \"string\" ||\n (mapped.details !== undefined && !isJsonValue(mapped.details))\n ) {\n throw new TypeError(\"mapError must return a JSON-safe ClientStreamError.\");\n }\n return mapped;\n}\n\nfunction clientEvent(state: MessageState, event: ClientEventPayload): ClientStreamEvent {\n return scopedEvent(state.runId, state.turn, state.scope, event);\n}\n\nfunction rootEvent(\n runId: string,\n event: ClientEventPayload,\n scope?: ClientStreamScope,\n): ClientStreamEvent {\n return scopedEvent(runId, undefined, scope, event);\n}\n\nfunction scopedEvent(\n runId: string,\n turn: number | undefined,\n scope: ClientStreamScope | undefined,\n event: ClientEventPayload,\n): ClientStreamEvent {\n let scoped = { runId, ...event } as ClientStreamEvent;\n if (turn !== undefined) scoped = { ...scoped, turn };\n if (scope !== undefined) scoped = { ...scoped, scope };\n return scoped;\n}\n\nfunction scopeKey(scope: ClientStreamScope | undefined): string {\n if (scope === undefined) return \"root\";\n return [\n scope.agentId,\n scope.parentRunId,\n scope.parentToolName,\n scope.parentToolCallId,\n scope.parentInternalToolCallId,\n ].join(\":\");\n}\n\nfunction isRootTerminalAgentEvent(event: AgentStreamEvent<unknown, unknown>): boolean {\n return (\n event.type === \"response\" ||\n event.type === \"interaction\" ||\n event.type === \"blocked\" ||\n event.type === \"error\"\n );\n}\n\nfunction agentOutcomeStatus(\n type: \"response\" | \"interaction\" | \"blocked\",\n): \"completed\" | \"suspended\" | \"blocked\" {\n if (type === \"response\") return \"completed\";\n if (type === \"interaction\") return \"suspended\";\n return \"blocked\";\n}\n\nfunction propagateCancellation<TSource, TOutput>(\n source: AsyncIterable<TSource>,\n transform: (source: AsyncIterable<TSource>) => AsyncIterable<TOutput>,\n): AsyncIterable<TOutput> {\n return {\n [Symbol.asyncIterator](): AsyncIterator<TOutput> {\n const sourceIterator = source[Symbol.asyncIterator]();\n const sharedSource: AsyncIterable<TSource> = {\n [Symbol.asyncIterator]: () => sourceIterator,\n };\n const outputIterator = transform(sharedSource)[Symbol.asyncIterator]();\n let returned = false;\n\n return {\n next: () => outputIterator.next(),\n async return(): Promise<IteratorResult<TOutput>> {\n if (returned) return { done: true, value: undefined };\n returned = true;\n const sourceReturn = sourceIterator.return?.();\n const outputReturn = outputIterator.return?.();\n await Promise.all([sourceReturn, outputReturn]);\n return { done: true, value: undefined };\n },\n };\n },\n };\n}\n","import type {\n AssistantContentPart,\n FilePart,\n ImagePart,\n JsonObject,\n JsonValue,\n Message,\n ToolCallPart,\n ToolResultOutput,\n ToolResultPart,\n UserContentPart,\n} from \"@anvia/core/completion\";\nimport { getAssistantGenerationMetadata, isJsonValue } from \"@anvia/core/completion\";\nimport type {\n ClientDataMap,\n UIAttachment,\n UIMessage,\n UIMessageGeneration,\n UIMessagePart,\n UIToolMessagePart,\n} from \"./types\";\n\ntype ToolLocation = { messageIndex: number; partIndex: number };\n\nexport function uiMessagesToMessages<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(messages: readonly UIMessage<Metadata, Data>[]): Message<Metadata>[] {\n const result: Message<Metadata>[] = [];\n\n for (const message of messages) {\n assertMetadata(message.metadata);\n\n if (message.role === \"system\") {\n assertOnlyParts(message, [\"text\", \"data\", \"error\"]);\n result.push({\n role: \"system\",\n content: textFromParts(message.parts),\n ...metadataField(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"user\") {\n assertOnlyParts(message, [\"text\", \"attachment\", \"data\", \"error\"]);\n const content: UserContentPart[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\") {\n content.push(textContent(part.text, part.signature));\n } else if (part.type === \"attachment\") {\n content.push(attachmentToUserContent(part.attachment));\n }\n }\n result.push({ role: \"user\", content, ...metadataField(message.metadata) });\n continue;\n }\n\n if (message.role === \"assistant\") {\n assertOnlyParts(message, [\n \"text\",\n \"reasoning\",\n \"tool\",\n \"attachment\",\n \"source\",\n \"data\",\n \"error\",\n ]);\n const content: AssistantContentPart[] = [];\n const toolResults: ToolResultPart[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\") {\n content.push(textContent(part.text, part.signature));\n } else if (part.type === \"reasoning\") {\n let reasoning: Extract<AssistantContentPart, { type: \"reasoning\" }> = {\n type: \"reasoning\",\n text: part.text,\n };\n if (part.reasoningId !== undefined) reasoning = { ...reasoning, id: part.reasoningId };\n if (part.content !== undefined) reasoning = { ...reasoning, details: part.content };\n content.push(reasoning);\n } else if (part.type === \"tool\") {\n assertReplayableToolPart(part);\n let toolCall: ToolCallPart = {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n };\n if (part.callId !== undefined) toolCall = { ...toolCall, callId: part.callId };\n if (part.signature !== undefined) toolCall = { ...toolCall, signature: part.signature };\n content.push(toolCall);\n if (part.state === \"output-available\" || part.state === \"error\") {\n toolResults.push(toolResultFromPart(part));\n }\n } else if (part.type === \"attachment\") {\n content.push(attachmentToAssistantContent(part.attachment));\n }\n }\n\n let assistant: Extract<Message<Metadata>, { role: \"assistant\" }> = {\n role: \"assistant\",\n content,\n ...metadataField(message.metadata),\n };\n if (message.modelMessageId !== undefined) {\n assistant = { ...assistant, id: message.modelMessageId };\n }\n result.push(assistant);\n if (toolResults.length > 0) {\n result.push({ role: \"tool\", content: toolResults });\n }\n continue;\n }\n\n assertOnlyParts(message, [\"tool\", \"data\", \"error\"]);\n const content: ToolResultPart[] = [];\n for (const part of message.parts) {\n if (part.type !== \"tool\") continue;\n assertToolResultPart(part);\n content.push(toolResultFromPart(part));\n }\n result.push({ role: \"tool\", content, ...metadataField(message.metadata) });\n }\n\n return result;\n}\n\nexport function messagesToUIMessages<Metadata extends JsonObject = JsonObject>(\n messages: readonly Message<Metadata>[],\n): UIMessage<Metadata>[] {\n const result: UIMessage<Metadata>[] = [];\n const byToolCallId = new Map<string, ToolLocation>();\n const byCallId = new Map<string, ToolLocation>();\n\n for (const message of messages) {\n assertMetadata(message.metadata);\n\n if (message.role === \"system\") {\n result.push({\n id: createId(\"msg\"),\n role: \"system\",\n parts: [{ id: createId(\"part\"), type: \"text\", text: message.content }],\n ...metadataField(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"user\") {\n const content =\n typeof message.content === \"string\"\n ? ([{ type: \"text\", text: message.content }] satisfies UserContentPart[])\n : message.content;\n const parts: UIMessagePart[] = content.map((part) => contentToUIMessagePart(part));\n result.push({\n id: createId(\"msg\"),\n role: \"user\",\n parts,\n ...metadataField(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"assistant\") {\n const generationMetadata = getAssistantGenerationMetadata(message);\n const content =\n typeof message.content === \"string\"\n ? ([{ type: \"text\", text: message.content }] satisfies AssistantContentPart[])\n : message.content;\n const parts: UIMessagePart[] = content.map(assistantContentToUIMessagePart);\n for (const source of generationMetadata?.sources ?? []) {\n parts.push({ id: createId(\"source\"), type: \"source\", source });\n }\n let uiMessage: UIMessage<Metadata> = {\n id: createId(\"msg\"),\n role: \"assistant\",\n parts,\n ...metadataField(message.metadata),\n };\n if (generationMetadata !== undefined) {\n const generation: UIMessageGeneration = { usage: generationMetadata.usage };\n if (generationMetadata.contextUsage !== undefined) {\n generation.contextUsage = generationMetadata.contextUsage;\n }\n uiMessage = {\n ...uiMessage,\n generation,\n };\n }\n if (message.id !== undefined) uiMessage = { ...uiMessage, modelMessageId: message.id };\n const messageIndex = result.length;\n result.push(uiMessage);\n for (const [partIndex, part] of parts.entries()) {\n if (part.type !== \"tool\") continue;\n const location = { messageIndex, partIndex };\n byToolCallId.set(part.toolCallId, location);\n if (part.callId !== undefined) byCallId.set(part.callId, location);\n }\n continue;\n }\n\n const unmerged: UIToolMessagePart[] = [];\n for (const content of message.content) {\n if (content.type !== \"tool-result\") continue;\n const location =\n (content.callId === undefined ? undefined : byCallId.get(content.callId)) ??\n byToolCallId.get(content.toolCallId);\n const ownerPart = toolPartAt(result, location);\n if (ownerPart === undefined || ownerPart.state === \"input-streaming\") {\n throw new TypeError(\n `Tool result \"${content.toolCallId}\" requires a matching completed tool call.`,\n );\n }\n const part = toolResultToUIMessagePart(content, ownerPart.toolName, ownerPart.input);\n\n if (message.metadata === undefined && location !== undefined) {\n const owner = result[location.messageIndex];\n const existing = owner?.parts[location.partIndex];\n if (owner !== undefined && existing?.type === \"tool\") {\n const parts = [...owner.parts];\n parts[location.partIndex] = { ...existing, ...part, id: existing.id };\n result[location.messageIndex] = { ...owner, parts };\n continue;\n }\n }\n unmerged.push(part);\n }\n if (unmerged.length > 0 || message.metadata !== undefined) {\n result.push({\n id: createId(\"msg\"),\n role: \"tool\",\n parts: unmerged,\n ...metadataField(message.metadata),\n });\n }\n }\n\n return result;\n}\n\nfunction contentToUIMessagePart(content: UserContentPart): UIMessagePart {\n if (content.type === \"text\") {\n const part: Extract<UIMessagePart, { type: \"text\" }> = {\n id: createId(\"part\"),\n type: \"text\",\n text: content.text,\n };\n if (content.signature !== undefined) part.signature = content.signature;\n return part;\n }\n return {\n id: createId(\"part\"),\n type: \"attachment\",\n attachment: contentToAttachment(content),\n };\n}\n\nfunction assistantContentToUIMessagePart(content: AssistantContentPart): UIMessagePart {\n if (content.type === \"text\") return contentToUIMessagePart(content);\n if (content.type === \"reasoning\") {\n const part: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: createId(\"part\"),\n type: \"reasoning\",\n text: content.text,\n };\n if (content.id !== undefined) part.reasoningId = content.id;\n if (content.details !== undefined) part.content = content.details;\n return part;\n }\n if (content.type === \"tool-call\") {\n const part: UIToolMessagePart = {\n id: toolPartId(content.toolCallId),\n type: \"tool\",\n toolName: content.toolName,\n toolCallId: content.toolCallId,\n state: \"input-available\",\n input: content.input,\n };\n if (content.callId !== undefined) part.callId = content.callId;\n if (content.signature !== undefined) part.signature = content.signature;\n return part;\n }\n return {\n id: createId(\"part\"),\n type: \"attachment\",\n attachment: contentToAttachment(content),\n };\n}\n\nfunction textContent(text: string, signature?: string): Extract<UserContentPart, { type: \"text\" }> {\n return signature === undefined ? { type: \"text\", text } : { type: \"text\", text, signature };\n}\n\nfunction toolResultFromPart(\n part: Extract<UIToolMessagePart, { state: \"output-available\" | \"error\" }>,\n): ToolResultPart {\n let result: ToolResultPart = {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: toolOutputFromPart(part),\n };\n if (part.callId !== undefined) result = { ...result, callId: part.callId };\n return result;\n}\n\nfunction toolOutputFromPart(\n part: Extract<UIToolMessagePart, { state: \"output-available\" | \"error\" }>,\n): ToolResultOutput {\n if (part.state === \"error\") {\n return { type: \"error-text\", value: part.error.message };\n }\n if (part.resultContent !== undefined) {\n return { type: \"content\", value: part.resultContent };\n }\n const output = part.output;\n return typeof output === \"string\"\n ? { type: \"text\", value: output }\n : { type: \"json\", value: output };\n}\n\nfunction attachmentToUserContent(attachment: UIAttachment): UserContentPart {\n if (attachment.type === \"image\" || attachment.mediaType?.startsWith(\"image/\") === true) {\n return attachmentToImageContent(attachment);\n }\n return attachmentToFileContent(attachment);\n}\n\nfunction attachmentToAssistantContent(attachment: UIAttachment): AssistantContentPart {\n return attachment.type === \"image\" || attachment.mediaType?.startsWith(\"image/\") === true\n ? attachmentToImageContent(attachment)\n : attachmentToFileContent(attachment);\n}\n\nfunction attachmentToImageContent(attachment: UIAttachment): ImagePart {\n const image: ImagePart[\"image\"] =\n attachment.url !== undefined\n ? { type: \"url\", url: attachment.url }\n : attachment.data !== undefined\n ? { type: \"data\", data: attachment.data }\n : (() => {\n throw new TypeError(\"Image attachments require a URL or base64 data.\");\n })();\n let content: ImagePart = {\n type: \"image\",\n image,\n };\n if (attachment.mediaType !== undefined) content = { ...content, mediaType: attachment.mediaType };\n if (attachment.detail !== undefined) content = { ...content, detail: attachment.detail };\n return content;\n}\n\nfunction attachmentToFileContent(attachment: UIAttachment): FilePart {\n const data: FilePart[\"data\"] =\n attachment.url !== undefined\n ? { type: \"url\", url: attachment.url }\n : attachment.data !== undefined\n ? { type: \"data\", data: attachment.data }\n : attachment.text !== undefined\n ? { type: \"text\", text: attachment.text }\n : (() => {\n throw new TypeError(\"File attachments require a URL, base64 data, or text.\");\n })();\n let content: FilePart = {\n type: \"file\",\n data,\n mediaType: attachment.mediaType ?? \"application/octet-stream\",\n };\n if (attachment.name !== undefined) content = { ...content, filename: attachment.name };\n return content;\n}\n\nfunction contentToAttachment(content: ImagePart | FilePart): UIAttachment {\n const attachment: UIAttachment = {\n id: createId(\"attachment\"),\n type: content.type === \"image\" ? \"image\" : \"file\",\n };\n if (content.type === \"image\") {\n if (content.detail !== undefined) attachment.detail = content.detail;\n if (content.mediaType !== undefined) attachment.mediaType = content.mediaType;\n if (content.image.type === \"url\") attachment.url = content.image.url;\n else attachment.data = content.image.data;\n return attachment;\n }\n attachment.mediaType = content.mediaType;\n if (content.filename !== undefined) attachment.name = content.filename;\n if (content.data.type === \"url\") attachment.url = content.data.url;\n else if (content.data.type === \"data\") attachment.data = content.data.data;\n else attachment.text = content.data.text;\n return attachment;\n}\n\nfunction toolResultToUIMessagePart(\n content: ToolResultPart,\n fallbackToolName: string,\n input: JsonValue,\n): UIToolMessagePart {\n const output = content.output;\n const common = {\n id: toolPartId(content.toolCallId),\n type: \"tool\" as const,\n toolName: content.toolName || fallbackToolName,\n toolCallId: content.toolCallId,\n input,\n };\n if (content.callId !== undefined) Object.assign(common, { callId: content.callId });\n if (output.type === \"error-text\" || output.type === \"error-json\") {\n return {\n ...common,\n state: \"error\",\n error: {\n message: output.type === \"error-text\" ? output.value : JSON.stringify(output.value),\n },\n };\n }\n if (output.type === \"execution-denied\") {\n return {\n ...common,\n state: \"error\",\n error: { message: output.reason ?? \"Tool execution was denied.\" },\n };\n }\n const part: UIToolMessagePart = {\n ...common,\n state: \"output-available\",\n output: toolResultOutput(output),\n };\n if (output.type === \"content\") part.resultContent = output.value;\n return part;\n}\n\nfunction toolResultOutput(output: ToolResultOutput): JsonValue {\n if (output.type === \"text\" || output.type === \"error-text\") return output.value;\n if (output.type === \"json\" || output.type === \"error-json\") return output.value;\n if (output.type === \"execution-denied\") return output.reason ?? \"Tool execution was denied.\";\n return output.value.length === 1 && output.value[0]?.type === \"text\"\n ? output.value[0].text\n : output.value.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, data: { ...part.data } },\n );\n}\n\nfunction toolPartAt(\n messages: readonly UIMessage[],\n location: ToolLocation | undefined,\n): UIToolMessagePart | undefined {\n if (location === undefined) return undefined;\n const part = messages[location.messageIndex]?.parts[location.partIndex];\n return part?.type === \"tool\" ? part : undefined;\n}\n\nfunction assertReplayableToolPart(\n part: UIToolMessagePart,\n): asserts part is Exclude<UIToolMessagePart, { state: \"input-streaming\" }> {\n if (part.state === \"input-streaming\") {\n throw new TypeError(\n `Tool call \"${part.toolCallId}\" is still streaming and cannot be converted to a model message.`,\n );\n }\n if (!isJsonValue(part.input)) {\n throw new TypeError(`Tool call \"${part.toolCallId}\" input must be a strict JSON value.`);\n }\n}\n\nfunction assertToolResultPart(\n part: UIToolMessagePart,\n): asserts part is Extract<UIToolMessagePart, { state: \"output-available\" | \"error\" }> {\n assertReplayableToolPart(part);\n if (part.state === \"input-available\") {\n throw new TypeError(\n `Tool message part \"${part.toolCallId}\" requires an output or execution error.`,\n );\n }\n}\n\nfunction textFromParts(parts: readonly UIMessagePart[]): string {\n return parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n}\n\nfunction assertOnlyParts(\n message: UIMessage<JsonObject, ClientDataMap>,\n allowed: readonly UIMessagePart[\"type\"][],\n): void {\n for (const part of message.parts) {\n if (!allowed.includes(part.type)) {\n throw new TypeError(`${message.role} UI messages cannot contain ${part.type} parts.`);\n }\n }\n}\n\nfunction assertMetadata(metadata: JsonObject | undefined): void {\n if (metadata !== undefined && (!isJsonValue(metadata) || Array.isArray(metadata))) {\n throw new TypeError(\"Message metadata must be a strict JSON object.\");\n }\n}\n\nfunction metadataField<Metadata extends JsonObject>(\n metadata: Metadata | undefined,\n): { metadata?: Metadata } {\n return metadata === undefined ? {} : { metadata };\n}\n\nfunction toolPartId(toolCallId: string): string {\n return `tool_${toolCallId}`;\n}\n\nlet nextId = 0;\n\nexport function createClientId(prefix: string): string {\n const random = globalThis.crypto?.randomUUID?.();\n if (random !== undefined) return `${prefix}_${random}`;\n nextId += 1;\n return `${prefix}_${nextId.toString(36)}`;\n}\n\nfunction createId(prefix: string): string {\n return createClientId(prefix);\n}\n","import {\n parseAgentInteractionRequest,\n parseAgentInteractionResponse,\n} from \"@anvia/core/agent/interactions\";\nimport type { JsonObject, JsonValue, Message } from \"@anvia/core/completion\";\nimport { isJsonValue, parseMessages } from \"@anvia/core/completion\";\nimport {\n CLIENT_STREAM_PROTOCOL,\n type ClientDataMap,\n type ClientDataSchemas,\n type ClientMetadataSchema,\n type ClientStreamError,\n type ClientStreamEvent,\n type ClientStreamFrame,\n type ClientStreamRequest,\n type UIMessage,\n type UIMessageGeneration,\n type UIMessagePart,\n} from \"./types\";\n\nexport class ClientProtocolError extends Error {\n constructor(\n message: string,\n readonly value?: unknown,\n ) {\n super(message);\n this.name = \"ClientProtocolError\";\n }\n}\n\nexport function parseUIMessage<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): UIMessage<Metadata, Data> {\n const message = requireRecord(value, \"UI message\");\n if (!isJsonValue(message)) {\n throw new ClientProtocolError(\"UI messages must be strict JSON values.\", value);\n }\n requireOnlyKeys(\n message,\n [\"id\", \"role\", \"parts\", \"modelMessageId\", \"metadata\", \"generation\"],\n \"UI message\",\n );\n if (typeof message.id !== \"string\") invalid(\"UI message.id\", value);\n requireOneOf(message.role, [\"system\", \"user\", \"assistant\", \"tool\"], \"UI message.role\", value);\n if (!Array.isArray(message.parts)) invalid(\"UI message.parts\", value);\n const parts = message.parts.map((part) => parseUIMessagePart(part, options.dataSchemas, value));\n if (message.modelMessageId !== undefined && typeof message.modelMessageId !== \"string\") {\n invalid(\"UI message.modelMessageId\", value);\n }\n const metadata =\n message.metadata === undefined\n ? undefined\n : parseMetadata(message.metadata, options.metadataSchema, value);\n if (message.generation !== undefined && !isUIMessageGeneration(message.generation)) {\n invalid(\"UI message.generation\", value);\n }\n let parsed: UIMessage<Metadata, Data> = {\n id: message.id as string,\n role: message.role as UIMessage<Metadata, Data>[\"role\"],\n parts,\n };\n if (message.modelMessageId !== undefined) {\n parsed = { ...parsed, modelMessageId: message.modelMessageId as string };\n }\n if (metadata !== undefined) parsed = { ...parsed, metadata };\n if (message.generation !== undefined) {\n parsed = { ...parsed, generation: message.generation as UIMessageGeneration };\n }\n return parsed;\n}\n\nexport function parseUIMessages<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): UIMessage<Metadata, Data>[] {\n if (!Array.isArray(value)) {\n throw new ClientProtocolError(\"UI messages must be an array.\", value);\n }\n return value.map((message) => parseUIMessage<Metadata, Data>(message, options));\n}\n\nexport function parseClientStreamRequest(value: unknown): ClientStreamRequest {\n const input = requireRecord(value, \"Client stream request\");\n requireOnlyKeys(\n input,\n [\"type\", \"messages\", \"interactionId\", \"response\", \"metadata\", \"resume\"],\n \"Client stream request\",\n );\n requireOneOf(\n input.type,\n [\"messages\", \"interaction_response\"],\n \"Client stream request.type\",\n value,\n );\n if (input.metadata !== undefined && !isJsonObject(input.metadata)) {\n throw new ClientProtocolError(\"Client stream request.metadata must be a JSON object.\", value);\n }\n let request: ClientStreamRequest;\n if (input.type === \"messages\") {\n if (input.interactionId !== undefined || input.response !== undefined) {\n throw new ClientProtocolError(\n \"Messages requests cannot include interaction response fields.\",\n value,\n );\n }\n let messages: Message[];\n try {\n messages = parseMessages(input.messages);\n } catch {\n throw new ClientProtocolError(\"Client stream request.messages must be Message[].\", value);\n }\n request = { type: \"messages\", messages };\n } else {\n if (input.messages !== undefined || typeof input.interactionId !== \"string\") {\n throw new ClientProtocolError(\n \"Interaction response requests require interactionId and cannot include messages.\",\n value,\n );\n }\n try {\n request = {\n type: \"interaction_response\",\n interactionId: input.interactionId,\n response: parseAgentInteractionResponse(input.response),\n };\n } catch {\n throw new ClientProtocolError(\"Client interaction response is invalid.\", value);\n }\n }\n if (input.metadata !== undefined) request.metadata = input.metadata as JsonObject;\n if (input.resume !== undefined) {\n const resume = requireRecord(input.resume, \"Client stream request.resume\");\n requireOnlyKeys(resume, [\"streamId\", \"after\"], \"Client stream request.resume\");\n if (typeof resume.streamId !== \"string\" || !isEventId(resume.after)) {\n throw new ClientProtocolError(\n \"Client stream resume cursor requires streamId and a nonnegative safe integer after.\",\n value,\n );\n }\n request.resume = { streamId: resume.streamId, after: resume.after };\n }\n return request;\n}\n\nexport function parseClientStreamEvent<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): ClientStreamEvent<Metadata, Data> {\n const event = requireRecord(value, \"Client stream event\");\n if (!isJsonValue(event)) {\n throw new ClientProtocolError(\"Client stream events must be strict JSON values.\", value);\n }\n if (typeof event.type !== \"string\" || typeof event.runId !== \"string\") {\n throw new ClientProtocolError(\"Client stream events require type and runId.\", value);\n }\n if (event.turn !== undefined && !isPositiveEventId(event.turn)) {\n throw new ClientProtocolError(\n \"Client stream event.turn must be a positive safe integer.\",\n value,\n );\n }\n if (event.scope !== undefined && !isScope(event.scope)) {\n throw new ClientProtocolError(\"Client stream event.scope is invalid.\", value);\n }\n\n switch (event.type) {\n case \"run_start\":\n requireEventKeys(event, [\"source\", \"metadata\"]);\n requireOneOf(event.source, [\"completion\", \"agent\"], \"run_start.source\", value);\n break;\n case \"turn_start\":\n requireEventKeys(event, []);\n if (!isPositiveEventId(event.turn)) invalid(\"turn_start.turn\", value);\n break;\n case \"generation_start\":\n requireEventKeys(event, [\"model\"]);\n if (\n event.model !== undefined &&\n (!isRecord(event.model) ||\n !hasOnlyKeys(event.model, [\"provider\", \"modelId\"]) ||\n typeof event.model.provider !== \"string\" ||\n typeof event.model.modelId !== \"string\")\n ) {\n invalid(\"generation_start.model\", value);\n }\n break;\n case \"message_start\":\n requireEventKeys(event, [\"messageId\", \"role\", \"metadata\"]);\n requireStrings(event, [\"messageId\"], value);\n if (event.role !== \"assistant\") invalid(\"message_start.role\", value);\n break;\n case \"text_start\":\n requireEventKeys(event, [\"messageId\", \"partId\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n break;\n case \"text_delta\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"delta\"]);\n requireStrings(event, [\"messageId\", \"partId\", \"delta\"], value);\n break;\n case \"reasoning_delta\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"delta\", \"contentType\", \"signature\"]);\n requireStrings(event, [\"messageId\", \"partId\", \"delta\"], value);\n requireOptionalStrings(event, [\"signature\"], value);\n if (\n event.contentType !== undefined &&\n ![\"text\", \"summary\", \"encrypted\", \"redacted\"].includes(event.contentType as string)\n ) {\n invalid(\"reasoning_delta.contentType\", value);\n }\n break;\n case \"text_end\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"text\", \"signature\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n requireOptionalStrings(event, [\"text\", \"signature\"], value);\n break;\n case \"reasoning_start\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"reasoningId\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n requireOptionalStrings(event, [\"reasoningId\"], value);\n break;\n case \"reasoning_end\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"text\", \"content\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n requireOptionalStrings(event, [\"text\"], value);\n if (\n event.content !== undefined &&\n (!Array.isArray(event.content) || !event.content.every(isReasoningContent))\n ) {\n invalid(\"reasoning_end.content\", value);\n }\n break;\n case \"tool_call_start\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"toolCallId\", \"callId\", \"toolName\"]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\"], value);\n requireOptionalStrings(event, [\"callId\", \"toolName\"], value);\n break;\n case \"tool_call_delta\":\n requireEventKeys(event, [\n \"messageId\",\n \"partId\",\n \"toolCallId\",\n \"callId\",\n \"toolName\",\n \"delta\",\n \"mode\",\n \"signature\",\n ]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\", \"delta\"], value);\n requireOptionalStrings(event, [\"callId\", \"toolName\"], value);\n requireOptionalStrings(event, [\"signature\"], value);\n requireOneOf(event.mode, [\"append\", \"replace\"], \"tool_call_delta.mode\", value);\n break;\n case \"tool_call_end\":\n requireEventKeys(event, [\n \"messageId\",\n \"partId\",\n \"toolCallId\",\n \"callId\",\n \"toolName\",\n \"input\",\n \"signature\",\n ]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\", \"toolName\"], value);\n requireOptionalStrings(event, [\"callId\", \"signature\"], value);\n if (!isJsonValue(event.input)) invalid(\"tool_call_end.input\", value);\n break;\n case \"tool_result\":\n requireEventKeys(event, [\n \"messageId\",\n \"partId\",\n \"toolCallId\",\n \"callId\",\n \"internalCallId\",\n \"toolName\",\n \"input\",\n \"result\",\n ]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\", \"toolName\"], value);\n requireOptionalStrings(event, [\"callId\", \"internalCallId\"], value);\n if (!isJsonValue(event.input)) invalid(\"tool_result.input\", value);\n if (!isRecord(event.result)) invalid(\"tool_result.result\", value);\n if (event.result.status === \"success\") {\n if (\n !hasOnlyKeys(event.result, [\"status\", \"output\", \"content\"]) ||\n !isJsonValue(event.result.output) ||\n (event.result.content !== undefined &&\n (!Array.isArray(event.result.content) ||\n !event.result.content.every(isToolResultContent)))\n ) {\n invalid(\"tool_result.result\", value);\n }\n } else if (event.result.status === \"error\") {\n if (\n !hasOnlyKeys(event.result, [\"status\", \"error\"]) ||\n !isClientStreamError(event.result.error)\n ) {\n invalid(\"tool_result.result\", value);\n }\n } else {\n invalid(\"tool_result.result.status\", value);\n }\n break;\n case \"source\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"source\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n if (!isCompletionSource(event.source)) invalid(\"source.source\", value);\n break;\n case \"attachment\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"attachment\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n if (!isAttachment(event.attachment)) invalid(\"attachment.attachment\", value);\n break;\n case \"provider_tool_call\":\n requireEventKeys(event, [\"toolCall\"]);\n if (!isProviderToolCall(event.toolCall)) invalid(\"provider_tool_call.toolCall\", value);\n break;\n case \"interaction\":\n requireEventKeys(event, [\"interaction\"]);\n try {\n parseAgentInteractionRequest(event.interaction);\n } catch {\n invalid(\"interaction.interaction\", value);\n }\n break;\n case \"guardrail_decision\":\n requireEventKeys(event, [\"decision\"]);\n if (!isGuardrailDecision(event.decision)) invalid(\"guardrail_decision.decision\", value);\n break;\n case \"data\":\n requireEventKeys(event, [\"name\", \"data\", \"transient\"]);\n requireStrings(event, [\"name\"], value);\n if (!isJsonValue(event.data)) invalid(\"data.data\", value);\n if (event.transient !== undefined && typeof event.transient !== \"boolean\") {\n invalid(\"data.transient\", value);\n }\n return {\n ...event,\n data: parseDataEvent(event.name as string, event.data, options.dataSchemas, value),\n } as ClientStreamEvent<Metadata, Data>;\n case \"message_end\":\n requireEventKeys(event, [\n \"messageId\",\n \"modelMessageId\",\n \"parts\",\n \"usage\",\n \"contextUsage\",\n \"metadata\",\n ]);\n requireStrings(event, [\"messageId\"], value);\n requireOptionalStrings(event, [\"modelMessageId\"], value);\n if (event.parts !== undefined) {\n if (!Array.isArray(event.parts)) invalid(\"message_end.parts\", value);\n const parts = event.parts.map((part) =>\n parseUIMessagePart(part, options.dataSchemas, value),\n );\n validateUsageAndContext(event, value);\n return parseEventMetadata(\n { ...event, parts },\n options.metadataSchema,\n value,\n ) as ClientStreamEvent<Metadata, Data>;\n }\n validateUsageAndContext(event, value);\n break;\n case \"turn_end\":\n requireEventKeys(event, [\"usage\", \"contextUsage\", \"firstDeltaMs\"]);\n if (!isPositiveEventId(event.turn)) invalid(\"turn_end.turn\", value);\n if (event.firstDeltaMs !== undefined && !isNonnegativeNumber(event.firstDeltaMs)) {\n invalid(\"turn_end.firstDeltaMs\", value);\n }\n validateUsageAndContext(event, value);\n break;\n case \"memory_compaction\":\n requireEventKeys(event, [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n \"attempts\",\n \"usage\",\n ]);\n validateMemoryCompactionInfo(event, value);\n break;\n case \"run_end\":\n requireEventKeys(event, [\n \"status\",\n \"text\",\n \"output\",\n \"usage\",\n \"contextUsage\",\n \"trace\",\n \"memoryCompaction\",\n \"metadata\",\n ]);\n requireOneOf(\n event.status,\n [\"completed\", \"blocked\", \"suspended\", \"cancelled\", \"error\"],\n \"run_end.status\",\n value,\n );\n requireOptionalStrings(event, [\"text\"], value);\n validateUsageAndContext(event, value);\n if (event.trace !== undefined && !isTrace(event.trace)) invalid(\"run_end.trace\", value);\n if (event.memoryCompaction !== undefined) {\n if (!isRecord(event.memoryCompaction)) invalid(\"run_end.memoryCompaction\", value);\n requireOnlyKeys(\n event.memoryCompaction,\n [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n \"attempts\",\n \"usage\",\n ],\n \"run_end.memoryCompaction\",\n );\n validateMemoryCompactionInfo(event.memoryCompaction, value);\n }\n break;\n case \"error\":\n requireEventKeys(event, [\"error\", \"usage\"]);\n if (!isClientStreamError(event.error)) invalid(\"error.error\", value);\n if (event.usage !== undefined && !isUsage(event.usage)) invalid(\"error.usage\", value);\n break;\n default:\n throw new ClientProtocolError(`Unknown client stream event type \"${event.type}\".`, value);\n }\n\n return parseEventMetadata(event, options.metadataSchema, value) as ClientStreamEvent<\n Metadata,\n Data\n >;\n}\n\nexport function parseClientStreamFrame<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): ClientStreamFrame<Metadata, Data> {\n const frame = requireRecord(value, \"Client stream frame\");\n if (!isJsonValue(frame)) {\n throw new ClientProtocolError(\"Client stream frames must be strict JSON values.\", value);\n }\n if (typeof frame.type !== \"string\") {\n throw new ClientProtocolError(\"Client stream frames require type.\", value);\n }\n if (frame.type === \"stream_start\") {\n requireOnlyKeys(\n frame,\n [\"type\", \"protocol\", \"streamId\", \"eventId\", \"resumable\"],\n \"stream_start frame\",\n );\n if (frame.protocol === \"anvia.client.v1\" || frame.protocol === \"anvia.client.v2\") {\n throw new ClientProtocolError(\n `Client stream protocol ${frame.protocol.slice(-2)} is not supported.`,\n value,\n );\n }\n if (\n frame.protocol !== CLIENT_STREAM_PROTOCOL ||\n typeof frame.streamId !== \"string\" ||\n frame.eventId !== 0 ||\n typeof frame.resumable !== \"boolean\"\n ) {\n throw new ClientProtocolError(\"Invalid client stream_start frame.\", value);\n }\n return frame as ClientStreamFrame<Metadata, Data>;\n }\n if (frame.type === \"stream_event\") {\n requireOnlyKeys(frame, [\"type\", \"streamId\", \"eventId\", \"event\"], \"stream_event frame\");\n if (typeof frame.streamId !== \"string\" || !isPositiveEventId(frame.eventId)) {\n throw new ClientProtocolError(\"Invalid client stream_event frame.\", value);\n }\n const event = parseClientStreamEvent(frame.event, options);\n return { ...frame, event } as ClientStreamFrame<Metadata, Data>;\n }\n if (frame.type === \"stream_end\") {\n requireOnlyKeys(frame, [\"type\", \"streamId\", \"eventId\", \"status\"], \"stream_end frame\");\n if (typeof frame.streamId !== \"string\" || !isEventId(frame.eventId)) {\n throw new ClientProtocolError(\"Invalid client stream_end frame.\", value);\n }\n requireOneOf(frame.status, [\"completed\", \"error\", \"missing\"], \"stream_end.status\", value);\n return frame as ClientStreamFrame<Metadata, Data>;\n }\n throw new ClientProtocolError(`Unknown client stream frame type \"${frame.type}\".`, value);\n}\n\nexport function maskedClientError(): ClientStreamError {\n return { message: \"An unexpected error occurred.\" };\n}\n\nexport function normalizeClientError(value: unknown): Error {\n if (value instanceof Error) return value;\n if (isClientStreamError(value)) {\n const error = new Error(value.message);\n if (value.name !== undefined) error.name = value.name;\n return error;\n }\n return new Error(typeof value === \"string\" ? value : \"An unexpected error occurred.\");\n}\n\nfunction parseDataEvent<TData extends ClientDataMap>(\n name: string,\n data: unknown,\n schemas: ClientDataSchemas<TData> | undefined,\n value: unknown,\n): JsonValue {\n if (schemas === undefined) return data as JsonValue;\n const schema = schemas[name as keyof TData];\n if (schema === undefined) {\n throw new ClientProtocolError(`Invalid data event \"${name}\".`, value);\n }\n const parsed = schema.safeParse(data);\n if (parsed.success !== true || !isJsonValue(parsed.data)) {\n throw new ClientProtocolError(`Invalid data event \"${name}\".`, value);\n }\n return parsed.data;\n}\n\nfunction parseUIMessagePart<Data extends ClientDataMap>(\n value: unknown,\n schemas: ClientDataSchemas<Data> | undefined,\n root: unknown,\n): UIMessagePart<Data> {\n if (!isUIMessagePart(value)) {\n throw new ClientProtocolError(\"UI message contains an invalid part.\", root);\n }\n if (value.type !== \"data\") {\n return value as UIMessagePart<Data>;\n }\n return {\n ...value,\n data: parseDataEvent(value.name, value.data, schemas, root),\n } as UIMessagePart<Data>;\n}\n\nfunction parseMetadata<Metadata extends JsonObject>(\n value: unknown,\n schema: ClientMetadataSchema<Metadata> | undefined,\n root: unknown,\n): Metadata {\n if (schema === undefined) {\n if (!isJsonObject(value)) {\n throw new ClientProtocolError(\"Client metadata must be a JSON object.\", root);\n }\n return value as Metadata;\n }\n const parsed = schema.safeParse(value);\n if (parsed.success !== true || !isJsonObject(parsed.data)) {\n throw new ClientProtocolError(\"Invalid client metadata.\", root);\n }\n return parsed.data;\n}\n\nfunction parseEventMetadata<Metadata extends JsonObject>(\n event: Record<string, unknown>,\n schema: ClientMetadataSchema<Metadata> | undefined,\n root: unknown,\n): Record<string, unknown> {\n if (event.metadata === undefined) return event;\n return { ...event, metadata: parseMetadata(event.metadata, schema, root) };\n}\n\nfunction isUIMessageGeneration(value: unknown): value is UIMessageGeneration {\n if (!isRecord(value)) return false;\n if (\n !hasOnlyKeys(value, [\"runId\", \"status\", \"usage\", \"contextUsage\", \"trace\", \"memoryCompaction\"])\n ) {\n return false;\n }\n return (\n (value.runId === undefined || typeof value.runId === \"string\") &&\n (value.status === undefined ||\n [\"completed\", \"blocked\", \"suspended\", \"cancelled\", \"error\"].includes(\n value.status as string,\n )) &&\n (value.usage === undefined || isUsage(value.usage)) &&\n (value.contextUsage === undefined || isContextUsage(value.contextUsage)) &&\n (value.trace === undefined || isTrace(value.trace)) &&\n (value.memoryCompaction === undefined ||\n (isRecord(value.memoryCompaction) &&\n validateMemoryCompactionForGuard(value.memoryCompaction)))\n );\n}\n\nfunction validateMemoryCompactionForGuard(value: Record<string, unknown>): boolean {\n try {\n requireOnlyKeys(\n value,\n [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n \"attempts\",\n \"usage\",\n ],\n \"memory compaction\",\n );\n validateMemoryCompactionInfo(value, value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return isRecord(value) && isJsonValue(value);\n}\n\nfunction isClientStreamError(value: unknown): value is ClientStreamError {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\"name\", \"message\", \"code\", \"retryable\", \"details\"]) &&\n typeof value.message === \"string\" &&\n (value.name === undefined || typeof value.name === \"string\") &&\n (value.code === undefined || typeof value.code === \"string\") &&\n (value.retryable === undefined || typeof value.retryable === \"boolean\") &&\n (value.details === undefined || isJsonValue(value.details))\n );\n}\n\nfunction isScope(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const keys = [\n \"agentId\",\n \"agentName\",\n \"parentRunId\",\n \"parentToolName\",\n \"parentToolCallId\",\n \"parentInternalToolCallId\",\n ];\n return (\n hasOnlyKeys(value, keys) &&\n keys.every((key) => value[key] === undefined || typeof value[key] === \"string\")\n );\n}\n\nfunction isAttachment(value: unknown): boolean {\n if (!isRecord(value) || typeof value.id !== \"string\") return false;\n if (value.type !== \"image\" && value.type !== \"document\" && value.type !== \"file\") return false;\n return (\n hasOnlyKeys(value, [\n \"id\",\n \"type\",\n \"name\",\n \"mediaType\",\n \"url\",\n \"data\",\n \"text\",\n \"detail\",\n \"metadata\",\n ]) &&\n (value.name === undefined || typeof value.name === \"string\") &&\n (value.mediaType === undefined || typeof value.mediaType === \"string\") &&\n (value.url === undefined || typeof value.url === \"string\") &&\n (value.data === undefined || typeof value.data === \"string\") &&\n (value.text === undefined || typeof value.text === \"string\") &&\n (value.detail === undefined || [\"auto\", \"low\", \"high\"].includes(value.detail as string)) &&\n (value.metadata === undefined || isJsonValue(value.metadata))\n );\n}\n\nfunction isUIMessagePart(value: unknown): value is UIMessagePart {\n if (!isRecord(value) || typeof value.id !== \"string\" || typeof value.type !== \"string\") {\n return false;\n }\n if (value.type === \"text\") {\n return (\n hasOnlyKeys(value, [\"id\", \"type\", \"text\", \"signature\"]) &&\n typeof value.text === \"string\" &&\n (value.signature === undefined || typeof value.signature === \"string\")\n );\n }\n if (value.type === \"reasoning\") {\n return (\n hasOnlyKeys(value, [\"id\", \"type\", \"text\", \"reasoningId\", \"content\"]) &&\n typeof value.text === \"string\" &&\n (value.reasoningId === undefined || typeof value.reasoningId === \"string\") &&\n (value.content === undefined ||\n (Array.isArray(value.content) && value.content.every(isReasoningContent)))\n );\n }\n if (value.type === \"source\") {\n return hasOnlyKeys(value, [\"id\", \"type\", \"source\"]) && isCompletionSource(value.source);\n }\n if (value.type === \"data\") {\n return (\n hasOnlyKeys(value, [\"id\", \"type\", \"name\", \"data\"]) &&\n typeof value.name === \"string\" &&\n isJsonValue(value.data)\n );\n }\n if (value.type === \"attachment\") {\n return hasOnlyKeys(value, [\"id\", \"type\", \"attachment\"]) && isAttachment(value.attachment);\n }\n if (value.type === \"error\") {\n return hasOnlyKeys(value, [\"id\", \"type\", \"error\"]) && isClientStreamError(value.error);\n }\n if (\n value.type !== \"tool\" ||\n !hasOnlyKeys(value, [\n \"id\",\n \"type\",\n \"toolName\",\n \"toolCallId\",\n \"callId\",\n \"internalCallId\",\n \"turn\",\n \"state\",\n \"input\",\n \"output\",\n \"resultContent\",\n \"signature\",\n \"error\",\n ]) ||\n typeof value.toolName !== \"string\" ||\n typeof value.toolCallId !== \"string\" ||\n (value.callId !== undefined && typeof value.callId !== \"string\") ||\n (value.internalCallId !== undefined && typeof value.internalCallId !== \"string\") ||\n (value.turn !== undefined && !isPositiveEventId(value.turn)) ||\n (value.signature !== undefined && typeof value.signature !== \"string\")\n ) {\n return false;\n }\n if (value.state === \"input-streaming\") {\n return (\n typeof value.input === \"string\" &&\n value.output === undefined &&\n value.resultContent === undefined &&\n value.error === undefined\n );\n }\n if (value.state === \"input-available\") {\n return (\n isJsonValue(value.input) &&\n value.output === undefined &&\n value.resultContent === undefined &&\n value.error === undefined\n );\n }\n if (value.state === \"output-available\") {\n return (\n isJsonValue(value.input) &&\n isJsonValue(value.output) &&\n (value.resultContent === undefined ||\n (Array.isArray(value.resultContent) && value.resultContent.every(isToolResultContent))) &&\n value.error === undefined\n );\n }\n return (\n value.state === \"error\" &&\n isJsonValue(value.input) &&\n value.output === undefined &&\n value.resultContent === undefined &&\n isClientStreamError(value.error)\n );\n}\n\nfunction isReasoningContent(value: unknown): boolean {\n if (!isRecord(value) || typeof value.type !== \"string\") return false;\n if (value.type === \"text\") {\n return (\n hasOnlyKeys(value, [\"type\", \"text\", \"signature\"]) &&\n typeof value.text === \"string\" &&\n (value.signature === undefined || typeof value.signature === \"string\")\n );\n }\n if (value.type === \"summary\") {\n return hasOnlyKeys(value, [\"type\", \"text\"]) && typeof value.text === \"string\";\n }\n if (value.type === \"encrypted\" || value.type === \"redacted\") {\n return hasOnlyKeys(value, [\"type\", \"data\"]) && typeof value.data === \"string\";\n }\n return false;\n}\n\nfunction isToolResultContent(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === \"text\") {\n return (\n hasOnlyKeys(value, [\"type\", \"text\", \"signature\"]) &&\n typeof value.text === \"string\" &&\n (value.signature === undefined || typeof value.signature === \"string\")\n );\n }\n return (\n value.type === \"file\" &&\n hasOnlyKeys(value, [\"type\", \"data\", \"mediaType\", \"filename\"]) &&\n isFileData(value.data) &&\n typeof value.mediaType === \"string\" &&\n (value.filename === undefined || typeof value.filename === \"string\")\n );\n}\n\nfunction isFileData(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === \"url\") {\n return hasOnlyKeys(value, [\"type\", \"url\"]) && typeof value.url === \"string\";\n }\n if (value.type === \"data\") {\n return hasOnlyKeys(value, [\"type\", \"data\"]) && typeof value.data === \"string\";\n }\n return (\n value.type === \"text\" && hasOnlyKeys(value, [\"type\", \"text\"]) && typeof value.text === \"string\"\n );\n}\n\nfunction isCompletionSource(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.type === \"url\" &&\n hasOnlyKeys(value, [\"type\", \"url\", \"title\", \"id\", \"startIndex\", \"endIndex\"]) &&\n typeof value.url === \"string\" &&\n (value.title === undefined || typeof value.title === \"string\") &&\n (value.id === undefined || typeof value.id === \"string\") &&\n (value.startIndex === undefined || isNonnegativeNumber(value.startIndex)) &&\n (value.endIndex === undefined || isNonnegativeNumber(value.endIndex))\n );\n}\n\nfunction isProviderToolCall(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\"id\", \"name\", \"status\", \"details\"]) &&\n typeof value.id === \"string\" &&\n typeof value.name === \"string\" &&\n (value.status === undefined || typeof value.status === \"string\") &&\n (value.details === undefined || (isRecord(value.details) && isJsonValue(value.details)))\n );\n}\n\nfunction isGuardrailDecision(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\n \"policyId\",\n \"guardrailId\",\n \"boundary\",\n \"mode\",\n \"action\",\n \"applied\",\n \"reason\",\n \"message\",\n \"metadata\",\n \"latencyMs\",\n ]) &&\n typeof value.policyId === \"string\" &&\n typeof value.guardrailId === \"string\" &&\n (value.boundary === \"input\" || value.boundary === \"output\") &&\n (value.mode === \"enforce\" || value.mode === \"observe\") &&\n typeof value.action === \"string\" &&\n [\"allow\", \"block\", \"rewrite\", \"error\"].includes(value.action) &&\n typeof value.applied === \"boolean\" &&\n (value.reason === undefined || typeof value.reason === \"string\") &&\n (value.message === undefined || typeof value.message === \"string\") &&\n (value.metadata === undefined || (isRecord(value.metadata) && isJsonValue(value.metadata))) &&\n isNonnegativeNumber(value.latencyMs)\n );\n}\n\nfunction isUsage(value: unknown): boolean {\n if (\n !isRecord(value) ||\n !hasOnlyKeys(value, [\n \"inputTokens\",\n \"outputTokens\",\n \"totalTokens\",\n \"cachedInputTokens\",\n \"cacheCreationInputTokens\",\n \"details\",\n ]) ||\n ![\n value.inputTokens,\n value.outputTokens,\n value.totalTokens,\n value.cachedInputTokens,\n value.cacheCreationInputTokens,\n ].every(isNonnegativeNumber)\n ) {\n return false;\n }\n return (\n value.details === undefined ||\n (isRecord(value.details) && Object.values(value.details).every(isNonnegativeNumber))\n );\n}\n\nfunction isContextUsage(value: unknown): boolean {\n if (!isRecord(value) || !isRecord(value.model) || !isRecord(value.model.context)) return false;\n const context = value.model.context;\n return (\n hasOnlyKeys(value, [\n \"model\",\n \"usedTokens\",\n \"remainingTokens\",\n \"usedPercent\",\n \"remainingPercent\",\n ]) &&\n hasOnlyKeys(value.model, [\"modelId\", \"context\"]) &&\n typeof value.model.modelId === \"string\" &&\n hasOnlyKeys(context, [\"contextWindow\", \"maxInputTokens\", \"maxOutputTokens\"]) &&\n isNonnegativeNumber(context.contextWindow) &&\n (context.maxInputTokens === undefined || isNonnegativeNumber(context.maxInputTokens)) &&\n (context.maxOutputTokens === undefined || isNonnegativeNumber(context.maxOutputTokens)) &&\n isNonnegativeNumber(value.usedTokens) &&\n isNonnegativeNumber(value.remainingTokens) &&\n isNonnegativeNumber(value.usedPercent) &&\n isNonnegativeNumber(value.remainingPercent)\n );\n}\n\nfunction validateUsageAndContext(event: Record<string, unknown>, original: unknown): void {\n if (event.usage !== undefined && !isUsage(event.usage)) {\n invalid(`${String(event.type)}.usage`, original);\n }\n if (event.contextUsage !== undefined && !isContextUsage(event.contextUsage)) {\n invalid(`${String(event.type)}.contextUsage`, original);\n }\n}\n\nfunction validateMemoryCompactionInfo(value: Record<string, unknown>, original: unknown): void {\n for (const field of [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n ]) {\n if (!isEventId(value[field])) invalid(`memory_compaction.${field}`, original);\n }\n if (!isPositiveEventId(value.attempts)) invalid(\"memory_compaction.attempts\", original);\n if (!isUsage(value.usage)) invalid(\"memory_compaction.usage\", original);\n}\n\nfunction isTrace(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\"observer\", \"traceId\", \"observationId\"]) &&\n typeof value.observer === \"string\" &&\n value.observer.trim().length > 0 &&\n (value.traceId === undefined || typeof value.traceId === \"string\") &&\n (value.observationId === undefined || typeof value.observationId === \"string\")\n );\n}\n\nfunction requireRecord(value: unknown, label: string): Record<string, unknown> {\n if (!isRecord(value)) throw new ClientProtocolError(`${label} must be an object.`, value);\n return value;\n}\n\nfunction requireOnlyKeys(value: Record<string, unknown>, keys: string[], label: string): void {\n for (const key of Object.keys(value)) {\n if (!keys.includes(key)) throw new ClientProtocolError(`${label} has unknown field \"${key}\".`);\n }\n}\n\nfunction requireEventKeys(value: Record<string, unknown>, keys: string[]): void {\n requireOnlyKeys(\n value,\n [\"type\", \"runId\", \"turn\", \"scope\", ...keys],\n `${String(value.type)} event`,\n );\n}\n\nfunction requireStrings(value: Record<string, unknown>, keys: string[], original: unknown): void {\n for (const key of keys) {\n if (typeof value[key] !== \"string\") invalid(`${String(value.type)}.${key}`, original);\n }\n}\n\nfunction requireOptionalStrings(\n value: Record<string, unknown>,\n keys: string[],\n original: unknown,\n): void {\n for (const key of keys) {\n if (value[key] !== undefined && typeof value[key] !== \"string\") {\n invalid(`${String(value.type)}.${key}`, original);\n }\n }\n}\n\nfunction requireOneOf(value: unknown, allowed: string[], label: string, original: unknown): void {\n if (typeof value !== \"string\" || !allowed.includes(value)) invalid(label, original);\n}\n\nfunction invalid(label: string, value: unknown): never {\n throw new ClientProtocolError(`Invalid ${label}.`, value);\n}\n\nfunction isEventId(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction isPositiveEventId(value: unknown): value is number {\n return isEventId(value) && value > 0;\n}\n\nfunction isNonnegativeNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction hasOnlyKeys(value: Record<string, unknown>, keys: string[]): boolean {\n return Object.keys(value).every((key) => keys.includes(key));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type {\n AgentInteractionRequest,\n AgentInteractionResponse,\n} from \"@anvia/core/agent/interactions\";\nimport type {\n CompletionSource,\n ContextUsage,\n ImageDetail,\n JsonObject,\n JsonValue,\n Message,\n ProviderToolCall,\n ReasoningContentType,\n ReasoningDetail,\n ToolResultContentPart,\n Usage,\n} from \"@anvia/core/completion\";\nimport type { GuardrailDecisionRecord } from \"@anvia/core/guardrails\";\nimport type { MemoryCompactionInfo } from \"@anvia/core/memory\";\n\nexport const CLIENT_STREAM_PROTOCOL = \"anvia.client.v3\" as const;\n\nexport type ClientDataMap = Record<string, JsonValue>;\nexport type ClientMetadata = JsonObject;\n\nexport type ClientDataSchema<T extends JsonValue = JsonValue> = {\n safeParse(value: unknown): { success: true; data: T } | { success: false; error?: unknown };\n};\n\nexport type ClientDataSchemas<TData extends ClientDataMap> = {\n [Name in keyof TData]: ClientDataSchema<TData[Name]>;\n};\n\nexport type ClientMetadataSchema<TMetadata extends JsonObject = JsonObject> =\n ClientDataSchema<TMetadata>;\n\nexport type UIMessageRole = \"system\" | \"user\" | \"assistant\" | \"tool\";\n\nexport type ClientStreamError = {\n name?: string;\n message: string;\n code?: string;\n retryable?: boolean;\n details?: JsonValue;\n};\n\nexport type UIError = ClientStreamError;\n\nexport type UIMessageGeneration = {\n runId?: string;\n status?: \"completed\" | \"blocked\" | \"suspended\" | \"cancelled\" | \"error\";\n usage?: Usage;\n contextUsage?: ContextUsage;\n trace?: { observer: string; traceId?: string; observationId?: string };\n memoryCompaction?: MemoryCompactionInfo;\n};\n\nexport type UIMessage<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = Readonly<{\n id: string;\n role: UIMessageRole;\n parts: readonly UIMessagePart<Data>[];\n modelMessageId?: string;\n metadata?: Metadata;\n generation?: UIMessageGeneration;\n}>;\n\nexport type UIAttachment = {\n id: string;\n type: \"image\" | \"document\" | \"file\";\n name?: string;\n mediaType?: string;\n url?: string;\n data?: string;\n text?: string;\n detail?: ImageDetail;\n metadata?: JsonValue;\n};\n\nexport type CreateUIAttachment = Omit<UIAttachment, \"id\"> & {\n id?: string;\n};\n\ntype UIDataPart<Data extends ClientDataMap> = {\n [Name in keyof Data & string]: {\n id: string;\n type: \"data\";\n name: Name;\n data: Data[Name];\n };\n}[keyof Data & string];\n\ntype UIToolMessagePartBase = {\n id: string;\n type: \"tool\";\n toolName: string;\n toolCallId: string;\n callId?: string;\n internalCallId?: string;\n turn?: number;\n signature?: string;\n};\n\nexport type UIToolMessagePart =\n | (UIToolMessagePartBase & {\n state: \"input-streaming\";\n input: string;\n })\n | (UIToolMessagePartBase & {\n state: \"input-available\";\n input: JsonValue;\n })\n | (UIToolMessagePartBase & {\n state: \"output-available\";\n input: JsonValue;\n output: JsonValue;\n resultContent?: readonly ToolResultContentPart[];\n })\n | (UIToolMessagePartBase & {\n state: \"error\";\n input: JsonValue;\n error: UIError;\n });\n\nexport type UIMessagePart<Data extends ClientDataMap = ClientDataMap> =\n | {\n id: string;\n type: \"text\";\n text: string;\n signature?: string;\n }\n | {\n id: string;\n type: \"reasoning\";\n text: string;\n reasoningId?: string;\n content?: readonly ReasoningDetail[];\n }\n | UIToolMessagePart\n | {\n id: string;\n type: \"source\";\n source: CompletionSource;\n }\n | UIDataPart<Data>\n | {\n id: string;\n type: \"attachment\";\n attachment: UIAttachment;\n }\n | {\n id: string;\n type: \"error\";\n error: UIError;\n };\n\nexport type ClientStreamCursor = {\n streamId: string;\n after: number;\n};\n\nexport type ClientStreamRequest<Metadata extends JsonObject = JsonObject> =\n | {\n type: \"messages\";\n messages: readonly Message[];\n metadata?: Metadata;\n resume?: ClientStreamCursor;\n }\n | {\n type: \"interaction_response\";\n interactionId: string;\n response: AgentInteractionResponse;\n metadata?: Metadata;\n resume?: ClientStreamCursor;\n };\n\nexport type ClientCompletionRequest<Metadata extends JsonObject = JsonObject> = {\n prompt: string;\n metadata?: Metadata;\n};\n\nexport type ClientStreamScope = {\n agentId?: string;\n agentName?: string;\n parentRunId?: string;\n parentToolName?: string;\n parentToolCallId?: string;\n parentInternalToolCallId?: string;\n};\n\nexport type ClientInteraction = Readonly<{\n request: AgentInteractionRequest;\n runId: string;\n status: \"pending\" | \"responded\" | \"cancelled\";\n}>;\n\ntype ClientStreamEventBase = {\n runId: string;\n turn?: number;\n scope?: ClientStreamScope;\n};\n\ntype ClientDataEvent<TData extends ClientDataMap> = {\n [Name in keyof TData & string]: {\n type: \"data\";\n name: Name;\n data: TData[Name];\n transient?: boolean;\n };\n}[keyof TData & string];\n\ntype ClientStandardStreamEvent<Metadata extends JsonObject, Data extends ClientDataMap> =\n | {\n type: \"run_start\";\n source: \"completion\" | \"agent\";\n metadata?: Metadata;\n }\n | { type: \"turn_start\" }\n | {\n type: \"generation_start\";\n model?: { provider: string; modelId: string };\n }\n | {\n type: \"message_start\";\n messageId: string;\n role: \"assistant\";\n metadata?: Metadata;\n }\n | {\n type: \"text_start\";\n messageId: string;\n partId: string;\n }\n | {\n type: \"text_delta\";\n messageId: string;\n partId: string;\n delta: string;\n }\n | {\n type: \"text_end\";\n messageId: string;\n partId: string;\n text?: string;\n signature?: string;\n }\n | {\n type: \"reasoning_start\";\n messageId: string;\n partId: string;\n reasoningId?: string;\n }\n | {\n type: \"reasoning_delta\";\n messageId: string;\n partId: string;\n delta: string;\n contentType?: ReasoningContentType;\n signature?: string;\n }\n | {\n type: \"reasoning_end\";\n messageId: string;\n partId: string;\n text?: string;\n content?: readonly ReasoningDetail[];\n }\n | {\n type: \"tool_call_start\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n toolName?: string;\n }\n | {\n type: \"tool_call_delta\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n toolName?: string;\n delta: string;\n mode: \"append\" | \"replace\";\n signature?: string;\n }\n | {\n type: \"tool_call_end\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n toolName: string;\n input: JsonValue;\n signature?: string;\n }\n | {\n type: \"tool_result\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n internalCallId?: string;\n toolName: string;\n input: JsonValue;\n result:\n | { status: \"success\"; output: JsonValue; content?: readonly ToolResultContentPart[] }\n | { status: \"error\"; error: ClientStreamError };\n }\n | { type: \"source\"; messageId: string; partId: string; source: CompletionSource }\n | {\n type: \"attachment\";\n messageId: string;\n partId: string;\n attachment: UIAttachment;\n }\n | { type: \"provider_tool_call\"; toolCall: ProviderToolCall }\n | { type: \"interaction\"; interaction: AgentInteractionRequest }\n | { type: \"guardrail_decision\"; decision: GuardrailDecisionRecord }\n | ({ type: \"memory_compaction\" } & MemoryCompactionInfo)\n | {\n type: \"message_end\";\n messageId: string;\n modelMessageId?: string;\n /** Authoritative model-authored parts after provider normalization and guardrails. */\n parts?: readonly UIMessagePart<Data>[];\n usage?: Usage;\n contextUsage?: ContextUsage;\n metadata?: Metadata;\n }\n | {\n type: \"turn_end\";\n usage?: Usage;\n contextUsage?: ContextUsage;\n firstDeltaMs?: number;\n }\n | {\n type: \"run_end\";\n status: \"completed\" | \"blocked\" | \"suspended\" | \"cancelled\" | \"error\";\n text?: string;\n output?: JsonValue;\n usage?: Usage;\n contextUsage?: ContextUsage;\n trace?: { observer: string; traceId?: string; observationId?: string };\n memoryCompaction?: MemoryCompactionInfo;\n metadata?: Metadata;\n }\n | { type: \"error\"; error: ClientStreamError; usage?: Usage };\n\nexport type ClientStreamEvent<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = ClientStreamEventBase & (ClientStandardStreamEvent<Metadata, Data> | ClientDataEvent<Data>);\n\nexport type ClientStream<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = AsyncIterable<ClientStreamEvent<Metadata, Data>>;\n\nexport type ClientStreamFrame<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> =\n | {\n type: \"stream_start\";\n protocol: typeof CLIENT_STREAM_PROTOCOL;\n streamId: string;\n eventId: 0;\n resumable: boolean;\n }\n | {\n type: \"stream_event\";\n streamId: string;\n eventId: number;\n event: ClientStreamEvent<Metadata, Data>;\n }\n | {\n type: \"stream_end\";\n streamId: string;\n eventId: number;\n status: \"completed\" | \"error\" | \"missing\";\n };\n\nexport type ClientTransportSendOptions<TRequest> = {\n request: TRequest;\n abortSignal?: AbortSignal;\n headers?: HeadersInit;\n resume?: ClientStreamCursor;\n};\n\nexport type ClientTransport<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n> = {\n readonly _types?: { metadata: Metadata; data: Data };\n send(\n options: ClientTransportSendOptions<TRequest>,\n ): AsyncIterable<ClientStreamFrame<Metadata, Data>>;\n};\n\nexport type ClientErrorMapper = (error: unknown) => ClientStreamError;\n\nexport type ClientOutputMapper = (output: unknown) => JsonValue | undefined;\n","import type { JsonObject } from \"@anvia/core/completion\";\nimport { createClientId } from \"./messages\";\nimport { ClientProtocolError, parseClientStreamEvent, parseClientStreamFrame } from \"./protocol\";\nimport type { CreateFetchEventTransportOptions } from \"./transport/event-transport\";\nimport { createFetchEventTransport } from \"./transport/event-transport\";\nimport {\n CLIENT_STREAM_PROTOCOL,\n type ClientDataMap,\n type ClientDataSchemas,\n type ClientMetadataSchema,\n type ClientStream,\n type ClientStreamCursor,\n type ClientStreamFrame,\n type ClientStreamRequest,\n type ClientTransport,\n} from \"./types\";\n\nexport type CreateHttpClientTransportOptions<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n> = Omit<\n CreateFetchEventTransportOptions<TRequest, ClientStreamFrame<Metadata, Data>>,\n \"mapEvent\" | \"validateResponse\"\n> & {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n};\n\nexport function createHttpClientTransport<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n>(\n options: CreateHttpClientTransportOptions<TRequest, Data, Metadata>,\n): ClientTransport<TRequest, Data, Metadata> {\n const transport = createFetchEventTransport<TRequest, ClientStreamFrame<Metadata, Data>>({\n ...options,\n mapEvent: (event) => parseClientStreamFrame(event, protocolOptions(options)),\n validateResponse(response) {\n if (response.headers.get(\"x-anvia-stream-protocol\") !== CLIENT_STREAM_PROTOCOL) {\n throw new ClientProtocolError(\n `Expected x-anvia-stream-protocol: ${CLIENT_STREAM_PROTOCOL}.`,\n );\n }\n },\n });\n\n return {\n async *send(sendOptions) {\n const resume = sendOptions.resume ?? resumeCursorFromRequest(sendOptions.request);\n yield* validateFrameSequence(transport.send(sendOptions), resume);\n },\n };\n}\n\nexport type CreateDirectClientTransportOptions<\n TRequest,\n Data extends ClientDataMap,\n Metadata extends JsonObject,\n> = {\n handler(options: {\n request: TRequest;\n abortSignal?: AbortSignal;\n headers?: HeadersInit;\n }): ClientStream<Metadata, Data> | Promise<ClientStream<Metadata, Data>>;\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n};\n\nexport function createDirectClientTransport<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n>(\n options: CreateDirectClientTransportOptions<TRequest, Data, Metadata>,\n): ClientTransport<TRequest, Data, Metadata> {\n return {\n async *send(sendOptions) {\n const resume = sendOptions.resume ?? resumeCursorFromRequest(sendOptions.request);\n if (resume !== undefined) {\n throw new ClientProtocolError(\"Direct client transports do not support resume cursors.\");\n }\n const handlerOptions: Parameters<typeof options.handler>[0] = {\n request: sendOptions.request,\n };\n if (sendOptions.abortSignal !== undefined) {\n handlerOptions.abortSignal = sendOptions.abortSignal;\n }\n if (sendOptions.headers !== undefined) handlerOptions.headers = sendOptions.headers;\n const events = await options.handler(handlerOptions);\n const iterator = events[Symbol.asyncIterator]();\n const streamId = createClientId(\"stream\");\n let eventId = 0;\n yield {\n type: \"stream_start\",\n protocol: CLIENT_STREAM_PROTOCOL,\n streamId,\n eventId: 0,\n resumable: false,\n };\n let status: \"completed\" | \"error\" = \"completed\";\n try {\n let closePromise: Promise<unknown> | undefined;\n const close = () => {\n closePromise ??= Promise.resolve(iterator.return?.());\n return closePromise;\n };\n const onAbort = () => {\n void close();\n };\n sendOptions.abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n while (!sendOptions.abortSignal?.aborted) {\n const next = await iterator.next();\n if (next.done) break;\n const event = parseClientStreamEvent<Metadata, Data>(\n next.value,\n protocolOptions(options),\n );\n eventId += 1;\n yield { type: \"stream_event\", streamId, eventId, event };\n }\n } finally {\n sendOptions.abortSignal?.removeEventListener(\"abort\", onAbort);\n await close();\n }\n } catch {\n status = \"error\";\n }\n yield { type: \"stream_end\", streamId, eventId, status };\n },\n };\n}\n\nasync function* validateFrameSequence<Metadata extends JsonObject, Data extends ClientDataMap>(\n frames: AsyncIterable<ClientStreamFrame<Metadata, Data>>,\n resume: ClientStreamCursor | undefined,\n): AsyncIterable<ClientStreamFrame<Metadata, Data>> {\n let streamId: string | undefined;\n let lastEventId = resume?.after ?? 0;\n let ended = false;\n for await (const frame of frames) {\n if (ended) throw new ClientProtocolError(\"Received a frame after stream_end.\", frame);\n if (streamId === undefined) {\n if (frame.type !== \"stream_start\") {\n throw new ClientProtocolError(\"The first client stream frame must be stream_start.\", frame);\n }\n streamId = frame.streamId;\n if (resume !== undefined && frame.streamId !== resume.streamId) {\n throw new ClientProtocolError(\"Resume response streamId does not match the cursor.\", frame);\n }\n if (resume !== undefined && !frame.resumable) {\n throw new ClientProtocolError(\"Resume response must identify a resumable stream.\", frame);\n }\n } else if (frame.type === \"stream_start\") {\n throw new ClientProtocolError(\"Received more than one stream_start frame.\", frame);\n } else if (frame.streamId !== streamId) {\n throw new ClientProtocolError(\"Client streamId changed during the response.\", frame);\n }\n if (frame.type === \"stream_event\") {\n if (frame.eventId !== lastEventId + 1) {\n throw new ClientProtocolError(\"Client stream event IDs must be contiguous.\", frame);\n }\n lastEventId = frame.eventId;\n } else if (frame.type === \"stream_end\") {\n if (frame.eventId !== lastEventId) {\n throw new ClientProtocolError(\"stream_end has an invalid eventId.\", frame);\n }\n ended = true;\n }\n yield frame;\n }\n if (streamId === undefined || !ended) {\n throw new ClientProtocolError(\"Client stream ended without a complete frame sequence.\");\n }\n}\n\nfunction protocolOptions<Metadata extends JsonObject, Data extends ClientDataMap>(options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n}): {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n} {\n const result: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {};\n if (options.metadataSchema !== undefined) result.metadataSchema = options.metadataSchema;\n if (options.dataSchemas !== undefined) result.dataSchemas = options.dataSchemas;\n return result;\n}\n\nfunction resumeCursorFromRequest(value: unknown): ClientStreamCursor | undefined {\n if (typeof value !== \"object\" || value === null || !(\"resume\" in value)) return undefined;\n const resume = value.resume;\n if (typeof resume !== \"object\" || resume === null) return undefined;\n if (!(\"streamId\" in resume) || !(\"after\" in resume)) return undefined;\n return typeof resume.streamId === \"string\" &&\n typeof resume.after === \"number\" &&\n Number.isSafeInteger(resume.after) &&\n resume.after >= 0\n ? { streamId: resume.streamId, after: resume.after }\n : undefined;\n}\n","export type {\n AgentClientStreamContext,\n AgentClientStreamOptions,\n ClientStreamAdapterOptions,\n CompletionClientStreamOptions,\n} from \"./adapters\";\nexport {\n agentToClientStream,\n completionToClientStream,\n customAgentEventsToClientStream,\n} from \"./adapters\";\nexport type {\n CreateDirectClientTransportOptions,\n CreateHttpClientTransportOptions,\n} from \"./client-transport\";\nexport { createDirectClientTransport, createHttpClientTransport } from \"./client-transport\";\nexport { createClientId, messagesToUIMessages, uiMessagesToMessages } from \"./messages\";\nexport { isJsonValue } from \"@anvia/core/completion\";\nexport {\n ClientProtocolError,\n maskedClientError,\n normalizeClientError,\n parseClientStreamEvent,\n parseClientStreamFrame,\n parseClientStreamRequest,\n parseUIMessage,\n parseUIMessages,\n} from \"./protocol\";\nexport { applyClientStreamEvent, assistantText, messageText } from \"./reducer\";\nexport type {\n ClientCompletionRequest,\n ClientDataMap,\n ClientDataSchema,\n ClientDataSchemas,\n ClientErrorMapper,\n ClientInteraction,\n ClientMetadata,\n ClientMetadataSchema,\n ClientOutputMapper,\n ClientStream,\n ClientStreamCursor,\n ClientStreamError,\n ClientStreamEvent,\n ClientStreamFrame,\n ClientStreamRequest,\n ClientStreamScope,\n ClientTransport,\n ClientTransportSendOptions,\n CreateUIAttachment,\n UIAttachment,\n UIError,\n UIMessage,\n UIMessageGeneration,\n UIMessagePart,\n UIMessageRole,\n UIToolMessagePart,\n} from \"./types\";\nexport { CLIENT_STREAM_PROTOCOL } from \"./types\";\n","import { isJsonValue, type JsonObject } from \"@anvia/core/completion\";\nimport { createClientId } from \"./messages\";\nimport type {\n ClientDataMap,\n ClientStreamEvent,\n UIMessage,\n UIMessageGeneration,\n UIMessagePart,\n UIToolMessagePart,\n} from \"./types\";\n\nexport function applyClientStreamEvent<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n event: ClientStreamEvent<Metadata, Data>,\n): readonly UIMessage<Metadata, Data>[] {\n if (event.scope?.parentToolCallId !== undefined) {\n return messages;\n }\n\n switch (event.type) {\n case \"message_start\": {\n if (messages.some((message) => message.id === event.messageId)) return messages;\n let message: UIMessage<Metadata, Data> = {\n id: event.messageId,\n role: event.role,\n parts: [],\n };\n if (event.metadata !== undefined) message = { ...message, metadata: event.metadata };\n return [...messages, message];\n }\n case \"text_start\":\n return upsertPart(messages, event.messageId, {\n id: event.partId,\n type: \"text\",\n text: \"\",\n });\n case \"text_delta\":\n return updatePart(messages, event.messageId, event.partId, (part) => ({\n id: event.partId,\n type: \"text\",\n text: part?.type === \"text\" ? `${part.text}${event.delta}` : event.delta,\n }));\n case \"text_end\":\n return updatePart(messages, event.messageId, event.partId, (part) => {\n const next: Extract<UIMessagePart, { type: \"text\" }> = {\n id: event.partId,\n type: \"text\",\n text: event.text ?? (part?.type === \"text\" ? part.text : \"\"),\n };\n if (event.signature !== undefined) next.signature = event.signature;\n return next;\n });\n case \"reasoning_start\": {\n const reasoning: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: event.partId,\n type: \"reasoning\",\n text: \"\",\n };\n if (event.reasoningId !== undefined) reasoning.reasoningId = event.reasoningId;\n return upsertPart(messages, event.messageId, reasoning);\n }\n case \"reasoning_delta\":\n return updatePart(messages, event.messageId, event.partId, (part) => {\n const reasoning: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: event.partId,\n type: \"reasoning\",\n text: part?.type === \"reasoning\" ? `${part.text}${event.delta}` : event.delta,\n };\n if (part?.type === \"reasoning\" && part.reasoningId !== undefined) {\n reasoning.reasoningId = part.reasoningId;\n }\n const content = appendReasoningContent(\n part?.type === \"reasoning\" ? part.content : undefined,\n event,\n );\n if (content !== undefined) reasoning.content = content;\n return reasoning;\n });\n case \"reasoning_end\":\n return updatePart(messages, event.messageId, event.partId, (part) => {\n const reasoning: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: event.partId,\n type: \"reasoning\",\n text: event.text ?? (part?.type === \"reasoning\" ? part.text : \"\"),\n };\n if (part?.type === \"reasoning\" && part.reasoningId !== undefined) {\n reasoning.reasoningId = part.reasoningId;\n }\n if (event.content !== undefined) {\n reasoning.content = event.content;\n } else if (part?.type === \"reasoning\" && part.content !== undefined) {\n reasoning.content = part.content;\n }\n return reasoning;\n });\n case \"tool_call_start\": {\n const part: UIToolMessagePart = {\n id: event.partId,\n type: \"tool\",\n toolName: event.toolName ?? \"\",\n toolCallId: event.toolCallId,\n state: \"input-streaming\",\n input: \"\",\n };\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.turn !== undefined) part.turn = event.turn;\n return upsertPart(messages, event.messageId, part);\n }\n case \"tool_call_delta\":\n return updatePart(messages, event.messageId, event.partId, (current) => {\n const part =\n current?.type === \"tool\"\n ? toolPartBase(current)\n : {\n id: event.partId,\n type: \"tool\" as const,\n toolName: event.toolName ?? \"\",\n toolCallId: event.toolCallId,\n };\n const previous =\n current?.type === \"tool\" && typeof current.input === \"string\" ? current.input : \"\";\n if (event.toolName !== undefined) part.toolName = event.toolName;\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.signature !== undefined) part.signature = event.signature;\n if (event.turn !== undefined) part.turn = event.turn;\n return {\n ...part,\n state: \"input-streaming\",\n input: event.mode === \"replace\" ? event.delta : `${previous}${event.delta}`,\n };\n });\n case \"tool_call_end\": {\n const part: UIToolMessagePart = {\n id: event.partId,\n type: \"tool\",\n toolName: event.toolName,\n toolCallId: event.toolCallId,\n state: \"input-available\",\n input: event.input,\n };\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.turn !== undefined) part.turn = event.turn;\n if (event.signature !== undefined) part.signature = event.signature;\n return upsertPart(messages, event.messageId, part);\n }\n case \"tool_result\":\n return updatePart(messages, event.messageId, event.partId, (current) => {\n const part =\n current?.type === \"tool\"\n ? toolPartBase(current)\n : {\n id: event.partId,\n type: \"tool\" as const,\n toolName: event.toolName,\n toolCallId: event.toolCallId,\n };\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.internalCallId !== undefined) part.internalCallId = event.internalCallId;\n if (event.turn !== undefined) part.turn = event.turn;\n if (event.result.status === \"error\") {\n return {\n ...part,\n state: \"error\",\n input: event.input,\n error: event.result.error,\n };\n }\n const completed: Extract<UIToolMessagePart, { state: \"output-available\" }> = {\n ...part,\n state: \"output-available\",\n input: event.input,\n output: event.result.output,\n };\n if (event.result.content !== undefined) completed.resultContent = event.result.content;\n return completed;\n });\n case \"source\":\n return upsertPart(messages, event.messageId, {\n id: event.partId,\n type: \"source\",\n source: event.source,\n });\n case \"attachment\":\n return upsertPart(messages, event.messageId, {\n id: event.partId,\n type: \"attachment\",\n attachment: event.attachment,\n });\n case \"data\":\n if (event.transient === true) return messages;\n return appendToLastAssistant(messages, {\n id: createClientId(\"data\"),\n type: \"data\",\n name: event.name,\n data: event.data,\n } as UIMessagePart<Data>);\n case \"message_end\":\n return messages.map((message) => {\n if (message.id !== event.messageId) return message;\n const metadata = mergeMetadata(message.metadata, event.metadata);\n const generationUpdate: UIMessageGeneration = {\n runId: event.runId,\n };\n if (event.usage !== undefined) generationUpdate.usage = event.usage;\n if (event.contextUsage !== undefined) {\n generationUpdate.contextUsage = event.contextUsage;\n }\n const generation = mergeGeneration(message.generation, generationUpdate);\n let updated: UIMessage<Metadata, Data> = {\n ...message,\n generation,\n };\n if (event.parts !== undefined) {\n updated = { ...updated, parts: reconcileFinalParts(message.parts, event.parts) };\n }\n if (event.modelMessageId !== undefined) {\n updated = { ...updated, modelMessageId: event.modelMessageId };\n }\n if (metadata !== undefined) updated = { ...updated, metadata };\n return updated;\n });\n case \"run_end\": {\n const generation: UIMessageGeneration = {\n runId: event.runId,\n status: event.status,\n };\n if (event.contextUsage !== undefined) generation.contextUsage = event.contextUsage;\n if (event.trace !== undefined) generation.trace = event.trace;\n if (event.memoryCompaction !== undefined) {\n generation.memoryCompaction = event.memoryCompaction;\n }\n return updateLastAssistantGeneration(messages, generation);\n }\n case \"error\":\n return appendToLastAssistant(messages, {\n id: createClientId(\"error\"),\n type: \"error\",\n error: event.error,\n });\n default:\n return messages;\n }\n}\n\nfunction toolPartBase(\n part: UIToolMessagePart,\n): Omit<UIToolMessagePart, \"state\" | \"input\" | \"output\" | \"resultContent\" | \"error\"> {\n const base = {\n id: part.id,\n type: part.type,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n };\n if (part.callId !== undefined) Object.assign(base, { callId: part.callId });\n if (part.internalCallId !== undefined) {\n Object.assign(base, { internalCallId: part.internalCallId });\n }\n if (part.turn !== undefined) Object.assign(base, { turn: part.turn });\n if (part.signature !== undefined) Object.assign(base, { signature: part.signature });\n return base;\n}\n\nfunction reconcileFinalParts<Data extends ClientDataMap>(\n current: readonly UIMessagePart<Data>[],\n final: readonly UIMessagePart<Data>[],\n): UIMessagePart<Data>[] {\n const clientOnly = current.filter(\n (part) => part.type === \"source\" || part.type === \"data\" || part.type === \"error\",\n );\n return [...final, ...clientOnly];\n}\n\nfunction appendReasoningContent(\n current: Extract<UIMessagePart, { type: \"reasoning\" }>[\"content\"],\n event: Extract<ClientStreamEvent, { type: \"reasoning_delta\" }>,\n): Extract<UIMessagePart, { type: \"reasoning\" }>[\"content\"] {\n if (event.contentType === undefined && event.signature === undefined) return current;\n const type = event.contentType ?? \"text\";\n const next = [...(current ?? [])];\n const last = next.at(-1);\n if (type === \"text\") {\n if (last?.type === \"text\" && last.signature === event.signature) {\n next[next.length - 1] = { ...last, text: `${last.text}${event.delta}` };\n } else {\n let detail: Extract<\n NonNullable<Extract<UIMessagePart, { type: \"reasoning\" }>[\"content\"]>[number],\n { type: \"text\" }\n > = {\n type,\n text: event.delta,\n };\n if (event.signature !== undefined) detail = { ...detail, signature: event.signature };\n next.push(detail);\n }\n return next;\n }\n if (type === \"summary\") {\n if (last?.type === \"summary\") {\n next[next.length - 1] = { ...last, text: `${last.text}${event.delta}` };\n } else next.push({ type, text: event.delta });\n return next;\n }\n if (type === \"encrypted\") {\n if (last?.type === \"encrypted\") {\n next[next.length - 1] = { ...last, data: `${last.data}${event.delta}` };\n } else next.push({ type, data: event.delta });\n return next;\n }\n if (last?.type === \"redacted\") {\n next[next.length - 1] = { ...last, data: `${last.data}${event.delta}` };\n } else next.push({ type, data: event.delta });\n return next;\n}\n\nexport function messageText<Metadata extends JsonObject, Data extends ClientDataMap>(\n message: UIMessage<Metadata, Data>,\n): string {\n return message.parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n}\n\nexport function assistantText<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n): string {\n const assistant = [...messages].reverse().find((message) => message.role === \"assistant\");\n return assistant === undefined ? \"\" : messageText(assistant);\n}\n\nfunction upsertPart<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n messageId: string,\n part: UIMessagePart<Data>,\n): readonly UIMessage<Metadata, Data>[] {\n return updatePart(messages, messageId, part.id, () => part);\n}\n\nfunction updatePart<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n messageId: string,\n partId: string,\n update: (part: UIMessagePart<Data> | undefined) => UIMessagePart<Data>,\n): readonly UIMessage<Metadata, Data>[] {\n const current = ensureAssistant(messages, messageId);\n return current.map((message) => {\n if (message.id !== messageId) return message;\n const index = message.parts.findIndex((part) => part.id === partId);\n if (index === -1) return { ...message, parts: [...message.parts, update(undefined)] };\n const parts = [...message.parts];\n parts[index] = update(parts[index]);\n return { ...message, parts };\n });\n}\n\nfunction ensureAssistant<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n messageId: string,\n): readonly UIMessage<Metadata, Data>[] {\n return messages.some((message) => message.id === messageId)\n ? messages\n : [...messages, { id: messageId, role: \"assistant\", parts: [] }];\n}\n\nfunction appendToLastAssistant<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n part: UIMessagePart<Data>,\n): readonly UIMessage<Metadata, Data>[] {\n const index = findLastIndex(messages, (message) => message.role === \"assistant\");\n if (index === -1) {\n return [...messages, { id: createClientId(\"msg\"), role: \"assistant\", parts: [part] }];\n }\n const next = [...messages];\n const message = next[index] as UIMessage<Metadata, Data>;\n next[index] = { ...message, parts: [...message.parts, part] };\n return next;\n}\n\nfunction updateLastAssistantGeneration<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n value: UIMessageGeneration,\n): readonly UIMessage<Metadata, Data>[] {\n const index = findLastIndex(messages, (message) => message.role === \"assistant\");\n if (index === -1) return messages;\n const next = [...messages];\n const message = next[index] as UIMessage<Metadata, Data>;\n next[index] = { ...message, generation: mergeGeneration(message.generation, value) };\n return next;\n}\n\nfunction mergeMetadata<Metadata extends JsonObject>(\n current: Metadata | undefined,\n provided: Metadata | undefined,\n): Metadata | undefined {\n if (provided === undefined) return current;\n if (!isRecord(current) || !isRecord(provided)) return provided;\n const next = { ...current, ...provided };\n return isJsonValue(next) ? (next as Metadata) : provided;\n}\n\nfunction mergeGeneration(\n current: UIMessageGeneration | undefined,\n provided: UIMessageGeneration,\n): UIMessageGeneration {\n return {\n ...current,\n ...Object.fromEntries(Object.entries(provided).filter(([, value]) => value !== undefined)),\n };\n}\n\nfunction findLastIndex<T>(items: readonly T[], predicate: (item: T) => boolean): number {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (predicate(items[index] as T)) return index;\n }\n return -1;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":["isJsonValue","content","isJsonValue","isJsonValue","textContent","tool","isJsonValue","isJsonValue","isJsonValue","message","isRecord","isJsonValue"]}
1
+ {"version":3,"sources":["../src/adapters.ts","../src/messages.ts","../src/protocol.ts","../src/types.ts","../src/client-transport.ts","../src/index.ts","../src/reducer.ts"],"sourcesContent":["import type { AgentChildStreamEvent, AgentStreamEvent } from \"@anvia/core/agent\";\nimport {\n type AssistantContentPart,\n type CompletionResponse,\n type CompletionSource,\n type CompletionStreamEvent,\n isJsonValue,\n type JsonObject,\n type JsonValue,\n type ProviderToolCall,\n type ToolCallPart,\n type ToolResultContentPart,\n type ToolResultOutput,\n} from \"@anvia/core/completion\";\nimport { createClientId } from \"./messages\";\nimport { maskedClientError } from \"./protocol\";\nimport type {\n ClientDataMap,\n ClientErrorMapper,\n ClientOutputMapper,\n ClientStream,\n ClientStreamError,\n ClientStreamEvent,\n ClientStreamScope,\n UIAttachment,\n UIMessagePart,\n UIToolMessagePart,\n} from \"./types\";\n\nexport type ClientStreamAdapterOptions<Metadata extends JsonObject = JsonObject> = {\n /** Stable correlation ID for this client-visible run. */\n runId?: string;\n metadata?: Metadata;\n mapError?: ClientErrorMapper;\n mapOutput?: ClientOutputMapper;\n};\n\nexport type CompletionClientStreamOptions<Metadata extends JsonObject = JsonObject> =\n ClientStreamAdapterOptions<Metadata> & {\n model?: { provider: string; modelId: string };\n };\n\nexport type AgentClientStreamContext = {\n runId: string;\n turn?: number;\n scope?: ClientStreamScope;\n};\n\nexport type AgentClientStreamOptions<\n CustomEvent = unknown,\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = ClientStreamAdapterOptions<Metadata> & {\n mapCustomEvent?: (\n event: CustomEvent,\n context: AgentClientStreamContext,\n ) => ClientStreamEvent<Metadata, Data> | readonly ClientStreamEvent<Metadata, Data>[] | undefined;\n};\n\ntype ReasoningState = {\n partId: string;\n reasoningId?: string;\n text: string;\n ended: boolean;\n};\n\ntype ToolState = {\n partId: string;\n toolCallId: string;\n callId?: string;\n internalCallId?: string;\n toolName?: string;\n input: JsonValue;\n signature?: string;\n result?:\n | { status: \"success\"; output: JsonValue; content?: readonly ToolResultContentPart[] }\n | { status: \"error\"; error: ClientStreamError };\n started: boolean;\n ended: boolean;\n};\n\ntype MessageState = {\n runId: string;\n messageId: string;\n turn?: number;\n scope?: ClientStreamScope;\n started: boolean;\n ended: boolean;\n textPartId: string;\n text: string;\n textStarted: boolean;\n textEnded: boolean;\n reasoning: Map<string, ReasoningState>;\n tools: Map<string, ToolState>;\n sourceFingerprints: Set<string>;\n providerToolCallFingerprints: Set<string>;\n modelMessageId?: string;\n};\n\ntype FinalMessageMetadata = Pick<CompletionResponse, \"usage\" | \"contextUsage\"> & {\n sources?: readonly CompletionSource[];\n providerToolCalls?: readonly ProviderToolCall[];\n};\n\ntype AgentAdapterRuntime = {\n runId: string;\n options: AgentClientStreamOptions;\n messages: Map<string, MessageState>;\n startedScopes: Set<string>;\n};\n\ntype WithoutEventBase<T> = T extends unknown ? Omit<T, \"runId\" | \"turn\" | \"scope\"> : never;\ntype ClientEventPayload = WithoutEventBase<ClientStreamEvent>;\ntype ClientEventOf<Type extends ClientEventPayload[\"type\"]> = Extract<\n ClientEventPayload,\n { type: Type }\n>;\n\nexport function completionToClientStream<\n Output = string,\n RawResponse = unknown,\n Metadata extends JsonObject = JsonObject,\n>(\n options: CompletionClientStreamOptions<Metadata> & {\n events: AsyncIterable<CompletionStreamEvent<Output, RawResponse>>;\n },\n): ClientStream<Metadata> {\n const { events } = options;\n const runId = options.runId ?? createClientId(\"run\");\n\n return propagateCancellation(events, (source) => ({\n async *[Symbol.asyncIterator]() {\n const state = createMessageState({ runId });\n const runStart: ClientEventOf<\"run_start\"> = {\n type: \"run_start\",\n source: \"completion\",\n };\n if (options.metadata !== undefined) runStart.metadata = options.metadata;\n yield clientEvent(state, runStart);\n if (options.model !== undefined) {\n yield clientEvent(state, { type: \"generation_start\", model: options.model });\n }\n yield* startMessage(state);\n\n let terminal = false;\n try {\n for await (const event of source) {\n if (terminal) break;\n switch (event.type) {\n case \"text_delta\":\n yield* appendText(state, event.delta);\n break;\n case \"reasoning_delta\":\n yield* appendReasoning(state, event);\n break;\n case \"tool_call_delta\":\n yield* appendToolCall(state, event);\n break;\n case \"tool_call\":\n yield* finishToolCall(state, event.toolCall);\n break;\n case \"source\":\n yield* emitSource(state, event.source);\n break;\n case \"provider_tool_call\":\n yield* emitProviderToolCall(state, event.toolCall);\n break;\n case \"message_id\":\n state.modelMessageId = event.id;\n break;\n case \"final\": {\n const result = event.result;\n if (result.messageId !== undefined) state.modelMessageId = result.messageId;\n const finalMetadata: FinalMessageMetadata = {\n usage: result.usage,\n };\n if (result.contextUsage !== undefined) {\n finalMetadata.contextUsage = result.contextUsage;\n }\n if (result.sources !== undefined) finalMetadata.sources = result.sources;\n if (result.providerToolCalls !== undefined) {\n finalMetadata.providerToolCalls = result.providerToolCalls;\n }\n yield* finishMessage(state, result.content, finalMetadata);\n const output = clientOutput(result.output, options.mapOutput);\n const runEnd: ClientEventOf<\"run_end\"> = {\n type: \"run_end\",\n status: \"completed\",\n text: result.text,\n usage: result.usage,\n };\n if (output !== undefined) runEnd.output = output;\n if (result.contextUsage !== undefined) runEnd.contextUsage = result.contextUsage;\n yield clientEvent(state, runEnd);\n terminal = true;\n break;\n }\n case \"error\":\n yield* finishErroredRun(state, event.error, event.usage, options.mapError);\n terminal = true;\n break;\n }\n }\n\n if (!terminal) {\n yield* finishErroredRun(\n state,\n new Error(\"Completion stream ended without a terminal event.\"),\n undefined,\n options.mapError,\n );\n }\n } catch (error) {\n if (!terminal) yield* finishErroredRun(state, error, undefined, options.mapError);\n }\n },\n })) as ClientStream<Metadata>;\n}\n\nexport function agentToClientStream<\n Output = string,\n RawResponse = unknown,\n Metadata extends JsonObject = JsonObject,\n>(\n options: AgentClientStreamOptions<unknown, Metadata> & {\n events: AsyncIterable<AgentStreamEvent<Output, RawResponse>>;\n },\n): ClientStream<Metadata> {\n const { events } = options;\n const runId = options.runId ?? createClientId(\"run\");\n return propagateCancellation(events, (source) => ({\n async *[Symbol.asyncIterator]() {\n const runtime: AgentAdapterRuntime = {\n runId,\n options,\n messages: new Map(),\n startedScopes: new Set([\"root\"]),\n };\n const runStart: ClientEventOf<\"run_start\"> = {\n type: \"run_start\",\n source: \"agent\",\n };\n if (options.metadata !== undefined) runStart.metadata = options.metadata;\n yield rootEvent(runId, runStart);\n\n let terminal = false;\n try {\n for await (const event of source) {\n if (terminal) break;\n yield* translateAgentEvent(runtime, event, undefined);\n terminal = isRootTerminalAgentEvent(event);\n }\n if (!terminal) {\n const error = mapClientError(\n new Error(\"Agent stream ended without a terminal event.\"),\n options.mapError,\n );\n yield rootEvent(runId, { type: \"error\", error });\n yield rootEvent(runId, { type: \"run_end\", status: \"error\" });\n }\n } catch (error) {\n if (!terminal) {\n yield rootEvent(runId, {\n type: \"error\",\n error: mapClientError(error, options.mapError),\n });\n yield rootEvent(runId, { type: \"run_end\", status: \"error\" });\n }\n }\n },\n })) as ClientStream<Metadata>;\n}\n\nexport function customAgentEventsToClientStream<\n CustomEvent,\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n options: AgentClientStreamOptions<CustomEvent, Metadata, Data> & {\n events: AsyncIterable<AgentStreamEvent<unknown, unknown> | CustomEvent>;\n mapCustomEvent: NonNullable<\n AgentClientStreamOptions<CustomEvent, Metadata, Data>[\"mapCustomEvent\"]\n >;\n },\n): ClientStream<Metadata, Data> {\n return agentToClientStream(\n options as unknown as AgentClientStreamOptions<unknown, Metadata> & {\n events: AsyncIterable<AgentStreamEvent<unknown, unknown>>;\n },\n ) as ClientStream<Metadata, Data>;\n}\n\nasync function* translateAgentEvent(\n runtime: AgentAdapterRuntime,\n event: AgentStreamEvent<unknown, unknown> | AgentChildStreamEvent<unknown, unknown>,\n scope: ClientStreamScope | undefined,\n): AsyncIterable<ClientStreamEvent> {\n if (event.type === \"agent_tool_event\") {\n const childScope: ClientStreamScope = {\n agentId: event.agentId,\n parentRunId: runtime.runId,\n parentToolName: event.toolName,\n parentToolCallId: event.toolCallId ?? event.internalCallId,\n parentInternalToolCallId: event.internalCallId,\n };\n if (event.agentName !== undefined) childScope.agentName = event.agentName;\n const key = scopeKey(childScope);\n if (!runtime.startedScopes.has(key)) {\n runtime.startedScopes.add(key);\n yield rootEvent(runtime.runId, { type: \"run_start\", source: \"agent\" }, childScope);\n }\n yield* translateAgentEvent(runtime, event.event, childScope);\n return;\n }\n\n const turn = \"turn\" in event && typeof event.turn === \"number\" ? event.turn : undefined;\n switch (event.type) {\n case \"memory_compaction\":\n yield scopedEvent(runtime.runId, turn, scope, {\n type: \"memory_compaction\",\n originalMessageCount: event.originalMessageCount,\n compactedMessageCount: event.compactedMessageCount,\n retainedMessageCount: event.retainedMessageCount,\n originalTokenCount: event.originalTokenCount,\n compactedTokenCount: event.compactedTokenCount,\n retainedTokenCount: event.retainedTokenCount,\n resultTokenCount: event.resultTokenCount,\n attempts: event.attempts,\n usage: event.usage,\n });\n return;\n case \"turn_start\":\n yield scopedEvent(runtime.runId, turn, scope, { type: \"turn_start\" });\n return;\n case \"generation_start\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield scopedEvent(runtime.runId, event.turn, scope, {\n type: \"generation_start\",\n model: {\n provider: event.modelInfo.provider,\n modelId: event.modelInfo.modelId,\n },\n });\n yield* startMessage(state);\n return;\n }\n case \"text_delta\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* appendText(state, event.delta);\n return;\n }\n case \"reasoning_delta\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* appendReasoning(state, event);\n return;\n }\n case \"tool_call_delta\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* appendToolCall(state, event);\n return;\n }\n case \"tool_call\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* finishToolCall(state, event.toolCall);\n return;\n }\n case \"source\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n yield* emitSource(state, event.source);\n return;\n }\n case \"provider_tool_call\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* emitProviderToolCall(state, event.toolCall);\n return;\n }\n case \"tool_result\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n const tool = getToolResultState(\n state,\n event.toolName,\n event.toolCallId,\n event.callId,\n event.internalCallId,\n );\n tool.result = clientToolResult(event.output, event.result);\n const resultEvent: ClientEventOf<\"tool_result\"> = {\n type: \"tool_result\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: tool.toolCallId,\n internalCallId: event.internalCallId,\n toolName: event.toolName,\n input: parseJsonOrString(event.args),\n result: tool.result,\n };\n if (tool.callId !== undefined) resultEvent.callId = tool.callId;\n yield clientEvent(state, resultEvent);\n return;\n }\n case \"turn_end\": {\n const state = getAgentMessage(runtime, event.turn, scope);\n yield* startMessage(state);\n if (event.response.messageId !== undefined) state.modelMessageId = event.response.messageId;\n const finalMetadata: FinalMessageMetadata = {\n usage: event.response.usage,\n };\n if (event.response.contextUsage !== undefined) {\n finalMetadata.contextUsage = event.response.contextUsage;\n }\n if (event.response.sources !== undefined) finalMetadata.sources = event.response.sources;\n if (event.response.providerToolCalls !== undefined) {\n finalMetadata.providerToolCalls = event.response.providerToolCalls;\n }\n yield* finishMessage(state, event.response.choice, finalMetadata);\n const turnEnd: ClientEventOf<\"turn_end\"> = {\n type: \"turn_end\",\n usage: event.response.usage,\n };\n if (event.response.contextUsage !== undefined) {\n turnEnd.contextUsage = event.response.contextUsage;\n }\n if (event.firstDeltaMs !== undefined) turnEnd.firstDeltaMs = event.firstDeltaMs;\n yield scopedEvent(runtime.runId, event.turn, scope, turnEnd);\n return;\n }\n case \"guardrail_decision\":\n yield scopedEvent(runtime.runId, event.turn, scope, {\n type: \"guardrail_decision\",\n decision: event.decision,\n });\n return;\n case \"response\":\n case \"interaction\":\n case \"blocked\": {\n const result = event;\n if (result.type === \"interaction\" && scope === undefined) {\n yield scopedEvent(runtime.runId, turn, scope, {\n type: \"interaction\",\n interaction: result.interaction,\n });\n }\n const output =\n result.type === \"response\"\n ? clientOutput(result.output, runtime.options.mapOutput)\n : undefined;\n const runEnd: ClientEventOf<\"run_end\"> = {\n type: \"run_end\",\n status: agentOutcomeStatus(result.type),\n text: result.text,\n usage: result.usage,\n };\n if (output !== undefined) runEnd.output = output;\n if (result.contextUsage !== undefined) runEnd.contextUsage = result.contextUsage;\n if (result.trace !== undefined) runEnd.trace = clientTrace(result.trace);\n if (result.memoryCompaction !== undefined) {\n runEnd.memoryCompaction = result.memoryCompaction;\n }\n if (runtime.options.metadata !== undefined) runEnd.metadata = runtime.options.metadata;\n yield scopedEvent(runtime.runId, turn, scope, runEnd);\n return;\n }\n case \"error\": {\n const error = mapClientError(event.error, runtime.options.mapError);\n yield scopedEvent(runtime.runId, turn, scope, { type: \"error\", error, usage: event.usage });\n yield scopedEvent(runtime.runId, turn, scope, {\n type: \"run_end\",\n status: \"error\",\n usage: event.usage,\n });\n return;\n }\n default: {\n const context: { runId: string; turn?: number; scope?: ClientStreamScope } = {\n runId: runtime.runId,\n };\n if (turn !== undefined) context.turn = turn;\n if (scope !== undefined) context.scope = scope;\n const mapped = runtime.options.mapCustomEvent?.(event as unknown, context);\n if (mapped === undefined) return;\n if (Array.isArray(mapped)) {\n yield* mapped;\n } else {\n yield mapped as ClientStreamEvent;\n }\n }\n }\n}\n\nfunction createMessageState(input: {\n runId: string;\n turn?: number;\n scope?: ClientStreamScope;\n}): MessageState {\n const state: MessageState = {\n runId: input.runId,\n messageId: createClientId(\"msg\"),\n started: false,\n ended: false,\n textPartId: createClientId(\"text\"),\n text: \"\",\n textStarted: false,\n textEnded: false,\n reasoning: new Map(),\n tools: new Map(),\n sourceFingerprints: new Set(),\n providerToolCallFingerprints: new Set(),\n };\n if (input.turn !== undefined) state.turn = input.turn;\n if (input.scope !== undefined) state.scope = input.scope;\n return state;\n}\n\nfunction getAgentMessage(\n runtime: AgentAdapterRuntime,\n turn: number,\n scope: ClientStreamScope | undefined,\n): MessageState {\n const key = `${scopeKey(scope)}:${turn}`;\n const current = runtime.messages.get(key);\n if (current !== undefined) return current;\n const input: { runId: string; turn: number; scope?: ClientStreamScope } = {\n runId: runtime.runId,\n turn,\n };\n if (scope !== undefined) input.scope = scope;\n const created = createMessageState(input);\n runtime.messages.set(key, created);\n return created;\n}\n\nasync function* startMessage(state: MessageState): AsyncIterable<ClientStreamEvent> {\n if (state.started) return;\n state.started = true;\n yield clientEvent(state, {\n type: \"message_start\",\n messageId: state.messageId,\n role: \"assistant\",\n });\n}\n\nasync function* appendText(state: MessageState, delta: string): AsyncIterable<ClientStreamEvent> {\n if (!state.textStarted) {\n state.textStarted = true;\n yield clientEvent(state, {\n type: \"text_start\",\n messageId: state.messageId,\n partId: state.textPartId,\n });\n }\n state.text += delta;\n yield clientEvent(state, {\n type: \"text_delta\",\n messageId: state.messageId,\n partId: state.textPartId,\n delta,\n });\n}\n\nasync function* emitSource(\n state: MessageState,\n source: CompletionSource,\n): AsyncIterable<ClientStreamEvent> {\n const fingerprint = valueFingerprint(source);\n if (state.sourceFingerprints.has(fingerprint)) return;\n state.sourceFingerprints.add(fingerprint);\n yield clientEvent(state, {\n type: \"source\",\n messageId: state.messageId,\n partId: createClientId(\"source\"),\n source,\n });\n}\n\nasync function* emitProviderToolCall(\n state: MessageState,\n toolCall: ProviderToolCall,\n): AsyncIterable<ClientStreamEvent> {\n const fingerprint = valueFingerprint(toolCall);\n if (state.providerToolCallFingerprints.has(fingerprint)) return;\n state.providerToolCallFingerprints.add(fingerprint);\n yield clientEvent(state, { type: \"provider_tool_call\", toolCall });\n}\n\nasync function* appendReasoning(\n state: MessageState,\n event: {\n delta: string;\n id?: string;\n contentType?: \"text\" | \"summary\" | \"encrypted\" | \"redacted\";\n signature?: string;\n },\n): AsyncIterable<ClientStreamEvent> {\n const key = event.id ?? \"default\";\n let reasoning = state.reasoning.get(key);\n if (reasoning === undefined) {\n reasoning = {\n partId: createClientId(\"reasoning\"),\n text: \"\",\n ended: false,\n };\n if (event.id !== undefined) reasoning.reasoningId = event.id;\n state.reasoning.set(key, reasoning);\n const reasoningStart: ClientEventOf<\"reasoning_start\"> = {\n type: \"reasoning_start\",\n messageId: state.messageId,\n partId: reasoning.partId,\n };\n if (event.id !== undefined) reasoningStart.reasoningId = event.id;\n yield clientEvent(state, reasoningStart);\n }\n reasoning.text += event.delta;\n const reasoningDelta: ClientEventOf<\"reasoning_delta\"> = {\n type: \"reasoning_delta\",\n messageId: state.messageId,\n partId: reasoning.partId,\n delta: event.delta,\n };\n if (event.contentType !== undefined) reasoningDelta.contentType = event.contentType;\n if (event.signature !== undefined) reasoningDelta.signature = event.signature;\n yield clientEvent(state, reasoningDelta);\n}\n\nasync function* appendToolCall(\n state: MessageState,\n event: {\n id: string;\n callId?: string;\n name?: string;\n argumentsDelta?: string;\n argumentsMode?: \"append\" | \"replace\";\n signature?: string;\n },\n): AsyncIterable<ClientStreamEvent> {\n const tool = getToolState(state, event.id, event.name);\n if (!tool.started) {\n tool.started = true;\n const toolCallStart: ClientEventOf<\"tool_call_start\"> = {\n type: \"tool_call_start\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: event.id,\n };\n if (event.callId !== undefined) toolCallStart.callId = event.callId;\n if (event.name !== undefined) toolCallStart.toolName = event.name;\n yield clientEvent(state, toolCallStart);\n }\n if (event.callId !== undefined) tool.callId = event.callId;\n if (event.name !== undefined) tool.toolName = event.name;\n if (event.signature !== undefined) tool.signature = event.signature;\n if (event.argumentsDelta === undefined) return;\n const mode = event.argumentsMode ?? \"append\";\n const prior = typeof tool.input === \"string\" ? tool.input : \"\";\n tool.input = mode === \"replace\" ? event.argumentsDelta : `${prior}${event.argumentsDelta}`;\n const toolCallDelta: ClientEventOf<\"tool_call_delta\"> = {\n type: \"tool_call_delta\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: event.id,\n delta: event.argumentsDelta,\n mode,\n };\n if (event.callId !== undefined) toolCallDelta.callId = event.callId;\n if (event.name !== undefined) toolCallDelta.toolName = event.name;\n if (event.signature !== undefined) toolCallDelta.signature = event.signature;\n yield clientEvent(state, toolCallDelta);\n}\n\nasync function* finishToolCall(\n state: MessageState,\n toolCall: ToolCallPart,\n): AsyncIterable<ClientStreamEvent> {\n const tool = getToolState(state, toolCall.toolCallId, toolCall.toolName);\n const wasEnded = tool.ended;\n if (!tool.started) {\n tool.started = true;\n const toolCallStart: ClientEventOf<\"tool_call_start\"> = {\n type: \"tool_call_start\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n };\n if (toolCall.callId !== undefined) toolCallStart.callId = toolCall.callId;\n yield clientEvent(state, toolCallStart);\n }\n if (toolCall.callId === undefined) delete tool.callId;\n else tool.callId = toolCall.callId;\n tool.toolName = toolCall.toolName;\n tool.input = toolCall.input;\n if (toolCall.signature === undefined) delete tool.signature;\n else tool.signature = toolCall.signature;\n if (wasEnded) return;\n tool.ended = true;\n const toolCallEnd: ClientEventOf<\"tool_call_end\"> = {\n type: \"tool_call_end\",\n messageId: state.messageId,\n partId: tool.partId,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input,\n };\n if (toolCall.callId !== undefined) toolCallEnd.callId = toolCall.callId;\n if (toolCall.signature !== undefined) toolCallEnd.signature = toolCall.signature;\n yield clientEvent(state, toolCallEnd);\n}\n\nasync function* finishMessage(\n state: MessageState,\n content: readonly AssistantContentPart[],\n metadata: FinalMessageMetadata,\n): AsyncIterable<ClientStreamEvent> {\n if (state.ended) return;\n const textContent = content.filter(\n (part): part is Extract<AssistantContentPart, { type: \"text\" }> => part.type === \"text\",\n );\n const text = textContent.map((part) => part.text).join(\"\");\n if (state.textStarted || text.length > 0) {\n if (!state.textStarted) {\n state.textStarted = true;\n yield clientEvent(state, {\n type: \"text_start\",\n messageId: state.messageId,\n partId: state.textPartId,\n });\n }\n state.text = text;\n state.textEnded = true;\n const textEnd: ClientEventOf<\"text_end\"> = {\n type: \"text_end\",\n messageId: state.messageId,\n partId: state.textPartId,\n text,\n };\n if (textContent.length === 1 && textContent[0]?.signature !== undefined) {\n textEnd.signature = textContent[0].signature;\n }\n yield clientEvent(state, textEnd);\n }\n\n const finalReasoning = content.filter(\n (part): part is Extract<AssistantContentPart, { type: \"reasoning\" }> =>\n part.type === \"reasoning\",\n );\n const anonymousReasoning = [...state.reasoning.values()].filter(\n (reasoning) => reasoning.reasoningId === undefined,\n );\n let anonymousIndex = 0;\n for (const [index, reasoning] of finalReasoning.entries()) {\n const existing =\n reasoning.id === undefined\n ? anonymousReasoning[anonymousIndex++]\n : state.reasoning.get(reasoning.id);\n const current = existing ?? createReasoningState(reasoning.id);\n if (existing === undefined) {\n state.reasoning.set(reasoning.id ?? `final:${index}`, current);\n const reasoningStart: ClientEventOf<\"reasoning_start\"> = {\n type: \"reasoning_start\",\n messageId: state.messageId,\n partId: current.partId,\n };\n if (reasoning.id !== undefined) reasoningStart.reasoningId = reasoning.id;\n yield clientEvent(state, reasoningStart);\n }\n if (!current.ended) {\n current.ended = true;\n current.text = reasoning.text;\n const reasoningEnd: ClientEventOf<\"reasoning_end\"> = {\n type: \"reasoning_end\",\n messageId: state.messageId,\n partId: current.partId,\n text: reasoning.text,\n };\n if (reasoning.details !== undefined) reasoningEnd.content = reasoning.details;\n yield clientEvent(state, reasoningEnd);\n }\n }\n for (const reasoning of state.reasoning.values()) {\n if (reasoning.ended) continue;\n reasoning.ended = true;\n yield clientEvent(state, {\n type: \"reasoning_end\",\n messageId: state.messageId,\n partId: reasoning.partId,\n text: reasoning.text,\n });\n }\n\n for (const part of content) {\n if (part.type === \"tool-call\") yield* finishToolCall(state, part);\n if (part.type === \"image\" || part.type === \"file\") {\n const attachment = contentAttachment(part);\n yield clientEvent(state, {\n type: \"attachment\",\n messageId: state.messageId,\n partId: createClientId(\"attachment_part\"),\n attachment,\n });\n }\n }\n\n for (const source of metadata.sources ?? []) yield* emitSource(state, source);\n for (const toolCall of metadata.providerToolCalls ?? []) {\n yield* emitProviderToolCall(state, toolCall);\n }\n\n state.ended = true;\n const messageEnd: ClientEventOf<\"message_end\"> = {\n type: \"message_end\",\n messageId: state.messageId,\n parts: contentToUIMessageParts(content, state),\n usage: metadata.usage,\n };\n if (state.modelMessageId !== undefined) messageEnd.modelMessageId = state.modelMessageId;\n if (metadata.contextUsage !== undefined) messageEnd.contextUsage = metadata.contextUsage;\n yield clientEvent(state, messageEnd);\n}\n\nasync function* finishErroredRun(\n state: MessageState,\n error: unknown,\n usage: CompletionResponse[\"usage\"] | undefined,\n mapper: ClientErrorMapper | undefined,\n): AsyncIterable<ClientStreamEvent> {\n const mapped = mapClientError(error, mapper);\n if (state.textStarted && !state.textEnded) {\n state.textEnded = true;\n yield clientEvent(state, {\n type: \"text_end\",\n messageId: state.messageId,\n partId: state.textPartId,\n text: state.text,\n });\n }\n const errorEvent: ClientEventOf<\"error\"> = {\n type: \"error\",\n error: mapped,\n };\n if (usage !== undefined) errorEvent.usage = usage;\n yield clientEvent(state, errorEvent);\n if (!state.ended) {\n state.ended = true;\n const messageEnd: ClientEventOf<\"message_end\"> = {\n type: \"message_end\",\n messageId: state.messageId,\n };\n if (state.modelMessageId !== undefined) messageEnd.modelMessageId = state.modelMessageId;\n if (usage !== undefined) messageEnd.usage = usage;\n yield clientEvent(state, messageEnd);\n }\n const runEnd: ClientEventOf<\"run_end\"> = {\n type: \"run_end\",\n status: \"error\",\n };\n if (usage !== undefined) runEnd.usage = usage;\n yield clientEvent(state, runEnd);\n}\n\nfunction contentToUIMessageParts(\n content: readonly AssistantContentPart[],\n state: MessageState,\n): UIMessagePart[] {\n let textIndex = 0;\n let anonymousReasoningIndex = 0;\n const anonymousReasoning = [...state.reasoning.values()].filter(\n (reasoning) => reasoning.reasoningId === undefined,\n );\n return content.map((contentPart) => {\n if (contentPart.type === \"text\") {\n const part: Extract<UIMessagePart, { type: \"text\" }> = {\n id: textIndex === 0 ? state.textPartId : createClientId(\"text\"),\n type: \"text\",\n text: contentPart.text,\n };\n textIndex += 1;\n if (contentPart.signature !== undefined) part.signature = contentPart.signature;\n return part;\n }\n if (contentPart.type === \"reasoning\") {\n const current =\n contentPart.id === undefined\n ? anonymousReasoning[anonymousReasoningIndex++]\n : state.reasoning.get(contentPart.id);\n const part: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: current?.partId ?? createClientId(\"reasoning\"),\n type: \"reasoning\",\n text: contentPart.text,\n };\n if (contentPart.id !== undefined) part.reasoningId = contentPart.id;\n if (contentPart.details !== undefined) part.content = contentPart.details;\n return part;\n }\n if (contentPart.type === \"tool-call\") {\n const tool = getToolState(state, contentPart.toolCallId, contentPart.toolName);\n const partBase = {\n id: tool.partId,\n type: \"tool\" as const,\n toolName: contentPart.toolName,\n toolCallId: contentPart.toolCallId,\n };\n if (contentPart.callId !== undefined) Object.assign(partBase, { callId: contentPart.callId });\n if (tool.internalCallId !== undefined) {\n Object.assign(partBase, { internalCallId: tool.internalCallId });\n }\n if (state.turn !== undefined) Object.assign(partBase, { turn: state.turn });\n if (contentPart.signature !== undefined) {\n Object.assign(partBase, { signature: contentPart.signature });\n }\n if (tool.result?.status === \"success\") {\n const part: Extract<UIToolMessagePart, { state: \"output-available\" }> = {\n ...partBase,\n state: \"output-available\",\n input: contentPart.input,\n output: tool.result.output,\n };\n if (tool.result.content !== undefined) part.resultContent = tool.result.content;\n return part;\n }\n if (tool.result?.status === \"error\") {\n return {\n ...partBase,\n state: \"error\",\n input: contentPart.input,\n error: tool.result.error,\n };\n }\n return {\n ...partBase,\n state: \"input-available\",\n input: contentPart.input,\n };\n }\n const attachment = contentAttachment(contentPart);\n return {\n id: createClientId(\"attachment_part\"),\n type: \"attachment\",\n attachment,\n };\n });\n}\n\nfunction getToolState(state: MessageState, id: string, name?: string): ToolState {\n let tool = state.tools.get(id);\n if (tool === undefined) {\n tool = {\n partId: createClientId(\"tool\"),\n toolCallId: id,\n input: \"\",\n started: false,\n ended: false,\n };\n if (name !== undefined) tool.toolName = name;\n state.tools.set(id, tool);\n } else if (name !== undefined) {\n tool.toolName = name;\n }\n return tool;\n}\n\nfunction getToolResultState(\n state: MessageState,\n toolName: string,\n toolCallId: string,\n callId: string | undefined,\n internalCallId: string,\n): ToolState {\n const matchedByToolCallId = state.tools.get(toolCallId);\n const matchedByCallId =\n callId === undefined\n ? undefined\n : [...state.tools.values()].find((tool) => tool.callId === callId);\n const tool = matchedByToolCallId ?? matchedByCallId ?? getToolState(state, toolCallId, toolName);\n tool.toolName = toolName;\n if (callId !== undefined) tool.callId = callId;\n tool.internalCallId = internalCallId;\n return tool;\n}\n\nfunction createReasoningState(id?: string): ReasoningState {\n const state: ReasoningState = {\n partId: createClientId(\"reasoning\"),\n text: \"\",\n ended: false,\n };\n if (id !== undefined) state.reasoningId = id;\n return state;\n}\n\nfunction contentAttachment(\n content: Extract<AssistantContentPart, { type: \"image\" | \"file\" }>,\n): UIAttachment {\n const attachment: UIAttachment = {\n id: createClientId(\"attachment\"),\n type: content.type === \"image\" ? \"image\" : \"file\",\n };\n if (content.type === \"image\") {\n if (content.detail !== undefined) attachment.detail = content.detail;\n if (content.mediaType !== undefined) attachment.mediaType = content.mediaType;\n if (content.image.type === \"url\") attachment.url = content.image.url;\n else attachment.data = content.image.data;\n return attachment;\n }\n attachment.mediaType = content.mediaType;\n if (content.filename !== undefined) attachment.name = content.filename;\n if (content.data.type === \"url\") {\n attachment.url = content.data.url;\n } else if (content.data.type === \"data\") {\n attachment.data = content.data.data;\n } else {\n attachment.text = content.data.text;\n }\n return attachment;\n}\n\nfunction clientToolResult(\n output: ToolResultOutput,\n result: string,\n): NonNullable<ToolState[\"result\"]> {\n switch (output.type) {\n case \"text\":\n return { status: \"success\", output: output.value };\n case \"json\":\n return { status: \"success\", output: output.value };\n case \"content\":\n return { status: \"success\", output: result, content: output.value };\n case \"execution-denied\":\n return {\n status: \"error\",\n error: {\n message: output.reason ?? \"Tool execution was denied.\",\n code: \"tool_execution_denied\",\n },\n };\n case \"error-text\":\n return {\n status: \"error\",\n error: { message: output.value, code: \"tool_execution_error\" },\n };\n case \"error-json\":\n return {\n status: \"error\",\n error: {\n message: \"Tool execution failed.\",\n code: \"tool_execution_error\",\n details: output.value,\n },\n };\n }\n}\n\nfunction parseJsonOrString(value: string): JsonValue {\n try {\n const parsed: unknown = JSON.parse(value);\n return isJsonValue(parsed) ? parsed : value;\n } catch {\n return value;\n }\n}\n\nfunction clientOutput(\n output: unknown,\n mapper: ClientOutputMapper | undefined,\n): JsonValue | undefined {\n const mapped = mapper === undefined ? (isJsonValue(output) ? output : undefined) : mapper(output);\n if (mapped !== undefined && !isJsonValue(mapped)) {\n throw new TypeError(\"mapOutput must return a strict JSON value or undefined.\");\n }\n return mapped;\n}\n\nfunction valueFingerprint(value: unknown): string {\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (Array.isArray(value)) return `[${value.map(valueFingerprint).join(\",\")}]`;\n if (typeof value === \"object\") {\n return `{${Object.entries(value)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${valueFingerprint(entry)}`)\n .join(\",\")}}`;\n }\n return `${typeof value}:${JSON.stringify(value)}`;\n}\n\nfunction clientTrace(trace: {\n readonly observer: string;\n readonly traceId?: string | undefined;\n readonly observationId?: string | undefined;\n}): { observer: string; traceId?: string; observationId?: string } {\n const result: { observer: string; traceId?: string; observationId?: string } = {\n observer: trace.observer,\n };\n if (trace.traceId !== undefined) result.traceId = trace.traceId;\n if (trace.observationId !== undefined) result.observationId = trace.observationId;\n return result;\n}\n\nfunction mapClientError(error: unknown, mapper: ClientErrorMapper | undefined): ClientStreamError {\n const mapped = mapper?.(error) ?? maskedClientError();\n if (\n typeof mapped.message !== \"string\" ||\n (mapped.details !== undefined && !isJsonValue(mapped.details))\n ) {\n throw new TypeError(\"mapError must return a JSON-safe ClientStreamError.\");\n }\n return mapped;\n}\n\nfunction clientEvent(state: MessageState, event: ClientEventPayload): ClientStreamEvent {\n return scopedEvent(state.runId, state.turn, state.scope, event);\n}\n\nfunction rootEvent(\n runId: string,\n event: ClientEventPayload,\n scope?: ClientStreamScope,\n): ClientStreamEvent {\n return scopedEvent(runId, undefined, scope, event);\n}\n\nfunction scopedEvent(\n runId: string,\n turn: number | undefined,\n scope: ClientStreamScope | undefined,\n event: ClientEventPayload,\n): ClientStreamEvent {\n let scoped = { runId, ...event } as ClientStreamEvent;\n if (turn !== undefined) scoped = { ...scoped, turn };\n if (scope !== undefined) scoped = { ...scoped, scope };\n return scoped;\n}\n\nfunction scopeKey(scope: ClientStreamScope | undefined): string {\n if (scope === undefined) return \"root\";\n return [\n scope.agentId,\n scope.parentRunId,\n scope.parentToolName,\n scope.parentToolCallId,\n scope.parentInternalToolCallId,\n ].join(\":\");\n}\n\nfunction isRootTerminalAgentEvent(event: AgentStreamEvent<unknown, unknown>): boolean {\n return (\n event.type === \"response\" ||\n event.type === \"interaction\" ||\n event.type === \"blocked\" ||\n event.type === \"error\"\n );\n}\n\nfunction agentOutcomeStatus(\n type: \"response\" | \"interaction\" | \"blocked\",\n): \"completed\" | \"suspended\" | \"blocked\" {\n if (type === \"response\") return \"completed\";\n if (type === \"interaction\") return \"suspended\";\n return \"blocked\";\n}\n\nfunction propagateCancellation<TSource, TOutput>(\n source: AsyncIterable<TSource>,\n transform: (source: AsyncIterable<TSource>) => AsyncIterable<TOutput>,\n): AsyncIterable<TOutput> {\n return {\n [Symbol.asyncIterator](): AsyncIterator<TOutput> {\n const sourceIterator = source[Symbol.asyncIterator]();\n const sharedSource: AsyncIterable<TSource> = {\n [Symbol.asyncIterator]: () => sourceIterator,\n };\n const outputIterator = transform(sharedSource)[Symbol.asyncIterator]();\n let returned = false;\n\n return {\n next: () => outputIterator.next(),\n async return(): Promise<IteratorResult<TOutput>> {\n if (returned) return { done: true, value: undefined };\n returned = true;\n const sourceReturn = sourceIterator.return?.();\n const outputReturn = outputIterator.return?.();\n await Promise.all([sourceReturn, outputReturn]);\n return { done: true, value: undefined };\n },\n };\n },\n };\n}\n","import type {\n AssistantContentPart,\n FilePart,\n ImagePart,\n JsonObject,\n JsonValue,\n Message,\n ToolCallPart,\n ToolResultOutput,\n ToolResultPart,\n UserContentPart,\n} from \"@anvia/core/completion\";\nimport { getAssistantGenerationMetadata, isJsonValue } from \"@anvia/core/completion\";\nimport type {\n ClientDataMap,\n UIAttachment,\n UIMessage,\n UIMessageGeneration,\n UIMessagePart,\n UIToolMessagePart,\n} from \"./types\";\n\ntype ToolLocation = { messageIndex: number; partIndex: number };\n\nexport function uiMessagesToMessages<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(messages: readonly UIMessage<Metadata, Data>[]): Message<Metadata>[] {\n const result: Message<Metadata>[] = [];\n\n for (const message of messages) {\n assertMetadata(message.metadata);\n\n if (message.role === \"system\") {\n assertOnlyParts(message, [\"text\", \"data\", \"error\"]);\n result.push({\n role: \"system\",\n content: textFromParts(message.parts),\n ...metadataField(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"user\") {\n assertOnlyParts(message, [\"text\", \"attachment\", \"data\", \"error\"]);\n const content: UserContentPart[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\") {\n content.push(textContent(part.text, part.signature));\n } else if (part.type === \"attachment\") {\n content.push(attachmentToUserContent(part.attachment));\n }\n }\n result.push({ role: \"user\", content, ...metadataField(message.metadata) });\n continue;\n }\n\n if (message.role === \"assistant\") {\n assertOnlyParts(message, [\n \"text\",\n \"reasoning\",\n \"tool\",\n \"attachment\",\n \"source\",\n \"data\",\n \"error\",\n ]);\n const content: AssistantContentPart[] = [];\n const toolResults: ToolResultPart[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\") {\n content.push(textContent(part.text, part.signature));\n } else if (part.type === \"reasoning\") {\n let reasoning: Extract<AssistantContentPart, { type: \"reasoning\" }> = {\n type: \"reasoning\",\n text: part.text,\n };\n if (part.reasoningId !== undefined) reasoning = { ...reasoning, id: part.reasoningId };\n if (part.content !== undefined) reasoning = { ...reasoning, details: part.content };\n content.push(reasoning);\n } else if (part.type === \"tool\") {\n assertReplayableToolPart(part);\n let toolCall: ToolCallPart = {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n };\n if (part.callId !== undefined) toolCall = { ...toolCall, callId: part.callId };\n if (part.signature !== undefined) toolCall = { ...toolCall, signature: part.signature };\n content.push(toolCall);\n if (part.state === \"output-available\" || part.state === \"error\") {\n toolResults.push(toolResultFromPart(part));\n }\n } else if (part.type === \"attachment\") {\n content.push(attachmentToAssistantContent(part.attachment));\n }\n }\n\n let assistant: Extract<Message<Metadata>, { role: \"assistant\" }> = {\n role: \"assistant\",\n content,\n ...metadataField(message.metadata),\n };\n if (message.modelMessageId !== undefined) {\n assistant = { ...assistant, id: message.modelMessageId };\n }\n result.push(assistant);\n if (toolResults.length > 0) {\n result.push({ role: \"tool\", content: toolResults });\n }\n continue;\n }\n\n assertOnlyParts(message, [\"tool\", \"data\", \"error\"]);\n const content: ToolResultPart[] = [];\n for (const part of message.parts) {\n if (part.type !== \"tool\") continue;\n assertToolResultPart(part);\n content.push(toolResultFromPart(part));\n }\n result.push({ role: \"tool\", content, ...metadataField(message.metadata) });\n }\n\n return result;\n}\n\nexport function messagesToUIMessages<Metadata extends JsonObject = JsonObject>(\n messages: readonly Message<Metadata>[],\n): UIMessage<Metadata>[] {\n const result: UIMessage<Metadata>[] = [];\n const byToolCallId = new Map<string, ToolLocation>();\n const byCallId = new Map<string, ToolLocation>();\n\n for (const message of messages) {\n assertMetadata(message.metadata);\n\n if (message.role === \"system\") {\n result.push({\n id: createId(\"msg\"),\n role: \"system\",\n parts: [{ id: createId(\"part\"), type: \"text\", text: message.content }],\n ...metadataField(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"user\") {\n const content =\n typeof message.content === \"string\"\n ? ([{ type: \"text\", text: message.content }] satisfies UserContentPart[])\n : message.content;\n const parts: UIMessagePart[] = content.map((part) => contentToUIMessagePart(part));\n result.push({\n id: createId(\"msg\"),\n role: \"user\",\n parts,\n ...metadataField(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"assistant\") {\n const generationMetadata = getAssistantGenerationMetadata(message);\n const content =\n typeof message.content === \"string\"\n ? ([{ type: \"text\", text: message.content }] satisfies AssistantContentPart[])\n : message.content;\n const parts: UIMessagePart[] = content.map(assistantContentToUIMessagePart);\n for (const source of generationMetadata?.sources ?? []) {\n parts.push({ id: createId(\"source\"), type: \"source\", source });\n }\n let uiMessage: UIMessage<Metadata> = {\n id: createId(\"msg\"),\n role: \"assistant\",\n parts,\n ...metadataField(message.metadata),\n };\n if (generationMetadata !== undefined) {\n const generation: UIMessageGeneration = { usage: generationMetadata.usage };\n if (generationMetadata.contextUsage !== undefined) {\n generation.contextUsage = generationMetadata.contextUsage;\n }\n uiMessage = {\n ...uiMessage,\n generation,\n };\n }\n if (message.id !== undefined) uiMessage = { ...uiMessage, modelMessageId: message.id };\n const messageIndex = result.length;\n result.push(uiMessage);\n for (const [partIndex, part] of parts.entries()) {\n if (part.type !== \"tool\") continue;\n const location = { messageIndex, partIndex };\n byToolCallId.set(part.toolCallId, location);\n if (part.callId !== undefined) byCallId.set(part.callId, location);\n }\n continue;\n }\n\n const unmerged: UIToolMessagePart[] = [];\n for (const content of message.content) {\n if (content.type !== \"tool-result\") continue;\n const location =\n (content.callId === undefined ? undefined : byCallId.get(content.callId)) ??\n byToolCallId.get(content.toolCallId);\n const ownerPart = toolPartAt(result, location);\n if (ownerPart === undefined || ownerPart.state === \"input-streaming\") {\n throw new TypeError(\n `Tool result \"${content.toolCallId}\" requires a matching completed tool call.`,\n );\n }\n const part = toolResultToUIMessagePart(content, ownerPart.toolName, ownerPart.input);\n\n if (message.metadata === undefined && location !== undefined) {\n const owner = result[location.messageIndex];\n const existing = owner?.parts[location.partIndex];\n if (owner !== undefined && existing?.type === \"tool\") {\n const parts = [...owner.parts];\n parts[location.partIndex] = { ...existing, ...part, id: existing.id };\n result[location.messageIndex] = { ...owner, parts };\n continue;\n }\n }\n unmerged.push(part);\n }\n if (unmerged.length > 0 || message.metadata !== undefined) {\n result.push({\n id: createId(\"msg\"),\n role: \"tool\",\n parts: unmerged,\n ...metadataField(message.metadata),\n });\n }\n }\n\n return result;\n}\n\nfunction contentToUIMessagePart(content: UserContentPart): UIMessagePart {\n if (content.type === \"text\") {\n const part: Extract<UIMessagePart, { type: \"text\" }> = {\n id: createId(\"part\"),\n type: \"text\",\n text: content.text,\n };\n if (content.signature !== undefined) part.signature = content.signature;\n return part;\n }\n return {\n id: createId(\"part\"),\n type: \"attachment\",\n attachment: contentToAttachment(content),\n };\n}\n\nfunction assistantContentToUIMessagePart(content: AssistantContentPart): UIMessagePart {\n if (content.type === \"text\") return contentToUIMessagePart(content);\n if (content.type === \"reasoning\") {\n const part: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: createId(\"part\"),\n type: \"reasoning\",\n text: content.text,\n };\n if (content.id !== undefined) part.reasoningId = content.id;\n if (content.details !== undefined) part.content = content.details;\n return part;\n }\n if (content.type === \"tool-call\") {\n const part: UIToolMessagePart = {\n id: toolPartId(content.toolCallId),\n type: \"tool\",\n toolName: content.toolName,\n toolCallId: content.toolCallId,\n state: \"input-available\",\n input: content.input,\n };\n if (content.callId !== undefined) part.callId = content.callId;\n if (content.signature !== undefined) part.signature = content.signature;\n return part;\n }\n return {\n id: createId(\"part\"),\n type: \"attachment\",\n attachment: contentToAttachment(content),\n };\n}\n\nfunction textContent(text: string, signature?: string): Extract<UserContentPart, { type: \"text\" }> {\n return signature === undefined ? { type: \"text\", text } : { type: \"text\", text, signature };\n}\n\nfunction toolResultFromPart(\n part: Extract<UIToolMessagePart, { state: \"output-available\" | \"error\" }>,\n): ToolResultPart {\n let result: ToolResultPart = {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: toolOutputFromPart(part),\n };\n if (part.callId !== undefined) result = { ...result, callId: part.callId };\n return result;\n}\n\nfunction toolOutputFromPart(\n part: Extract<UIToolMessagePart, { state: \"output-available\" | \"error\" }>,\n): ToolResultOutput {\n if (part.state === \"error\") {\n return { type: \"error-text\", value: part.error.message };\n }\n if (part.resultContent !== undefined) {\n return { type: \"content\", value: part.resultContent };\n }\n const output = part.output;\n return typeof output === \"string\"\n ? { type: \"text\", value: output }\n : { type: \"json\", value: output };\n}\n\nfunction attachmentToUserContent(attachment: UIAttachment): UserContentPart {\n if (attachment.type === \"image\" || attachment.mediaType?.startsWith(\"image/\") === true) {\n return attachmentToImageContent(attachment);\n }\n return attachmentToFileContent(attachment);\n}\n\nfunction attachmentToAssistantContent(attachment: UIAttachment): AssistantContentPart {\n return attachment.type === \"image\" || attachment.mediaType?.startsWith(\"image/\") === true\n ? attachmentToImageContent(attachment)\n : attachmentToFileContent(attachment);\n}\n\nfunction attachmentToImageContent(attachment: UIAttachment): ImagePart {\n const image: ImagePart[\"image\"] =\n attachment.url !== undefined\n ? { type: \"url\", url: attachment.url }\n : attachment.data !== undefined\n ? { type: \"data\", data: attachment.data }\n : (() => {\n throw new TypeError(\"Image attachments require a URL or base64 data.\");\n })();\n let content: ImagePart = {\n type: \"image\",\n image,\n };\n if (attachment.mediaType !== undefined) content = { ...content, mediaType: attachment.mediaType };\n if (attachment.detail !== undefined) content = { ...content, detail: attachment.detail };\n return content;\n}\n\nfunction attachmentToFileContent(attachment: UIAttachment): FilePart {\n const data: FilePart[\"data\"] =\n attachment.url !== undefined\n ? { type: \"url\", url: attachment.url }\n : attachment.data !== undefined\n ? { type: \"data\", data: attachment.data }\n : attachment.text !== undefined\n ? { type: \"text\", text: attachment.text }\n : (() => {\n throw new TypeError(\"File attachments require a URL, base64 data, or text.\");\n })();\n let content: FilePart = {\n type: \"file\",\n data,\n mediaType: attachment.mediaType ?? \"application/octet-stream\",\n };\n if (attachment.name !== undefined) content = { ...content, filename: attachment.name };\n return content;\n}\n\nfunction contentToAttachment(content: ImagePart | FilePart): UIAttachment {\n const attachment: UIAttachment = {\n id: createId(\"attachment\"),\n type: content.type === \"image\" ? \"image\" : \"file\",\n };\n if (content.type === \"image\") {\n if (content.detail !== undefined) attachment.detail = content.detail;\n if (content.mediaType !== undefined) attachment.mediaType = content.mediaType;\n if (content.image.type === \"url\") attachment.url = content.image.url;\n else attachment.data = content.image.data;\n return attachment;\n }\n attachment.mediaType = content.mediaType;\n if (content.filename !== undefined) attachment.name = content.filename;\n if (content.data.type === \"url\") attachment.url = content.data.url;\n else if (content.data.type === \"data\") attachment.data = content.data.data;\n else attachment.text = content.data.text;\n return attachment;\n}\n\nfunction toolResultToUIMessagePart(\n content: ToolResultPart,\n fallbackToolName: string,\n input: JsonValue,\n): UIToolMessagePart {\n const output = content.output;\n const common = {\n id: toolPartId(content.toolCallId),\n type: \"tool\" as const,\n toolName: content.toolName || fallbackToolName,\n toolCallId: content.toolCallId,\n input,\n };\n if (content.callId !== undefined) Object.assign(common, { callId: content.callId });\n if (output.type === \"error-text\" || output.type === \"error-json\") {\n return {\n ...common,\n state: \"error\",\n error: {\n message: output.type === \"error-text\" ? output.value : JSON.stringify(output.value),\n },\n };\n }\n if (output.type === \"execution-denied\") {\n return {\n ...common,\n state: \"error\",\n error: { message: output.reason ?? \"Tool execution was denied.\" },\n };\n }\n const part: UIToolMessagePart = {\n ...common,\n state: \"output-available\",\n output: toolResultOutput(output),\n };\n if (output.type === \"content\") part.resultContent = output.value;\n return part;\n}\n\nfunction toolResultOutput(output: ToolResultOutput): JsonValue {\n if (output.type === \"text\" || output.type === \"error-text\") return output.value;\n if (output.type === \"json\" || output.type === \"error-json\") return output.value;\n if (output.type === \"execution-denied\") return output.reason ?? \"Tool execution was denied.\";\n return output.value.length === 1 && output.value[0]?.type === \"text\"\n ? output.value[0].text\n : output.value.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, data: { ...part.data } },\n );\n}\n\nfunction toolPartAt(\n messages: readonly UIMessage[],\n location: ToolLocation | undefined,\n): UIToolMessagePart | undefined {\n if (location === undefined) return undefined;\n const part = messages[location.messageIndex]?.parts[location.partIndex];\n return part?.type === \"tool\" ? part : undefined;\n}\n\nfunction assertReplayableToolPart(\n part: UIToolMessagePart,\n): asserts part is Exclude<UIToolMessagePart, { state: \"input-streaming\" }> {\n if (part.state === \"input-streaming\") {\n throw new TypeError(\n `Tool call \"${part.toolCallId}\" is still streaming and cannot be converted to a model message.`,\n );\n }\n if (!isJsonValue(part.input)) {\n throw new TypeError(`Tool call \"${part.toolCallId}\" input must be a strict JSON value.`);\n }\n}\n\nfunction assertToolResultPart(\n part: UIToolMessagePart,\n): asserts part is Extract<UIToolMessagePart, { state: \"output-available\" | \"error\" }> {\n assertReplayableToolPart(part);\n if (part.state === \"input-available\") {\n throw new TypeError(\n `Tool message part \"${part.toolCallId}\" requires an output or execution error.`,\n );\n }\n}\n\nfunction textFromParts(parts: readonly UIMessagePart[]): string {\n return parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n}\n\nfunction assertOnlyParts(\n message: UIMessage<JsonObject, ClientDataMap>,\n allowed: readonly UIMessagePart[\"type\"][],\n): void {\n for (const part of message.parts) {\n if (!allowed.includes(part.type)) {\n throw new TypeError(`${message.role} UI messages cannot contain ${part.type} parts.`);\n }\n }\n}\n\nfunction assertMetadata(metadata: JsonObject | undefined): void {\n if (metadata !== undefined && (!isJsonValue(metadata) || Array.isArray(metadata))) {\n throw new TypeError(\"Message metadata must be a strict JSON object.\");\n }\n}\n\nfunction metadataField<Metadata extends JsonObject>(\n metadata: Metadata | undefined,\n): { metadata?: Metadata } {\n return metadata === undefined ? {} : { metadata };\n}\n\nfunction toolPartId(toolCallId: string): string {\n return `tool_${toolCallId}`;\n}\n\nlet nextId = 0;\n\nexport function createClientId(prefix: string): string {\n const random = globalThis.crypto?.randomUUID?.();\n if (random !== undefined) return `${prefix}_${random}`;\n nextId += 1;\n return `${prefix}_${nextId.toString(36)}`;\n}\n\nfunction createId(prefix: string): string {\n return createClientId(prefix);\n}\n","import {\n parseAgentInteractionRequest,\n parseAgentInteractionResponse,\n} from \"@anvia/core/agent/interactions\";\nimport type { JsonObject, JsonValue, Message } from \"@anvia/core/completion\";\nimport { isJsonValue, parseMessages } from \"@anvia/core/completion\";\nimport {\n CLIENT_STREAM_PROTOCOL,\n type ClientDataMap,\n type ClientDataSchemas,\n type ClientMetadataSchema,\n type ClientStreamError,\n type ClientStreamEvent,\n type ClientStreamFrame,\n type ClientStreamRequest,\n type UIMessage,\n type UIMessageGeneration,\n type UIMessagePart,\n} from \"./types\";\n\nexport class ClientProtocolError extends Error {\n constructor(\n message: string,\n readonly value?: unknown,\n ) {\n super(message);\n this.name = \"ClientProtocolError\";\n }\n}\n\nexport function parseUIMessage<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): UIMessage<Metadata, Data> {\n const message = requireRecord(value, \"UI message\");\n if (!isJsonValue(message)) {\n throw new ClientProtocolError(\"UI messages must be strict JSON values.\", value);\n }\n requireOnlyKeys(\n message,\n [\"id\", \"role\", \"parts\", \"modelMessageId\", \"metadata\", \"generation\"],\n \"UI message\",\n );\n if (typeof message.id !== \"string\") invalid(\"UI message.id\", value);\n requireOneOf(message.role, [\"system\", \"user\", \"assistant\", \"tool\"], \"UI message.role\", value);\n if (!Array.isArray(message.parts)) invalid(\"UI message.parts\", value);\n const parts = message.parts.map((part) => parseUIMessagePart(part, options.dataSchemas, value));\n if (message.modelMessageId !== undefined && typeof message.modelMessageId !== \"string\") {\n invalid(\"UI message.modelMessageId\", value);\n }\n const metadata =\n message.metadata === undefined\n ? undefined\n : parseMetadata(message.metadata, options.metadataSchema, value);\n if (message.generation !== undefined && !isUIMessageGeneration(message.generation)) {\n invalid(\"UI message.generation\", value);\n }\n let parsed: UIMessage<Metadata, Data> = {\n id: message.id as string,\n role: message.role as UIMessage<Metadata, Data>[\"role\"],\n parts,\n };\n if (message.modelMessageId !== undefined) {\n parsed = { ...parsed, modelMessageId: message.modelMessageId as string };\n }\n if (metadata !== undefined) parsed = { ...parsed, metadata };\n if (message.generation !== undefined) {\n parsed = { ...parsed, generation: message.generation as UIMessageGeneration };\n }\n return parsed;\n}\n\nexport function parseUIMessages<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): UIMessage<Metadata, Data>[] {\n if (!Array.isArray(value)) {\n throw new ClientProtocolError(\"UI messages must be an array.\", value);\n }\n return value.map((message) => parseUIMessage<Metadata, Data>(message, options));\n}\n\nexport function parseClientStreamRequest(value: unknown): ClientStreamRequest {\n const input = requireRecord(value, \"Client stream request\");\n requireOnlyKeys(\n input,\n [\"type\", \"messages\", \"interactionId\", \"response\", \"metadata\", \"resume\"],\n \"Client stream request\",\n );\n requireOneOf(\n input.type,\n [\"messages\", \"interaction_response\"],\n \"Client stream request.type\",\n value,\n );\n if (input.metadata !== undefined && !isJsonObject(input.metadata)) {\n throw new ClientProtocolError(\"Client stream request.metadata must be a JSON object.\", value);\n }\n let request: ClientStreamRequest;\n if (input.type === \"messages\") {\n if (input.interactionId !== undefined || input.response !== undefined) {\n throw new ClientProtocolError(\n \"Messages requests cannot include interaction response fields.\",\n value,\n );\n }\n let messages: Message[];\n try {\n messages = parseMessages(input.messages);\n } catch {\n throw new ClientProtocolError(\"Client stream request.messages must be Message[].\", value);\n }\n request = { type: \"messages\", messages };\n } else {\n if (input.messages !== undefined || typeof input.interactionId !== \"string\") {\n throw new ClientProtocolError(\n \"Interaction response requests require interactionId and cannot include messages.\",\n value,\n );\n }\n try {\n request = {\n type: \"interaction_response\",\n interactionId: input.interactionId,\n response: parseAgentInteractionResponse(input.response),\n };\n } catch {\n throw new ClientProtocolError(\"Client interaction response is invalid.\", value);\n }\n }\n if (input.metadata !== undefined) request.metadata = input.metadata as JsonObject;\n if (input.resume !== undefined) {\n const resume = requireRecord(input.resume, \"Client stream request.resume\");\n requireOnlyKeys(resume, [\"streamId\", \"after\"], \"Client stream request.resume\");\n if (typeof resume.streamId !== \"string\" || !isEventId(resume.after)) {\n throw new ClientProtocolError(\n \"Client stream resume cursor requires streamId and a nonnegative safe integer after.\",\n value,\n );\n }\n request.resume = { streamId: resume.streamId, after: resume.after };\n }\n return request;\n}\n\nexport function parseClientStreamEvent<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): ClientStreamEvent<Metadata, Data> {\n const event = requireRecord(value, \"Client stream event\");\n if (!isJsonValue(event)) {\n throw new ClientProtocolError(\"Client stream events must be strict JSON values.\", value);\n }\n if (typeof event.type !== \"string\" || typeof event.runId !== \"string\") {\n throw new ClientProtocolError(\"Client stream events require type and runId.\", value);\n }\n if (event.turn !== undefined && !isPositiveEventId(event.turn)) {\n throw new ClientProtocolError(\n \"Client stream event.turn must be a positive safe integer.\",\n value,\n );\n }\n if (event.scope !== undefined && !isScope(event.scope)) {\n throw new ClientProtocolError(\"Client stream event.scope is invalid.\", value);\n }\n\n switch (event.type) {\n case \"run_start\":\n requireEventKeys(event, [\"source\", \"metadata\"]);\n requireOneOf(event.source, [\"completion\", \"agent\"], \"run_start.source\", value);\n break;\n case \"turn_start\":\n requireEventKeys(event, []);\n if (!isPositiveEventId(event.turn)) invalid(\"turn_start.turn\", value);\n break;\n case \"generation_start\":\n requireEventKeys(event, [\"model\"]);\n if (\n event.model !== undefined &&\n (!isRecord(event.model) ||\n !hasOnlyKeys(event.model, [\"provider\", \"modelId\"]) ||\n typeof event.model.provider !== \"string\" ||\n typeof event.model.modelId !== \"string\")\n ) {\n invalid(\"generation_start.model\", value);\n }\n break;\n case \"message_start\":\n requireEventKeys(event, [\"messageId\", \"role\", \"metadata\"]);\n requireStrings(event, [\"messageId\"], value);\n if (event.role !== \"assistant\") invalid(\"message_start.role\", value);\n break;\n case \"text_start\":\n requireEventKeys(event, [\"messageId\", \"partId\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n break;\n case \"text_delta\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"delta\"]);\n requireStrings(event, [\"messageId\", \"partId\", \"delta\"], value);\n break;\n case \"reasoning_delta\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"delta\", \"contentType\", \"signature\"]);\n requireStrings(event, [\"messageId\", \"partId\", \"delta\"], value);\n requireOptionalStrings(event, [\"signature\"], value);\n if (\n event.contentType !== undefined &&\n ![\"text\", \"summary\", \"encrypted\", \"redacted\"].includes(event.contentType as string)\n ) {\n invalid(\"reasoning_delta.contentType\", value);\n }\n break;\n case \"text_end\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"text\", \"signature\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n requireOptionalStrings(event, [\"text\", \"signature\"], value);\n break;\n case \"reasoning_start\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"reasoningId\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n requireOptionalStrings(event, [\"reasoningId\"], value);\n break;\n case \"reasoning_end\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"text\", \"content\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n requireOptionalStrings(event, [\"text\"], value);\n if (\n event.content !== undefined &&\n (!Array.isArray(event.content) || !event.content.every(isReasoningContent))\n ) {\n invalid(\"reasoning_end.content\", value);\n }\n break;\n case \"tool_call_start\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"toolCallId\", \"callId\", \"toolName\"]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\"], value);\n requireOptionalStrings(event, [\"callId\", \"toolName\"], value);\n break;\n case \"tool_call_delta\":\n requireEventKeys(event, [\n \"messageId\",\n \"partId\",\n \"toolCallId\",\n \"callId\",\n \"toolName\",\n \"delta\",\n \"mode\",\n \"signature\",\n ]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\", \"delta\"], value);\n requireOptionalStrings(event, [\"callId\", \"toolName\"], value);\n requireOptionalStrings(event, [\"signature\"], value);\n requireOneOf(event.mode, [\"append\", \"replace\"], \"tool_call_delta.mode\", value);\n break;\n case \"tool_call_end\":\n requireEventKeys(event, [\n \"messageId\",\n \"partId\",\n \"toolCallId\",\n \"callId\",\n \"toolName\",\n \"input\",\n \"signature\",\n ]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\", \"toolName\"], value);\n requireOptionalStrings(event, [\"callId\", \"signature\"], value);\n if (!isJsonValue(event.input)) invalid(\"tool_call_end.input\", value);\n break;\n case \"tool_result\":\n requireEventKeys(event, [\n \"messageId\",\n \"partId\",\n \"toolCallId\",\n \"callId\",\n \"internalCallId\",\n \"toolName\",\n \"input\",\n \"result\",\n ]);\n requireStrings(event, [\"messageId\", \"partId\", \"toolCallId\", \"toolName\"], value);\n requireOptionalStrings(event, [\"callId\", \"internalCallId\"], value);\n if (!isJsonValue(event.input)) invalid(\"tool_result.input\", value);\n if (!isRecord(event.result)) invalid(\"tool_result.result\", value);\n if (event.result.status === \"success\") {\n if (\n !hasOnlyKeys(event.result, [\"status\", \"output\", \"content\"]) ||\n !isJsonValue(event.result.output) ||\n (event.result.content !== undefined &&\n (!Array.isArray(event.result.content) ||\n !event.result.content.every(isToolResultContent)))\n ) {\n invalid(\"tool_result.result\", value);\n }\n } else if (event.result.status === \"error\") {\n if (\n !hasOnlyKeys(event.result, [\"status\", \"error\"]) ||\n !isClientStreamError(event.result.error)\n ) {\n invalid(\"tool_result.result\", value);\n }\n } else {\n invalid(\"tool_result.result.status\", value);\n }\n break;\n case \"source\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"source\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n if (!isCompletionSource(event.source)) invalid(\"source.source\", value);\n break;\n case \"attachment\":\n requireEventKeys(event, [\"messageId\", \"partId\", \"attachment\"]);\n requireStrings(event, [\"messageId\", \"partId\"], value);\n if (!isAttachment(event.attachment)) invalid(\"attachment.attachment\", value);\n break;\n case \"provider_tool_call\":\n requireEventKeys(event, [\"toolCall\"]);\n if (!isProviderToolCall(event.toolCall)) invalid(\"provider_tool_call.toolCall\", value);\n break;\n case \"interaction\":\n requireEventKeys(event, [\"interaction\"]);\n try {\n parseAgentInteractionRequest(event.interaction);\n } catch {\n invalid(\"interaction.interaction\", value);\n }\n break;\n case \"guardrail_decision\":\n requireEventKeys(event, [\"decision\"]);\n if (!isGuardrailDecision(event.decision)) invalid(\"guardrail_decision.decision\", value);\n break;\n case \"data\":\n requireEventKeys(event, [\"name\", \"data\", \"transient\"]);\n requireStrings(event, [\"name\"], value);\n if (!isJsonValue(event.data)) invalid(\"data.data\", value);\n if (event.transient !== undefined && typeof event.transient !== \"boolean\") {\n invalid(\"data.transient\", value);\n }\n return {\n ...event,\n data: parseDataEvent(event.name as string, event.data, options.dataSchemas, value),\n } as ClientStreamEvent<Metadata, Data>;\n case \"message_end\":\n requireEventKeys(event, [\n \"messageId\",\n \"modelMessageId\",\n \"parts\",\n \"usage\",\n \"contextUsage\",\n \"metadata\",\n ]);\n requireStrings(event, [\"messageId\"], value);\n requireOptionalStrings(event, [\"modelMessageId\"], value);\n if (event.parts !== undefined) {\n if (!Array.isArray(event.parts)) invalid(\"message_end.parts\", value);\n const parts = event.parts.map((part) =>\n parseUIMessagePart(part, options.dataSchemas, value),\n );\n validateUsageAndContext(event, value);\n return parseEventMetadata(\n { ...event, parts },\n options.metadataSchema,\n value,\n ) as ClientStreamEvent<Metadata, Data>;\n }\n validateUsageAndContext(event, value);\n break;\n case \"turn_end\":\n requireEventKeys(event, [\"usage\", \"contextUsage\", \"firstDeltaMs\"]);\n if (!isPositiveEventId(event.turn)) invalid(\"turn_end.turn\", value);\n if (event.firstDeltaMs !== undefined && !isNonnegativeNumber(event.firstDeltaMs)) {\n invalid(\"turn_end.firstDeltaMs\", value);\n }\n validateUsageAndContext(event, value);\n break;\n case \"memory_compaction\":\n requireEventKeys(event, [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n \"attempts\",\n \"usage\",\n ]);\n validateMemoryCompactionInfo(event, value);\n break;\n case \"run_end\":\n requireEventKeys(event, [\n \"status\",\n \"text\",\n \"output\",\n \"usage\",\n \"contextUsage\",\n \"trace\",\n \"memoryCompaction\",\n \"metadata\",\n ]);\n requireOneOf(\n event.status,\n [\"completed\", \"blocked\", \"suspended\", \"cancelled\", \"error\"],\n \"run_end.status\",\n value,\n );\n requireOptionalStrings(event, [\"text\"], value);\n validateUsageAndContext(event, value);\n if (event.trace !== undefined && !isTrace(event.trace)) invalid(\"run_end.trace\", value);\n if (event.memoryCompaction !== undefined) {\n if (!isRecord(event.memoryCompaction)) invalid(\"run_end.memoryCompaction\", value);\n requireOnlyKeys(\n event.memoryCompaction,\n [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n \"attempts\",\n \"usage\",\n ],\n \"run_end.memoryCompaction\",\n );\n validateMemoryCompactionInfo(event.memoryCompaction, value);\n }\n break;\n case \"error\":\n requireEventKeys(event, [\"error\", \"usage\"]);\n if (!isClientStreamError(event.error)) invalid(\"error.error\", value);\n if (event.usage !== undefined && !isUsage(event.usage)) invalid(\"error.usage\", value);\n break;\n default:\n throw new ClientProtocolError(`Unknown client stream event type \"${event.type}\".`, value);\n }\n\n return parseEventMetadata(event, options.metadataSchema, value) as ClientStreamEvent<\n Metadata,\n Data\n >;\n}\n\nexport function parseClientStreamFrame<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n>(\n value: unknown,\n options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {},\n): ClientStreamFrame<Metadata, Data> {\n const frame = requireRecord(value, \"Client stream frame\");\n if (!isJsonValue(frame)) {\n throw new ClientProtocolError(\"Client stream frames must be strict JSON values.\", value);\n }\n if (typeof frame.type !== \"string\") {\n throw new ClientProtocolError(\"Client stream frames require type.\", value);\n }\n if (frame.type === \"stream_start\") {\n requireOnlyKeys(\n frame,\n [\"type\", \"protocol\", \"streamId\", \"eventId\", \"resumable\"],\n \"stream_start frame\",\n );\n if (frame.protocol === \"anvia.client.v1\" || frame.protocol === \"anvia.client.v2\") {\n throw new ClientProtocolError(\n `Client stream protocol ${frame.protocol.slice(-2)} is not supported.`,\n value,\n );\n }\n if (\n frame.protocol !== CLIENT_STREAM_PROTOCOL ||\n typeof frame.streamId !== \"string\" ||\n frame.eventId !== 0 ||\n typeof frame.resumable !== \"boolean\"\n ) {\n throw new ClientProtocolError(\"Invalid client stream_start frame.\", value);\n }\n return frame as ClientStreamFrame<Metadata, Data>;\n }\n if (frame.type === \"stream_event\") {\n requireOnlyKeys(frame, [\"type\", \"streamId\", \"eventId\", \"event\"], \"stream_event frame\");\n if (typeof frame.streamId !== \"string\" || !isPositiveEventId(frame.eventId)) {\n throw new ClientProtocolError(\"Invalid client stream_event frame.\", value);\n }\n const event = parseClientStreamEvent(frame.event, options);\n return { ...frame, event } as ClientStreamFrame<Metadata, Data>;\n }\n if (frame.type === \"stream_end\") {\n requireOnlyKeys(frame, [\"type\", \"streamId\", \"eventId\", \"status\"], \"stream_end frame\");\n if (typeof frame.streamId !== \"string\" || !isEventId(frame.eventId)) {\n throw new ClientProtocolError(\"Invalid client stream_end frame.\", value);\n }\n requireOneOf(frame.status, [\"completed\", \"error\", \"missing\"], \"stream_end.status\", value);\n return frame as ClientStreamFrame<Metadata, Data>;\n }\n throw new ClientProtocolError(`Unknown client stream frame type \"${frame.type}\".`, value);\n}\n\nexport function maskedClientError(): ClientStreamError {\n return { message: \"An unexpected error occurred.\" };\n}\n\nexport function normalizeClientError(value: unknown): Error {\n if (value instanceof Error) return value;\n if (isClientStreamError(value)) {\n const error = new Error(value.message);\n if (value.name !== undefined) error.name = value.name;\n return error;\n }\n return new Error(typeof value === \"string\" ? value : \"An unexpected error occurred.\");\n}\n\nfunction parseDataEvent<TData extends ClientDataMap>(\n name: string,\n data: unknown,\n schemas: ClientDataSchemas<TData> | undefined,\n value: unknown,\n): JsonValue {\n if (schemas === undefined) return data as JsonValue;\n const schema = schemas[name as keyof TData];\n if (schema === undefined) {\n throw new ClientProtocolError(`Invalid data event \"${name}\".`, value);\n }\n const parsed = schema.safeParse(data);\n if (parsed.success !== true || !isJsonValue(parsed.data)) {\n throw new ClientProtocolError(`Invalid data event \"${name}\".`, value);\n }\n return parsed.data;\n}\n\nfunction parseUIMessagePart<Data extends ClientDataMap>(\n value: unknown,\n schemas: ClientDataSchemas<Data> | undefined,\n root: unknown,\n): UIMessagePart<Data> {\n if (!isUIMessagePart(value)) {\n throw new ClientProtocolError(\"UI message contains an invalid part.\", root);\n }\n if (value.type !== \"data\") {\n return value as UIMessagePart<Data>;\n }\n return {\n ...value,\n data: parseDataEvent(value.name, value.data, schemas, root),\n } as UIMessagePart<Data>;\n}\n\nfunction parseMetadata<Metadata extends JsonObject>(\n value: unknown,\n schema: ClientMetadataSchema<Metadata> | undefined,\n root: unknown,\n): Metadata {\n if (schema === undefined) {\n if (!isJsonObject(value)) {\n throw new ClientProtocolError(\"Client metadata must be a JSON object.\", root);\n }\n return value as Metadata;\n }\n const parsed = schema.safeParse(value);\n if (parsed.success !== true || !isJsonObject(parsed.data)) {\n throw new ClientProtocolError(\"Invalid client metadata.\", root);\n }\n return parsed.data;\n}\n\nfunction parseEventMetadata<Metadata extends JsonObject>(\n event: Record<string, unknown>,\n schema: ClientMetadataSchema<Metadata> | undefined,\n root: unknown,\n): Record<string, unknown> {\n if (event.metadata === undefined) return event;\n return { ...event, metadata: parseMetadata(event.metadata, schema, root) };\n}\n\nfunction isUIMessageGeneration(value: unknown): value is UIMessageGeneration {\n if (!isRecord(value)) return false;\n if (\n !hasOnlyKeys(value, [\"runId\", \"status\", \"usage\", \"contextUsage\", \"trace\", \"memoryCompaction\"])\n ) {\n return false;\n }\n return (\n (value.runId === undefined || typeof value.runId === \"string\") &&\n (value.status === undefined ||\n [\"completed\", \"blocked\", \"suspended\", \"cancelled\", \"error\"].includes(\n value.status as string,\n )) &&\n (value.usage === undefined || isUsage(value.usage)) &&\n (value.contextUsage === undefined || isContextUsage(value.contextUsage)) &&\n (value.trace === undefined || isTrace(value.trace)) &&\n (value.memoryCompaction === undefined ||\n (isRecord(value.memoryCompaction) &&\n validateMemoryCompactionForGuard(value.memoryCompaction)))\n );\n}\n\nfunction validateMemoryCompactionForGuard(value: Record<string, unknown>): boolean {\n try {\n requireOnlyKeys(\n value,\n [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n \"attempts\",\n \"usage\",\n ],\n \"memory compaction\",\n );\n validateMemoryCompactionInfo(value, value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return isRecord(value) && isJsonValue(value);\n}\n\nfunction isClientStreamError(value: unknown): value is ClientStreamError {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\"name\", \"message\", \"code\", \"retryable\", \"details\"]) &&\n typeof value.message === \"string\" &&\n (value.name === undefined || typeof value.name === \"string\") &&\n (value.code === undefined || typeof value.code === \"string\") &&\n (value.retryable === undefined || typeof value.retryable === \"boolean\") &&\n (value.details === undefined || isJsonValue(value.details))\n );\n}\n\nfunction isScope(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const keys = [\n \"agentId\",\n \"agentName\",\n \"parentRunId\",\n \"parentToolName\",\n \"parentToolCallId\",\n \"parentInternalToolCallId\",\n ];\n return (\n hasOnlyKeys(value, keys) &&\n keys.every((key) => value[key] === undefined || typeof value[key] === \"string\")\n );\n}\n\nfunction isAttachment(value: unknown): boolean {\n if (!isRecord(value) || typeof value.id !== \"string\") return false;\n if (value.type !== \"image\" && value.type !== \"document\" && value.type !== \"file\") return false;\n return (\n hasOnlyKeys(value, [\n \"id\",\n \"type\",\n \"name\",\n \"mediaType\",\n \"url\",\n \"data\",\n \"text\",\n \"detail\",\n \"metadata\",\n ]) &&\n (value.name === undefined || typeof value.name === \"string\") &&\n (value.mediaType === undefined || typeof value.mediaType === \"string\") &&\n (value.url === undefined || typeof value.url === \"string\") &&\n (value.data === undefined || typeof value.data === \"string\") &&\n (value.text === undefined || typeof value.text === \"string\") &&\n (value.detail === undefined || [\"auto\", \"low\", \"high\"].includes(value.detail as string)) &&\n (value.metadata === undefined || isJsonValue(value.metadata))\n );\n}\n\nfunction isUIMessagePart(value: unknown): value is UIMessagePart {\n if (!isRecord(value) || typeof value.id !== \"string\" || typeof value.type !== \"string\") {\n return false;\n }\n if (value.type === \"text\") {\n return (\n hasOnlyKeys(value, [\"id\", \"type\", \"text\", \"signature\"]) &&\n typeof value.text === \"string\" &&\n (value.signature === undefined || typeof value.signature === \"string\")\n );\n }\n if (value.type === \"reasoning\") {\n return (\n hasOnlyKeys(value, [\"id\", \"type\", \"text\", \"reasoningId\", \"content\"]) &&\n typeof value.text === \"string\" &&\n (value.reasoningId === undefined || typeof value.reasoningId === \"string\") &&\n (value.content === undefined ||\n (Array.isArray(value.content) && value.content.every(isReasoningContent)))\n );\n }\n if (value.type === \"source\") {\n return hasOnlyKeys(value, [\"id\", \"type\", \"source\"]) && isCompletionSource(value.source);\n }\n if (value.type === \"data\") {\n return (\n hasOnlyKeys(value, [\"id\", \"type\", \"name\", \"data\"]) &&\n typeof value.name === \"string\" &&\n isJsonValue(value.data)\n );\n }\n if (value.type === \"attachment\") {\n return hasOnlyKeys(value, [\"id\", \"type\", \"attachment\"]) && isAttachment(value.attachment);\n }\n if (value.type === \"error\") {\n return hasOnlyKeys(value, [\"id\", \"type\", \"error\"]) && isClientStreamError(value.error);\n }\n if (\n value.type !== \"tool\" ||\n !hasOnlyKeys(value, [\n \"id\",\n \"type\",\n \"toolName\",\n \"toolCallId\",\n \"callId\",\n \"internalCallId\",\n \"turn\",\n \"state\",\n \"input\",\n \"output\",\n \"resultContent\",\n \"signature\",\n \"error\",\n ]) ||\n typeof value.toolName !== \"string\" ||\n typeof value.toolCallId !== \"string\" ||\n (value.callId !== undefined && typeof value.callId !== \"string\") ||\n (value.internalCallId !== undefined && typeof value.internalCallId !== \"string\") ||\n (value.turn !== undefined && !isPositiveEventId(value.turn)) ||\n (value.signature !== undefined && typeof value.signature !== \"string\")\n ) {\n return false;\n }\n if (value.state === \"input-streaming\") {\n return (\n typeof value.input === \"string\" &&\n value.output === undefined &&\n value.resultContent === undefined &&\n value.error === undefined\n );\n }\n if (value.state === \"input-available\") {\n return (\n isJsonValue(value.input) &&\n value.output === undefined &&\n value.resultContent === undefined &&\n value.error === undefined\n );\n }\n if (value.state === \"output-available\") {\n return (\n isJsonValue(value.input) &&\n isJsonValue(value.output) &&\n (value.resultContent === undefined ||\n (Array.isArray(value.resultContent) && value.resultContent.every(isToolResultContent))) &&\n value.error === undefined\n );\n }\n return (\n value.state === \"error\" &&\n isJsonValue(value.input) &&\n value.output === undefined &&\n value.resultContent === undefined &&\n isClientStreamError(value.error)\n );\n}\n\nfunction isReasoningContent(value: unknown): boolean {\n if (!isRecord(value) || typeof value.type !== \"string\") return false;\n if (value.type === \"text\") {\n return (\n hasOnlyKeys(value, [\"type\", \"text\", \"signature\"]) &&\n typeof value.text === \"string\" &&\n (value.signature === undefined || typeof value.signature === \"string\")\n );\n }\n if (value.type === \"summary\") {\n return hasOnlyKeys(value, [\"type\", \"text\"]) && typeof value.text === \"string\";\n }\n if (value.type === \"encrypted\" || value.type === \"redacted\") {\n return hasOnlyKeys(value, [\"type\", \"data\"]) && typeof value.data === \"string\";\n }\n return false;\n}\n\nfunction isToolResultContent(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === \"text\") {\n return (\n hasOnlyKeys(value, [\"type\", \"text\", \"signature\"]) &&\n typeof value.text === \"string\" &&\n (value.signature === undefined || typeof value.signature === \"string\")\n );\n }\n return (\n value.type === \"file\" &&\n hasOnlyKeys(value, [\"type\", \"data\", \"mediaType\", \"filename\"]) &&\n isFileData(value.data) &&\n typeof value.mediaType === \"string\" &&\n (value.filename === undefined || typeof value.filename === \"string\")\n );\n}\n\nfunction isFileData(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.type === \"url\") {\n return hasOnlyKeys(value, [\"type\", \"url\"]) && typeof value.url === \"string\";\n }\n if (value.type === \"data\") {\n return hasOnlyKeys(value, [\"type\", \"data\"]) && typeof value.data === \"string\";\n }\n return (\n value.type === \"text\" && hasOnlyKeys(value, [\"type\", \"text\"]) && typeof value.text === \"string\"\n );\n}\n\nfunction isCompletionSource(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.type === \"url\" &&\n hasOnlyKeys(value, [\"type\", \"url\", \"title\", \"id\", \"startIndex\", \"endIndex\"]) &&\n typeof value.url === \"string\" &&\n (value.title === undefined || typeof value.title === \"string\") &&\n (value.id === undefined || typeof value.id === \"string\") &&\n (value.startIndex === undefined || isNonnegativeNumber(value.startIndex)) &&\n (value.endIndex === undefined || isNonnegativeNumber(value.endIndex))\n );\n}\n\nfunction isProviderToolCall(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\"id\", \"name\", \"status\", \"details\"]) &&\n typeof value.id === \"string\" &&\n typeof value.name === \"string\" &&\n (value.status === undefined || typeof value.status === \"string\") &&\n (value.details === undefined || (isRecord(value.details) && isJsonValue(value.details)))\n );\n}\n\nfunction isGuardrailDecision(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\n \"policyId\",\n \"guardrailId\",\n \"boundary\",\n \"mode\",\n \"action\",\n \"applied\",\n \"reason\",\n \"message\",\n \"metadata\",\n \"latencyMs\",\n ]) &&\n typeof value.policyId === \"string\" &&\n typeof value.guardrailId === \"string\" &&\n (value.boundary === \"input\" || value.boundary === \"output\") &&\n (value.mode === \"enforce\" || value.mode === \"observe\") &&\n typeof value.action === \"string\" &&\n [\"allow\", \"block\", \"rewrite\", \"error\"].includes(value.action) &&\n typeof value.applied === \"boolean\" &&\n (value.reason === undefined || typeof value.reason === \"string\") &&\n (value.message === undefined || typeof value.message === \"string\") &&\n (value.metadata === undefined || (isRecord(value.metadata) && isJsonValue(value.metadata))) &&\n isNonnegativeNumber(value.latencyMs)\n );\n}\n\nfunction isUsage(value: unknown): boolean {\n if (\n !isRecord(value) ||\n !hasOnlyKeys(value, [\n \"inputTokens\",\n \"outputTokens\",\n \"totalTokens\",\n \"cachedInputTokens\",\n \"cacheCreationInputTokens\",\n \"details\",\n ]) ||\n ![\n value.inputTokens,\n value.outputTokens,\n value.totalTokens,\n value.cachedInputTokens,\n value.cacheCreationInputTokens,\n ].every(isNonnegativeNumber)\n ) {\n return false;\n }\n return (\n value.details === undefined ||\n (isRecord(value.details) && Object.values(value.details).every(isNonnegativeNumber))\n );\n}\n\nfunction isContextUsage(value: unknown): boolean {\n if (!isRecord(value) || !isRecord(value.model) || !isRecord(value.model.context)) return false;\n const context = value.model.context;\n return (\n hasOnlyKeys(value, [\n \"model\",\n \"usedTokens\",\n \"remainingTokens\",\n \"usedPercent\",\n \"remainingPercent\",\n ]) &&\n hasOnlyKeys(value.model, [\"modelId\", \"context\"]) &&\n typeof value.model.modelId === \"string\" &&\n hasOnlyKeys(context, [\"contextWindow\", \"maxInputTokens\", \"maxOutputTokens\"]) &&\n isNonnegativeNumber(context.contextWindow) &&\n (context.maxInputTokens === undefined || isNonnegativeNumber(context.maxInputTokens)) &&\n (context.maxOutputTokens === undefined || isNonnegativeNumber(context.maxOutputTokens)) &&\n isNonnegativeNumber(value.usedTokens) &&\n isNonnegativeNumber(value.remainingTokens) &&\n isNonnegativeNumber(value.usedPercent) &&\n isNonnegativeNumber(value.remainingPercent)\n );\n}\n\nfunction validateUsageAndContext(event: Record<string, unknown>, original: unknown): void {\n if (event.usage !== undefined && !isUsage(event.usage)) {\n invalid(`${String(event.type)}.usage`, original);\n }\n if (event.contextUsage !== undefined && !isContextUsage(event.contextUsage)) {\n invalid(`${String(event.type)}.contextUsage`, original);\n }\n}\n\nfunction validateMemoryCompactionInfo(value: Record<string, unknown>, original: unknown): void {\n for (const field of [\n \"originalMessageCount\",\n \"compactedMessageCount\",\n \"retainedMessageCount\",\n \"originalTokenCount\",\n \"compactedTokenCount\",\n \"retainedTokenCount\",\n \"resultTokenCount\",\n ]) {\n if (!isEventId(value[field])) invalid(`memory_compaction.${field}`, original);\n }\n if (!isPositiveEventId(value.attempts)) invalid(\"memory_compaction.attempts\", original);\n if (!isUsage(value.usage)) invalid(\"memory_compaction.usage\", original);\n}\n\nfunction isTrace(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, [\"observer\", \"traceId\", \"observationId\"]) &&\n typeof value.observer === \"string\" &&\n value.observer.trim().length > 0 &&\n (value.traceId === undefined || typeof value.traceId === \"string\") &&\n (value.observationId === undefined || typeof value.observationId === \"string\")\n );\n}\n\nfunction requireRecord(value: unknown, label: string): Record<string, unknown> {\n if (!isRecord(value)) throw new ClientProtocolError(`${label} must be an object.`, value);\n return value;\n}\n\nfunction requireOnlyKeys(value: Record<string, unknown>, keys: string[], label: string): void {\n for (const key of Object.keys(value)) {\n if (!keys.includes(key)) throw new ClientProtocolError(`${label} has unknown field \"${key}\".`);\n }\n}\n\nfunction requireEventKeys(value: Record<string, unknown>, keys: string[]): void {\n requireOnlyKeys(\n value,\n [\"type\", \"runId\", \"turn\", \"scope\", ...keys],\n `${String(value.type)} event`,\n );\n}\n\nfunction requireStrings(value: Record<string, unknown>, keys: string[], original: unknown): void {\n for (const key of keys) {\n if (typeof value[key] !== \"string\") invalid(`${String(value.type)}.${key}`, original);\n }\n}\n\nfunction requireOptionalStrings(\n value: Record<string, unknown>,\n keys: string[],\n original: unknown,\n): void {\n for (const key of keys) {\n if (value[key] !== undefined && typeof value[key] !== \"string\") {\n invalid(`${String(value.type)}.${key}`, original);\n }\n }\n}\n\nfunction requireOneOf(value: unknown, allowed: string[], label: string, original: unknown): void {\n if (typeof value !== \"string\" || !allowed.includes(value)) invalid(label, original);\n}\n\nfunction invalid(label: string, value: unknown): never {\n throw new ClientProtocolError(`Invalid ${label}.`, value);\n}\n\nfunction isEventId(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction isPositiveEventId(value: unknown): value is number {\n return isEventId(value) && value > 0;\n}\n\nfunction isNonnegativeNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction hasOnlyKeys(value: Record<string, unknown>, keys: string[]): boolean {\n return Object.keys(value).every((key) => keys.includes(key));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type {\n AgentInteractionRequest,\n AgentInteractionResponse,\n} from \"@anvia/core/agent/interactions\";\nimport type {\n CompletionSource,\n ContextUsage,\n ImageDetail,\n JsonObject,\n JsonValue,\n Message,\n ProviderToolCall,\n ReasoningContentType,\n ReasoningDetail,\n ToolResultContentPart,\n Usage,\n} from \"@anvia/core/completion\";\nimport type { GuardrailDecisionRecord } from \"@anvia/core/guardrails\";\nimport type { MemoryCompactionInfo } from \"@anvia/core/memory\";\n\nexport const CLIENT_STREAM_PROTOCOL = \"anvia.client.v3\" as const;\n\nexport type ClientDataMap = Record<string, JsonValue>;\nexport type ClientMetadata = JsonObject;\n\nexport type ClientDataSchema<T extends JsonValue = JsonValue> = {\n safeParse(value: unknown): { success: true; data: T } | { success: false; error?: unknown };\n};\n\nexport type ClientDataSchemas<TData extends ClientDataMap> = {\n [Name in keyof TData]: ClientDataSchema<TData[Name]>;\n};\n\nexport type ClientMetadataSchema<TMetadata extends JsonObject = JsonObject> =\n ClientDataSchema<TMetadata>;\n\nexport type UIMessageRole = \"system\" | \"user\" | \"assistant\" | \"tool\";\n\nexport type ClientStreamError = {\n name?: string;\n message: string;\n code?: string;\n retryable?: boolean;\n details?: JsonValue;\n};\n\nexport type UIError = ClientStreamError;\n\nexport type UIMessageGeneration = {\n runId?: string;\n status?: \"completed\" | \"blocked\" | \"suspended\" | \"cancelled\" | \"error\";\n usage?: Usage;\n contextUsage?: ContextUsage;\n trace?: { observer: string; traceId?: string; observationId?: string };\n memoryCompaction?: MemoryCompactionInfo;\n};\n\nexport type UIMessage<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = Readonly<{\n id: string;\n role: UIMessageRole;\n parts: readonly UIMessagePart<Data>[];\n modelMessageId?: string;\n metadata?: Metadata;\n generation?: UIMessageGeneration;\n}>;\n\nexport type UIAttachment = {\n id: string;\n type: \"image\" | \"document\" | \"file\";\n name?: string;\n mediaType?: string;\n url?: string;\n data?: string;\n text?: string;\n detail?: ImageDetail;\n metadata?: JsonValue;\n};\n\nexport type CreateUIAttachment = Omit<UIAttachment, \"id\"> & {\n id?: string;\n};\n\ntype UIDataPart<Data extends ClientDataMap> = {\n [Name in keyof Data & string]: {\n id: string;\n type: \"data\";\n name: Name;\n data: Data[Name];\n };\n}[keyof Data & string];\n\ntype UIToolMessagePartBase = {\n id: string;\n type: \"tool\";\n toolName: string;\n toolCallId: string;\n callId?: string;\n internalCallId?: string;\n turn?: number;\n signature?: string;\n};\n\nexport type UIToolMessagePart =\n | (UIToolMessagePartBase & {\n state: \"input-streaming\";\n input: string;\n })\n | (UIToolMessagePartBase & {\n state: \"input-available\";\n input: JsonValue;\n })\n | (UIToolMessagePartBase & {\n state: \"output-available\";\n input: JsonValue;\n output: JsonValue;\n resultContent?: readonly ToolResultContentPart[];\n })\n | (UIToolMessagePartBase & {\n state: \"error\";\n input: JsonValue;\n error: UIError;\n });\n\nexport type UIMessagePart<Data extends ClientDataMap = ClientDataMap> =\n | {\n id: string;\n type: \"text\";\n text: string;\n signature?: string;\n }\n | {\n id: string;\n type: \"reasoning\";\n text: string;\n reasoningId?: string;\n content?: readonly ReasoningDetail[];\n }\n | UIToolMessagePart\n | {\n id: string;\n type: \"source\";\n source: CompletionSource;\n }\n | UIDataPart<Data>\n | {\n id: string;\n type: \"attachment\";\n attachment: UIAttachment;\n }\n | {\n id: string;\n type: \"error\";\n error: UIError;\n };\n\nexport type ClientStreamCursor = {\n streamId: string;\n after: number;\n};\n\nexport type ClientStreamRequest<Metadata extends JsonObject = JsonObject> =\n | {\n type: \"messages\";\n messages: readonly Message[];\n metadata?: Metadata;\n resume?: ClientStreamCursor;\n }\n | {\n type: \"interaction_response\";\n interactionId: string;\n response: AgentInteractionResponse;\n metadata?: Metadata;\n resume?: ClientStreamCursor;\n };\n\nexport type ClientCompletionRequest<Metadata extends JsonObject = JsonObject> = {\n prompt: string;\n metadata?: Metadata;\n};\n\nexport type ClientStreamScope = {\n agentId?: string;\n agentName?: string;\n parentRunId?: string;\n parentToolName?: string;\n parentToolCallId?: string;\n parentInternalToolCallId?: string;\n};\n\nexport type ClientInteraction = Readonly<{\n request: AgentInteractionRequest;\n runId: string;\n status: \"pending\" | \"responded\" | \"cancelled\";\n}>;\n\ntype ClientStreamEventBase = {\n runId: string;\n turn?: number;\n scope?: ClientStreamScope;\n};\n\ntype ClientDataEvent<TData extends ClientDataMap> = {\n [Name in keyof TData & string]: {\n type: \"data\";\n name: Name;\n data: TData[Name];\n transient?: boolean;\n };\n}[keyof TData & string];\n\ntype ClientStandardStreamEvent<Metadata extends JsonObject, Data extends ClientDataMap> =\n | {\n type: \"run_start\";\n source: \"completion\" | \"agent\";\n metadata?: Metadata;\n }\n | { type: \"turn_start\" }\n | {\n type: \"generation_start\";\n model?: { provider: string; modelId: string };\n }\n | {\n type: \"message_start\";\n messageId: string;\n role: \"assistant\";\n metadata?: Metadata;\n }\n | {\n type: \"text_start\";\n messageId: string;\n partId: string;\n }\n | {\n type: \"text_delta\";\n messageId: string;\n partId: string;\n delta: string;\n }\n | {\n type: \"text_end\";\n messageId: string;\n partId: string;\n text?: string;\n signature?: string;\n }\n | {\n type: \"reasoning_start\";\n messageId: string;\n partId: string;\n reasoningId?: string;\n }\n | {\n type: \"reasoning_delta\";\n messageId: string;\n partId: string;\n delta: string;\n contentType?: ReasoningContentType;\n signature?: string;\n }\n | {\n type: \"reasoning_end\";\n messageId: string;\n partId: string;\n text?: string;\n content?: readonly ReasoningDetail[];\n }\n | {\n type: \"tool_call_start\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n toolName?: string;\n }\n | {\n type: \"tool_call_delta\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n toolName?: string;\n delta: string;\n mode: \"append\" | \"replace\";\n signature?: string;\n }\n | {\n type: \"tool_call_end\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n toolName: string;\n input: JsonValue;\n signature?: string;\n }\n | {\n type: \"tool_result\";\n messageId: string;\n partId: string;\n toolCallId: string;\n callId?: string;\n internalCallId?: string;\n toolName: string;\n input: JsonValue;\n result:\n | { status: \"success\"; output: JsonValue; content?: readonly ToolResultContentPart[] }\n | { status: \"error\"; error: ClientStreamError };\n }\n | { type: \"source\"; messageId: string; partId: string; source: CompletionSource }\n | {\n type: \"attachment\";\n messageId: string;\n partId: string;\n attachment: UIAttachment;\n }\n | { type: \"provider_tool_call\"; toolCall: ProviderToolCall }\n | { type: \"interaction\"; interaction: AgentInteractionRequest }\n | { type: \"guardrail_decision\"; decision: GuardrailDecisionRecord }\n | ({ type: \"memory_compaction\" } & MemoryCompactionInfo)\n | {\n type: \"message_end\";\n messageId: string;\n modelMessageId?: string;\n /** Authoritative model-authored parts after provider normalization and guardrails. */\n parts?: readonly UIMessagePart<Data>[];\n usage?: Usage;\n contextUsage?: ContextUsage;\n metadata?: Metadata;\n }\n | {\n type: \"turn_end\";\n usage?: Usage;\n contextUsage?: ContextUsage;\n firstDeltaMs?: number;\n }\n | {\n type: \"run_end\";\n status: \"completed\" | \"blocked\" | \"suspended\" | \"cancelled\" | \"error\";\n text?: string;\n output?: JsonValue;\n usage?: Usage;\n contextUsage?: ContextUsage;\n trace?: { observer: string; traceId?: string; observationId?: string };\n memoryCompaction?: MemoryCompactionInfo;\n metadata?: Metadata;\n }\n | { type: \"error\"; error: ClientStreamError; usage?: Usage };\n\nexport type ClientStreamEvent<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = ClientStreamEventBase & (ClientStandardStreamEvent<Metadata, Data> | ClientDataEvent<Data>);\n\nexport type ClientStream<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> = AsyncIterable<ClientStreamEvent<Metadata, Data>>;\n\nexport type ClientStreamFrame<\n Metadata extends JsonObject = JsonObject,\n Data extends ClientDataMap = ClientDataMap,\n> =\n | {\n type: \"stream_start\";\n protocol: typeof CLIENT_STREAM_PROTOCOL;\n streamId: string;\n eventId: 0;\n resumable: boolean;\n }\n | {\n type: \"stream_event\";\n streamId: string;\n eventId: number;\n event: ClientStreamEvent<Metadata, Data>;\n }\n | {\n type: \"stream_end\";\n streamId: string;\n eventId: number;\n status: \"completed\" | \"error\" | \"missing\";\n };\n\nexport type ClientTransportSendOptions<TRequest> = {\n request: TRequest;\n abortSignal?: AbortSignal;\n headers?: HeadersInit;\n resume?: ClientStreamCursor;\n};\n\nexport type ClientTransport<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n> = {\n readonly _types?: { metadata: Metadata; data: Data };\n send(\n options: ClientTransportSendOptions<TRequest>,\n ): AsyncIterable<ClientStreamFrame<Metadata, Data>>;\n};\n\nexport type ClientErrorMapper = (error: unknown) => ClientStreamError;\n\nexport type ClientOutputMapper = (output: unknown) => JsonValue | undefined;\n","import type { JsonObject } from \"@anvia/core/completion\";\nimport { createClientId } from \"./messages\";\nimport { ClientProtocolError, parseClientStreamEvent, parseClientStreamFrame } from \"./protocol\";\nimport type { CreateFetchEventTransportOptions } from \"./transport/event-transport\";\nimport { createFetchEventTransport } from \"./transport/event-transport\";\nimport {\n CLIENT_STREAM_PROTOCOL,\n type ClientDataMap,\n type ClientDataSchemas,\n type ClientMetadataSchema,\n type ClientStream,\n type ClientStreamCursor,\n type ClientStreamFrame,\n type ClientStreamRequest,\n type ClientTransport,\n} from \"./types\";\n\nexport type CreateHttpClientTransportOptions<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n> = Omit<\n CreateFetchEventTransportOptions<TRequest, ClientStreamFrame<Metadata, Data>>,\n \"mapEvent\" | \"validateResponse\"\n> & {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n};\n\nexport function createHttpClientTransport<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n>(\n options: CreateHttpClientTransportOptions<TRequest, Data, Metadata>,\n): ClientTransport<TRequest, Data, Metadata> {\n const transport = createFetchEventTransport<TRequest, ClientStreamFrame<Metadata, Data>>({\n ...options,\n mapEvent: (event) => parseClientStreamFrame(event, protocolOptions(options)),\n validateResponse(response) {\n if (response.headers.get(\"x-anvia-stream-protocol\") !== CLIENT_STREAM_PROTOCOL) {\n throw new ClientProtocolError(\n `Expected x-anvia-stream-protocol: ${CLIENT_STREAM_PROTOCOL}.`,\n );\n }\n },\n });\n\n return {\n async *send(sendOptions) {\n const resume = sendOptions.resume ?? resumeCursorFromRequest(sendOptions.request);\n yield* validateFrameSequence(transport.send(sendOptions), resume);\n },\n };\n}\n\nexport type CreateDirectClientTransportOptions<\n TRequest,\n Data extends ClientDataMap,\n Metadata extends JsonObject,\n> = {\n handler(options: {\n request: TRequest;\n abortSignal?: AbortSignal;\n headers?: HeadersInit;\n }): ClientStream<Metadata, Data> | Promise<ClientStream<Metadata, Data>>;\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n};\n\nexport function createDirectClientTransport<\n TRequest = ClientStreamRequest,\n Data extends ClientDataMap = ClientDataMap,\n Metadata extends JsonObject = JsonObject,\n>(\n options: CreateDirectClientTransportOptions<TRequest, Data, Metadata>,\n): ClientTransport<TRequest, Data, Metadata> {\n return {\n async *send(sendOptions) {\n const resume = sendOptions.resume ?? resumeCursorFromRequest(sendOptions.request);\n if (resume !== undefined) {\n throw new ClientProtocolError(\"Direct client transports do not support resume cursors.\");\n }\n const handlerOptions: Parameters<typeof options.handler>[0] = {\n request: sendOptions.request,\n };\n if (sendOptions.abortSignal !== undefined) {\n handlerOptions.abortSignal = sendOptions.abortSignal;\n }\n if (sendOptions.headers !== undefined) handlerOptions.headers = sendOptions.headers;\n const events = await options.handler(handlerOptions);\n const iterator = events[Symbol.asyncIterator]();\n const streamId = createClientId(\"stream\");\n let eventId = 0;\n yield {\n type: \"stream_start\",\n protocol: CLIENT_STREAM_PROTOCOL,\n streamId,\n eventId: 0,\n resumable: false,\n };\n let status: \"completed\" | \"error\" = \"completed\";\n try {\n let closePromise: Promise<unknown> | undefined;\n const close = () => {\n closePromise ??= Promise.resolve(iterator.return?.());\n return closePromise;\n };\n const onAbort = () => {\n void close();\n };\n sendOptions.abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n while (!sendOptions.abortSignal?.aborted) {\n const next = await iterator.next();\n if (next.done) break;\n const event = parseClientStreamEvent<Metadata, Data>(\n next.value,\n protocolOptions(options),\n );\n eventId += 1;\n yield { type: \"stream_event\", streamId, eventId, event };\n }\n } finally {\n sendOptions.abortSignal?.removeEventListener(\"abort\", onAbort);\n await close();\n }\n } catch {\n status = \"error\";\n }\n yield { type: \"stream_end\", streamId, eventId, status };\n },\n };\n}\n\nasync function* validateFrameSequence<Metadata extends JsonObject, Data extends ClientDataMap>(\n frames: AsyncIterable<ClientStreamFrame<Metadata, Data>>,\n resume: ClientStreamCursor | undefined,\n): AsyncIterable<ClientStreamFrame<Metadata, Data>> {\n let streamId: string | undefined;\n let lastEventId = resume?.after ?? 0;\n let ended = false;\n for await (const frame of frames) {\n if (ended) throw new ClientProtocolError(\"Received a frame after stream_end.\", frame);\n if (streamId === undefined) {\n if (frame.type !== \"stream_start\") {\n throw new ClientProtocolError(\"The first client stream frame must be stream_start.\", frame);\n }\n streamId = frame.streamId;\n if (resume !== undefined && frame.streamId !== resume.streamId) {\n throw new ClientProtocolError(\"Resume response streamId does not match the cursor.\", frame);\n }\n if (resume !== undefined && !frame.resumable) {\n throw new ClientProtocolError(\"Resume response must identify a resumable stream.\", frame);\n }\n } else if (frame.type === \"stream_start\") {\n throw new ClientProtocolError(\"Received more than one stream_start frame.\", frame);\n } else if (frame.streamId !== streamId) {\n throw new ClientProtocolError(\"Client streamId changed during the response.\", frame);\n }\n if (frame.type === \"stream_event\") {\n if (frame.eventId !== lastEventId + 1) {\n throw new ClientProtocolError(\"Client stream event IDs must be contiguous.\", frame);\n }\n lastEventId = frame.eventId;\n } else if (frame.type === \"stream_end\") {\n if (frame.eventId !== lastEventId) {\n throw new ClientProtocolError(\"stream_end has an invalid eventId.\", frame);\n }\n ended = true;\n }\n yield frame;\n }\n if (streamId === undefined || !ended) {\n throw new ClientProtocolError(\"Client stream ended without a complete frame sequence.\");\n }\n}\n\nfunction protocolOptions<Metadata extends JsonObject, Data extends ClientDataMap>(options: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n}): {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n} {\n const result: {\n metadataSchema?: ClientMetadataSchema<Metadata>;\n dataSchemas?: ClientDataSchemas<Data>;\n } = {};\n if (options.metadataSchema !== undefined) result.metadataSchema = options.metadataSchema;\n if (options.dataSchemas !== undefined) result.dataSchemas = options.dataSchemas;\n return result;\n}\n\nfunction resumeCursorFromRequest(value: unknown): ClientStreamCursor | undefined {\n if (typeof value !== \"object\" || value === null || !(\"resume\" in value)) return undefined;\n const resume = value.resume;\n if (typeof resume !== \"object\" || resume === null) return undefined;\n if (!(\"streamId\" in resume) || !(\"after\" in resume)) return undefined;\n return typeof resume.streamId === \"string\" &&\n typeof resume.after === \"number\" &&\n Number.isSafeInteger(resume.after) &&\n resume.after >= 0\n ? { streamId: resume.streamId, after: resume.after }\n : undefined;\n}\n","export type {\n AgentClientStreamContext,\n AgentClientStreamOptions,\n ClientStreamAdapterOptions,\n CompletionClientStreamOptions,\n} from \"./adapters\";\nexport {\n agentToClientStream,\n completionToClientStream,\n customAgentEventsToClientStream,\n} from \"./adapters\";\nexport type {\n CreateDirectClientTransportOptions,\n CreateHttpClientTransportOptions,\n} from \"./client-transport\";\nexport { createDirectClientTransport, createHttpClientTransport } from \"./client-transport\";\nexport { createClientId, messagesToUIMessages, uiMessagesToMessages } from \"./messages\";\nexport { isJsonValue } from \"@anvia/core/completion\";\nexport {\n ClientProtocolError,\n maskedClientError,\n normalizeClientError,\n parseClientStreamEvent,\n parseClientStreamFrame,\n parseClientStreamRequest,\n parseUIMessage,\n parseUIMessages,\n} from \"./protocol\";\nexport { applyClientStreamEvent, assistantText, messageText } from \"./reducer\";\nexport type {\n ClientCompletionRequest,\n ClientDataMap,\n ClientDataSchema,\n ClientDataSchemas,\n ClientErrorMapper,\n ClientInteraction,\n ClientMetadata,\n ClientMetadataSchema,\n ClientOutputMapper,\n ClientStream,\n ClientStreamCursor,\n ClientStreamError,\n ClientStreamEvent,\n ClientStreamFrame,\n ClientStreamRequest,\n ClientStreamScope,\n ClientTransport,\n ClientTransportSendOptions,\n CreateUIAttachment,\n UIAttachment,\n UIError,\n UIMessage,\n UIMessageGeneration,\n UIMessagePart,\n UIMessageRole,\n UIToolMessagePart,\n} from \"./types\";\nexport { CLIENT_STREAM_PROTOCOL } from \"./types\";\n","import { isJsonValue, type JsonObject } from \"@anvia/core/completion\";\nimport { createClientId } from \"./messages\";\nimport type {\n ClientDataMap,\n ClientStreamEvent,\n UIMessage,\n UIMessageGeneration,\n UIMessagePart,\n UIToolMessagePart,\n} from \"./types\";\n\nexport function applyClientStreamEvent<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n event: ClientStreamEvent<Metadata, Data>,\n): readonly UIMessage<Metadata, Data>[] {\n if (event.scope?.parentToolCallId !== undefined) {\n return messages;\n }\n\n switch (event.type) {\n case \"message_start\": {\n if (messages.some((message) => message.id === event.messageId)) return messages;\n let message: UIMessage<Metadata, Data> = {\n id: event.messageId,\n role: event.role,\n parts: [],\n };\n if (event.metadata !== undefined) message = { ...message, metadata: event.metadata };\n return [...messages, message];\n }\n case \"text_start\":\n return upsertPart(messages, event.messageId, {\n id: event.partId,\n type: \"text\",\n text: \"\",\n });\n case \"text_delta\":\n return updatePart(messages, event.messageId, event.partId, (part) => ({\n id: event.partId,\n type: \"text\",\n text: part?.type === \"text\" ? `${part.text}${event.delta}` : event.delta,\n }));\n case \"text_end\":\n return updatePart(messages, event.messageId, event.partId, (part) => {\n const next: Extract<UIMessagePart, { type: \"text\" }> = {\n id: event.partId,\n type: \"text\",\n text: event.text ?? (part?.type === \"text\" ? part.text : \"\"),\n };\n if (event.signature !== undefined) next.signature = event.signature;\n return next;\n });\n case \"reasoning_start\": {\n const reasoning: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: event.partId,\n type: \"reasoning\",\n text: \"\",\n };\n if (event.reasoningId !== undefined) reasoning.reasoningId = event.reasoningId;\n return upsertPart(messages, event.messageId, reasoning);\n }\n case \"reasoning_delta\":\n return updatePart(messages, event.messageId, event.partId, (part) => {\n const reasoning: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: event.partId,\n type: \"reasoning\",\n text: part?.type === \"reasoning\" ? `${part.text}${event.delta}` : event.delta,\n };\n if (part?.type === \"reasoning\" && part.reasoningId !== undefined) {\n reasoning.reasoningId = part.reasoningId;\n }\n const content = appendReasoningContent(\n part?.type === \"reasoning\" ? part.content : undefined,\n event,\n );\n if (content !== undefined) reasoning.content = content;\n return reasoning;\n });\n case \"reasoning_end\":\n return updatePart(messages, event.messageId, event.partId, (part) => {\n const reasoning: Extract<UIMessagePart, { type: \"reasoning\" }> = {\n id: event.partId,\n type: \"reasoning\",\n text: event.text ?? (part?.type === \"reasoning\" ? part.text : \"\"),\n };\n if (part?.type === \"reasoning\" && part.reasoningId !== undefined) {\n reasoning.reasoningId = part.reasoningId;\n }\n if (event.content !== undefined) {\n reasoning.content = event.content;\n } else if (part?.type === \"reasoning\" && part.content !== undefined) {\n reasoning.content = part.content;\n }\n return reasoning;\n });\n case \"tool_call_start\": {\n const part: UIToolMessagePart = {\n id: event.partId,\n type: \"tool\",\n toolName: event.toolName ?? \"\",\n toolCallId: event.toolCallId,\n state: \"input-streaming\",\n input: \"\",\n };\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.turn !== undefined) part.turn = event.turn;\n return upsertPart(messages, event.messageId, part);\n }\n case \"tool_call_delta\":\n return updatePart(messages, event.messageId, event.partId, (current) => {\n const part =\n current?.type === \"tool\"\n ? toolPartBase(current)\n : {\n id: event.partId,\n type: \"tool\" as const,\n toolName: event.toolName ?? \"\",\n toolCallId: event.toolCallId,\n };\n const previous =\n current?.type === \"tool\" && typeof current.input === \"string\" ? current.input : \"\";\n if (event.toolName !== undefined) part.toolName = event.toolName;\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.signature !== undefined) part.signature = event.signature;\n if (event.turn !== undefined) part.turn = event.turn;\n return {\n ...part,\n state: \"input-streaming\",\n input: event.mode === \"replace\" ? event.delta : `${previous}${event.delta}`,\n };\n });\n case \"tool_call_end\": {\n const part: UIToolMessagePart = {\n id: event.partId,\n type: \"tool\",\n toolName: event.toolName,\n toolCallId: event.toolCallId,\n state: \"input-available\",\n input: event.input,\n };\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.turn !== undefined) part.turn = event.turn;\n if (event.signature !== undefined) part.signature = event.signature;\n return upsertPart(messages, event.messageId, part);\n }\n case \"tool_result\":\n return updatePart(messages, event.messageId, event.partId, (current) => {\n const part =\n current?.type === \"tool\"\n ? toolPartBase(current)\n : {\n id: event.partId,\n type: \"tool\" as const,\n toolName: event.toolName,\n toolCallId: event.toolCallId,\n };\n if (event.callId !== undefined) part.callId = event.callId;\n if (event.internalCallId !== undefined) part.internalCallId = event.internalCallId;\n if (event.turn !== undefined) part.turn = event.turn;\n if (event.result.status === \"error\") {\n return {\n ...part,\n state: \"error\",\n input: event.input,\n error: event.result.error,\n };\n }\n const completed: Extract<UIToolMessagePart, { state: \"output-available\" }> = {\n ...part,\n state: \"output-available\",\n input: event.input,\n output: event.result.output,\n };\n if (event.result.content !== undefined) completed.resultContent = event.result.content;\n return completed;\n });\n case \"source\":\n return upsertPart(messages, event.messageId, {\n id: event.partId,\n type: \"source\",\n source: event.source,\n });\n case \"attachment\":\n return upsertPart(messages, event.messageId, {\n id: event.partId,\n type: \"attachment\",\n attachment: event.attachment,\n });\n case \"data\":\n if (event.transient === true) return messages;\n return appendToLastAssistant(messages, {\n id: createClientId(\"data\"),\n type: \"data\",\n name: event.name,\n data: event.data,\n } as UIMessagePart<Data>);\n case \"message_end\":\n return messages.map((message) => {\n if (message.id !== event.messageId) return message;\n const metadata = mergeMetadata(message.metadata, event.metadata);\n const generationUpdate: UIMessageGeneration = {\n runId: event.runId,\n };\n if (event.usage !== undefined) generationUpdate.usage = event.usage;\n if (event.contextUsage !== undefined) {\n generationUpdate.contextUsage = event.contextUsage;\n }\n const generation = mergeGeneration(message.generation, generationUpdate);\n let updated: UIMessage<Metadata, Data> = {\n ...message,\n generation,\n };\n if (event.parts !== undefined) {\n updated = { ...updated, parts: reconcileFinalParts(message.parts, event.parts) };\n }\n if (event.modelMessageId !== undefined) {\n updated = { ...updated, modelMessageId: event.modelMessageId };\n }\n if (metadata !== undefined) updated = { ...updated, metadata };\n return updated;\n });\n case \"run_end\": {\n const generation: UIMessageGeneration = {\n runId: event.runId,\n status: event.status,\n };\n if (event.contextUsage !== undefined) generation.contextUsage = event.contextUsage;\n if (event.trace !== undefined) generation.trace = event.trace;\n if (event.memoryCompaction !== undefined) {\n generation.memoryCompaction = event.memoryCompaction;\n }\n return updateLastAssistantGeneration(messages, generation);\n }\n case \"error\":\n return appendToLastAssistant(messages, {\n id: createClientId(\"error\"),\n type: \"error\",\n error: event.error,\n });\n default:\n return messages;\n }\n}\n\nfunction toolPartBase(\n part: UIToolMessagePart,\n): Omit<UIToolMessagePart, \"state\" | \"input\" | \"output\" | \"resultContent\" | \"error\"> {\n const base = {\n id: part.id,\n type: part.type,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n };\n if (part.callId !== undefined) Object.assign(base, { callId: part.callId });\n if (part.internalCallId !== undefined) {\n Object.assign(base, { internalCallId: part.internalCallId });\n }\n if (part.turn !== undefined) Object.assign(base, { turn: part.turn });\n if (part.signature !== undefined) Object.assign(base, { signature: part.signature });\n return base;\n}\n\nfunction reconcileFinalParts<Data extends ClientDataMap>(\n current: readonly UIMessagePart<Data>[],\n final: readonly UIMessagePart<Data>[],\n): UIMessagePart<Data>[] {\n const clientOnly = current.filter(\n (part) => part.type === \"source\" || part.type === \"data\" || part.type === \"error\",\n );\n return [...final, ...clientOnly];\n}\n\nfunction appendReasoningContent(\n current: Extract<UIMessagePart, { type: \"reasoning\" }>[\"content\"],\n event: Extract<ClientStreamEvent, { type: \"reasoning_delta\" }>,\n): Extract<UIMessagePart, { type: \"reasoning\" }>[\"content\"] {\n if (event.contentType === undefined && event.signature === undefined) return current;\n const type = event.contentType ?? \"text\";\n const next = [...(current ?? [])];\n const last = next.at(-1);\n if (type === \"text\") {\n if (last?.type === \"text\" && last.signature === event.signature) {\n next[next.length - 1] = { ...last, text: `${last.text}${event.delta}` };\n } else {\n let detail: Extract<\n NonNullable<Extract<UIMessagePart, { type: \"reasoning\" }>[\"content\"]>[number],\n { type: \"text\" }\n > = {\n type,\n text: event.delta,\n };\n if (event.signature !== undefined) detail = { ...detail, signature: event.signature };\n next.push(detail);\n }\n return next;\n }\n if (type === \"summary\") {\n if (last?.type === \"summary\") {\n next[next.length - 1] = { ...last, text: `${last.text}${event.delta}` };\n } else next.push({ type, text: event.delta });\n return next;\n }\n if (type === \"encrypted\") {\n if (last?.type === \"encrypted\") {\n next[next.length - 1] = { ...last, data: `${last.data}${event.delta}` };\n } else next.push({ type, data: event.delta });\n return next;\n }\n if (last?.type === \"redacted\") {\n next[next.length - 1] = { ...last, data: `${last.data}${event.delta}` };\n } else next.push({ type, data: event.delta });\n return next;\n}\n\nexport function messageText<Metadata extends JsonObject, Data extends ClientDataMap>(\n message: UIMessage<Metadata, Data>,\n): string {\n return message.parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n}\n\nexport function assistantText<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n): string {\n const assistant = [...messages].reverse().find((message) => message.role === \"assistant\");\n return assistant === undefined ? \"\" : messageText(assistant);\n}\n\nfunction upsertPart<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n messageId: string,\n part: UIMessagePart<Data>,\n): readonly UIMessage<Metadata, Data>[] {\n return updatePart(messages, messageId, part.id, () => part);\n}\n\nfunction updatePart<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n messageId: string,\n partId: string,\n update: (part: UIMessagePart<Data> | undefined) => UIMessagePart<Data>,\n): readonly UIMessage<Metadata, Data>[] {\n const current = ensureAssistant(messages, messageId);\n return current.map((message) => {\n if (message.id !== messageId) return message;\n const index = message.parts.findIndex((part) => part.id === partId);\n if (index === -1) return { ...message, parts: [...message.parts, update(undefined)] };\n const parts = [...message.parts];\n parts[index] = update(parts[index]);\n return { ...message, parts };\n });\n}\n\nfunction ensureAssistant<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n messageId: string,\n): readonly UIMessage<Metadata, Data>[] {\n return messages.some((message) => message.id === messageId)\n ? messages\n : [...messages, { id: messageId, role: \"assistant\", parts: [] }];\n}\n\nfunction appendToLastAssistant<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n part: UIMessagePart<Data>,\n): readonly UIMessage<Metadata, Data>[] {\n const index = findLastIndex(messages, (message) => message.role === \"assistant\");\n if (index === -1) {\n return [...messages, { id: createClientId(\"msg\"), role: \"assistant\", parts: [part] }];\n }\n const next = [...messages];\n const message = next[index] as UIMessage<Metadata, Data>;\n next[index] = { ...message, parts: [...message.parts, part] };\n return next;\n}\n\nfunction updateLastAssistantGeneration<Metadata extends JsonObject, Data extends ClientDataMap>(\n messages: readonly UIMessage<Metadata, Data>[],\n value: UIMessageGeneration,\n): readonly UIMessage<Metadata, Data>[] {\n const index = findLastIndex(messages, (message) => message.role === \"assistant\");\n if (index === -1) return messages;\n const next = [...messages];\n const message = next[index] as UIMessage<Metadata, Data>;\n next[index] = { ...message, generation: mergeGeneration(message.generation, value) };\n return next;\n}\n\nfunction mergeMetadata<Metadata extends JsonObject>(\n current: Metadata | undefined,\n provided: Metadata | undefined,\n): Metadata | undefined {\n if (provided === undefined) return current;\n if (!isRecord(current) || !isRecord(provided)) return provided;\n const next = { ...current, ...provided };\n return isJsonValue(next) ? (next as Metadata) : provided;\n}\n\nfunction mergeGeneration(\n current: UIMessageGeneration | undefined,\n provided: UIMessageGeneration,\n): UIMessageGeneration {\n return {\n ...current,\n ...Object.fromEntries(Object.entries(provided).filter(([, value]) => value !== undefined)),\n };\n}\n\nfunction findLastIndex<T>(items: readonly T[], predicate: (item: T) => boolean): number {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (predicate(items[index] as T)) return index;\n }\n return -1;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":["isJsonValue","content","isJsonValue","isJsonValue","textContent","tool","isJsonValue","isJsonValue","isJsonValue","message","isRecord","isJsonValue"]}