@anvia/core 0.21.0 → 0.23.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/agent/index.d.ts +11 -11
- package/dist/agent/index.js +9 -9
- package/dist/{agent-Q7FT1xmG.d.ts → agent-x3YTyv5i.d.ts} +8 -7
- package/dist/audio-generation/index.d.ts +1 -1
- package/dist/{chunk-PJDL5UT2.js → chunk-ADH7NNCS.js} +63 -1
- package/dist/chunk-ADH7NNCS.js.map +1 -0
- package/dist/{chunk-3IYTCGHS.js → chunk-BALBBVI3.js} +14 -7
- package/dist/{chunk-3IYTCGHS.js.map → chunk-BALBBVI3.js.map} +1 -1
- package/dist/{chunk-N3YV3WCO.js → chunk-DALYP4PX.js} +21 -4
- package/dist/chunk-DALYP4PX.js.map +1 -0
- package/dist/{chunk-6X2UTX3L.js → chunk-HYUYZEAJ.js} +2 -2
- package/dist/{chunk-SWUH4G2I.js → chunk-I6XOQ4LK.js} +2 -2
- package/dist/{chunk-WHAPIIEZ.js → chunk-JI5YZWNT.js} +5 -5
- package/dist/{chunk-F56AMXMQ.js → chunk-MC3CCKEB.js} +2 -2
- package/dist/{chunk-TGLNXVII.js → chunk-MRQLEK2B.js} +3 -3
- package/dist/{chunk-MTGNA4OS.js → chunk-Q25IWLBT.js} +2 -2
- package/dist/{chunk-ZNTIUOKL.js → chunk-UQX6EXWG.js} +2 -2
- package/dist/{chunk-ZSTUMG7G.js → chunk-YLMDBQO4.js} +5 -5
- package/dist/completion/index.d.ts +3 -3
- package/dist/completion/index.js +11 -5
- package/dist/{errors-Bf661V89.d.ts → errors-2moLDuuN.d.ts} +2 -2
- package/dist/evals/index.d.ts +124 -10
- package/dist/evals/index.js +1021 -29
- package/dist/evals/index.js.map +1 -1
- package/dist/extractor/index.d.ts +8 -8
- package/dist/extractor/index.js +10 -10
- package/dist/guardrails/index.d.ts +1 -1
- package/dist/hooks/index.d.ts +3 -3
- package/dist/image-generation/index.d.ts +1 -1
- package/dist/{index-XTUEMWhU.d.ts → index-BxSbmOMr.d.ts} +4 -2
- package/dist/index.d.ts +13 -13
- package/dist/index.js +18 -12
- package/dist/internal/agent.d.ts +8 -8
- package/dist/internal/agent.js +7 -7
- package/dist/{json-D9IvOgx_.d.ts → json-BVPssigK.d.ts} +1 -1
- package/dist/loaders/index.d.ts +1 -1
- package/dist/mcp/index.d.ts +4 -4
- package/dist/memory/index.d.ts +4 -4
- package/dist/memory/index.js +4 -4
- package/dist/{middleware-DfMc30in.d.ts → middleware-Dp3d_pxi.d.ts} +3 -3
- package/dist/observability/index.d.ts +3 -3
- package/dist/pipeline/index.d.ts +8 -8
- package/dist/request/index.d.ts +8 -8
- package/dist/request/index.js +6 -6
- package/dist/skills/index.d.ts +4 -4
- package/dist/skills/index.js +2 -2
- package/dist/{think-tool-CpCKo8Q8.d.ts → think-tool-DfCMuO8e.d.ts} +1 -1
- package/dist/tool/index.d.ts +5 -5
- package/dist/tool/index.js +2 -2
- package/dist/{tool-Dhwg__1L.d.ts → tool-Cohdv5GC.d.ts} +1 -1
- package/dist/transcription/index.d.ts +1 -1
- package/dist/{types-fBv8mhvP.d.ts → types-04LqWrmy.d.ts} +1 -1
- package/dist/{types-DBHzPsbx.d.ts → types-BrLbKnEz.d.ts} +1 -1
- package/dist/{types-BCA8p0sb.d.ts → types-D9JpeAPF.d.ts} +1 -1
- package/dist/{types-XjIh933x.d.ts → types-G12i56s2.d.ts} +26 -1
- package/dist/{types-BBEf34DP.d.ts → types-JJCxRnaZ.d.ts} +2 -2
- package/dist/{types-BrxxAtcJ.d.ts → types-O-abTIin.d.ts} +1 -1
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.js +2 -2
- package/dist/vector-store/index.d.ts +4 -4
- package/package.json +1 -1
- package/dist/chunk-N3YV3WCO.js.map +0 -1
- package/dist/chunk-PJDL5UT2.js.map +0 -1
- /package/dist/{chunk-6X2UTX3L.js.map → chunk-HYUYZEAJ.js.map} +0 -0
- /package/dist/{chunk-SWUH4G2I.js.map → chunk-I6XOQ4LK.js.map} +0 -0
- /package/dist/{chunk-WHAPIIEZ.js.map → chunk-JI5YZWNT.js.map} +0 -0
- /package/dist/{chunk-F56AMXMQ.js.map → chunk-MC3CCKEB.js.map} +0 -0
- /package/dist/{chunk-TGLNXVII.js.map → chunk-MRQLEK2B.js.map} +0 -0
- /package/dist/{chunk-MTGNA4OS.js.map → chunk-Q25IWLBT.js.map} +0 -0
- /package/dist/{chunk-ZNTIUOKL.js.map → chunk-UQX6EXWG.js.map} +0 -0
- /package/dist/{chunk-ZSTUMG7G.js.map → chunk-YLMDBQO4.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/request/errors.ts","../src/internal/async-queue.ts","../src/internal/prompt-runtime/memory.ts","../src/internal/prompt-runtime/retrieval.ts","../src/internal/prompt-runtime/stream-accumulator.ts","../src/internal/prompt-runtime/stream-events.ts","../src/internal/prompt-runtime/tool-execution.ts","../src/internal/rag-text.ts","../src/observability/group.ts","../src/request/retry.ts","../src/request/prompt-request.ts"],"sourcesContent":["import type { Message } from \"../completion/index\";\nimport type { ToolApprovalRequest } from \"../tool\";\n\nexport class MaxTurnsError extends Error {\n constructor(\n readonly maxTurns: number,\n readonly chatHistory: Message[],\n readonly prompt: Message,\n ) {\n super(`Reached max turn limit: ${maxTurns}`);\n this.name = \"MaxTurnsError\";\n }\n}\n\nexport class PromptCancelledError extends Error {\n constructor(\n readonly chatHistory: Message[],\n readonly reason: string,\n ) {\n super(`Prompt cancelled: ${reason}`);\n this.name = \"PromptCancelledError\";\n }\n}\n\nexport class ToolApprovalRequiredError extends Error {\n constructor(readonly request: ToolApprovalRequest) {\n super(`Tool approval required for ${request.toolName}, but no approval handler is configured.`);\n this.name = \"ToolApprovalRequiredError\";\n }\n}\n","type AsyncQueueWaiter<T> = {\n resolve: (result: IteratorResult<T>) => void;\n reject: (error: unknown) => void;\n};\n\nexport type AsyncQueue<T> = AsyncIterable<T> & {\n enqueue(value: T): void;\n close(): void;\n throw(error: unknown): void;\n};\n\nexport function createAsyncQueue<T>(): AsyncQueue<T> {\n const values: T[] = [];\n const waiters: AsyncQueueWaiter<T>[] = [];\n let closed = false;\n let error: unknown;\n\n function flush(): void {\n while (waiters.length > 0 && values.length > 0) {\n const waiter = waiters.shift();\n const value = values.shift() as T;\n if (waiter !== undefined) {\n waiter.resolve({ value, done: false });\n }\n }\n\n if (values.length > 0 || waiters.length === 0 || !closed) {\n return;\n }\n\n while (waiters.length > 0) {\n const waiter = waiters.shift();\n if (waiter === undefined) {\n continue;\n }\n if (error !== undefined) {\n waiter.reject(error);\n } else {\n waiter.resolve({ value: undefined, done: true });\n }\n }\n }\n\n return {\n enqueue(value: T): void {\n if (closed) {\n return;\n }\n values.push(value);\n flush();\n },\n close(): void {\n closed = true;\n flush();\n },\n throw(thrown: unknown): void {\n closed = true;\n error = thrown;\n flush();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next(): Promise<IteratorResult<T>> {\n if (values.length > 0) {\n const value = values.shift() as T;\n return Promise.resolve({ value, done: false });\n }\n if (error !== undefined) {\n return Promise.reject(error);\n }\n if (closed) {\n return Promise.resolve({ value: undefined, done: true });\n }\n return new Promise((resolve, reject) => {\n waiters.push({ resolve, reject });\n });\n },\n };\n },\n };\n}\n","import type { Agent } from \"../../agent/agent\";\nimport { type Message as MessageType, Usage } from \"../../completion/index\";\nimport {\n createMemoryCompactionSummary,\n cumulativeCompactedMessageCount,\n} from \"../../memory/compaction\";\nimport { MemoryCompactionConflictError, MemoryCompactionError } from \"../../memory/errors\";\nimport type { MemoryContext, MemoryRegistration, MemorySavePolicy } from \"../../memory/types\";\n\nexport type MemoryPreparation = {\n history: MessageType[];\n usage: ReturnType<typeof Usage.empty>;\n compaction?: {\n originalMessageCount: number;\n compactedMessageCount: number;\n retainedMessageCount: number;\n conflictRetries: number;\n };\n};\n\nexport class PromptRequestMemory {\n constructor(\n private readonly agent: Agent,\n private readonly memoryContext: MemoryContext | undefined,\n private readonly initialHistory: MessageType[],\n ) {}\n\n memoryPolicy(): MemorySavePolicy | undefined {\n return this.memory()?.options.savePolicy;\n }\n\n pendingTurnMessages(newMessages: MessageType[]): MessageType[] {\n return this.memoryPolicy() === \"turn\" ? [...newMessages] : [];\n }\n\n async prepareRun(runId: string, newMessages: MessageType[]): Promise<MemoryPreparation> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return {\n history: this.initialHistory,\n usage: Usage.empty(),\n };\n }\n\n const preparation = await this.prepareStoredHistory(memory, runId, newMessages.length);\n const memoryHistory = preparation.history;\n const chatHistory = [...memoryHistory, ...this.initialHistory];\n if (memory.options.savePolicy === \"message\") {\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn: 1,\n messages: newMessages,\n });\n }\n return {\n ...preparation,\n history: chatHistory,\n };\n }\n\n async commitMessages(\n runId: string,\n turn: number,\n messages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined || messages.length === 0) {\n return;\n }\n if (memory.options.savePolicy === \"message\") {\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages,\n });\n } else if (memory.options.savePolicy === \"turn\") {\n pendingTurnMessages.push(...messages);\n }\n }\n\n async commitCompletedTurn(\n runId: string,\n turn: number,\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryContext === undefined ||\n memory.options.savePolicy !== \"turn\" ||\n pendingTurnMessages.length === 0\n ) {\n return;\n }\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages: [...pendingTurnMessages],\n });\n pendingTurnMessages.length = 0;\n }\n\n async commitCompletedRun(\n runId: string,\n turn: number,\n newMessages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n await this.commitCompletedTurn(runId, turn, pendingTurnMessages);\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryContext === undefined ||\n memory.options.savePolicy !== \"run\"\n ) {\n return;\n }\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages: [...newMessages],\n });\n }\n\n async recordError(runId: string, error: unknown, newMessages: MessageType[]): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return;\n }\n await memory.store.recordError?.({\n context: this.memoryContext,\n runId,\n error,\n messages: [...newMessages],\n });\n }\n\n private memory(): MemoryRegistration | undefined {\n return this.memoryContext === undefined ? undefined : this.agent.memory;\n }\n\n private async prepareStoredHistory(\n memory: MemoryRegistration,\n runId: string,\n incomingMessageCount: number,\n ): Promise<MemoryPreparation> {\n const context = this.memoryContext;\n if (context === undefined) {\n return { history: [], usage: Usage.empty() };\n }\n const options = memory.options.compaction;\n const capability = memory.store.compaction;\n if (options === undefined || capability === undefined) {\n return {\n history: await memory.store.load(context),\n usage: Usage.empty(),\n };\n }\n\n let usage = Usage.empty();\n let conflictRetries = 0;\n for (let attempt = 0; attempt <= options.conflictRetries; attempt += 1) {\n const snapshot = await capability.load(context);\n const compactedMessageCount = compactedPrefixLength(\n snapshot.messages,\n incomingMessageCount,\n options.maxMessages,\n options.keepRecentUserTurns,\n );\n if (compactedMessageCount === 0) {\n return { history: snapshot.messages, usage };\n }\n\n const prefix = snapshot.messages.slice(0, compactedMessageCount);\n let result: Awaited<ReturnType<typeof options.compactor>>;\n try {\n result = await options.compactor({\n context,\n messages: prefix,\n });\n } catch (error) {\n throw remappedCompactorError(error, usage);\n }\n if (result.usage !== undefined) {\n usage = Usage.add(usage, result.usage);\n }\n const summaryText = result.summary.trim();\n if (summaryText.length === 0) {\n throw new MemoryCompactionError(\"Memory compactor returned an empty summary.\", {\n usage,\n });\n }\n const summary = createMemoryCompactionSummary(\n summaryText,\n cumulativeCompactedMessageCount(prefix),\n );\n let commit: Awaited<ReturnType<typeof capability.commit>>;\n try {\n commit = await capability.commit({\n context,\n revision: snapshot.revision,\n compactedMessageCount,\n summary,\n runId: `memory-compaction:${runId}:${attempt + 1}`,\n });\n } catch (error) {\n throw new MemoryCompactionError(\"Memory compaction store commit failed.\", {\n cause: error,\n usage,\n });\n }\n if (commit === \"committed\") {\n const retained = snapshot.messages.slice(compactedMessageCount);\n return {\n history: [summary, ...retained],\n usage,\n compaction: {\n originalMessageCount: snapshot.messages.length,\n compactedMessageCount,\n retainedMessageCount: retained.length,\n conflictRetries,\n },\n };\n }\n conflictRetries += 1;\n }\n\n throw new MemoryCompactionConflictError(options.conflictRetries + 1, usage);\n }\n}\n\nfunction compactedPrefixLength(\n messages: MessageType[],\n incomingMessageCount: number,\n maxMessages: number,\n keepRecentUserTurns: number,\n): number {\n if (messages.length + incomingMessageCount <= maxMessages) {\n return 0;\n }\n const userMessageIndexes = messages.flatMap((message, index) =>\n message.role === \"user\" ? [index] : [],\n );\n // Keep the recent user-led tail intact. If there are not enough user messages to retain a\n // complete tail, skip compaction even when the transcript already exceeds maxMessages.\n if (userMessageIndexes.length <= keepRecentUserTurns) {\n return 0;\n }\n return userMessageIndexes[userMessageIndexes.length - keepRecentUserTurns] ?? 0;\n}\n\nfunction remappedCompactorError(error: unknown, usage: ReturnType<typeof Usage.empty>): Error {\n if (error instanceof MemoryCompactionError) {\n const mergedUsage =\n error.usage === undefined\n ? usage\n : isEmptyUsage(usage)\n ? error.usage\n : Usage.add(usage, error.usage);\n if (mergedUsage === error.usage || (error.usage === undefined && isEmptyUsage(usage))) {\n return error;\n }\n return new MemoryCompactionError(error.message, {\n cause: error,\n usage: mergedUsage,\n });\n }\n return new MemoryCompactionError(\"Memory compactor failed.\", {\n cause: error,\n usage,\n });\n}\n\nfunction isEmptyUsage(usage: ReturnType<typeof Usage.empty>): boolean {\n return (\n usage.inputTokens === 0 &&\n usage.outputTokens === 0 &&\n usage.totalTokens === 0 &&\n usage.cachedInputTokens === 0 &&\n usage.cacheCreationInputTokens === 0\n );\n}\n","import type { Agent } from \"../../agent/agent\";\nimport type { Document, ToolDefinition } from \"../../completion/index\";\n\nexport async function fetchDynamicContext(\n agent: Agent,\n ragText: string | undefined,\n): Promise<Document[]> {\n if (ragText === undefined || ragText.length === 0 || agent.dynamicContexts.length === 0) {\n return [];\n }\n\n const documents: Document[] = [];\n for (const registration of agent.dynamicContexts) {\n const results = await registration.index.search({\n query: ragText,\n topK: registration.options.topK,\n threshold: registration.options.threshold,\n filter: registration.options.filter,\n });\n for (const result of results) {\n const formatted = registration.options.format?.(result);\n if (formatted !== undefined) {\n documents.push(formatted);\n } else {\n const metadata = formatMetadata(result.metadata);\n const document: Document = {\n id: result.id,\n text:\n typeof result.document === \"string\"\n ? result.document\n : JSON.stringify(result.document, null, 2),\n };\n if (metadata !== undefined) {\n document.additionalProps = metadata;\n }\n documents.push(document);\n }\n }\n }\n return documents;\n}\n\nexport async function fetchToolDefinitions(\n agent: Agent,\n ragText: string | undefined,\n): Promise<ToolDefinition[]> {\n const staticDefinitions = await agent.toolSet.getToolDefinitions(ragText);\n if (ragText === undefined || ragText.length === 0 || agent.dynamicTools.length === 0) {\n return staticDefinitions;\n }\n\n const definitions = [...staticDefinitions];\n const names = new Set(staticDefinitions.map((definition) => definition.name));\n for (const registration of agent.dynamicTools) {\n const results = await registration.index.search({\n query: ragText,\n topK: registration.options.topK,\n threshold: registration.options.threshold,\n filter: registration.options.filter,\n });\n for (const result of results) {\n if (names.has(result.document.toolName)) {\n continue;\n }\n names.add(result.document.toolName);\n definitions.push(result.document.definition);\n }\n }\n return definitions;\n}\n\nfunction formatMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata === undefined) {\n return undefined;\n }\n\n return Object.fromEntries(Object.entries(metadata).map(([key, value]) => [key, String(value)]));\n}\n","import type {\n AssistantContent as AssistantContentType,\n CompletionResponse,\n CompletionSource,\n CompletionStreamEvent,\n JsonValue,\n ProviderToolCall,\n ReasoningContent,\n ToolCall,\n} from \"../../completion/index\";\nimport { Usage } from \"../../completion/index\";\nimport type { AgentDeltaEvent } from \"../../request/types\";\n\ntype ReasoningState = {\n id?: string;\n text: string;\n content?: ReasoningContent[];\n};\n\ntype PartialToolCall = {\n id: string;\n callId?: string;\n name: string;\n argumentsText: string;\n signature?: string;\n additionalParams?: JsonValue;\n};\n\ntype OrderedPartRef =\n | { type: \"text\"; key: string }\n | { type: \"reasoning\"; key: string }\n | { type: \"tool_call\"; key: string };\n\nexport class CompletionStreamAccumulator<RawResponse = unknown> {\n private orderedParts: OrderedPartRef[] = [];\n private textParts = new Map<string, string>();\n private reasoningByKey = new Map<string, ReasoningState>();\n private reasoningKeyById = new Map<string, string>();\n private toolCalls = new Map<string, PartialToolCall>();\n private sources = new Map<string, CompletionSource>();\n private providerToolCalls = new Map<string, ProviderToolCall>();\n private finalResponse: CompletionResponse<RawResponse> | undefined;\n private messageId: string | undefined;\n private nextTextKey = 0;\n private nextReasoningKey = 0;\n\n accept(event: CompletionStreamEvent<RawResponse>): AgentDeltaEvent | undefined {\n if (event.type === \"text_delta\") {\n this.appendText(event.delta);\n return { type: \"text_delta\", delta: event.delta };\n }\n\n if (event.type === \"reasoning_delta\") {\n const reasoning = this.reasoningStateForEvent(event);\n this.appendReasoning(reasoning, event);\n return reasoningDeltaEvent(event);\n }\n\n if (event.type === \"tool_call_delta\") {\n const toolCall = this.toolCallStateForId(event.id);\n if (event.callId !== undefined && event.callId.length > 0) toolCall.callId = event.callId;\n if (event.name !== undefined && event.name.length > 0) toolCall.name = event.name;\n if (event.signature !== undefined) toolCall.signature = event.signature;\n if (event.argumentsDelta !== undefined) {\n if (event.argumentsMode === \"replace\") {\n toolCall.argumentsText = event.argumentsDelta;\n } else {\n toolCall.argumentsText += event.argumentsDelta;\n }\n }\n return undefined;\n }\n\n if (event.type === \"tool_call\") {\n this.upsertToolCall(event.toolCall);\n return { type: \"tool_call\", toolCall: event.toolCall };\n }\n\n if (event.type === \"source\") {\n this.sources.set(sourceKey(event.source), event.source);\n return { type: \"source\", source: event.source };\n }\n\n if (event.type === \"provider_tool_call\") {\n this.providerToolCalls.set(event.toolCall.id, event.toolCall);\n return { type: \"provider_tool_call\", toolCall: event.toolCall };\n }\n\n if (event.type === \"message_id\") {\n this.messageId = event.id;\n return undefined;\n }\n\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n return undefined;\n }\n\n return undefined;\n }\n\n response(): CompletionResponse<RawResponse> {\n const accumulatedResponse = this.buildAccumulatedResponse();\n if (this.finalResponse !== undefined) {\n if (accumulatedResponse.choice.length === 0) {\n return this.withAccumulatedArtifacts(this.finalResponse, accumulatedResponse);\n }\n return this.mergeFinalResponse(accumulatedResponse, this.finalResponse);\n }\n\n return accumulatedResponse;\n }\n\n private buildAccumulatedResponse(): CompletionResponse<RawResponse> {\n const choice: AssistantContentType[] = [];\n\n for (const part of this.orderedParts) {\n if (part.type === \"text\") {\n const text = this.textParts.get(part.key) ?? \"\";\n if (text.length > 0) {\n choice.push({ type: \"text\", text });\n }\n continue;\n }\n\n if (part.type === \"reasoning\") {\n const reasoning = this.reasoningByKey.get(part.key);\n if (reasoning !== undefined) {\n choice.push(reasoningContent(reasoning));\n }\n continue;\n }\n\n const toolCall = this.toolCalls.get(part.key);\n if (toolCall !== undefined) {\n choice.push(\n toolCallContent(toolCall, matchingFinalToolCall(toolCall, this.finalResponse?.choice)),\n );\n }\n }\n\n const response: CompletionResponse<RawResponse> = {\n choice,\n usage: Usage.empty(),\n rawResponse: undefined as RawResponse,\n };\n if (this.messageId !== undefined) {\n response.messageId = this.messageId;\n }\n const sources = [...this.sources.values()];\n if (sources.length > 0) {\n response.sources = sources;\n }\n const providerToolCalls = [...this.providerToolCalls.values()];\n if (providerToolCalls.length > 0) {\n response.providerToolCalls = providerToolCalls;\n }\n return response;\n }\n\n private upsertToolCall(toolCall: ToolCall): void {\n if (!this.toolCalls.has(toolCall.id)) {\n this.orderedParts.push({ type: \"tool_call\", key: toolCall.id });\n }\n const partial: PartialToolCall = {\n id: toolCall.id,\n name: toolCall.function.name,\n argumentsText: JSON.stringify(toolCall.function.arguments ?? {}),\n };\n if (toolCall.callId !== undefined) {\n partial.callId = toolCall.callId;\n }\n if (toolCall.signature !== undefined) {\n partial.signature = toolCall.signature;\n }\n if (toolCall.additionalParams !== undefined) {\n partial.additionalParams = toolCall.additionalParams;\n }\n this.toolCalls.set(toolCall.id, partial);\n }\n\n private mergeFinalResponse(\n accumulatedResponse: CompletionResponse<RawResponse>,\n finalResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n if (finalResponse.choice.length === 0) {\n const mergedResponse: CompletionResponse<RawResponse> = {\n ...accumulatedResponse,\n usage: finalResponse.usage,\n rawResponse: finalResponse.rawResponse,\n };\n if (finalResponse.messageId !== undefined) {\n mergedResponse.messageId = finalResponse.messageId;\n }\n return this.withAccumulatedArtifacts(mergedResponse, accumulatedResponse);\n }\n\n const finalById = new Map<string, ToolCall>();\n const finalByCallId = new Map<string, ToolCall>();\n for (const content of finalResponse.choice) {\n if (content.type !== \"tool_call\") {\n continue;\n }\n finalById.set(content.id, content);\n if (content.callId !== undefined) {\n finalByCallId.set(content.callId, content);\n }\n }\n\n const matchedFinalToolCalls = new Set<ToolCall>();\n const choice = accumulatedResponse.choice.map((content) => {\n if (content.type !== \"tool_call\") {\n return content;\n }\n\n const finalToolCall =\n finalById.get(content.id) ??\n (content.callId === undefined ? undefined : finalByCallId.get(content.callId));\n if (finalToolCall === undefined) {\n return content;\n }\n\n matchedFinalToolCalls.add(finalToolCall);\n return mergeFinalToolCall(content, finalToolCall);\n });\n\n for (const content of finalResponse.choice) {\n if (content.type !== \"tool_call\") {\n continue;\n }\n if (!matchedFinalToolCalls.has(content)) {\n choice.push(content);\n }\n }\n\n return this.withAccumulatedArtifacts({ ...finalResponse, choice }, accumulatedResponse);\n }\n\n private appendText(delta: string): void {\n const lastPart = this.orderedParts.at(-1);\n const key = lastPart?.type === \"text\" ? lastPart.key : this.createTextKey();\n if (lastPart?.type !== \"text\") {\n this.orderedParts.push({ type: \"text\", key });\n }\n this.textParts.set(key, `${this.textParts.get(key) ?? \"\"}${delta}`);\n }\n\n private reasoningStateForEvent(\n event: Extract<CompletionStreamEvent<RawResponse>, { type: \"reasoning_delta\" }>,\n ): ReasoningState {\n if (event.id !== undefined) {\n const existingKey = this.reasoningKeyById.get(event.id);\n if (existingKey !== undefined) {\n const existing = this.reasoningByKey.get(existingKey);\n if (existing !== undefined) {\n return existing;\n }\n }\n\n const key = this.createReasoningKey();\n const reasoning: ReasoningState = { id: event.id, text: \"\" };\n this.reasoningKeyById.set(event.id, key);\n this.reasoningByKey.set(key, reasoning);\n this.orderedParts.push({ type: \"reasoning\", key });\n return reasoning;\n }\n\n const lastPart = this.orderedParts.at(-1);\n if (lastPart?.type === \"reasoning\") {\n const lastReasoning = this.reasoningByKey.get(lastPart.key);\n if (lastReasoning !== undefined && lastReasoning.id === undefined) {\n return lastReasoning;\n }\n }\n\n const key = this.createReasoningKey();\n const reasoning: ReasoningState = { text: \"\" };\n this.reasoningByKey.set(key, reasoning);\n this.orderedParts.push({ type: \"reasoning\", key });\n return reasoning;\n }\n\n private toolCallStateForId(id: string): PartialToolCall {\n const existing = this.toolCalls.get(id);\n if (existing !== undefined) {\n return existing;\n }\n\n const toolCall: PartialToolCall = {\n id,\n name: \"\",\n argumentsText: \"\",\n };\n this.toolCalls.set(id, toolCall);\n this.orderedParts.push({ type: \"tool_call\", key: id });\n return toolCall;\n }\n\n private withMessageIdFallback(\n response: CompletionResponse<RawResponse>,\n accumulatedResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n if (response.messageId !== undefined || accumulatedResponse.messageId === undefined) {\n return response;\n }\n return { ...response, messageId: accumulatedResponse.messageId };\n }\n\n private withAccumulatedArtifacts(\n response: CompletionResponse<RawResponse>,\n accumulatedResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n const withMessageId = this.withMessageIdFallback(response, accumulatedResponse);\n const sources = mergeSources(accumulatedResponse.sources, response.sources);\n const providerToolCalls = mergeProviderToolCalls(\n accumulatedResponse.providerToolCalls,\n response.providerToolCalls,\n );\n return {\n ...withMessageId,\n ...(sources.length === 0 ? {} : { sources }),\n ...(providerToolCalls.length === 0 ? {} : { providerToolCalls }),\n };\n }\n\n private createTextKey(): string {\n this.nextTextKey += 1;\n return `text_${this.nextTextKey.toString()}`;\n }\n\n private createReasoningKey(): string {\n this.nextReasoningKey += 1;\n return `reasoning_${this.nextReasoningKey.toString()}`;\n }\n\n private appendReasoning(\n reasoning: ReasoningState,\n event: Extract<CompletionStreamEvent<RawResponse>, { type: \"reasoning_delta\" }>,\n ): void {\n const contentType = event.contentType ?? \"text\";\n if (contentType === \"text\" || contentType === \"summary\") {\n reasoning.text += event.delta;\n }\n\n if (event.contentType === undefined && event.signature === undefined) {\n return;\n }\n\n reasoning.content ??= [];\n const last = reasoning.content.at(-1);\n if (contentType === \"text\") {\n if (last?.type === \"text\") {\n last.text += event.delta;\n if (event.signature !== undefined) {\n last.signature = event.signature;\n }\n } else {\n reasoning.content.push(\n event.signature === undefined\n ? { type: \"text\", text: event.delta }\n : { type: \"text\", text: event.delta, signature: event.signature },\n );\n }\n return;\n }\n\n if (contentType === \"summary\") {\n if (last?.type === \"summary\") {\n last.text += event.delta;\n } else {\n reasoning.content.push({ type: \"summary\", text: event.delta });\n }\n return;\n }\n\n if (contentType === \"encrypted\") {\n reasoning.content.push({ type: \"encrypted\", data: event.delta });\n return;\n }\n\n reasoning.content.push({ type: \"redacted\", data: event.delta });\n }\n}\n\nfunction sourceKey(source: CompletionSource): string {\n return `${source.url}\\u0000${source.startIndex ?? \"\"}\\u0000${source.endIndex ?? \"\"}`;\n}\n\nfunction mergeSources(\n accumulated: CompletionSource[] | undefined,\n final: CompletionSource[] | undefined,\n): CompletionSource[] {\n const sources = new Map<string, CompletionSource>();\n for (const source of [...(accumulated ?? []), ...(final ?? [])]) {\n sources.set(sourceKey(source), source);\n }\n return [...sources.values()];\n}\n\nfunction mergeProviderToolCalls(\n accumulated: ProviderToolCall[] | undefined,\n final: ProviderToolCall[] | undefined,\n): ProviderToolCall[] {\n const toolCalls = new Map<string, ProviderToolCall>();\n for (const toolCall of [...(accumulated ?? []), ...(final ?? [])]) {\n toolCalls.set(toolCall.id, toolCall);\n }\n return [...toolCalls.values()];\n}\n\nfunction reasoningContent(reasoning: ReasoningState): AssistantContentType {\n const content =\n reasoning.content === undefined\n ? { type: \"reasoning\" as const, text: reasoning.text }\n : { type: \"reasoning\" as const, text: reasoning.text, content: reasoning.content };\n return reasoning.id === undefined ? content : { ...content, id: reasoning.id };\n}\n\nfunction toolCallContent(toolCall: PartialToolCall, finalToolCall?: ToolCall): ToolCall {\n const argumentsValue =\n finalToolCall !== undefined && !isEmptyToolArguments(finalToolCall.function.arguments)\n ? finalToolCall.function.arguments\n : parseToolArguments(toolCall.id, toolCall.argumentsText);\n const content: ToolCall = {\n type: \"tool_call\",\n id: toolCall.id,\n function: {\n name: toolCall.name,\n arguments: argumentsValue,\n },\n };\n if (toolCall.callId !== undefined) {\n content.callId = toolCall.callId;\n }\n if (toolCall.signature !== undefined) {\n content.signature = toolCall.signature;\n }\n if (toolCall.additionalParams !== undefined) {\n content.additionalParams = toolCall.additionalParams;\n }\n return content;\n}\n\nfunction matchingFinalToolCall(\n accumulated: PartialToolCall,\n finalChoice: AssistantContentType[] | undefined,\n): ToolCall | undefined {\n const byId = finalChoice?.find(\n (content): content is ToolCall => content.type === \"tool_call\" && content.id === accumulated.id,\n );\n if (byId !== undefined || accumulated.callId === undefined) {\n return byId;\n }\n return finalChoice?.find(\n (content): content is ToolCall =>\n content.type === \"tool_call\" && content.callId === accumulated.callId,\n );\n}\n\nfunction mergeFinalToolCall(accumulated: ToolCall, finalToolCall: ToolCall): ToolCall {\n const argumentsValue = isEmptyToolArguments(finalToolCall.function.arguments)\n ? accumulated.function.arguments\n : finalToolCall.function.arguments;\n return {\n ...accumulated,\n ...finalToolCall,\n function: {\n ...accumulated.function,\n ...finalToolCall.function,\n arguments: argumentsValue,\n },\n };\n}\n\nfunction reasoningDeltaEvent(\n event: Extract<CompletionStreamEvent, { type: \"reasoning_delta\" }>,\n): AgentDeltaEvent {\n const mapped: AgentDeltaEvent = { type: \"reasoning_delta\", delta: event.delta };\n if (event.id !== undefined) mapped.id = event.id;\n if (event.contentType !== undefined) mapped.contentType = event.contentType;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n}\n\nfunction isEmptyToolArguments(value: unknown): boolean {\n if (value === undefined || value === null) {\n return true;\n }\n if (typeof value === \"string\") {\n return value.trim().length === 0;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (typeof value === \"object\") {\n return Object.values(value).every((item) => item === undefined);\n }\n return false;\n}\n\nfunction parseToolArguments(toolCallId: string, text: string): JsonValue {\n if (text.trim().length === 0) {\n return {};\n }\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n throw new Error(\n `Completion returned tool call \"${toolCallId}\" with malformed JSON arguments; this indicates invalid provider output or incomplete stream assembly.`,\n );\n }\n}\n","import type { CompletionStreamEvent } from \"../../completion/types\";\nimport type {\n AgentDeltaEvent,\n AgentStreamEvent,\n AgentToolCallDeltaEvent,\n} from \"../../request/types\";\n\nexport function addTurn(turn: number, event: AgentDeltaEvent): AgentStreamEvent {\n if (event.type === \"text_delta\") {\n return { type: \"text_delta\", turn, delta: event.delta };\n }\n if (event.type === \"reasoning_delta\") {\n const mapped: AgentStreamEvent = { type: \"reasoning_delta\", turn, delta: event.delta };\n if (event.id !== undefined) mapped.id = event.id;\n if (event.contentType !== undefined) mapped.contentType = event.contentType;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n }\n if (event.type === \"source\") {\n return { type: \"source\", turn, source: event.source };\n }\n if (event.type === \"provider_tool_call\") {\n return { type: \"provider_tool_call\", turn, toolCall: event.toolCall };\n }\n return { type: \"tool_call\", turn, toolCall: event.toolCall };\n}\n\nexport function addTurnToToolCallDelta(\n turn: number,\n event: Extract<CompletionStreamEvent, { type: \"tool_call_delta\" }>,\n): AgentToolCallDeltaEvent {\n const mapped: AgentToolCallDeltaEvent = {\n type: \"tool_call_delta\",\n turn,\n id: event.id,\n };\n if (event.callId !== undefined) mapped.callId = event.callId;\n if (event.name !== undefined) mapped.name = event.name;\n if (event.argumentsDelta !== undefined) mapped.argumentsDelta = event.argumentsDelta;\n if (event.argumentsMode !== undefined) mapped.argumentsMode = event.argumentsMode;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n}\n\nexport function isGenerationDeltaEvent(type: string): boolean {\n return (\n type === \"text_delta\" ||\n type === \"reasoning_delta\" ||\n type === \"tool_call_delta\" ||\n type === \"tool_call\" ||\n type === \"source\" ||\n type === \"provider_tool_call\"\n );\n}\n","import type { Agent } from \"../../agent/agent\";\nimport type {\n JsonObject,\n ToolCall,\n ToolDefinition,\n ToolResult,\n ToolResultContent,\n} from \"../../completion\";\nimport { ToolContent } from \"../../completion\";\nimport type { PromptHook, ToolApprovalRequestOptions, ToolHookArgs } from \"../../hooks\";\nimport { runControl, toolCallControl } from \"../../hooks\";\nimport type { ActiveAgentRunObservers, ActiveToolObservers } from \"../../observability/group\";\nimport type {\n AgentToolErrorArgs,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n} from \"../../observability/types\";\nimport { ToolApprovalRequiredError } from \"../../request/errors\";\nimport type { AgentChildStreamEvent } from \"../../request/types\";\nimport type {\n AnyTool,\n NormalizedToolOutput,\n ToolApprovalContext,\n ToolApprovalDecision,\n ToolApprovalPolicy,\n ToolApprovalRequest,\n ToolApprovalRunContext,\n ToolApprovalsOptions,\n ToolCallContext,\n ToolCallStreamEvent,\n} from \"../../tool\";\nimport { parseToolArgs, toolResultContentToText } from \"../../tool\";\nimport type {\n AgentMiddleware,\n ToolOutputMiddlewareArgs,\n ToolOutputMiddlewareResult,\n} from \"../../tool/middleware\";\nimport { mapWithConcurrency } from \"../concurrency\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport type ToolResultEventPayload = {\n type: \"tool_result\";\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n args: string;\n result: string;\n structuredResult?: ToolResultContent[] | undefined;\n};\n\nexport type AgentToolEventPayload = {\n type: \"agent_tool_event\";\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n agentId: string;\n agentName?: string;\n event: AgentChildStreamEvent;\n};\n\nexport type ToolExecutionEventPayload = ToolResultEventPayload | AgentToolEventPayload;\n\nexport type ToolExecutionObservation = {\n turn: number;\n runObservers: ActiveAgentRunObservers;\n toolDefinitions?: ToolDefinition[];\n includeToolCallDeltas?: boolean;\n};\n\nexport type ToolExecutionRunContext = {\n runId: string;\n sessionId?: string | undefined;\n metadata?: JsonObject | undefined;\n};\n\nexport class ToolCallExecutor {\n constructor(\n private readonly agent: Agent,\n private readonly activeHook: PromptHook | undefined,\n private readonly approvals: ToolApprovalsOptions | undefined,\n private readonly runContext: ToolExecutionRunContext,\n private readonly concurrency: number,\n private readonly requestMiddlewares: AgentMiddleware[],\n private readonly includeToolCallDeltas: boolean,\n private readonly cancel: (reason: string) => Error,\n ) {}\n\n async execute(\n toolCalls: ToolCall[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResult[]> {\n for (const toolCall of toolCalls) {\n if (toolCall.function.name.length === 0) {\n throw new Error(\n `Completion returned tool call \"${toolCall.id}\" with an empty function name; this indicates invalid provider output or provider mapping.`,\n );\n }\n }\n\n return mapWithConcurrency(toolCalls, this.concurrency, async (toolCall) => {\n const args = JSON.stringify(toolCall.function.arguments ?? {});\n const internalCallId = globalThis.crypto.randomUUID();\n const hookArgs: ToolHookArgs = {\n toolName: toolCall.function.name,\n internalCallId,\n args,\n };\n if (toolCall.callId !== undefined) {\n hookArgs.toolCallId = toolCall.callId;\n }\n const tool = this.agent.getTool(toolCall.function.name);\n const toolDefinition = observation?.toolDefinitions?.find(\n (definition) => definition.name === toolCall.function.name,\n );\n const toolMetadata = toolTraceMetadata(tool);\n\n const toolStartArgs: AgentToolStartArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n };\n if (toolCall.callId !== undefined) {\n toolStartArgs.toolCallId = toolCall.callId;\n }\n if (toolDefinition !== undefined) {\n toolStartArgs.toolDefinition = toolDefinition;\n }\n if (toolMetadata !== undefined) {\n toolStartArgs.toolMetadata = toolMetadata;\n }\n const toolObservers = await observation?.runObservers.startTool(toolStartArgs);\n\n let output: NormalizedToolOutput;\n let skipped = false;\n let effectiveArgs = args;\n\n const callAction = await this.activeHook?.onToolCall?.({\n ...hookArgs,\n tool: toolCallControl,\n });\n if (callAction?.type === \"terminate\") {\n await recordToolError(\n toolObservers,\n observation?.turn,\n toolCall,\n internalCallId,\n effectiveArgs,\n callAction.reason,\n );\n throw this.cancel(callAction.reason);\n }\n if (callAction?.type === \"skip\") {\n output = callAction.reason;\n skipped = true;\n } else {\n let approvalDecision: { approved: true } | { approved: false; result: string };\n try {\n effectiveArgs = await this.runToolInputMiddlewares({\n ...hookArgs,\n turn: observation?.turn ?? 0,\n originalArgs: args,\n });\n hookArgs.args = effectiveArgs;\n\n approvalDecision =\n callAction?.type === \"approval_request\"\n ? await this.requestApproval(tool, hookArgs, callAction)\n : ((await this.evaluateToolApproval(tool, hookArgs)) ?? { approved: true });\n if (!approvalDecision.approved) {\n output = approvalDecision.result;\n skipped = true;\n } else {\n output = await this.runApprovedToolCall(\n toolCall,\n hookArgs,\n effectiveArgs,\n args,\n toolObservers,\n observation,\n onStreamEvent,\n false,\n );\n effectiveArgs = hookArgs.args;\n }\n } catch (error) {\n await recordToolError(\n toolObservers,\n observation?.turn,\n toolCall,\n internalCallId,\n effectiveArgs,\n error,\n );\n throw error;\n }\n }\n\n let result = toolOutputToText(output);\n let structuredResult = toolOutputToStructuredResult(output);\n if (this.agent.shouldApplyToolMiddleware(toolCall.function.name)) {\n const middlewareReplacement = await this.runToolResultMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n result,\n originalResult: result,\n structuredResult,\n originalStructuredResult: structuredResult,\n turn: observation?.turn ?? 0,\n });\n if (middlewareReplacement !== undefined) {\n output = middlewareReplacement;\n result = toolOutputToText(middlewareReplacement);\n structuredResult = toolOutputToStructuredResult(middlewareReplacement);\n }\n }\n\n const resultAction = await this.activeHook?.onToolResult?.({\n ...hookArgs,\n args: effectiveArgs,\n result,\n structuredResult,\n run: runControl,\n });\n await toolObservers?.end({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n skipped,\n toolCallId: toolCall.callId,\n });\n if (resultAction?.type === \"terminate\") {\n throw this.cancel(resultAction.reason);\n }\n\n const resultPayload: ToolResultEventPayload = {\n type: \"tool_result\",\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n };\n if (toolCall.callId !== undefined) {\n resultPayload.toolCallId = toolCall.callId;\n }\n onResult?.(resultPayload);\n return ToolContent.toolResult(toolCall.id, output, {\n callId: toolCall.callId,\n toolName: toolCall.function.name,\n });\n });\n }\n\n private async runApprovedToolCall(\n toolCall: ToolCall,\n hookArgs: ToolHookArgs,\n effectiveArgs: string,\n originalArgs: string,\n toolObservers: ActiveToolObservers | undefined,\n observation: ToolExecutionObservation | undefined,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n applyInputMiddleware = true,\n ): Promise<NormalizedToolOutput> {\n const middlewareArgs = applyInputMiddleware\n ? await this.runToolInputMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n turn: observation?.turn ?? 0,\n originalArgs,\n })\n : effectiveArgs;\n hookArgs.args = middlewareArgs;\n try {\n const toolContext: ToolCallContext = {\n emitStreamEvent: async (event) => {\n const streamEventArgs: AgentToolStreamEventArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId: hookArgs.internalCallId,\n args: middlewareArgs,\n event,\n };\n if (toolCall.callId !== undefined) {\n streamEventArgs.toolCallId = toolCall.callId;\n }\n await toolObservers?.streamEvent(streamEventArgs);\n const payload = agentToolEventPayload(toolCall, hookArgs.internalCallId, event);\n if (payload !== undefined) {\n onStreamEvent?.(payload);\n }\n },\n };\n toolContext.includeToolCallDeltas = this.includeToolCallDeltas;\n return await this.agent.callTool(toolCall.function.name, middlewareArgs, toolContext);\n } catch (error) {\n const errorAction = await this.activeHook?.onToolError?.({\n ...hookArgs,\n args: middlewareArgs,\n error,\n run: runControl,\n });\n await toolObservers?.error(\n toolErrorArgs(\n observation?.turn ?? 0,\n toolCall,\n hookArgs.internalCallId,\n middlewareArgs,\n error,\n ),\n );\n if (errorAction?.type === \"terminate\") {\n throw this.cancel(errorAction.reason);\n }\n return error instanceof Error ? error.toString() : String(error);\n }\n }\n\n private async runToolResultMiddlewares(\n args: ToolOutputMiddlewareArgs,\n ): Promise<NormalizedToolOutput | undefined> {\n let result = args.result;\n let structuredResult = args.structuredResult;\n let replaced = false;\n for (const middleware of this.activeMiddlewares()) {\n const outputReplacement = await middleware.onToolOutput?.({\n ...args,\n result,\n structuredResult,\n });\n if (outputReplacement !== undefined) {\n const normalized = normalizeToolOutputMiddlewareResult(outputReplacement);\n if (normalized.result !== undefined) {\n result = normalized.result;\n structuredResult = undefined;\n }\n if (normalized.structuredResult !== undefined) {\n structuredResult = normalized.structuredResult;\n result = toolResultContentToText(normalized.structuredResult);\n }\n replaced = true;\n }\n }\n return replaced ? (structuredResult ?? result) : undefined;\n }\n\n private async runToolInputMiddlewares(\n args: ToolHookArgs & { turn: number; originalArgs: string },\n ): Promise<string> {\n let current = args.args;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onToolInput?.({\n ...args,\n args: current,\n });\n if (replacement?.args !== undefined) {\n current =\n typeof replacement.args === \"string\"\n ? replacement.args\n : JSON.stringify(replacement.args);\n }\n }\n return current;\n }\n\n private activeMiddlewares(): AgentMiddleware[] {\n return [...this.agent.middlewares, ...this.requestMiddlewares];\n }\n\n private async evaluateToolApproval(\n tool: AnyTool | undefined,\n hookArgs: ToolHookArgs,\n ): Promise<{ approved: true } | { approved: false; result: string } | undefined> {\n if (tool?.approval === undefined) {\n return undefined;\n }\n const policy = tool.approval as ToolApprovalPolicy<unknown>;\n const context = approvalContext(tool, hookArgs, this.agent, this.runContext);\n const required = await policy.when(context);\n if (!required) {\n return { approved: true };\n }\n\n const reason = await resolveApprovalText(policy.reason, context);\n const rejectMessage = await resolveApprovalText(policy.rejectMessage, context);\n const options: ToolApprovalRequestOptions = {};\n if (reason !== undefined) {\n options.reason = reason;\n }\n if (rejectMessage !== undefined) {\n options.rejectMessage = rejectMessage;\n }\n return this.requestApproval(tool, hookArgs, options);\n }\n\n private async requestApproval(\n tool: AnyTool | undefined,\n hookArgs: ToolHookArgs,\n options: ToolApprovalRequestOptions,\n ): Promise<{ approved: true } | { approved: false; result: string }> {\n const request: ToolApprovalRequest = approvalContext(\n tool,\n hookArgs,\n this.agent,\n this.runContext,\n );\n if (options.reason !== undefined) {\n request.reason = options.reason;\n }\n if (options.rejectMessage !== undefined) {\n request.rejectMessage = options.rejectMessage;\n }\n if (this.approvals === undefined) {\n throw new ToolApprovalRequiredError(request);\n }\n\n const decision = normalizeApprovalDecision(await this.approvals.handler(request));\n if (decision.approved) {\n return { approved: true };\n }\n return {\n approved: false,\n result:\n decision.rejectMessage ??\n decision.reason ??\n request.rejectMessage ??\n \"Tool approval was rejected.\",\n };\n }\n}\n\nfunction approvalContext(\n tool: AnyTool | undefined,\n hookArgs: ToolHookArgs,\n agent: Agent,\n run: ToolExecutionRunContext,\n): ToolApprovalContext {\n const rawParsedArgs = parseToolArgs(hookArgs.args);\n const parsedArgs = tool?.parseApprovalArgs?.(rawParsedArgs) ?? rawParsedArgs;\n const approvalRun: ToolApprovalRunContext = {\n agentId: agent.id,\n runId: run.runId,\n };\n if (run.sessionId !== undefined) {\n approvalRun.sessionId = run.sessionId;\n }\n if (run.metadata !== undefined) {\n approvalRun.metadata = run.metadata;\n }\n const context: ToolApprovalContext = {\n toolName: hookArgs.toolName,\n args: parsedArgs,\n rawArgs: hookArgs.args,\n internalCallId: hookArgs.internalCallId,\n run: approvalRun,\n };\n if (hookArgs.toolCallId !== undefined) {\n context.toolCallId = hookArgs.toolCallId;\n }\n return context;\n}\n\nfunction normalizeApprovalDecision(decision: ToolApprovalDecision): {\n approved: boolean;\n reason?: string;\n rejectMessage?: string;\n} {\n if (typeof decision === \"boolean\") {\n return { approved: decision };\n }\n return decision;\n}\n\nasync function resolveApprovalText<Args>(\n value: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>) | undefined,\n context: ToolApprovalContext<Args>,\n): Promise<string | undefined> {\n return typeof value === \"function\" ? value(context as ToolApprovalContext<Args>) : value;\n}\n\nfunction normalizeToolOutputMiddlewareResult(result: ToolOutputMiddlewareResult): {\n result?: string | undefined;\n structuredResult?: ToolResultContent[] | undefined;\n} {\n if (typeof result === \"string\") {\n return { result };\n }\n return result ?? {};\n}\n\nfunction toolTraceMetadata(tool: AnyTool | undefined): JsonObject | undefined {\n if (tool === undefined) {\n return undefined;\n }\n const metadata = (tool as { [MCP_TOOL_METADATA_KEY]?: unknown })[MCP_TOOL_METADATA_KEY];\n const mcpMetadata =\n typeof metadata === \"object\" && metadata !== null\n ? (metadata as { serverName?: unknown })\n : undefined;\n const result: JsonObject = {\n approvalRequired: tool.approval !== undefined,\n };\n if (typeof mcpMetadata?.serverName === \"string\" && mcpMetadata.serverName.length > 0) {\n result.mcpServerName = mcpMetadata.serverName;\n }\n return result;\n}\n\nfunction toolErrorArgs(\n turn: number,\n toolCall: ToolCall,\n internalCallId: string,\n args: string,\n error: unknown,\n): AgentToolErrorArgs {\n const observerArgs: AgentToolErrorArgs = {\n turn,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n error,\n };\n if (toolCall.callId !== undefined) {\n observerArgs.toolCallId = toolCall.callId;\n }\n return observerArgs;\n}\n\nasync function recordToolError(\n toolObservers: ActiveToolObservers | undefined,\n turn: number | undefined,\n toolCall: ToolCall,\n internalCallId: string,\n args: string,\n error: unknown,\n): Promise<void> {\n await toolObservers?.error({\n turn: turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n error,\n toolCallId: toolCall.callId,\n });\n}\n\nfunction toolOutputToText(output: NormalizedToolOutput): string {\n return typeof output === \"string\" ? output : toolResultContentToText(output);\n}\n\nfunction toolOutputToStructuredResult(\n output: NormalizedToolOutput,\n): ToolResultContent[] | undefined {\n return typeof output === \"string\" ? undefined : output;\n}\n\nfunction agentToolEventPayload(\n toolCall: ToolCall,\n internalCallId: string,\n event: ToolCallStreamEvent,\n): AgentToolEventPayload | undefined {\n if (typeof event.agentId !== \"string\" || event.agentId.length === 0) {\n return undefined;\n }\n const payload: AgentToolEventPayload = {\n type: \"agent_tool_event\" as const,\n toolName: toolCall.function.name,\n internalCallId,\n agentId: event.agentId,\n event: event.event as AgentChildStreamEvent,\n };\n if (toolCall.callId !== undefined) {\n payload.toolCallId = toolCall.callId;\n }\n if (event.agentName !== undefined) {\n payload.agentName = event.agentName;\n }\n return payload;\n}\n","import type { Message as MessageType } from \"../completion/index\";\n\nexport function extractRagText(message: MessageType): string | undefined {\n if (message.role === \"user\") {\n return message.content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n }\n\n if (message.role === \"tool\") {\n return message.content\n .flatMap((item) => item.content.flatMap((part) => (part.type === \"text\" ? [part.text] : [])))\n .join(\"\\n\");\n }\n\n return undefined;\n}\n","import type {\n AgentGenerationEndArgs,\n AgentGenerationErrorArgs,\n AgentGenerationObserver,\n AgentGenerationStartArgs,\n AgentGenerationUpdateArgs,\n AgentObserverRegistration,\n AgentRunEndArgs,\n AgentRunErrorArgs,\n AgentRunEventArgs,\n AgentRunObserver,\n AgentRunStartArgs,\n AgentToolEndArgs,\n AgentToolErrorArgs,\n AgentToolObserver,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n AgentTraceInfo,\n} from \"./types\";\n\nexport async function startAgentRunObservers(\n registrations: AgentObserverRegistration[],\n args: AgentRunStartArgs,\n failOnObserverError: boolean,\n): Promise<ActiveAgentRunObservers> {\n const runObservers: AgentRunObserver[] = [];\n for (const registration of registrations) {\n try {\n const runObserver = await registration.observer.startRun(args);\n if (runObserver !== undefined) {\n runObservers.push(runObserver);\n }\n } catch (error) {\n if (failOnObserverError || registration.failOnObserverError === true) {\n throw error;\n }\n }\n }\n\n return new ActiveAgentRunObservers(runObservers, failOnObserverError);\n}\n\nexport class ActiveAgentRunObservers {\n readonly trace: AgentTraceInfo | undefined;\n\n constructor(\n private readonly runObservers: AgentRunObserver[],\n private readonly failOnObserverError: boolean,\n ) {\n this.trace = runObservers.find((observer) => observer.trace !== undefined)?.trace;\n }\n\n async startGeneration(args: AgentGenerationStartArgs): Promise<ActiveGenerationObservers> {\n const generationObservers: AgentGenerationObserver[] = [];\n for (const runObserver of this.runObservers) {\n if (runObserver.startGeneration === undefined) {\n continue;\n }\n try {\n const generationObserver = await runObserver.startGeneration(args);\n if (generationObserver !== undefined) {\n generationObservers.push(generationObserver);\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n return new ActiveGenerationObservers(generationObservers, this.failOnObserverError);\n }\n\n async startTool(args: AgentToolStartArgs): Promise<ActiveToolObservers> {\n const toolObservers: AgentToolObserver[] = [];\n for (const runObserver of this.runObservers) {\n if (runObserver.startTool === undefined) {\n continue;\n }\n try {\n const toolObserver = await runObserver.startTool(args);\n if (toolObserver !== undefined) {\n toolObservers.push(toolObserver);\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n return new ActiveToolObservers(toolObservers, this.failOnObserverError);\n }\n\n async end(args: AgentRunEndArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n try {\n await runObserver.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentRunErrorArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n if (runObserver.error === undefined) {\n continue;\n }\n try {\n await runObserver.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async event(args: AgentRunEventArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n if (runObserver.event === undefined) {\n continue;\n }\n try {\n await runObserver.event(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n\nexport class ActiveGenerationObservers {\n constructor(\n private readonly generationObservers: AgentGenerationObserver[],\n private readonly failOnObserverError: boolean,\n ) {}\n\n async end(args: AgentGenerationEndArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n try {\n await observer.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentGenerationErrorArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n if (observer.error === undefined) {\n continue;\n }\n try {\n await observer.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async update(args: AgentGenerationUpdateArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n if (observer.update === undefined) {\n continue;\n }\n try {\n await observer.update(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n\nexport class ActiveToolObservers {\n constructor(\n private readonly toolObservers: AgentToolObserver[],\n private readonly failOnObserverError: boolean,\n ) {}\n\n async streamEvent(args: AgentToolStreamEventArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n if (observer.streamEvent === undefined) {\n continue;\n }\n try {\n await observer.streamEvent(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async end(args: AgentToolEndArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n try {\n await observer.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentToolErrorArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n if (observer.error === undefined) {\n continue;\n }\n try {\n await observer.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n","import type { JsonValue } from \"../completion\";\n\nexport type CompletionRetryContext = {\n error: unknown;\n attempt: number;\n maxAttempts: number;\n turn: number;\n streaming: boolean;\n};\n\nexport type CompletionRetryOptions = {\n maxAttempts?: number | undefined;\n initialDelayMs?: number | undefined;\n maxDelayMs?: number | undefined;\n shouldRetry?: ((context: CompletionRetryContext) => boolean) | undefined;\n};\n\nexport type ResolvedCompletionRetryOptions = {\n maxAttempts: number;\n initialDelayMs: number;\n maxDelayMs: number;\n shouldRetry: (context: CompletionRetryContext) => boolean;\n};\n\nconst DEFAULT_MAX_ATTEMPTS = 3;\nconst DEFAULT_INITIAL_DELAY_MS = 100;\nconst DEFAULT_MAX_DELAY_MS = 1_000;\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nconst RETRYABLE_STATUS_CODES = new Set([408, 409, 425, 429]);\nconst RETRYABLE_NUMERIC_ERROR_CODES = new Set([4, 8, 14]);\nconst RETRYABLE_ERROR_NAMES = new Set([\n \"APIConnectionError\",\n \"APIConnectionTimeoutError\",\n \"TimeoutError\",\n]);\nconst RETRYABLE_ERROR_CODES = new Set([\n \"DEADLINE_EXCEEDED\",\n \"EAI_AGAIN\",\n \"ECONNREFUSED\",\n \"ECONNRESET\",\n \"EHOSTUNREACH\",\n \"ENETDOWN\",\n \"ENETUNREACH\",\n \"EPIPE\",\n \"ETIMEDOUT\",\n \"RESOURCE_EXHAUSTED\",\n \"UNAVAILABLE\",\n \"UND_ERR_CONNECT_TIMEOUT\",\n \"UND_ERR_HEADERS_TIMEOUT\",\n \"UND_ERR_SOCKET\",\n]);\n\nexport function resolveCompletionRetryOptions(\n options: CompletionRetryOptions,\n): ResolvedCompletionRetryOptions {\n const maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n const initialDelayMs = options.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;\n const maxDelayMs = options.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\n if (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {\n throw new RangeError(\"Completion retry maxAttempts must be a positive integer.\");\n }\n assertDelay(initialDelayMs, \"initialDelayMs\");\n assertDelay(maxDelayMs, \"maxDelayMs\");\n if (maxDelayMs < initialDelayMs) {\n throw new RangeError(\n \"Completion retry maxDelayMs must be greater than or equal to initialDelayMs.\",\n );\n }\n if (options.shouldRetry !== undefined && typeof options.shouldRetry !== \"function\") {\n throw new TypeError(\"Completion retry shouldRetry must be a function.\");\n }\n\n return {\n maxAttempts,\n initialDelayMs,\n maxDelayMs,\n shouldRetry: options.shouldRetry ?? defaultShouldRetry,\n };\n}\n\nexport function completionRetryDelayMs(\n options: ResolvedCompletionRetryOptions,\n failedAttempt: number,\n): number {\n const exponentialDelay = options.initialDelayMs * 2 ** (failedAttempt - 1);\n const cappedDelay = Math.min(options.maxDelayMs, exponentialDelay);\n return Math.random() * cappedDelay;\n}\n\nexport function completionRetryErrorAttributes(\n error: unknown,\n): Record<string, JsonValue | undefined> {\n const errors = errorChain(error);\n const errorName = errors\n .map((candidate) => stringProperty(candidate, \"name\"))\n .find((value) => value !== undefined);\n const statusCode = firstStatusCode(errors);\n const errorCode = errors\n .map((candidate) => errorCodeProperty(candidate))\n .find((value) => value !== undefined);\n\n return {\n errorName,\n statusCode,\n errorCode,\n };\n}\n\nexport async function waitForCompletionRetry(delayMs: number): Promise<void> {\n if (delayMs === 0) {\n return;\n }\n await new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n}\n\nfunction defaultShouldRetry(context: CompletionRetryContext): boolean {\n const errors = errorChain(context.error);\n if (errors.some((error) => stringProperty(error, \"name\") === \"AbortError\")) {\n return false;\n }\n\n const statusCode = firstStatusCode(errors);\n if (statusCode !== undefined) {\n return RETRYABLE_STATUS_CODES.has(statusCode) || (statusCode >= 500 && statusCode <= 599);\n }\n\n return errors.some((error) => {\n const name = stringProperty(error, \"name\");\n if (name !== undefined && RETRYABLE_ERROR_NAMES.has(name)) {\n return true;\n }\n const code = stringProperty(error, \"code\")?.toUpperCase();\n if (code !== undefined && RETRYABLE_ERROR_CODES.has(code)) {\n return true;\n }\n const numericCode = numberProperty(error, \"code\");\n return numericCode !== undefined && RETRYABLE_NUMERIC_ERROR_CODES.has(numericCode);\n });\n}\n\nfunction firstStatusCode(errors: Record<string, unknown>[]): number | undefined {\n for (const error of errors) {\n const status = numberProperty(error, \"status\") ?? numberProperty(error, \"statusCode\");\n if (status !== undefined) {\n return status;\n }\n const code = numberProperty(error, \"code\");\n if (code !== undefined && code >= 100 && code <= 599) {\n return code;\n }\n }\n return undefined;\n}\n\nfunction errorChain(error: unknown): Record<string, unknown>[] {\n const errors: Record<string, unknown>[] = [];\n const seen = new Set<object>();\n let current = error;\n while (isObject(current) && !seen.has(current)) {\n seen.add(current);\n errors.push(current);\n current = property(current, \"cause\");\n }\n return errors;\n}\n\nfunction assertDelay(value: number, name: string): void {\n if (!Number.isFinite(value) || value < 0 || value > MAX_TIMER_DELAY_MS) {\n throw new RangeError(\n `Completion retry ${name} must be between 0 and ${MAX_TIMER_DELAY_MS} milliseconds.`,\n );\n }\n}\n\nfunction numberProperty(value: Record<string, unknown>, name: string): number | undefined {\n const candidate = property(value, name);\n return typeof candidate === \"number\" && Number.isFinite(candidate) ? candidate : undefined;\n}\n\nfunction stringProperty(value: Record<string, unknown>, name: string): string | undefined {\n const candidate = property(value, name);\n return typeof candidate === \"string\" && candidate.length > 0 ? candidate : undefined;\n}\n\nfunction errorCodeProperty(value: Record<string, unknown>): string | number | undefined {\n return stringProperty(value, \"code\") ?? numberProperty(value, \"code\");\n}\n\nfunction property(value: Record<string, unknown>, name: string): unknown {\n try {\n return value[name];\n } catch {\n return undefined;\n }\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import type { Agent } from \"../agent/agent\";\nimport type { AgentEventAppendInput } from \"../agent/types\";\nimport { isStreamingCompletionModel } from \"../completion/create-completion\";\nimport {\n AssistantContent,\n assertCompletionRequestSupported,\n type CompletionModel,\n CompletionRequestBuilder,\n type CompletionResponse,\n type CompletionSource,\n getAssistantGenerationMetadata,\n type JsonObject,\n type JsonValue,\n Message,\n type Message as MessageType,\n type ProviderToolCall,\n type ToolCall,\n type ToolResult,\n textFromAssistantContent,\n Usage,\n} from \"../completion/index\";\nimport {\n appendGuardrailPolicies,\n type GuardrailDecisionRecord,\n type GuardrailPolicy,\n type GuardrailPolicyInput,\n type GuardrailRunContext,\n hasEnforcedOutputGuardrails,\n runInputGuardrails,\n runOutputGuardrails,\n} from \"../guardrails\";\nimport type { PromptHook } from \"../hooks\";\nimport { runControl } from \"../hooks\";\nimport { createAsyncQueue } from \"../internal/async-queue\";\nimport { type MemoryPreparation, PromptRequestMemory } from \"../internal/prompt-runtime/memory\";\nimport { fetchDynamicContext, fetchToolDefinitions } from \"../internal/prompt-runtime/retrieval\";\nimport { CompletionStreamAccumulator } from \"../internal/prompt-runtime/stream-accumulator\";\nimport {\n addTurn,\n addTurnToToolCallDelta,\n isGenerationDeltaEvent,\n} from \"../internal/prompt-runtime/stream-events\";\nimport {\n type AgentToolEventPayload,\n ToolCallExecutor,\n type ToolExecutionEventPayload,\n type ToolExecutionObservation,\n type ToolResultEventPayload,\n} from \"../internal/prompt-runtime/tool-execution\";\nimport { extractRagText } from \"../internal/rag-text\";\nimport { MemoryCompactionError } from \"../memory/errors\";\nimport type { MemoryContext } from \"../memory/types\";\nimport { type ActiveAgentRunObservers, startAgentRunObservers } from \"../observability/group\";\nimport type {\n AgentGenerationEndArgs,\n AgentGenerationModelInfo,\n AgentGenerationStartArgs,\n AgentTraceOptions,\n} from \"../observability/types\";\nimport { toReadableStream } from \"../streaming\";\nimport type { ToolApprovalsOptions } from \"../tool\";\nimport type { AgentMiddleware } from \"../tool/middleware\";\nimport { MaxTurnsError, PromptCancelledError } from \"./errors\";\nimport {\n type CompletionRetryOptions,\n completionRetryDelayMs,\n completionRetryErrorAttributes,\n type ResolvedCompletionRetryOptions,\n resolveCompletionRetryOptions,\n waitForCompletionRetry,\n} from \"./retry\";\nimport type {\n AgentStreamEvent,\n AgentStreamEventWithoutToolCallDeltas,\n AgentStreamOptions,\n PromptResponse,\n} from \"./types\";\n\nexport class PromptRequest<M extends CompletionModel = CompletionModel> {\n private chatHistory: MessageType[];\n private maxTurnCount: number;\n private activeHook: PromptHook | undefined;\n private approvalOptions: ToolApprovalsOptions | undefined;\n private guardrailPolicies: GuardrailPolicy[];\n private guardrailDecisions: GuardrailDecisionRecord[] = [];\n private concurrency = 1;\n private traceOptions: AgentTraceOptions | undefined;\n private completionRetryOptions: ResolvedCompletionRetryOptions | undefined;\n private requestMiddlewares: AgentMiddleware[] = [];\n private readonly steeringMessages: MessageType[] = [];\n private runState: \"idle\" | \"running\" | \"completed\" | \"errored\" | \"cancelled\" = \"idle\";\n private readonly memoryRecorder: PromptRequestMemory;\n\n private constructor(\n private readonly agent: Agent<M>,\n private promptMessage: MessageType,\n initialHistory: MessageType[] = [],\n private readonly memoryContext: MemoryContext | undefined = undefined,\n ) {\n this.chatHistory = initialHistory;\n this.maxTurnCount = agent.defaultMaxTurns ?? 0;\n this.activeHook = agent.hook;\n this.approvalOptions = agent.approvals;\n this.guardrailPolicies = [...agent.guardrails];\n this.memoryRecorder = new PromptRequestMemory(agent, memoryContext, initialHistory);\n }\n\n static fromAgent<M extends CompletionModel>(\n agent: Agent<M>,\n prompt: string | MessageType | MessageType[],\n options: { memoryContext?: MemoryContext | undefined } = {},\n ): PromptRequest<M> {\n const normalized = normalizePromptInput(prompt);\n return new PromptRequest(agent, normalized.prompt, normalized.history, options.memoryContext);\n }\n\n maxTurns(maxTurns: number): this {\n this.maxTurnCount = maxTurns;\n return this;\n }\n\n withCompletionRetries(options: CompletionRetryOptions = {}): this {\n this.completionRetryOptions = resolveCompletionRetryOptions(options);\n return this;\n }\n\n withHook(hook: PromptHook): this {\n this.activeHook = hook;\n return this;\n }\n\n approvals(options: ToolApprovalsOptions): this {\n this.approvalOptions = options;\n return this;\n }\n\n guardrails(policies: GuardrailPolicyInput): this {\n this.guardrailPolicies = appendGuardrailPolicies(this.guardrailPolicies, policies);\n return this;\n }\n\n withToolConcurrency(concurrency: number): this {\n this.concurrency = Math.max(1, concurrency);\n return this;\n }\n\n withMiddleware(middleware: AgentMiddleware): this {\n this.requestMiddlewares.push(middleware);\n return this;\n }\n\n withMiddlewares(middlewares: AgentMiddleware[]): this {\n this.requestMiddlewares.push(...middlewares);\n return this;\n }\n\n withTrace(trace: AgentTraceOptions): this {\n this.traceOptions = trace;\n return this;\n }\n\n steer(input: string | MessageType | MessageType[]): boolean {\n if (this.isTerminal()) {\n return false;\n }\n\n this.steeringMessages.push(...normalizeSteeringInput(input));\n return true;\n }\n\n async send(): Promise<PromptResponse> {\n this.startRun();\n const runId = globalThis.crypto.randomUUID();\n let usage = Usage.empty();\n let currentTurns = 0;\n let lastPrompt = this.promptMessage;\n let newMessages: MessageType[] = [this.promptMessage];\n const runObservers = await this.startRunObservers();\n\n try {\n const inputResult = await runInputGuardrails(this.guardrailPolicies, {\n prompt: this.promptMessage,\n history: this.chatHistory,\n inputText: textFromMessage(this.promptMessage),\n run: this.guardrailRunContext(runId),\n });\n for (const decision of inputResult.decisions) {\n await this.recordGuardrailDecision(decision, runObservers);\n }\n this.promptMessage = inputResult.prompt;\n if (inputResult.blocked) {\n const output = inputResult.message ?? \"The request was blocked by a guardrail.\";\n const result: PromptResponse = {\n output,\n usage: Usage.empty(),\n messages: [this.promptMessage, Message.assistant(output)],\n guardrails: [...this.guardrailDecisions],\n };\n await runObservers.end(result);\n this.runState = \"completed\";\n return result;\n }\n\n newMessages = [this.promptMessage];\n const memoryPreparation = await this.memoryRecorder.prepareRun(runId, newMessages);\n this.chatHistory = memoryPreparation.history;\n usage = Usage.add(usage, memoryPreparation.usage);\n await this.recordMemoryCompaction(memoryPreparation, runObservers);\n const pendingTurnMessages = this.memoryRecorder.pendingTurnMessages(newMessages);\n await this.runRunStartHook(newMessages);\n while (currentTurns <= this.maxTurnCount + 1) {\n const prompt = newMessages.at(-1);\n if (prompt === undefined) {\n throw new Error(\"PromptRequest requires at least one message\");\n }\n\n lastPrompt = prompt;\n currentTurns += 1;\n\n const historyForRequest = [...this.chatHistory, ...newMessages.slice(0, -1)];\n await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);\n await this.runCompletionCallHook(prompt, historyForRequest, newMessages);\n\n const ragText = extractRagText(prompt);\n const dynamicContext = await fetchDynamicContext(this.agent, ragText);\n const toolDefs = await fetchToolDefinitions(this.agent, ragText);\n let request = new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(historyForRequest)\n .documents([...this.agent.staticContext, ...dynamicContext])\n .tools([...toolDefs, ...this.agent.providerTools])\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .outputSchema(this.agent.outputSchema)\n .build();\n request = (await this.runCompletionRequestMiddlewares(\n request,\n currentTurns,\n )) as typeof request;\n\n let response: CompletionResponse;\n try {\n response = await this.runCompletion(request, currentTurns, runObservers);\n } catch (error) {\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n response = await this.runCompletionResponseMiddlewares(request, response, currentTurns);\n usage = Usage.add(usage, response.usage);\n await this.runCompletionResponseHook(prompt, response, newMessages);\n await this.runTurnEndHook(currentTurns, response, newMessages);\n\n const toolCalls = response.choice.filter(\n (item): item is ToolCall => item.type === \"tool_call\",\n );\n const assistantMessage = this.generatedAssistantMessage(response, request);\n newMessages.push(assistantMessage);\n if (toolCalls.length === 0) {\n if (this.steeringMessages.length > 0) {\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n }\n if (\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages)\n ) {\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n continue;\n }\n\n const guardedOutput = await this.runOutputGuardrailsForResponse(\n runId,\n usage,\n response,\n newMessages,\n runObservers,\n );\n response = guardedOutput.response;\n const finalAssistantMessage = this.generatedAssistantMessage(response, request);\n newMessages[newMessages.length - 1] = finalAssistantMessage;\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [finalAssistantMessage],\n pendingTurnMessages,\n );\n const result: PromptResponse = {\n output: guardedOutput.output,\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n guardrails: [...this.guardrailDecisions],\n ...generationArtifacts(newMessages),\n };\n await this.runRunEndHook(result, newMessages);\n await runObservers.end(result);\n await this.memoryRecorder.commitCompletedRun(\n runId,\n currentTurns,\n newMessages,\n pendingTurnMessages,\n );\n this.runState = \"completed\";\n return result;\n }\n\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n const toolResults = await this.executeToolCalls(\n runId,\n toolCalls,\n newMessages,\n undefined,\n undefined,\n {\n turn: currentTurns,\n runObservers,\n toolDefinitions: request.tools,\n },\n );\n const toolMessage = Message.tool(toolResults);\n newMessages.push(toolMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [toolMessage],\n pendingTurnMessages,\n );\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages);\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n }\n\n throw new MaxTurnsError(this.maxTurnCount, [...this.chatHistory, ...newMessages], lastPrompt);\n } catch (error) {\n if (error instanceof MemoryCompactionError && error.usage !== undefined) {\n usage = Usage.add(usage, error.usage);\n }\n const finalError = await this.runRunErrorHook(error, usage, newMessages);\n this.runState = finalError instanceof PromptCancelledError ? \"cancelled\" : \"errored\";\n await runObservers.error({ error: finalError, usage, messages: [...newMessages] });\n await this.memoryRecorder.recordError(runId, finalError, newMessages);\n throw finalError;\n }\n }\n\n stream(): AsyncIterable<AgentStreamEvent>;\n stream(options: {\n includeToolCallDeltas: false;\n }): AsyncIterable<AgentStreamEventWithoutToolCallDeltas>;\n stream(options: { includeToolCallDeltas?: true }): AsyncIterable<AgentStreamEvent>;\n stream(options: AgentStreamOptions): AsyncIterable<AgentStreamEvent>;\n async *stream(options: AgentStreamOptions = {}): AsyncIterable<AgentStreamEvent> {\n if (!this.agent.model.capabilities.streaming || !isStreamingCompletionModel(this.agent.model)) {\n throw new Error(\"This completion model does not support streaming\");\n }\n\n this.startRun();\n const includeToolCallDeltas = options.includeToolCallDeltas !== false;\n const runId = globalThis.crypto.randomUUID();\n const emit = async (event: AgentStreamEvent): Promise<AgentStreamEvent> => {\n await this.recordAgentEvent(runId, event);\n return event;\n };\n let usage = Usage.empty();\n let currentTurns = 0;\n let lastPrompt = this.promptMessage;\n let newMessages: MessageType[] = [this.promptMessage];\n const runObservers = await this.startRunObservers();\n const bufferOutputDeltas = hasEnforcedOutputGuardrails(this.guardrailPolicies);\n\n try {\n const inputResult = await runInputGuardrails(this.guardrailPolicies, {\n prompt: this.promptMessage,\n history: this.chatHistory,\n inputText: textFromMessage(this.promptMessage),\n run: this.guardrailRunContext(runId),\n });\n for (const decision of inputResult.decisions) {\n await this.recordGuardrailDecision(decision, runObservers);\n yield await emit({ type: \"guardrail_decision\", decision });\n }\n this.promptMessage = inputResult.prompt;\n if (inputResult.blocked) {\n const output = inputResult.message ?? \"The request was blocked by a guardrail.\";\n const result: PromptResponse = {\n output,\n usage: Usage.empty(),\n messages: [this.promptMessage, Message.assistant(output)],\n guardrails: [...this.guardrailDecisions],\n };\n await runObservers.end(result);\n this.runState = \"completed\";\n yield await emit({\n type: \"final\",\n runId,\n output: result.output,\n usage: result.usage,\n messages: result.messages,\n guardrails: result.guardrails,\n });\n return;\n }\n\n newMessages = [this.promptMessage];\n const memoryPreparation = await this.memoryRecorder.prepareRun(runId, newMessages);\n this.chatHistory = memoryPreparation.history;\n usage = Usage.add(usage, memoryPreparation.usage);\n await this.recordMemoryCompaction(memoryPreparation, runObservers);\n const pendingTurnMessages = this.memoryRecorder.pendingTurnMessages(newMessages);\n await this.runRunStartHook(newMessages);\n while (currentTurns <= this.maxTurnCount + 1) {\n const prompt = newMessages.at(-1);\n if (prompt === undefined) {\n throw new Error(\"PromptRequest requires at least one message\");\n }\n\n lastPrompt = prompt;\n currentTurns += 1;\n\n const historyForRequest = [...this.chatHistory, ...newMessages.slice(0, -1)];\n yield await emit({\n type: \"turn_start\",\n turn: currentTurns,\n prompt,\n history: historyForRequest,\n });\n await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);\n await this.runCompletionCallHook(prompt, historyForRequest, newMessages);\n\n const ragText = extractRagText(prompt);\n const dynamicContext = await fetchDynamicContext(this.agent, ragText);\n const toolDefs = await fetchToolDefinitions(this.agent, ragText);\n let request = new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(historyForRequest)\n .documents([...this.agent.staticContext, ...dynamicContext])\n .tools([...toolDefs, ...this.agent.providerTools])\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .outputSchema(this.agent.outputSchema)\n .build();\n request = (await this.runCompletionRequestMiddlewares(\n request,\n currentTurns,\n )) as typeof request;\n\n assertCompletionRequestSupported(this.agent.model, request, { streaming: true });\n const providerRequest = this.providerTraceRequest(request, { stream: true });\n const generationStartArgs = this.generationStartArgs(\n currentTurns,\n request,\n providerRequest,\n );\n const generationObservers = await runObservers.startGeneration(generationStartArgs);\n const generationStartedAt = Date.now();\n yield await emit({\n type: \"generation_start\",\n turn: currentTurns,\n request,\n modelInfo: generationStartArgs.modelInfo,\n });\n const accumulator = new CompletionStreamAccumulator();\n let firstDeltaMs: number | undefined;\n const bufferResponseEvents = this.shouldBufferStreamResponseEvents();\n const emittedToolCallIds = new Set<string>();\n let response: CompletionResponse;\n try {\n for (let attempt = 1; ; attempt += 1) {\n let hasProviderProgress = false;\n try {\n for await (const event of this.agent.model.streamCompletion(request)) {\n if (event.type === \"error\") {\n if (event.usage !== undefined) {\n usage = Usage.add(usage, event.usage);\n }\n throw event.error;\n }\n hasProviderProgress = true;\n if (firstDeltaMs === undefined && isGenerationDeltaEvent(event.type)) {\n firstDeltaMs = Date.now() - generationStartedAt;\n }\n const mapped = accumulator.accept(event);\n if (includeToolCallDeltas && event.type === \"tool_call_delta\") {\n yield await emit(addTurnToToolCallDelta(currentTurns, event));\n }\n if (mapped !== undefined) {\n await generationObservers.update?.({ turn: currentTurns, delta: mapped });\n if (mapped.type === \"tool_call\") {\n emittedToolCallIds.add(mapped.toolCall.id);\n }\n const shouldBuffer =\n bufferResponseEvents ||\n (bufferOutputDeltas &&\n (mapped.type === \"text_delta\" || mapped.type === \"reasoning_delta\"));\n if (!shouldBuffer) {\n yield await emit(addTurn(currentTurns, mapped));\n }\n }\n }\n response = accumulator.response();\n break;\n } catch (error) {\n const retryOptions = hasProviderProgress\n ? undefined\n : this.retryOptionsForFailure(error, attempt, currentTurns, true);\n if (retryOptions === undefined) {\n throw error;\n }\n await this.scheduleCompletionRetry(\n error,\n attempt,\n currentTurns,\n true,\n retryOptions,\n runObservers,\n );\n }\n }\n } catch (error) {\n await generationObservers.error({ turn: currentTurns, error });\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n\n const generationEndArgs: AgentGenerationEndArgs = {\n turn: currentTurns,\n response,\n };\n if (firstDeltaMs !== undefined) {\n generationEndArgs.firstDeltaMs = firstDeltaMs;\n }\n await generationObservers.end(generationEndArgs);\n response = await this.runCompletionResponseMiddlewares(request, response, currentTurns);\n usage = Usage.add(usage, response.usage);\n await this.runCompletionResponseHook(prompt, response, newMessages);\n await this.runTurnEndHook(currentTurns, response, newMessages);\n\n const toolCalls = response.choice.filter(\n (item): item is ToolCall => item.type === \"tool_call\",\n );\n let assistantMessage = this.generatedAssistantMessage(response, request);\n newMessages.push(assistantMessage);\n\n if (toolCalls.length === 0) {\n let emittedTurnEnd = false;\n if (!bufferOutputDeltas) {\n if (bufferResponseEvents) {\n for (const event of responseStreamEvents(currentTurns, response)) {\n yield await emit(event);\n }\n }\n yield await emit({\n type: \"turn_end\",\n turn: currentTurns,\n response,\n firstDeltaMs,\n });\n emittedTurnEnd = true;\n }\n if (this.steeringMessages.length > 0) {\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n }\n if (\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages)\n ) {\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n continue;\n }\n\n const guardedOutput = await this.runOutputGuardrailsForResponse(\n runId,\n usage,\n response,\n newMessages,\n runObservers,\n );\n for (const decision of guardedOutput.decisions) {\n yield await emit({ type: \"guardrail_decision\", decision });\n }\n response = guardedOutput.response;\n assistantMessage = this.generatedAssistantMessage(response, request);\n newMessages[newMessages.length - 1] = assistantMessage;\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n if (!emittedTurnEnd && (bufferResponseEvents || bufferOutputDeltas)) {\n for (const event of responseStreamEvents(\n currentTurns,\n response,\n bufferResponseEvents,\n )) {\n yield await emit(event);\n }\n }\n if (!emittedTurnEnd) {\n yield await emit({\n type: \"turn_end\",\n turn: currentTurns,\n response,\n firstDeltaMs,\n });\n }\n\n const result: PromptResponse = {\n output: guardedOutput.output,\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n guardrails: [...this.guardrailDecisions],\n ...generationArtifacts(newMessages),\n };\n await this.runRunEndHook(result, newMessages);\n await runObservers.end(result);\n await this.memoryRecorder.commitCompletedRun(\n runId,\n currentTurns,\n newMessages,\n pendingTurnMessages,\n );\n this.runState = \"completed\";\n yield await emit({\n type: \"final\",\n runId,\n output: result.output,\n usage: result.usage,\n messages: result.messages,\n trace: result.trace,\n guardrails: result.guardrails,\n sources: result.sources,\n providerToolCalls: result.providerToolCalls,\n });\n return;\n }\n\n if (bufferResponseEvents) {\n for (const event of responseStreamEvents(currentTurns, response)) {\n yield await emit(event);\n }\n } else {\n for (const toolCall of toolCalls) {\n if (!emittedToolCallIds.has(toolCall.id)) {\n yield await emit({ type: \"tool_call\", turn: currentTurns, toolCall });\n }\n }\n }\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n yield await emit({\n type: \"turn_end\",\n turn: currentTurns,\n response,\n firstDeltaMs,\n });\n\n const toolResultEvents = createAsyncQueue<ToolExecutionEventPayload>();\n const toolResultsPromise = this.executeToolCalls(\n runId,\n toolCalls,\n newMessages,\n (result) => {\n toolResultEvents.enqueue(result);\n },\n (event) => {\n toolResultEvents.enqueue(event);\n },\n {\n turn: currentTurns,\n runObservers,\n toolDefinitions: request.tools,\n includeToolCallDeltas,\n },\n );\n toolResultsPromise.then(\n () => toolResultEvents.close(),\n (error: unknown) => toolResultEvents.throw(error),\n );\n for await (const result of toolResultEvents) {\n yield await emit({ turn: currentTurns, ...result });\n }\n const toolResults = await toolResultsPromise;\n const toolMessage = Message.tool(toolResults);\n newMessages.push(toolMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [toolMessage],\n pendingTurnMessages,\n );\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages);\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n }\n\n throw new MaxTurnsError(this.maxTurnCount, [...this.chatHistory, ...newMessages], lastPrompt);\n } catch (error) {\n if (error instanceof MemoryCompactionError && error.usage !== undefined) {\n usage = Usage.add(usage, error.usage);\n }\n const finalError = await this.runRunErrorHook(error, usage, newMessages);\n this.runState = finalError instanceof PromptCancelledError ? \"cancelled\" : \"errored\";\n const finalUsage = usage;\n await runObservers.error({\n error: finalError,\n usage: finalUsage,\n messages: [...newMessages],\n });\n await this.memoryRecorder.recordError(runId, finalError, newMessages);\n yield await emit({ type: \"error\", error: finalError, usage: finalUsage });\n throw finalError;\n }\n }\n\n readableStream(options: AgentStreamOptions = {}): ReadableStream<Uint8Array> {\n return toReadableStream(this.stream(options));\n }\n\n private async runCompletion(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n turn: number,\n runObservers: ActiveAgentRunObservers,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this.agent.model, request);\n const providerRequest = this.providerTraceRequest(request);\n const generationObservers = await runObservers.startGeneration(\n this.generationStartArgs(turn, request, providerRequest),\n );\n try {\n for (let attempt = 1; ; attempt += 1) {\n let response: CompletionResponse;\n try {\n response = await this.agent.model.completion(request);\n } catch (error) {\n const retryOptions = this.retryOptionsForFailure(error, attempt, turn, false);\n if (retryOptions === undefined) {\n throw error;\n }\n await this.scheduleCompletionRetry(\n error,\n attempt,\n turn,\n false,\n retryOptions,\n runObservers,\n );\n continue;\n }\n await generationObservers.end({ turn, response });\n return response;\n }\n } catch (error) {\n await generationObservers.error({ turn, error });\n throw error;\n }\n }\n\n private generatedAssistantMessage(\n response: CompletionResponse,\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n ): MessageType {\n const metadata: JsonObject = {\n anvia: {\n generation: {\n provider: this.agent.model.provider,\n model: request.model ?? this.agent.model.defaultModel,\n usage: { ...response.usage },\n ...(response.sources === undefined ? {} : { sources: response.sources }),\n ...(response.providerToolCalls === undefined\n ? {}\n : { providerToolCalls: response.providerToolCalls }),\n },\n },\n };\n return Message.assistant(response.choice, {\n ...(response.messageId === undefined ? {} : { id: response.messageId }),\n metadata,\n });\n }\n\n private providerTraceRequest(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject | undefined {\n try {\n return this.agent.model.traceRequest?.(request, options);\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private generationStartArgs(\n turn: number,\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n providerRequest: JsonObject | undefined,\n ): AgentGenerationStartArgs & { modelInfo: AgentGenerationModelInfo } {\n const args: AgentGenerationStartArgs & { modelInfo: AgentGenerationModelInfo } = {\n turn,\n request,\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n };\n if (providerRequest !== undefined) {\n args.providerRequest = providerRequest;\n }\n return args;\n }\n\n private retryOptionsForFailure(\n error: unknown,\n attempt: number,\n turn: number,\n streaming: boolean,\n ): ResolvedCompletionRetryOptions | undefined {\n const options = this.completionRetryOptions;\n if (options === undefined || attempt >= options.maxAttempts) {\n return undefined;\n }\n const shouldRetry = options.shouldRetry({\n error,\n attempt,\n maxAttempts: options.maxAttempts,\n turn,\n streaming,\n });\n return shouldRetry ? options : undefined;\n }\n\n private async scheduleCompletionRetry(\n error: unknown,\n attempt: number,\n turn: number,\n streaming: boolean,\n options: ResolvedCompletionRetryOptions,\n runObservers: ActiveAgentRunObservers,\n ): Promise<void> {\n const delayMs = completionRetryDelayMs(options, attempt);\n await runObservers.event({\n name: \"completion.retry\",\n level: \"WARNING\",\n attributes: {\n turn,\n attempt,\n nextAttempt: attempt + 1,\n maxAttempts: options.maxAttempts,\n delayMs,\n streaming,\n ...completionRetryErrorAttributes(error),\n },\n });\n await waitForCompletionRetry(delayMs);\n }\n\n private async executeToolCalls(\n runId: string,\n toolCalls: ToolCall[],\n newMessages: MessageType[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResult[]> {\n const executor = new ToolCallExecutor(\n this.agent,\n this.activeHook,\n this.approvalOptions,\n {\n runId,\n sessionId: this.memoryContext?.sessionId,\n metadata: this.memoryContext?.metadata,\n },\n this.concurrency,\n this.requestMiddlewares,\n observation?.includeToolCallDeltas ?? false,\n (reason) => this.cancelled(newMessages, reason),\n );\n return executor.execute(toolCalls, onResult, onStreamEvent, observation);\n }\n\n private async runOutputGuardrailsForResponse(\n runId: string,\n usage: Usage,\n response: CompletionResponse,\n messages: MessageType[],\n runObservers: ActiveAgentRunObservers,\n ): Promise<{\n output: string;\n response: CompletionResponse;\n decisions: GuardrailDecisionRecord[];\n }> {\n const originalOutput = textFromAssistantContent(response.choice);\n const result = await runOutputGuardrails(this.guardrailPolicies, {\n outputText: originalOutput,\n messages: [...this.chatHistory, ...messages],\n usage,\n run: this.guardrailRunContext(runId),\n });\n for (const decision of result.decisions) {\n await this.recordGuardrailDecision(decision, runObservers);\n }\n const output = result.blocked\n ? (result.message ?? \"The response was blocked by a guardrail.\")\n : result.outputText;\n if (output === originalOutput) {\n return { output, response, decisions: result.decisions };\n }\n return {\n output,\n response: {\n ...response,\n choice: [AssistantContent.text(output)],\n },\n decisions: result.decisions,\n };\n }\n\n private async recordGuardrailDecision(\n decision: GuardrailDecisionRecord,\n runObservers: ActiveAgentRunObservers,\n ): Promise<void> {\n this.guardrailDecisions.push(decision);\n await runObservers.event({\n name: \"guardrail.decision\",\n level: decision.action === \"block\" ? \"WARNING\" : \"DEFAULT\",\n attributes: guardrailDecisionAttributes(decision),\n });\n }\n\n private async recordMemoryCompaction(\n preparation: MemoryPreparation,\n runObservers: ActiveAgentRunObservers,\n ): Promise<void> {\n const compaction = preparation.compaction;\n if (compaction === undefined) {\n return;\n }\n await runObservers.event({\n name: \"memory.compaction\",\n attributes: {\n originalMessageCount: compaction.originalMessageCount,\n compactedMessageCount: compaction.compactedMessageCount,\n retainedMessageCount: compaction.retainedMessageCount,\n conflictRetries: compaction.conflictRetries,\n inputTokens: preparation.usage.inputTokens,\n outputTokens: preparation.usage.outputTokens,\n totalTokens: preparation.usage.totalTokens,\n },\n });\n }\n\n private guardrailRunContext(runId: string): GuardrailRunContext {\n const context: GuardrailRunContext = {\n agentId: this.agent.id,\n runId,\n };\n if (this.memoryContext !== undefined) {\n context.sessionId = this.memoryContext.sessionId;\n if (this.memoryContext.metadata !== undefined) {\n context.metadata = this.memoryContext.metadata;\n }\n }\n return context;\n }\n\n private async startRunObservers(): Promise<ActiveAgentRunObservers> {\n const failOnObserverError =\n this.traceOptions?.failOnObserverError === true ||\n this.agent.observers.some((registration) => registration.failOnObserverError === true);\n return startAgentRunObservers(\n this.agent.observers,\n {\n agentName: this.agent.name,\n agentDescription: this.agent.description,\n instructions: this.agent.instructions,\n trace: this.traceOptions,\n promptRef: this.traceOptions?.promptRef,\n prompt: this.promptMessage,\n history: this.chatHistory,\n maxTurns: this.maxTurnCount,\n },\n failOnObserverError,\n );\n }\n\n private async recordAgentEvent(runId: string, event: AgentStreamEvent): Promise<void> {\n const registration = this.agent.eventStore;\n if (registration === undefined) {\n return;\n }\n if (registration.options.include === \"agent_tool_events\" && event.type !== \"agent_tool_event\") {\n return;\n }\n\n const turn = \"turn\" in event ? event.turn : undefined;\n const agentId = event.type === \"agent_tool_event\" ? event.agentId : this.agent.id;\n const agentName = event.type === \"agent_tool_event\" ? event.agentName : this.agent.name;\n const input: AgentEventAppendInput = {\n runId,\n agentId,\n event,\n };\n if (agentName !== undefined) {\n input.agentName = agentName;\n }\n if (turn !== undefined) {\n input.turn = turn;\n }\n if (event.type === \"agent_tool_event\") {\n input.toolName = event.toolName;\n input.internalCallId = event.internalCallId;\n if (event.toolCallId !== undefined) {\n input.toolCallId = event.toolCallId;\n }\n }\n await registration.store.append(input);\n }\n\n private async runCompletionCallHook(\n prompt: MessageType,\n history: MessageType[],\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionCall?.({\n prompt,\n history,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunStartHook(newMessages: MessageType[]): Promise<void> {\n const action = await this.activeHook?.onRunStart?.({\n prompt: this.promptMessage,\n history: this.chatHistory,\n maxTurns: this.maxTurnCount,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunEndHook(result: PromptResponse, newMessages: MessageType[]): Promise<void> {\n const action = await this.activeHook?.onRunEnd?.({\n output: result.output,\n usage: result.usage,\n messages: result.messages,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunErrorHook(\n error: unknown,\n usage: Usage,\n newMessages: MessageType[],\n ): Promise<unknown> {\n const action = await this.activeHook?.onRunError?.({\n error,\n usage,\n messages: [...this.chatHistory, ...newMessages],\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n return this.cancelled(newMessages, action.reason);\n }\n return error;\n }\n\n private async runTurnStartHook(\n turn: number,\n prompt: MessageType,\n history: MessageType[],\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onTurnStart?.({\n turn,\n prompt,\n history,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runTurnEndHook(\n turn: number,\n response: CompletionResponse,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onTurnEnd?.({\n turn,\n response,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runCompletionRequestMiddlewares(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n turn: number,\n ): Promise<ReturnType<CompletionRequestBuilder[\"build\"]>> {\n let current = request;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onCompletionRequest?.({\n turn,\n request: current,\n originalRequest: request,\n });\n if (replacement?.request !== undefined) {\n current = replacement.request;\n }\n }\n return current;\n }\n\n private async runCompletionResponseMiddlewares(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n response: CompletionResponse,\n turn: number,\n ): Promise<CompletionResponse> {\n let current = response;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onCompletionResponse?.({\n turn,\n request,\n response: current,\n originalResponse: response,\n });\n if (replacement?.response !== undefined) {\n current = replacement.response;\n }\n }\n return current;\n }\n\n private async runCompletionResponseHook(\n prompt: MessageType,\n response:\n | Awaited<ReturnType<M[\"completion\"]>>\n | Awaited<ReturnType<CompletionModel[\"completion\"]>>,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionResponse?.({\n prompt,\n response,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runCompletionErrorHook(\n prompt: MessageType,\n error: unknown,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionError?.({\n prompt,\n error,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private activeMiddlewares(): AgentMiddleware[] {\n return [...this.agent.middlewares, ...this.requestMiddlewares];\n }\n\n private shouldBufferStreamResponseEvents(): boolean {\n return (\n this.activeHook?.onCompletionResponse !== undefined ||\n this.activeMiddlewares().some((middleware) => middleware.onCompletionResponse !== undefined)\n );\n }\n\n private async drainSteeringMessages(\n runId: string,\n turn: number,\n newMessages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<boolean> {\n const messages = this.steeringMessages.splice(0);\n if (messages.length === 0) {\n return false;\n }\n\n newMessages.push(...messages);\n await this.memoryRecorder.commitMessages(runId, turn, messages, pendingTurnMessages);\n return true;\n }\n\n private startRun(): void {\n if (this.runState === \"idle\") {\n this.runState = \"running\";\n return;\n }\n if (this.runState === \"running\") {\n throw new Error(\"PromptRequest is already running.\");\n }\n throw new Error(\"PromptRequest has already been used.\");\n }\n\n private isTerminal(): boolean {\n return (\n this.runState === \"completed\" || this.runState === \"errored\" || this.runState === \"cancelled\"\n );\n }\n\n private cancelled(newMessages: MessageType[], reason: string): PromptCancelledError {\n return new PromptCancelledError([...this.chatHistory, ...newMessages], reason);\n }\n}\n\nfunction normalizePromptInput(prompt: string | MessageType | MessageType[]): {\n prompt: MessageType;\n history: MessageType[];\n} {\n if (typeof prompt === \"string\") {\n return { prompt: Message.user(prompt), history: [] };\n }\n if (!Array.isArray(prompt)) {\n return { prompt, history: [] };\n }\n if (prompt.length === 0) {\n throw new TypeError(\"Prompt transcript must contain at least one message.\");\n }\n const activePrompt = prompt.at(-1);\n if (activePrompt === undefined) {\n throw new TypeError(\"Prompt transcript must contain at least one message.\");\n }\n return {\n prompt: activePrompt,\n history: prompt.slice(0, -1),\n };\n}\n\nfunction normalizeSteeringInput(input: string | MessageType | MessageType[]): MessageType[] {\n if (typeof input === \"string\") {\n return [Message.user(input)];\n }\n return Array.isArray(input) ? [...input] : [input];\n}\n\nfunction responseStreamEvents(\n turn: number,\n response: CompletionResponse,\n includeProviderArtifacts = true,\n): AgentStreamEvent[] {\n const events: AgentStreamEvent[] = [];\n for (const item of response.choice) {\n if (item.type === \"text\") {\n if (item.text.length > 0) {\n events.push({ type: \"text_delta\", turn, delta: item.text });\n }\n continue;\n }\n\n if (item.type === \"reasoning\") {\n if (item.content === undefined) {\n if (item.text.length > 0) {\n events.push(reasoningDeltaEvent(turn, item.text, { id: item.id }));\n }\n continue;\n }\n\n for (const content of item.content) {\n const delta =\n content.type === \"encrypted\" || content.type === \"redacted\" ? content.data : content.text;\n events.push(\n reasoningDeltaEvent(turn, delta, {\n id: item.id,\n contentType: content.type,\n signature: content.type === \"text\" ? content.signature : undefined,\n }),\n );\n }\n continue;\n }\n\n if (item.type === \"tool_call\") {\n events.push({ type: \"tool_call\", turn, toolCall: item });\n }\n }\n if (includeProviderArtifacts) {\n for (const source of response.sources ?? []) {\n events.push({ type: \"source\", turn, source });\n }\n for (const toolCall of response.providerToolCalls ?? []) {\n events.push({ type: \"provider_tool_call\", turn, toolCall });\n }\n }\n return events;\n}\n\nfunction generationArtifacts(messages: MessageType[]): {\n sources?: CompletionSource[];\n providerToolCalls?: ProviderToolCall[];\n} {\n const sources = new Map<string, CompletionSource>();\n const providerToolCalls = new Map<string, ProviderToolCall>();\n for (const message of messages) {\n const metadata = getAssistantGenerationMetadata(message);\n for (const source of metadata?.sources ?? []) {\n const key = `${source.url}\\u0000${source.startIndex ?? \"\"}\\u0000${source.endIndex ?? \"\"}`;\n sources.set(key, source);\n }\n for (const toolCall of metadata?.providerToolCalls ?? []) {\n providerToolCalls.set(toolCall.id, toolCall);\n }\n }\n return {\n ...(sources.size === 0 ? {} : { sources: [...sources.values()] }),\n ...(providerToolCalls.size === 0 ? {} : { providerToolCalls: [...providerToolCalls.values()] }),\n };\n}\n\ntype ReasoningDeltaEvent = Extract<AgentStreamEvent, { type: \"reasoning_delta\" }>;\n\nfunction reasoningDeltaEvent(\n turn: number,\n delta: string,\n details: {\n id?: ReasoningDeltaEvent[\"id\"] | undefined;\n contentType?: ReasoningDeltaEvent[\"contentType\"] | undefined;\n signature?: ReasoningDeltaEvent[\"signature\"] | undefined;\n } = {},\n): ReasoningDeltaEvent {\n const event: ReasoningDeltaEvent = {\n type: \"reasoning_delta\",\n turn,\n delta,\n };\n if (details.id !== undefined) {\n event.id = details.id;\n }\n if (details.contentType !== undefined) {\n event.contentType = details.contentType;\n }\n if (details.signature !== undefined) {\n event.signature = details.signature;\n }\n return event;\n}\n\nfunction textFromMessage(message: MessageType): string {\n if (message.role === \"system\") {\n return message.content;\n }\n return message.content\n .flatMap((content) => {\n if (content.type === \"text\") {\n return [content.text];\n }\n if (content.type === \"document\" && content.source.type === \"text\") {\n return [content.source.text];\n }\n return [];\n })\n .join(\"\\n\");\n}\n\nfunction guardrailDecisionAttributes(\n decision: GuardrailDecisionRecord,\n): Record<string, JsonValue | undefined> {\n const attributes: Record<string, JsonValue | undefined> = {\n policyId: decision.policyId,\n guardrailId: decision.guardrailId,\n boundary: decision.boundary,\n mode: decision.mode,\n action: decision.action,\n applied: decision.applied,\n latencyMs: decision.latencyMs,\n };\n if (decision.reason !== undefined) {\n attributes.reason = decision.reason;\n }\n if (decision.message !== undefined) {\n attributes.message = decision.message;\n }\n return attributes;\n}\n"],"mappings":"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","names":["key","reasoning","reasoningDeltaEvent"]}
|
|
1
|
+
{"version":3,"sources":["../src/request/errors.ts","../src/internal/async-queue.ts","../src/internal/prompt-runtime/memory.ts","../src/internal/prompt-runtime/retrieval.ts","../src/internal/prompt-runtime/stream-accumulator.ts","../src/internal/prompt-runtime/stream-events.ts","../src/internal/prompt-runtime/tool-execution.ts","../src/internal/rag-text.ts","../src/observability/group.ts","../src/request/retry.ts","../src/request/prompt-request.ts"],"sourcesContent":["import type { Message } from \"../completion/index\";\nimport type { ToolApprovalRequest } from \"../tool\";\n\nexport class MaxTurnsError extends Error {\n constructor(\n readonly maxTurns: number,\n readonly chatHistory: Message[],\n readonly prompt: Message,\n ) {\n super(`Reached max turn limit: ${maxTurns}`);\n this.name = \"MaxTurnsError\";\n }\n}\n\nexport class PromptCancelledError extends Error {\n constructor(\n readonly chatHistory: Message[],\n readonly reason: string,\n ) {\n super(`Prompt cancelled: ${reason}`);\n this.name = \"PromptCancelledError\";\n }\n}\n\nexport class ToolApprovalRequiredError extends Error {\n constructor(readonly request: ToolApprovalRequest) {\n super(`Tool approval required for ${request.toolName}, but no approval handler is configured.`);\n this.name = \"ToolApprovalRequiredError\";\n }\n}\n","type AsyncQueueWaiter<T> = {\n resolve: (result: IteratorResult<T>) => void;\n reject: (error: unknown) => void;\n};\n\nexport type AsyncQueue<T> = AsyncIterable<T> & {\n enqueue(value: T): void;\n close(): void;\n throw(error: unknown): void;\n};\n\nexport function createAsyncQueue<T>(): AsyncQueue<T> {\n const values: T[] = [];\n const waiters: AsyncQueueWaiter<T>[] = [];\n let closed = false;\n let error: unknown;\n\n function flush(): void {\n while (waiters.length > 0 && values.length > 0) {\n const waiter = waiters.shift();\n const value = values.shift() as T;\n if (waiter !== undefined) {\n waiter.resolve({ value, done: false });\n }\n }\n\n if (values.length > 0 || waiters.length === 0 || !closed) {\n return;\n }\n\n while (waiters.length > 0) {\n const waiter = waiters.shift();\n if (waiter === undefined) {\n continue;\n }\n if (error !== undefined) {\n waiter.reject(error);\n } else {\n waiter.resolve({ value: undefined, done: true });\n }\n }\n }\n\n return {\n enqueue(value: T): void {\n if (closed) {\n return;\n }\n values.push(value);\n flush();\n },\n close(): void {\n closed = true;\n flush();\n },\n throw(thrown: unknown): void {\n closed = true;\n error = thrown;\n flush();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next(): Promise<IteratorResult<T>> {\n if (values.length > 0) {\n const value = values.shift() as T;\n return Promise.resolve({ value, done: false });\n }\n if (error !== undefined) {\n return Promise.reject(error);\n }\n if (closed) {\n return Promise.resolve({ value: undefined, done: true });\n }\n return new Promise((resolve, reject) => {\n waiters.push({ resolve, reject });\n });\n },\n };\n },\n };\n}\n","import type { Agent } from \"../../agent/agent\";\nimport { type Message as MessageType, Usage } from \"../../completion/index\";\nimport {\n createMemoryCompactionSummary,\n cumulativeCompactedMessageCount,\n} from \"../../memory/compaction\";\nimport { MemoryCompactionConflictError, MemoryCompactionError } from \"../../memory/errors\";\nimport type { MemoryContext, MemoryRegistration, MemorySavePolicy } from \"../../memory/types\";\n\nexport type MemoryPreparation = {\n history: MessageType[];\n usage: ReturnType<typeof Usage.empty>;\n compaction?: {\n originalMessageCount: number;\n compactedMessageCount: number;\n retainedMessageCount: number;\n conflictRetries: number;\n };\n};\n\nexport class PromptRequestMemory {\n constructor(\n private readonly agent: Agent,\n private readonly memoryContext: MemoryContext | undefined,\n private readonly initialHistory: MessageType[],\n ) {}\n\n memoryPolicy(): MemorySavePolicy | undefined {\n return this.memory()?.options.savePolicy;\n }\n\n pendingTurnMessages(newMessages: MessageType[]): MessageType[] {\n return this.memoryPolicy() === \"turn\" ? [...newMessages] : [];\n }\n\n async prepareRun(runId: string, newMessages: MessageType[]): Promise<MemoryPreparation> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return {\n history: this.initialHistory,\n usage: Usage.empty(),\n };\n }\n\n const preparation = await this.prepareStoredHistory(memory, runId, newMessages.length);\n const memoryHistory = preparation.history;\n const chatHistory = [...memoryHistory, ...this.initialHistory];\n if (memory.options.savePolicy === \"message\") {\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn: 1,\n messages: newMessages,\n });\n }\n return {\n ...preparation,\n history: chatHistory,\n };\n }\n\n async commitMessages(\n runId: string,\n turn: number,\n messages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined || messages.length === 0) {\n return;\n }\n if (memory.options.savePolicy === \"message\") {\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages,\n });\n } else if (memory.options.savePolicy === \"turn\") {\n pendingTurnMessages.push(...messages);\n }\n }\n\n async commitCompletedTurn(\n runId: string,\n turn: number,\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryContext === undefined ||\n memory.options.savePolicy !== \"turn\" ||\n pendingTurnMessages.length === 0\n ) {\n return;\n }\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages: [...pendingTurnMessages],\n });\n pendingTurnMessages.length = 0;\n }\n\n async commitCompletedRun(\n runId: string,\n turn: number,\n newMessages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n await this.commitCompletedTurn(runId, turn, pendingTurnMessages);\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryContext === undefined ||\n memory.options.savePolicy !== \"run\"\n ) {\n return;\n }\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages: [...newMessages],\n });\n }\n\n async recordError(runId: string, error: unknown, newMessages: MessageType[]): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return;\n }\n await memory.store.recordError?.({\n context: this.memoryContext,\n runId,\n error,\n messages: [...newMessages],\n });\n }\n\n private memory(): MemoryRegistration | undefined {\n return this.memoryContext === undefined ? undefined : this.agent.memory;\n }\n\n private async prepareStoredHistory(\n memory: MemoryRegistration,\n runId: string,\n incomingMessageCount: number,\n ): Promise<MemoryPreparation> {\n const context = this.memoryContext;\n if (context === undefined) {\n return { history: [], usage: Usage.empty() };\n }\n const options = memory.options.compaction;\n const capability = memory.store.compaction;\n if (options === undefined || capability === undefined) {\n return {\n history: await memory.store.load(context),\n usage: Usage.empty(),\n };\n }\n\n let usage = Usage.empty();\n let conflictRetries = 0;\n for (let attempt = 0; attempt <= options.conflictRetries; attempt += 1) {\n const snapshot = await capability.load(context);\n const compactedMessageCount = compactedPrefixLength(\n snapshot.messages,\n incomingMessageCount,\n options.maxMessages,\n options.keepRecentUserTurns,\n );\n if (compactedMessageCount === 0) {\n return { history: snapshot.messages, usage };\n }\n\n const prefix = snapshot.messages.slice(0, compactedMessageCount);\n let result: Awaited<ReturnType<typeof options.compactor>>;\n try {\n result = await options.compactor({\n context,\n messages: prefix,\n });\n } catch (error) {\n throw remappedCompactorError(error, usage);\n }\n if (result.usage !== undefined) {\n usage = Usage.add(usage, result.usage);\n }\n const summaryText = result.summary.trim();\n if (summaryText.length === 0) {\n throw new MemoryCompactionError(\"Memory compactor returned an empty summary.\", {\n usage,\n });\n }\n const summary = createMemoryCompactionSummary(\n summaryText,\n cumulativeCompactedMessageCount(prefix),\n );\n let commit: Awaited<ReturnType<typeof capability.commit>>;\n try {\n commit = await capability.commit({\n context,\n revision: snapshot.revision,\n compactedMessageCount,\n summary,\n runId: `memory-compaction:${runId}:${attempt + 1}`,\n });\n } catch (error) {\n throw new MemoryCompactionError(\"Memory compaction store commit failed.\", {\n cause: error,\n usage,\n });\n }\n if (commit === \"committed\") {\n const retained = snapshot.messages.slice(compactedMessageCount);\n return {\n history: [summary, ...retained],\n usage,\n compaction: {\n originalMessageCount: snapshot.messages.length,\n compactedMessageCount,\n retainedMessageCount: retained.length,\n conflictRetries,\n },\n };\n }\n conflictRetries += 1;\n }\n\n throw new MemoryCompactionConflictError(options.conflictRetries + 1, usage);\n }\n}\n\nfunction compactedPrefixLength(\n messages: MessageType[],\n incomingMessageCount: number,\n maxMessages: number,\n keepRecentUserTurns: number,\n): number {\n if (messages.length + incomingMessageCount <= maxMessages) {\n return 0;\n }\n const userMessageIndexes = messages.flatMap((message, index) =>\n message.role === \"user\" ? [index] : [],\n );\n // Keep the recent user-led tail intact. If there are not enough user messages to retain a\n // complete tail, skip compaction even when the transcript already exceeds maxMessages.\n if (userMessageIndexes.length <= keepRecentUserTurns) {\n return 0;\n }\n return userMessageIndexes[userMessageIndexes.length - keepRecentUserTurns] ?? 0;\n}\n\nfunction remappedCompactorError(error: unknown, usage: ReturnType<typeof Usage.empty>): Error {\n if (error instanceof MemoryCompactionError) {\n const mergedUsage =\n error.usage === undefined\n ? usage\n : isEmptyUsage(usage)\n ? error.usage\n : Usage.add(usage, error.usage);\n if (mergedUsage === error.usage || (error.usage === undefined && isEmptyUsage(usage))) {\n return error;\n }\n return new MemoryCompactionError(error.message, {\n cause: error,\n usage: mergedUsage,\n });\n }\n return new MemoryCompactionError(\"Memory compactor failed.\", {\n cause: error,\n usage,\n });\n}\n\nfunction isEmptyUsage(usage: ReturnType<typeof Usage.empty>): boolean {\n return (\n usage.inputTokens === 0 &&\n usage.outputTokens === 0 &&\n usage.totalTokens === 0 &&\n usage.cachedInputTokens === 0 &&\n usage.cacheCreationInputTokens === 0\n );\n}\n","import type { Agent } from \"../../agent/agent\";\nimport type { Document, ToolDefinition } from \"../../completion/index\";\n\nexport async function fetchDynamicContext(\n agent: Agent,\n ragText: string | undefined,\n): Promise<Document[]> {\n if (ragText === undefined || ragText.length === 0 || agent.dynamicContexts.length === 0) {\n return [];\n }\n\n const documents: Document[] = [];\n for (const registration of agent.dynamicContexts) {\n const results = await registration.index.search({\n query: ragText,\n topK: registration.options.topK,\n threshold: registration.options.threshold,\n filter: registration.options.filter,\n });\n for (const result of results) {\n const formatted = registration.options.format?.(result);\n if (formatted !== undefined) {\n documents.push(formatted);\n } else {\n const metadata = formatMetadata(result.metadata);\n const document: Document = {\n id: result.id,\n text:\n typeof result.document === \"string\"\n ? result.document\n : JSON.stringify(result.document, null, 2),\n };\n if (metadata !== undefined) {\n document.additionalProps = metadata;\n }\n documents.push(document);\n }\n }\n }\n return documents;\n}\n\nexport async function fetchToolDefinitions(\n agent: Agent,\n ragText: string | undefined,\n): Promise<ToolDefinition[]> {\n const staticDefinitions = await agent.toolSet.getToolDefinitions(ragText);\n if (ragText === undefined || ragText.length === 0 || agent.dynamicTools.length === 0) {\n return staticDefinitions;\n }\n\n const definitions = [...staticDefinitions];\n const names = new Set(staticDefinitions.map((definition) => definition.name));\n for (const registration of agent.dynamicTools) {\n const results = await registration.index.search({\n query: ragText,\n topK: registration.options.topK,\n threshold: registration.options.threshold,\n filter: registration.options.filter,\n });\n for (const result of results) {\n if (names.has(result.document.toolName)) {\n continue;\n }\n names.add(result.document.toolName);\n definitions.push(result.document.definition);\n }\n }\n return definitions;\n}\n\nfunction formatMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata === undefined) {\n return undefined;\n }\n\n return Object.fromEntries(Object.entries(metadata).map(([key, value]) => [key, String(value)]));\n}\n","import type {\n AssistantContent as AssistantContentType,\n CompletionResponse,\n CompletionSource,\n CompletionStreamEvent,\n JsonValue,\n ProviderToolCall,\n ReasoningContent,\n ToolCall,\n} from \"../../completion/index\";\nimport { Usage } from \"../../completion/index\";\nimport type { AgentDeltaEvent } from \"../../request/types\";\n\ntype ReasoningState = {\n id?: string;\n text: string;\n content?: ReasoningContent[];\n};\n\ntype PartialToolCall = {\n id: string;\n callId?: string;\n name: string;\n argumentsText: string;\n signature?: string;\n additionalParams?: JsonValue;\n};\n\ntype OrderedPartRef =\n | { type: \"text\"; key: string }\n | { type: \"reasoning\"; key: string }\n | { type: \"tool_call\"; key: string };\n\nexport class CompletionStreamAccumulator<RawResponse = unknown> {\n private orderedParts: OrderedPartRef[] = [];\n private textParts = new Map<string, string>();\n private reasoningByKey = new Map<string, ReasoningState>();\n private reasoningKeyById = new Map<string, string>();\n private toolCalls = new Map<string, PartialToolCall>();\n private sources = new Map<string, CompletionSource>();\n private providerToolCalls = new Map<string, ProviderToolCall>();\n private finalResponse: CompletionResponse<RawResponse> | undefined;\n private messageId: string | undefined;\n private nextTextKey = 0;\n private nextReasoningKey = 0;\n\n accept(event: CompletionStreamEvent<RawResponse>): AgentDeltaEvent | undefined {\n if (event.type === \"text_delta\") {\n this.appendText(event.delta);\n return { type: \"text_delta\", delta: event.delta };\n }\n\n if (event.type === \"reasoning_delta\") {\n const reasoning = this.reasoningStateForEvent(event);\n this.appendReasoning(reasoning, event);\n return reasoningDeltaEvent(event);\n }\n\n if (event.type === \"tool_call_delta\") {\n const toolCall = this.toolCallStateForId(event.id);\n if (event.callId !== undefined && event.callId.length > 0) toolCall.callId = event.callId;\n if (event.name !== undefined && event.name.length > 0) toolCall.name = event.name;\n if (event.signature !== undefined) toolCall.signature = event.signature;\n if (event.argumentsDelta !== undefined) {\n if (event.argumentsMode === \"replace\") {\n toolCall.argumentsText = event.argumentsDelta;\n } else {\n toolCall.argumentsText += event.argumentsDelta;\n }\n }\n return undefined;\n }\n\n if (event.type === \"tool_call\") {\n this.upsertToolCall(event.toolCall);\n return { type: \"tool_call\", toolCall: event.toolCall };\n }\n\n if (event.type === \"source\") {\n this.sources.set(sourceKey(event.source), event.source);\n return { type: \"source\", source: event.source };\n }\n\n if (event.type === \"provider_tool_call\") {\n this.providerToolCalls.set(event.toolCall.id, event.toolCall);\n return { type: \"provider_tool_call\", toolCall: event.toolCall };\n }\n\n if (event.type === \"message_id\") {\n this.messageId = event.id;\n return undefined;\n }\n\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n return undefined;\n }\n\n return undefined;\n }\n\n response(): CompletionResponse<RawResponse> {\n const accumulatedResponse = this.buildAccumulatedResponse();\n if (this.finalResponse !== undefined) {\n if (accumulatedResponse.choice.length === 0) {\n return this.withAccumulatedArtifacts(this.finalResponse, accumulatedResponse);\n }\n return this.mergeFinalResponse(accumulatedResponse, this.finalResponse);\n }\n\n return accumulatedResponse;\n }\n\n private buildAccumulatedResponse(): CompletionResponse<RawResponse> {\n const choice: AssistantContentType[] = [];\n\n for (const part of this.orderedParts) {\n if (part.type === \"text\") {\n const text = this.textParts.get(part.key) ?? \"\";\n if (text.length > 0) {\n choice.push({ type: \"text\", text });\n }\n continue;\n }\n\n if (part.type === \"reasoning\") {\n const reasoning = this.reasoningByKey.get(part.key);\n if (reasoning !== undefined) {\n choice.push(reasoningContent(reasoning));\n }\n continue;\n }\n\n const toolCall = this.toolCalls.get(part.key);\n if (toolCall !== undefined) {\n choice.push(\n toolCallContent(toolCall, matchingFinalToolCall(toolCall, this.finalResponse?.choice)),\n );\n }\n }\n\n const response: CompletionResponse<RawResponse> = {\n choice,\n usage: Usage.empty(),\n rawResponse: undefined as RawResponse,\n };\n if (this.messageId !== undefined) {\n response.messageId = this.messageId;\n }\n const sources = [...this.sources.values()];\n if (sources.length > 0) {\n response.sources = sources;\n }\n const providerToolCalls = [...this.providerToolCalls.values()];\n if (providerToolCalls.length > 0) {\n response.providerToolCalls = providerToolCalls;\n }\n return response;\n }\n\n private upsertToolCall(toolCall: ToolCall): void {\n if (!this.toolCalls.has(toolCall.id)) {\n this.orderedParts.push({ type: \"tool_call\", key: toolCall.id });\n }\n const partial: PartialToolCall = {\n id: toolCall.id,\n name: toolCall.function.name,\n argumentsText: JSON.stringify(toolCall.function.arguments ?? {}),\n };\n if (toolCall.callId !== undefined) {\n partial.callId = toolCall.callId;\n }\n if (toolCall.signature !== undefined) {\n partial.signature = toolCall.signature;\n }\n if (toolCall.additionalParams !== undefined) {\n partial.additionalParams = toolCall.additionalParams;\n }\n this.toolCalls.set(toolCall.id, partial);\n }\n\n private mergeFinalResponse(\n accumulatedResponse: CompletionResponse<RawResponse>,\n finalResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n if (finalResponse.choice.length === 0) {\n const mergedResponse: CompletionResponse<RawResponse> = {\n ...accumulatedResponse,\n usage: finalResponse.usage,\n rawResponse: finalResponse.rawResponse,\n };\n if (finalResponse.messageId !== undefined) {\n mergedResponse.messageId = finalResponse.messageId;\n }\n return this.withAccumulatedArtifacts(mergedResponse, accumulatedResponse);\n }\n\n const finalById = new Map<string, ToolCall>();\n const finalByCallId = new Map<string, ToolCall>();\n for (const content of finalResponse.choice) {\n if (content.type !== \"tool_call\") {\n continue;\n }\n finalById.set(content.id, content);\n if (content.callId !== undefined) {\n finalByCallId.set(content.callId, content);\n }\n }\n\n const matchedFinalToolCalls = new Set<ToolCall>();\n const choice = accumulatedResponse.choice.map((content) => {\n if (content.type !== \"tool_call\") {\n return content;\n }\n\n const finalToolCall =\n finalById.get(content.id) ??\n (content.callId === undefined ? undefined : finalByCallId.get(content.callId));\n if (finalToolCall === undefined) {\n return content;\n }\n\n matchedFinalToolCalls.add(finalToolCall);\n return mergeFinalToolCall(content, finalToolCall);\n });\n\n for (const content of finalResponse.choice) {\n if (content.type !== \"tool_call\") {\n continue;\n }\n if (!matchedFinalToolCalls.has(content)) {\n choice.push(content);\n }\n }\n\n return this.withAccumulatedArtifacts({ ...finalResponse, choice }, accumulatedResponse);\n }\n\n private appendText(delta: string): void {\n const lastPart = this.orderedParts.at(-1);\n const key = lastPart?.type === \"text\" ? lastPart.key : this.createTextKey();\n if (lastPart?.type !== \"text\") {\n this.orderedParts.push({ type: \"text\", key });\n }\n this.textParts.set(key, `${this.textParts.get(key) ?? \"\"}${delta}`);\n }\n\n private reasoningStateForEvent(\n event: Extract<CompletionStreamEvent<RawResponse>, { type: \"reasoning_delta\" }>,\n ): ReasoningState {\n if (event.id !== undefined) {\n const existingKey = this.reasoningKeyById.get(event.id);\n if (existingKey !== undefined) {\n const existing = this.reasoningByKey.get(existingKey);\n if (existing !== undefined) {\n return existing;\n }\n }\n\n const key = this.createReasoningKey();\n const reasoning: ReasoningState = { id: event.id, text: \"\" };\n this.reasoningKeyById.set(event.id, key);\n this.reasoningByKey.set(key, reasoning);\n this.orderedParts.push({ type: \"reasoning\", key });\n return reasoning;\n }\n\n const lastPart = this.orderedParts.at(-1);\n if (lastPart?.type === \"reasoning\") {\n const lastReasoning = this.reasoningByKey.get(lastPart.key);\n if (lastReasoning !== undefined && lastReasoning.id === undefined) {\n return lastReasoning;\n }\n }\n\n const key = this.createReasoningKey();\n const reasoning: ReasoningState = { text: \"\" };\n this.reasoningByKey.set(key, reasoning);\n this.orderedParts.push({ type: \"reasoning\", key });\n return reasoning;\n }\n\n private toolCallStateForId(id: string): PartialToolCall {\n const existing = this.toolCalls.get(id);\n if (existing !== undefined) {\n return existing;\n }\n\n const toolCall: PartialToolCall = {\n id,\n name: \"\",\n argumentsText: \"\",\n };\n this.toolCalls.set(id, toolCall);\n this.orderedParts.push({ type: \"tool_call\", key: id });\n return toolCall;\n }\n\n private withMessageIdFallback(\n response: CompletionResponse<RawResponse>,\n accumulatedResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n if (response.messageId !== undefined || accumulatedResponse.messageId === undefined) {\n return response;\n }\n return { ...response, messageId: accumulatedResponse.messageId };\n }\n\n private withAccumulatedArtifacts(\n response: CompletionResponse<RawResponse>,\n accumulatedResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n const withMessageId = this.withMessageIdFallback(response, accumulatedResponse);\n const sources = mergeSources(accumulatedResponse.sources, response.sources);\n const providerToolCalls = mergeProviderToolCalls(\n accumulatedResponse.providerToolCalls,\n response.providerToolCalls,\n );\n return {\n ...withMessageId,\n ...(sources.length === 0 ? {} : { sources }),\n ...(providerToolCalls.length === 0 ? {} : { providerToolCalls }),\n };\n }\n\n private createTextKey(): string {\n this.nextTextKey += 1;\n return `text_${this.nextTextKey.toString()}`;\n }\n\n private createReasoningKey(): string {\n this.nextReasoningKey += 1;\n return `reasoning_${this.nextReasoningKey.toString()}`;\n }\n\n private appendReasoning(\n reasoning: ReasoningState,\n event: Extract<CompletionStreamEvent<RawResponse>, { type: \"reasoning_delta\" }>,\n ): void {\n const contentType = event.contentType ?? \"text\";\n if (contentType === \"text\" || contentType === \"summary\") {\n reasoning.text += event.delta;\n }\n\n if (event.contentType === undefined && event.signature === undefined) {\n return;\n }\n\n reasoning.content ??= [];\n const last = reasoning.content.at(-1);\n if (contentType === \"text\") {\n if (last?.type === \"text\") {\n last.text += event.delta;\n if (event.signature !== undefined) {\n last.signature = event.signature;\n }\n } else {\n reasoning.content.push(\n event.signature === undefined\n ? { type: \"text\", text: event.delta }\n : { type: \"text\", text: event.delta, signature: event.signature },\n );\n }\n return;\n }\n\n if (contentType === \"summary\") {\n if (last?.type === \"summary\") {\n last.text += event.delta;\n } else {\n reasoning.content.push({ type: \"summary\", text: event.delta });\n }\n return;\n }\n\n if (contentType === \"encrypted\") {\n reasoning.content.push({ type: \"encrypted\", data: event.delta });\n return;\n }\n\n reasoning.content.push({ type: \"redacted\", data: event.delta });\n }\n}\n\nfunction sourceKey(source: CompletionSource): string {\n return `${source.url}\\u0000${source.startIndex ?? \"\"}\\u0000${source.endIndex ?? \"\"}`;\n}\n\nfunction mergeSources(\n accumulated: CompletionSource[] | undefined,\n final: CompletionSource[] | undefined,\n): CompletionSource[] {\n const sources = new Map<string, CompletionSource>();\n for (const source of [...(accumulated ?? []), ...(final ?? [])]) {\n sources.set(sourceKey(source), source);\n }\n return [...sources.values()];\n}\n\nfunction mergeProviderToolCalls(\n accumulated: ProviderToolCall[] | undefined,\n final: ProviderToolCall[] | undefined,\n): ProviderToolCall[] {\n const toolCalls = new Map<string, ProviderToolCall>();\n for (const toolCall of [...(accumulated ?? []), ...(final ?? [])]) {\n toolCalls.set(toolCall.id, toolCall);\n }\n return [...toolCalls.values()];\n}\n\nfunction reasoningContent(reasoning: ReasoningState): AssistantContentType {\n const content =\n reasoning.content === undefined\n ? { type: \"reasoning\" as const, text: reasoning.text }\n : { type: \"reasoning\" as const, text: reasoning.text, content: reasoning.content };\n return reasoning.id === undefined ? content : { ...content, id: reasoning.id };\n}\n\nfunction toolCallContent(toolCall: PartialToolCall, finalToolCall?: ToolCall): ToolCall {\n const argumentsValue =\n finalToolCall !== undefined && !isEmptyToolArguments(finalToolCall.function.arguments)\n ? finalToolCall.function.arguments\n : parseToolArguments(toolCall.id, toolCall.argumentsText);\n const content: ToolCall = {\n type: \"tool_call\",\n id: toolCall.id,\n function: {\n name: toolCall.name,\n arguments: argumentsValue,\n },\n };\n if (toolCall.callId !== undefined) {\n content.callId = toolCall.callId;\n }\n if (toolCall.signature !== undefined) {\n content.signature = toolCall.signature;\n }\n if (toolCall.additionalParams !== undefined) {\n content.additionalParams = toolCall.additionalParams;\n }\n return content;\n}\n\nfunction matchingFinalToolCall(\n accumulated: PartialToolCall,\n finalChoice: AssistantContentType[] | undefined,\n): ToolCall | undefined {\n const byId = finalChoice?.find(\n (content): content is ToolCall => content.type === \"tool_call\" && content.id === accumulated.id,\n );\n if (byId !== undefined || accumulated.callId === undefined) {\n return byId;\n }\n return finalChoice?.find(\n (content): content is ToolCall =>\n content.type === \"tool_call\" && content.callId === accumulated.callId,\n );\n}\n\nfunction mergeFinalToolCall(accumulated: ToolCall, finalToolCall: ToolCall): ToolCall {\n const argumentsValue = isEmptyToolArguments(finalToolCall.function.arguments)\n ? accumulated.function.arguments\n : finalToolCall.function.arguments;\n return {\n ...accumulated,\n ...finalToolCall,\n function: {\n ...accumulated.function,\n ...finalToolCall.function,\n arguments: argumentsValue,\n },\n };\n}\n\nfunction reasoningDeltaEvent(\n event: Extract<CompletionStreamEvent, { type: \"reasoning_delta\" }>,\n): AgentDeltaEvent {\n const mapped: AgentDeltaEvent = { type: \"reasoning_delta\", delta: event.delta };\n if (event.id !== undefined) mapped.id = event.id;\n if (event.contentType !== undefined) mapped.contentType = event.contentType;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n}\n\nfunction isEmptyToolArguments(value: unknown): boolean {\n if (value === undefined || value === null) {\n return true;\n }\n if (typeof value === \"string\") {\n return value.trim().length === 0;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (typeof value === \"object\") {\n return Object.values(value).every((item) => item === undefined);\n }\n return false;\n}\n\nfunction parseToolArguments(toolCallId: string, text: string): JsonValue {\n if (text.trim().length === 0) {\n return {};\n }\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n throw new Error(\n `Completion returned tool call \"${toolCallId}\" with malformed JSON arguments; this indicates invalid provider output or incomplete stream assembly.`,\n );\n }\n}\n","import type { CompletionStreamEvent } from \"../../completion/types\";\nimport type {\n AgentDeltaEvent,\n AgentStreamEvent,\n AgentToolCallDeltaEvent,\n} from \"../../request/types\";\n\nexport function addTurn(turn: number, event: AgentDeltaEvent): AgentStreamEvent {\n if (event.type === \"text_delta\") {\n return { type: \"text_delta\", turn, delta: event.delta };\n }\n if (event.type === \"reasoning_delta\") {\n const mapped: AgentStreamEvent = { type: \"reasoning_delta\", turn, delta: event.delta };\n if (event.id !== undefined) mapped.id = event.id;\n if (event.contentType !== undefined) mapped.contentType = event.contentType;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n }\n if (event.type === \"source\") {\n return { type: \"source\", turn, source: event.source };\n }\n if (event.type === \"provider_tool_call\") {\n return { type: \"provider_tool_call\", turn, toolCall: event.toolCall };\n }\n return { type: \"tool_call\", turn, toolCall: event.toolCall };\n}\n\nexport function addTurnToToolCallDelta(\n turn: number,\n event: Extract<CompletionStreamEvent, { type: \"tool_call_delta\" }>,\n): AgentToolCallDeltaEvent {\n const mapped: AgentToolCallDeltaEvent = {\n type: \"tool_call_delta\",\n turn,\n id: event.id,\n };\n if (event.callId !== undefined) mapped.callId = event.callId;\n if (event.name !== undefined) mapped.name = event.name;\n if (event.argumentsDelta !== undefined) mapped.argumentsDelta = event.argumentsDelta;\n if (event.argumentsMode !== undefined) mapped.argumentsMode = event.argumentsMode;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n}\n\nexport function isGenerationDeltaEvent(type: string): boolean {\n return (\n type === \"text_delta\" ||\n type === \"reasoning_delta\" ||\n type === \"tool_call_delta\" ||\n type === \"tool_call\" ||\n type === \"source\" ||\n type === \"provider_tool_call\"\n );\n}\n","import type { Agent } from \"../../agent/agent\";\nimport type {\n JsonObject,\n ToolCall,\n ToolDefinition,\n ToolResult,\n ToolResultContent,\n} from \"../../completion\";\nimport { ToolContent } from \"../../completion\";\nimport type { PromptHook, ToolApprovalRequestOptions, ToolHookArgs } from \"../../hooks\";\nimport { runControl, toolCallControl } from \"../../hooks\";\nimport type { ActiveAgentRunObservers, ActiveToolObservers } from \"../../observability/group\";\nimport type {\n AgentToolErrorArgs,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n} from \"../../observability/types\";\nimport { ToolApprovalRequiredError } from \"../../request/errors\";\nimport type { AgentChildStreamEvent } from \"../../request/types\";\nimport type {\n AnyTool,\n NormalizedToolOutput,\n ToolApprovalContext,\n ToolApprovalDecision,\n ToolApprovalPolicy,\n ToolApprovalRequest,\n ToolApprovalRunContext,\n ToolApprovalsOptions,\n ToolCallContext,\n ToolCallStreamEvent,\n} from \"../../tool\";\nimport { parseToolArgs, toolResultContentToText } from \"../../tool\";\nimport type {\n AgentMiddleware,\n ToolOutputMiddlewareArgs,\n ToolOutputMiddlewareResult,\n} from \"../../tool/middleware\";\nimport { mapWithConcurrency } from \"../concurrency\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport type ToolResultEventPayload = {\n type: \"tool_result\";\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n args: string;\n result: string;\n structuredResult?: ToolResultContent[] | undefined;\n};\n\nexport type AgentToolEventPayload = {\n type: \"agent_tool_event\";\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n agentId: string;\n agentName?: string;\n event: AgentChildStreamEvent;\n};\n\nexport type ToolExecutionEventPayload = ToolResultEventPayload | AgentToolEventPayload;\n\nexport type ToolExecutionObservation = {\n turn: number;\n runObservers: ActiveAgentRunObservers;\n toolDefinitions?: ToolDefinition[];\n includeToolCallDeltas?: boolean;\n};\n\nexport type ToolExecutionRunContext = {\n runId: string;\n sessionId?: string | undefined;\n metadata?: JsonObject | undefined;\n};\n\nexport class ToolCallExecutor {\n constructor(\n private readonly agent: Agent,\n private readonly activeHook: PromptHook | undefined,\n private readonly approvals: ToolApprovalsOptions | undefined,\n private readonly runContext: ToolExecutionRunContext,\n private readonly concurrency: number,\n private readonly requestMiddlewares: AgentMiddleware[],\n private readonly includeToolCallDeltas: boolean,\n private readonly cancel: (reason: string) => Error,\n ) {}\n\n async execute(\n toolCalls: ToolCall[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResult[]> {\n for (const toolCall of toolCalls) {\n if (toolCall.function.name.length === 0) {\n throw new Error(\n `Completion returned tool call \"${toolCall.id}\" with an empty function name; this indicates invalid provider output or provider mapping.`,\n );\n }\n }\n\n return mapWithConcurrency(toolCalls, this.concurrency, async (toolCall) => {\n const args = JSON.stringify(toolCall.function.arguments ?? {});\n const internalCallId = globalThis.crypto.randomUUID();\n const hookArgs: ToolHookArgs = {\n toolName: toolCall.function.name,\n internalCallId,\n args,\n };\n if (toolCall.callId !== undefined) {\n hookArgs.toolCallId = toolCall.callId;\n }\n const tool = this.agent.getTool(toolCall.function.name);\n const toolDefinition = observation?.toolDefinitions?.find(\n (definition) => definition.name === toolCall.function.name,\n );\n const toolMetadata = toolTraceMetadata(tool);\n\n const toolStartArgs: AgentToolStartArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n };\n if (toolCall.callId !== undefined) {\n toolStartArgs.toolCallId = toolCall.callId;\n }\n if (toolDefinition !== undefined) {\n toolStartArgs.toolDefinition = toolDefinition;\n }\n if (toolMetadata !== undefined) {\n toolStartArgs.toolMetadata = toolMetadata;\n }\n const toolObservers = await observation?.runObservers.startTool(toolStartArgs);\n\n let output: NormalizedToolOutput;\n let skipped = false;\n let effectiveArgs = args;\n\n const callAction = await this.activeHook?.onToolCall?.({\n ...hookArgs,\n tool: toolCallControl,\n });\n if (callAction?.type === \"terminate\") {\n await recordToolError(\n toolObservers,\n observation?.turn,\n toolCall,\n internalCallId,\n effectiveArgs,\n callAction.reason,\n );\n throw this.cancel(callAction.reason);\n }\n if (callAction?.type === \"skip\") {\n output = callAction.reason;\n skipped = true;\n } else {\n let approvalDecision: { approved: true } | { approved: false; result: string };\n try {\n effectiveArgs = await this.runToolInputMiddlewares({\n ...hookArgs,\n turn: observation?.turn ?? 0,\n originalArgs: args,\n });\n hookArgs.args = effectiveArgs;\n\n approvalDecision =\n callAction?.type === \"approval_request\"\n ? await this.requestApproval(tool, hookArgs, callAction)\n : ((await this.evaluateToolApproval(tool, hookArgs)) ?? { approved: true });\n if (!approvalDecision.approved) {\n output = approvalDecision.result;\n skipped = true;\n } else {\n output = await this.runApprovedToolCall(\n toolCall,\n hookArgs,\n effectiveArgs,\n args,\n toolObservers,\n observation,\n onStreamEvent,\n false,\n );\n effectiveArgs = hookArgs.args;\n }\n } catch (error) {\n await recordToolError(\n toolObservers,\n observation?.turn,\n toolCall,\n internalCallId,\n effectiveArgs,\n error,\n );\n throw error;\n }\n }\n\n let result = toolOutputToText(output);\n let structuredResult = toolOutputToStructuredResult(output);\n if (this.agent.shouldApplyToolMiddleware(toolCall.function.name)) {\n const middlewareReplacement = await this.runToolResultMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n result,\n originalResult: result,\n structuredResult,\n originalStructuredResult: structuredResult,\n turn: observation?.turn ?? 0,\n });\n if (middlewareReplacement !== undefined) {\n output = middlewareReplacement;\n result = toolOutputToText(middlewareReplacement);\n structuredResult = toolOutputToStructuredResult(middlewareReplacement);\n }\n }\n\n const resultAction = await this.activeHook?.onToolResult?.({\n ...hookArgs,\n args: effectiveArgs,\n result,\n structuredResult,\n run: runControl,\n });\n await toolObservers?.end({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n skipped,\n toolCallId: toolCall.callId,\n });\n if (resultAction?.type === \"terminate\") {\n throw this.cancel(resultAction.reason);\n }\n\n const resultPayload: ToolResultEventPayload = {\n type: \"tool_result\",\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n };\n if (toolCall.callId !== undefined) {\n resultPayload.toolCallId = toolCall.callId;\n }\n onResult?.(resultPayload);\n return ToolContent.toolResult(toolCall.id, output, {\n callId: toolCall.callId,\n toolName: toolCall.function.name,\n });\n });\n }\n\n private async runApprovedToolCall(\n toolCall: ToolCall,\n hookArgs: ToolHookArgs,\n effectiveArgs: string,\n originalArgs: string,\n toolObservers: ActiveToolObservers | undefined,\n observation: ToolExecutionObservation | undefined,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n applyInputMiddleware = true,\n ): Promise<NormalizedToolOutput> {\n const middlewareArgs = applyInputMiddleware\n ? await this.runToolInputMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n turn: observation?.turn ?? 0,\n originalArgs,\n })\n : effectiveArgs;\n hookArgs.args = middlewareArgs;\n try {\n const toolContext: ToolCallContext = {\n emitStreamEvent: async (event) => {\n const streamEventArgs: AgentToolStreamEventArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId: hookArgs.internalCallId,\n args: middlewareArgs,\n event,\n };\n if (toolCall.callId !== undefined) {\n streamEventArgs.toolCallId = toolCall.callId;\n }\n await toolObservers?.streamEvent(streamEventArgs);\n const payload = agentToolEventPayload(toolCall, hookArgs.internalCallId, event);\n if (payload !== undefined) {\n onStreamEvent?.(payload);\n }\n },\n };\n toolContext.includeToolCallDeltas = this.includeToolCallDeltas;\n return await this.agent.callTool(toolCall.function.name, middlewareArgs, toolContext);\n } catch (error) {\n const errorAction = await this.activeHook?.onToolError?.({\n ...hookArgs,\n args: middlewareArgs,\n error,\n run: runControl,\n });\n await toolObservers?.error(\n toolErrorArgs(\n observation?.turn ?? 0,\n toolCall,\n hookArgs.internalCallId,\n middlewareArgs,\n error,\n ),\n );\n if (errorAction?.type === \"terminate\") {\n throw this.cancel(errorAction.reason);\n }\n return error instanceof Error ? error.toString() : String(error);\n }\n }\n\n private async runToolResultMiddlewares(\n args: ToolOutputMiddlewareArgs,\n ): Promise<NormalizedToolOutput | undefined> {\n let result = args.result;\n let structuredResult = args.structuredResult;\n let replaced = false;\n for (const middleware of this.activeMiddlewares()) {\n const outputReplacement = await middleware.onToolOutput?.({\n ...args,\n result,\n structuredResult,\n });\n if (outputReplacement !== undefined) {\n const normalized = normalizeToolOutputMiddlewareResult(outputReplacement);\n if (normalized.result !== undefined) {\n result = normalized.result;\n structuredResult = undefined;\n }\n if (normalized.structuredResult !== undefined) {\n structuredResult = normalized.structuredResult;\n result = toolResultContentToText(normalized.structuredResult);\n }\n replaced = true;\n }\n }\n return replaced ? (structuredResult ?? result) : undefined;\n }\n\n private async runToolInputMiddlewares(\n args: ToolHookArgs & { turn: number; originalArgs: string },\n ): Promise<string> {\n let current = args.args;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onToolInput?.({\n ...args,\n args: current,\n });\n if (replacement?.args !== undefined) {\n current =\n typeof replacement.args === \"string\"\n ? replacement.args\n : JSON.stringify(replacement.args);\n }\n }\n return current;\n }\n\n private activeMiddlewares(): AgentMiddleware[] {\n return [...this.agent.middlewares, ...this.requestMiddlewares];\n }\n\n private async evaluateToolApproval(\n tool: AnyTool | undefined,\n hookArgs: ToolHookArgs,\n ): Promise<{ approved: true } | { approved: false; result: string } | undefined> {\n if (tool?.approval === undefined) {\n return undefined;\n }\n const policy = tool.approval as ToolApprovalPolicy<unknown>;\n const context = approvalContext(tool, hookArgs, this.agent, this.runContext);\n const required = await policy.when(context);\n if (!required) {\n return { approved: true };\n }\n\n const reason = await resolveApprovalText(policy.reason, context);\n const rejectMessage = await resolveApprovalText(policy.rejectMessage, context);\n const options: ToolApprovalRequestOptions = {};\n if (reason !== undefined) {\n options.reason = reason;\n }\n if (rejectMessage !== undefined) {\n options.rejectMessage = rejectMessage;\n }\n return this.requestApproval(tool, hookArgs, options);\n }\n\n private async requestApproval(\n tool: AnyTool | undefined,\n hookArgs: ToolHookArgs,\n options: ToolApprovalRequestOptions,\n ): Promise<{ approved: true } | { approved: false; result: string }> {\n const request: ToolApprovalRequest = approvalContext(\n tool,\n hookArgs,\n this.agent,\n this.runContext,\n );\n if (options.reason !== undefined) {\n request.reason = options.reason;\n }\n if (options.rejectMessage !== undefined) {\n request.rejectMessage = options.rejectMessage;\n }\n if (this.approvals === undefined) {\n throw new ToolApprovalRequiredError(request);\n }\n\n const decision = normalizeApprovalDecision(await this.approvals.handler(request));\n if (decision.approved) {\n return { approved: true };\n }\n return {\n approved: false,\n result:\n decision.rejectMessage ??\n decision.reason ??\n request.rejectMessage ??\n \"Tool approval was rejected.\",\n };\n }\n}\n\nfunction approvalContext(\n tool: AnyTool | undefined,\n hookArgs: ToolHookArgs,\n agent: Agent,\n run: ToolExecutionRunContext,\n): ToolApprovalContext {\n const rawParsedArgs = parseToolArgs(hookArgs.args);\n const parsedArgs = tool?.parseApprovalArgs?.(rawParsedArgs) ?? rawParsedArgs;\n const approvalRun: ToolApprovalRunContext = {\n agentId: agent.id,\n runId: run.runId,\n };\n if (run.sessionId !== undefined) {\n approvalRun.sessionId = run.sessionId;\n }\n if (run.metadata !== undefined) {\n approvalRun.metadata = run.metadata;\n }\n const context: ToolApprovalContext = {\n toolName: hookArgs.toolName,\n args: parsedArgs,\n rawArgs: hookArgs.args,\n internalCallId: hookArgs.internalCallId,\n run: approvalRun,\n };\n if (hookArgs.toolCallId !== undefined) {\n context.toolCallId = hookArgs.toolCallId;\n }\n return context;\n}\n\nfunction normalizeApprovalDecision(decision: ToolApprovalDecision): {\n approved: boolean;\n reason?: string;\n rejectMessage?: string;\n} {\n if (typeof decision === \"boolean\") {\n return { approved: decision };\n }\n return decision;\n}\n\nasync function resolveApprovalText<Args>(\n value: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>) | undefined,\n context: ToolApprovalContext<Args>,\n): Promise<string | undefined> {\n return typeof value === \"function\" ? value(context as ToolApprovalContext<Args>) : value;\n}\n\nfunction normalizeToolOutputMiddlewareResult(result: ToolOutputMiddlewareResult): {\n result?: string | undefined;\n structuredResult?: ToolResultContent[] | undefined;\n} {\n if (typeof result === \"string\") {\n return { result };\n }\n return result ?? {};\n}\n\nfunction toolTraceMetadata(tool: AnyTool | undefined): JsonObject | undefined {\n if (tool === undefined) {\n return undefined;\n }\n const metadata = (tool as { [MCP_TOOL_METADATA_KEY]?: unknown })[MCP_TOOL_METADATA_KEY];\n const mcpMetadata =\n typeof metadata === \"object\" && metadata !== null\n ? (metadata as { serverName?: unknown })\n : undefined;\n const result: JsonObject = {\n approvalRequired: tool.approval !== undefined,\n };\n if (typeof mcpMetadata?.serverName === \"string\" && mcpMetadata.serverName.length > 0) {\n result.mcpServerName = mcpMetadata.serverName;\n }\n return result;\n}\n\nfunction toolErrorArgs(\n turn: number,\n toolCall: ToolCall,\n internalCallId: string,\n args: string,\n error: unknown,\n): AgentToolErrorArgs {\n const observerArgs: AgentToolErrorArgs = {\n turn,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n error,\n };\n if (toolCall.callId !== undefined) {\n observerArgs.toolCallId = toolCall.callId;\n }\n return observerArgs;\n}\n\nasync function recordToolError(\n toolObservers: ActiveToolObservers | undefined,\n turn: number | undefined,\n toolCall: ToolCall,\n internalCallId: string,\n args: string,\n error: unknown,\n): Promise<void> {\n await toolObservers?.error({\n turn: turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n error,\n toolCallId: toolCall.callId,\n });\n}\n\nfunction toolOutputToText(output: NormalizedToolOutput): string {\n return typeof output === \"string\" ? output : toolResultContentToText(output);\n}\n\nfunction toolOutputToStructuredResult(\n output: NormalizedToolOutput,\n): ToolResultContent[] | undefined {\n return typeof output === \"string\" ? undefined : output;\n}\n\nfunction agentToolEventPayload(\n toolCall: ToolCall,\n internalCallId: string,\n event: ToolCallStreamEvent,\n): AgentToolEventPayload | undefined {\n if (typeof event.agentId !== \"string\" || event.agentId.length === 0) {\n return undefined;\n }\n const payload: AgentToolEventPayload = {\n type: \"agent_tool_event\" as const,\n toolName: toolCall.function.name,\n internalCallId,\n agentId: event.agentId,\n event: event.event as AgentChildStreamEvent,\n };\n if (toolCall.callId !== undefined) {\n payload.toolCallId = toolCall.callId;\n }\n if (event.agentName !== undefined) {\n payload.agentName = event.agentName;\n }\n return payload;\n}\n","import type { Message as MessageType } from \"../completion/index\";\n\nexport function extractRagText(message: MessageType): string | undefined {\n if (message.role === \"user\") {\n return message.content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n }\n\n if (message.role === \"tool\") {\n return message.content\n .flatMap((item) => item.content.flatMap((part) => (part.type === \"text\" ? [part.text] : [])))\n .join(\"\\n\");\n }\n\n return undefined;\n}\n","import type {\n AgentGenerationEndArgs,\n AgentGenerationErrorArgs,\n AgentGenerationObserver,\n AgentGenerationStartArgs,\n AgentGenerationUpdateArgs,\n AgentObserverRegistration,\n AgentRunEndArgs,\n AgentRunErrorArgs,\n AgentRunEventArgs,\n AgentRunObserver,\n AgentRunStartArgs,\n AgentToolEndArgs,\n AgentToolErrorArgs,\n AgentToolObserver,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n AgentTraceInfo,\n} from \"./types\";\n\nexport async function startAgentRunObservers(\n registrations: AgentObserverRegistration[],\n args: AgentRunStartArgs,\n failOnObserverError: boolean,\n): Promise<ActiveAgentRunObservers> {\n const runObservers: AgentRunObserver[] = [];\n for (const registration of registrations) {\n try {\n const runObserver = await registration.observer.startRun(args);\n if (runObserver !== undefined) {\n runObservers.push(runObserver);\n }\n } catch (error) {\n if (failOnObserverError || registration.failOnObserverError === true) {\n throw error;\n }\n }\n }\n\n return new ActiveAgentRunObservers(runObservers, failOnObserverError);\n}\n\nexport class ActiveAgentRunObservers {\n readonly trace: AgentTraceInfo | undefined;\n\n constructor(\n private readonly runObservers: AgentRunObserver[],\n private readonly failOnObserverError: boolean,\n ) {\n this.trace = runObservers.find((observer) => observer.trace !== undefined)?.trace;\n }\n\n async startGeneration(args: AgentGenerationStartArgs): Promise<ActiveGenerationObservers> {\n const generationObservers: AgentGenerationObserver[] = [];\n for (const runObserver of this.runObservers) {\n if (runObserver.startGeneration === undefined) {\n continue;\n }\n try {\n const generationObserver = await runObserver.startGeneration(args);\n if (generationObserver !== undefined) {\n generationObservers.push(generationObserver);\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n return new ActiveGenerationObservers(generationObservers, this.failOnObserverError);\n }\n\n async startTool(args: AgentToolStartArgs): Promise<ActiveToolObservers> {\n const toolObservers: AgentToolObserver[] = [];\n for (const runObserver of this.runObservers) {\n if (runObserver.startTool === undefined) {\n continue;\n }\n try {\n const toolObserver = await runObserver.startTool(args);\n if (toolObserver !== undefined) {\n toolObservers.push(toolObserver);\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n return new ActiveToolObservers(toolObservers, this.failOnObserverError);\n }\n\n async end(args: AgentRunEndArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n try {\n await runObserver.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentRunErrorArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n if (runObserver.error === undefined) {\n continue;\n }\n try {\n await runObserver.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async event(args: AgentRunEventArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n if (runObserver.event === undefined) {\n continue;\n }\n try {\n await runObserver.event(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n\nexport class ActiveGenerationObservers {\n constructor(\n private readonly generationObservers: AgentGenerationObserver[],\n private readonly failOnObserverError: boolean,\n ) {}\n\n async end(args: AgentGenerationEndArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n try {\n await observer.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentGenerationErrorArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n if (observer.error === undefined) {\n continue;\n }\n try {\n await observer.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async update(args: AgentGenerationUpdateArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n if (observer.update === undefined) {\n continue;\n }\n try {\n await observer.update(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n\nexport class ActiveToolObservers {\n constructor(\n private readonly toolObservers: AgentToolObserver[],\n private readonly failOnObserverError: boolean,\n ) {}\n\n async streamEvent(args: AgentToolStreamEventArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n if (observer.streamEvent === undefined) {\n continue;\n }\n try {\n await observer.streamEvent(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async end(args: AgentToolEndArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n try {\n await observer.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentToolErrorArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n if (observer.error === undefined) {\n continue;\n }\n try {\n await observer.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n","import type { JsonValue } from \"../completion\";\n\nexport type CompletionRetryContext = {\n error: unknown;\n attempt: number;\n maxAttempts: number;\n turn: number;\n streaming: boolean;\n};\n\nexport type CompletionRetryOptions = {\n maxAttempts?: number | undefined;\n initialDelayMs?: number | undefined;\n maxDelayMs?: number | undefined;\n shouldRetry?: ((context: CompletionRetryContext) => boolean) | undefined;\n};\n\nexport type ResolvedCompletionRetryOptions = {\n maxAttempts: number;\n initialDelayMs: number;\n maxDelayMs: number;\n shouldRetry: (context: CompletionRetryContext) => boolean;\n};\n\nconst DEFAULT_MAX_ATTEMPTS = 3;\nconst DEFAULT_INITIAL_DELAY_MS = 100;\nconst DEFAULT_MAX_DELAY_MS = 1_000;\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nconst RETRYABLE_STATUS_CODES = new Set([408, 409, 425, 429]);\nconst RETRYABLE_NUMERIC_ERROR_CODES = new Set([4, 8, 14]);\nconst RETRYABLE_ERROR_NAMES = new Set([\n \"APIConnectionError\",\n \"APIConnectionTimeoutError\",\n \"TimeoutError\",\n]);\nconst RETRYABLE_ERROR_CODES = new Set([\n \"DEADLINE_EXCEEDED\",\n \"EAI_AGAIN\",\n \"ECONNREFUSED\",\n \"ECONNRESET\",\n \"EHOSTUNREACH\",\n \"ENETDOWN\",\n \"ENETUNREACH\",\n \"EPIPE\",\n \"ETIMEDOUT\",\n \"RESOURCE_EXHAUSTED\",\n \"UNAVAILABLE\",\n \"UND_ERR_CONNECT_TIMEOUT\",\n \"UND_ERR_HEADERS_TIMEOUT\",\n \"UND_ERR_SOCKET\",\n]);\n\nexport function resolveCompletionRetryOptions(\n options: CompletionRetryOptions,\n): ResolvedCompletionRetryOptions {\n const maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n const initialDelayMs = options.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;\n const maxDelayMs = options.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\n if (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {\n throw new RangeError(\"Completion retry maxAttempts must be a positive integer.\");\n }\n assertDelay(initialDelayMs, \"initialDelayMs\");\n assertDelay(maxDelayMs, \"maxDelayMs\");\n if (maxDelayMs < initialDelayMs) {\n throw new RangeError(\n \"Completion retry maxDelayMs must be greater than or equal to initialDelayMs.\",\n );\n }\n if (options.shouldRetry !== undefined && typeof options.shouldRetry !== \"function\") {\n throw new TypeError(\"Completion retry shouldRetry must be a function.\");\n }\n\n return {\n maxAttempts,\n initialDelayMs,\n maxDelayMs,\n shouldRetry: options.shouldRetry ?? defaultShouldRetry,\n };\n}\n\nexport function completionRetryDelayMs(\n options: ResolvedCompletionRetryOptions,\n failedAttempt: number,\n): number {\n const exponentialDelay = options.initialDelayMs * 2 ** (failedAttempt - 1);\n const cappedDelay = Math.min(options.maxDelayMs, exponentialDelay);\n return Math.random() * cappedDelay;\n}\n\nexport function completionRetryErrorAttributes(\n error: unknown,\n): Record<string, JsonValue | undefined> {\n const errors = errorChain(error);\n const errorName = errors\n .map((candidate) => stringProperty(candidate, \"name\"))\n .find((value) => value !== undefined);\n const statusCode = firstStatusCode(errors);\n const errorCode = errors\n .map((candidate) => errorCodeProperty(candidate))\n .find((value) => value !== undefined);\n\n return {\n errorName,\n statusCode,\n errorCode,\n };\n}\n\nexport async function waitForCompletionRetry(delayMs: number): Promise<void> {\n if (delayMs === 0) {\n return;\n }\n await new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n}\n\nfunction defaultShouldRetry(context: CompletionRetryContext): boolean {\n const errors = errorChain(context.error);\n if (errors.some((error) => stringProperty(error, \"name\") === \"AbortError\")) {\n return false;\n }\n\n const statusCode = firstStatusCode(errors);\n if (statusCode !== undefined) {\n return RETRYABLE_STATUS_CODES.has(statusCode) || (statusCode >= 500 && statusCode <= 599);\n }\n\n return errors.some((error) => {\n const name = stringProperty(error, \"name\");\n if (name !== undefined && RETRYABLE_ERROR_NAMES.has(name)) {\n return true;\n }\n const code = stringProperty(error, \"code\")?.toUpperCase();\n if (code !== undefined && RETRYABLE_ERROR_CODES.has(code)) {\n return true;\n }\n const numericCode = numberProperty(error, \"code\");\n return numericCode !== undefined && RETRYABLE_NUMERIC_ERROR_CODES.has(numericCode);\n });\n}\n\nfunction firstStatusCode(errors: Record<string, unknown>[]): number | undefined {\n for (const error of errors) {\n const status = numberProperty(error, \"status\") ?? numberProperty(error, \"statusCode\");\n if (status !== undefined) {\n return status;\n }\n const code = numberProperty(error, \"code\");\n if (code !== undefined && code >= 100 && code <= 599) {\n return code;\n }\n }\n return undefined;\n}\n\nfunction errorChain(error: unknown): Record<string, unknown>[] {\n const errors: Record<string, unknown>[] = [];\n const seen = new Set<object>();\n let current = error;\n while (isObject(current) && !seen.has(current)) {\n seen.add(current);\n errors.push(current);\n current = property(current, \"cause\");\n }\n return errors;\n}\n\nfunction assertDelay(value: number, name: string): void {\n if (!Number.isFinite(value) || value < 0 || value > MAX_TIMER_DELAY_MS) {\n throw new RangeError(\n `Completion retry ${name} must be between 0 and ${MAX_TIMER_DELAY_MS} milliseconds.`,\n );\n }\n}\n\nfunction numberProperty(value: Record<string, unknown>, name: string): number | undefined {\n const candidate = property(value, name);\n return typeof candidate === \"number\" && Number.isFinite(candidate) ? candidate : undefined;\n}\n\nfunction stringProperty(value: Record<string, unknown>, name: string): string | undefined {\n const candidate = property(value, name);\n return typeof candidate === \"string\" && candidate.length > 0 ? candidate : undefined;\n}\n\nfunction errorCodeProperty(value: Record<string, unknown>): string | number | undefined {\n return stringProperty(value, \"code\") ?? numberProperty(value, \"code\");\n}\n\nfunction property(value: Record<string, unknown>, name: string): unknown {\n try {\n return value[name];\n } catch {\n return undefined;\n }\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import type { Agent } from \"../agent/agent\";\nimport type { AgentEventAppendInput } from \"../agent/types\";\nimport { isStreamingCompletionModel } from \"../completion/create-completion\";\nimport {\n AssistantContent,\n assertCompletionRequestSupported,\n type CompletionModel,\n CompletionRequestBuilder,\n type CompletionResponse,\n type CompletionSource,\n getAssistantGenerationMetadata,\n type JsonObject,\n type JsonValue,\n Message,\n type Message as MessageType,\n type ProviderToolCall,\n type ToolCall,\n type ToolResult,\n textFromAssistantContent,\n Usage,\n} from \"../completion/index\";\nimport {\n appendGuardrailPolicies,\n type GuardrailDecisionRecord,\n type GuardrailPolicy,\n type GuardrailPolicyInput,\n type GuardrailRunContext,\n hasEnforcedOutputGuardrails,\n runInputGuardrails,\n runOutputGuardrails,\n} from \"../guardrails\";\nimport type { PromptHook } from \"../hooks\";\nimport { runControl } from \"../hooks\";\nimport { createAsyncQueue } from \"../internal/async-queue\";\nimport { type MemoryPreparation, PromptRequestMemory } from \"../internal/prompt-runtime/memory\";\nimport { fetchDynamicContext, fetchToolDefinitions } from \"../internal/prompt-runtime/retrieval\";\nimport { CompletionStreamAccumulator } from \"../internal/prompt-runtime/stream-accumulator\";\nimport {\n addTurn,\n addTurnToToolCallDelta,\n isGenerationDeltaEvent,\n} from \"../internal/prompt-runtime/stream-events\";\nimport {\n type AgentToolEventPayload,\n ToolCallExecutor,\n type ToolExecutionEventPayload,\n type ToolExecutionObservation,\n type ToolResultEventPayload,\n} from \"../internal/prompt-runtime/tool-execution\";\nimport { extractRagText } from \"../internal/rag-text\";\nimport { MemoryCompactionError } from \"../memory/errors\";\nimport type { MemoryContext } from \"../memory/types\";\nimport { type ActiveAgentRunObservers, startAgentRunObservers } from \"../observability/group\";\nimport type {\n AgentGenerationEndArgs,\n AgentGenerationModelInfo,\n AgentGenerationStartArgs,\n AgentTraceOptions,\n} from \"../observability/types\";\nimport { toReadableStream } from \"../streaming\";\nimport type { ToolApprovalsOptions } from \"../tool\";\nimport type { AgentMiddleware } from \"../tool/middleware\";\nimport { MaxTurnsError, PromptCancelledError } from \"./errors\";\nimport {\n type CompletionRetryOptions,\n completionRetryDelayMs,\n completionRetryErrorAttributes,\n type ResolvedCompletionRetryOptions,\n resolveCompletionRetryOptions,\n waitForCompletionRetry,\n} from \"./retry\";\nimport type {\n AgentStreamEvent,\n AgentStreamEventWithoutToolCallDeltas,\n AgentStreamOptions,\n PromptResponse,\n} from \"./types\";\n\nexport class PromptRequest<M extends CompletionModel = CompletionModel> {\n private chatHistory: MessageType[];\n private maxTurnCount: number;\n private activeHook: PromptHook | undefined;\n private approvalOptions: ToolApprovalsOptions | undefined;\n private guardrailPolicies: GuardrailPolicy[];\n private guardrailDecisions: GuardrailDecisionRecord[] = [];\n private concurrency = 1;\n private traceOptions: AgentTraceOptions | undefined;\n private completionRetryOptions: ResolvedCompletionRetryOptions | undefined;\n private requestMiddlewares: AgentMiddleware[] = [];\n private readonly steeringMessages: MessageType[] = [];\n private runState: \"idle\" | \"running\" | \"completed\" | \"errored\" | \"cancelled\" = \"idle\";\n private readonly memoryRecorder: PromptRequestMemory;\n\n private constructor(\n private readonly agent: Agent<M>,\n private promptMessage: MessageType,\n initialHistory: MessageType[] = [],\n private readonly memoryContext: MemoryContext | undefined = undefined,\n ) {\n this.chatHistory = initialHistory;\n this.maxTurnCount = agent.defaultMaxTurns ?? 0;\n this.activeHook = agent.hook;\n this.approvalOptions = agent.approvals;\n this.guardrailPolicies = [...agent.guardrails];\n this.memoryRecorder = new PromptRequestMemory(agent, memoryContext, initialHistory);\n }\n\n static fromAgent<M extends CompletionModel>(\n agent: Agent<M>,\n prompt: string | MessageType | MessageType[],\n options: { memoryContext?: MemoryContext | undefined } = {},\n ): PromptRequest<M> {\n const normalized = normalizePromptInput(prompt);\n return new PromptRequest(agent, normalized.prompt, normalized.history, options.memoryContext);\n }\n\n maxTurns(maxTurns: number): this {\n this.maxTurnCount = maxTurns;\n return this;\n }\n\n withCompletionRetries(options: CompletionRetryOptions = {}): this {\n this.completionRetryOptions = resolveCompletionRetryOptions(options);\n return this;\n }\n\n withHook(hook: PromptHook): this {\n this.activeHook = hook;\n return this;\n }\n\n approvals(options: ToolApprovalsOptions): this {\n this.approvalOptions = options;\n return this;\n }\n\n guardrails(policies: GuardrailPolicyInput): this {\n this.guardrailPolicies = appendGuardrailPolicies(this.guardrailPolicies, policies);\n return this;\n }\n\n withToolConcurrency(concurrency: number): this {\n this.concurrency = Math.max(1, concurrency);\n return this;\n }\n\n withMiddleware(middleware: AgentMiddleware): this {\n this.requestMiddlewares.push(middleware);\n return this;\n }\n\n withMiddlewares(middlewares: AgentMiddleware[]): this {\n this.requestMiddlewares.push(...middlewares);\n return this;\n }\n\n withTrace(trace: AgentTraceOptions): this {\n this.traceOptions = trace;\n return this;\n }\n\n steer(input: string | MessageType | MessageType[]): boolean {\n if (this.isTerminal()) {\n return false;\n }\n\n this.steeringMessages.push(...normalizeSteeringInput(input));\n return true;\n }\n\n async send(): Promise<PromptResponse> {\n this.startRun();\n const runId = globalThis.crypto.randomUUID();\n let usage = Usage.empty();\n let currentTurns = 0;\n let lastPrompt = this.promptMessage;\n let newMessages: MessageType[] = [this.promptMessage];\n const runObservers = await this.startRunObservers();\n\n try {\n const inputResult = await runInputGuardrails(this.guardrailPolicies, {\n prompt: this.promptMessage,\n history: this.chatHistory,\n inputText: textFromMessage(this.promptMessage),\n run: this.guardrailRunContext(runId),\n });\n for (const decision of inputResult.decisions) {\n await this.recordGuardrailDecision(decision, runObservers);\n }\n this.promptMessage = inputResult.prompt;\n if (inputResult.blocked) {\n const output = inputResult.message ?? \"The request was blocked by a guardrail.\";\n const result: PromptResponse = {\n output,\n usage: Usage.empty(),\n messages: [this.promptMessage, Message.assistant(output)],\n guardrails: [...this.guardrailDecisions],\n };\n await runObservers.end(result);\n this.runState = \"completed\";\n return result;\n }\n\n newMessages = [this.promptMessage];\n const memoryPreparation = await this.memoryRecorder.prepareRun(runId, newMessages);\n this.chatHistory = memoryPreparation.history;\n usage = Usage.add(usage, memoryPreparation.usage);\n await this.recordMemoryCompaction(memoryPreparation, runObservers);\n const pendingTurnMessages = this.memoryRecorder.pendingTurnMessages(newMessages);\n await this.runRunStartHook(newMessages);\n while (currentTurns <= this.maxTurnCount + 1) {\n const prompt = newMessages.at(-1);\n if (prompt === undefined) {\n throw new Error(\"PromptRequest requires at least one message\");\n }\n\n lastPrompt = prompt;\n currentTurns += 1;\n\n const historyForRequest = [...this.chatHistory, ...newMessages.slice(0, -1)];\n await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);\n await this.runCompletionCallHook(prompt, historyForRequest, newMessages);\n\n const ragText = extractRagText(prompt);\n const dynamicContext = await fetchDynamicContext(this.agent, ragText);\n const toolDefs = await fetchToolDefinitions(this.agent, ragText);\n let request = new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(historyForRequest)\n .documents([...this.agent.staticContext, ...dynamicContext])\n .tools([...toolDefs, ...this.agent.providerTools])\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .outputSchema(this.agent.outputSchema)\n .build();\n request = (await this.runCompletionRequestMiddlewares(\n request,\n currentTurns,\n )) as typeof request;\n\n let response: CompletionResponse;\n try {\n response = await this.runCompletion(request, currentTurns, runObservers);\n } catch (error) {\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n response = await this.runCompletionResponseMiddlewares(request, response, currentTurns);\n usage = Usage.add(usage, response.usage);\n await this.runCompletionResponseHook(prompt, response, newMessages);\n await this.runTurnEndHook(currentTurns, response, newMessages);\n\n const toolCalls = response.choice.filter(\n (item): item is ToolCall => item.type === \"tool_call\",\n );\n const assistantMessage = this.generatedAssistantMessage(response, request);\n newMessages.push(assistantMessage);\n if (toolCalls.length === 0) {\n if (this.steeringMessages.length > 0) {\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n }\n if (\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages)\n ) {\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n continue;\n }\n\n const guardedOutput = await this.runOutputGuardrailsForResponse(\n runId,\n usage,\n response,\n newMessages,\n runObservers,\n );\n response = guardedOutput.response;\n const finalAssistantMessage = this.generatedAssistantMessage(response, request);\n newMessages[newMessages.length - 1] = finalAssistantMessage;\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [finalAssistantMessage],\n pendingTurnMessages,\n );\n const result: PromptResponse = {\n output: guardedOutput.output,\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n guardrails: [...this.guardrailDecisions],\n ...generationArtifacts(newMessages),\n };\n await this.runRunEndHook(result, newMessages);\n await runObservers.end(result);\n await this.memoryRecorder.commitCompletedRun(\n runId,\n currentTurns,\n newMessages,\n pendingTurnMessages,\n );\n this.runState = \"completed\";\n return result;\n }\n\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n const toolResults = await this.executeToolCalls(\n runId,\n toolCalls,\n newMessages,\n undefined,\n undefined,\n {\n turn: currentTurns,\n runObservers,\n toolDefinitions: request.tools,\n },\n );\n const toolMessage = Message.tool(toolResults);\n newMessages.push(toolMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [toolMessage],\n pendingTurnMessages,\n );\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages);\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n }\n\n throw new MaxTurnsError(this.maxTurnCount, [...this.chatHistory, ...newMessages], lastPrompt);\n } catch (error) {\n if (error instanceof MemoryCompactionError && error.usage !== undefined) {\n usage = Usage.add(usage, error.usage);\n }\n const finalError = await this.runRunErrorHook(error, usage, newMessages);\n this.runState = finalError instanceof PromptCancelledError ? \"cancelled\" : \"errored\";\n await runObservers.error({ error: finalError, usage, messages: [...newMessages] });\n await this.memoryRecorder.recordError(runId, finalError, newMessages);\n throw finalError;\n }\n }\n\n stream(): AsyncIterable<AgentStreamEvent>;\n stream(options: {\n includeToolCallDeltas: false;\n }): AsyncIterable<AgentStreamEventWithoutToolCallDeltas>;\n stream(options: { includeToolCallDeltas?: true }): AsyncIterable<AgentStreamEvent>;\n stream(options: AgentStreamOptions): AsyncIterable<AgentStreamEvent>;\n async *stream(options: AgentStreamOptions = {}): AsyncIterable<AgentStreamEvent> {\n if (!this.agent.model.capabilities.streaming || !isStreamingCompletionModel(this.agent.model)) {\n throw new Error(\"This completion model does not support streaming\");\n }\n\n this.startRun();\n const includeToolCallDeltas = options.includeToolCallDeltas !== false;\n const runId = globalThis.crypto.randomUUID();\n const emit = async (event: AgentStreamEvent): Promise<AgentStreamEvent> => {\n await this.recordAgentEvent(runId, event);\n return event;\n };\n let usage = Usage.empty();\n let currentTurns = 0;\n let lastPrompt = this.promptMessage;\n let newMessages: MessageType[] = [this.promptMessage];\n const runObservers = await this.startRunObservers();\n const bufferOutputDeltas = hasEnforcedOutputGuardrails(this.guardrailPolicies);\n\n try {\n const inputResult = await runInputGuardrails(this.guardrailPolicies, {\n prompt: this.promptMessage,\n history: this.chatHistory,\n inputText: textFromMessage(this.promptMessage),\n run: this.guardrailRunContext(runId),\n });\n for (const decision of inputResult.decisions) {\n await this.recordGuardrailDecision(decision, runObservers);\n yield await emit({ type: \"guardrail_decision\", decision });\n }\n this.promptMessage = inputResult.prompt;\n if (inputResult.blocked) {\n const output = inputResult.message ?? \"The request was blocked by a guardrail.\";\n const result: PromptResponse = {\n output,\n usage: Usage.empty(),\n messages: [this.promptMessage, Message.assistant(output)],\n guardrails: [...this.guardrailDecisions],\n };\n await runObservers.end(result);\n this.runState = \"completed\";\n yield await emit({\n type: \"final\",\n runId,\n output: result.output,\n usage: result.usage,\n messages: result.messages,\n guardrails: result.guardrails,\n });\n return;\n }\n\n newMessages = [this.promptMessage];\n const memoryPreparation = await this.memoryRecorder.prepareRun(runId, newMessages);\n this.chatHistory = memoryPreparation.history;\n usage = Usage.add(usage, memoryPreparation.usage);\n await this.recordMemoryCompaction(memoryPreparation, runObservers);\n const pendingTurnMessages = this.memoryRecorder.pendingTurnMessages(newMessages);\n await this.runRunStartHook(newMessages);\n while (currentTurns <= this.maxTurnCount + 1) {\n const prompt = newMessages.at(-1);\n if (prompt === undefined) {\n throw new Error(\"PromptRequest requires at least one message\");\n }\n\n lastPrompt = prompt;\n currentTurns += 1;\n\n const historyForRequest = [...this.chatHistory, ...newMessages.slice(0, -1)];\n yield await emit({\n type: \"turn_start\",\n turn: currentTurns,\n prompt,\n history: historyForRequest,\n });\n await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);\n await this.runCompletionCallHook(prompt, historyForRequest, newMessages);\n\n const ragText = extractRagText(prompt);\n const dynamicContext = await fetchDynamicContext(this.agent, ragText);\n const toolDefs = await fetchToolDefinitions(this.agent, ragText);\n let request = new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(historyForRequest)\n .documents([...this.agent.staticContext, ...dynamicContext])\n .tools([...toolDefs, ...this.agent.providerTools])\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .outputSchema(this.agent.outputSchema)\n .build();\n request = (await this.runCompletionRequestMiddlewares(\n request,\n currentTurns,\n )) as typeof request;\n\n assertCompletionRequestSupported(this.agent.model, request, { streaming: true });\n const providerRequest = this.providerTraceRequest(request, { stream: true });\n const generationStartArgs = this.generationStartArgs(\n currentTurns,\n request,\n providerRequest,\n );\n const generationObservers = await runObservers.startGeneration(generationStartArgs);\n const generationStartedAt = Date.now();\n yield await emit({\n type: \"generation_start\",\n turn: currentTurns,\n request,\n modelInfo: generationStartArgs.modelInfo,\n });\n const accumulator = new CompletionStreamAccumulator();\n let firstDeltaMs: number | undefined;\n const bufferResponseEvents = this.shouldBufferStreamResponseEvents();\n const emittedToolCallIds = new Set<string>();\n let response: CompletionResponse;\n try {\n for (let attempt = 1; ; attempt += 1) {\n let hasProviderProgress = false;\n try {\n for await (const event of this.agent.model.streamCompletion(request)) {\n if (event.type === \"error\") {\n if (event.usage !== undefined) {\n usage = Usage.add(usage, event.usage);\n }\n throw event.error;\n }\n hasProviderProgress = true;\n if (firstDeltaMs === undefined && isGenerationDeltaEvent(event.type)) {\n firstDeltaMs = Date.now() - generationStartedAt;\n }\n const mapped = accumulator.accept(event);\n if (includeToolCallDeltas && event.type === \"tool_call_delta\") {\n yield await emit(addTurnToToolCallDelta(currentTurns, event));\n }\n if (mapped !== undefined) {\n await generationObservers.update?.({ turn: currentTurns, delta: mapped });\n if (mapped.type === \"tool_call\") {\n emittedToolCallIds.add(mapped.toolCall.id);\n }\n const shouldBuffer =\n bufferResponseEvents ||\n (bufferOutputDeltas &&\n (mapped.type === \"text_delta\" || mapped.type === \"reasoning_delta\"));\n if (!shouldBuffer) {\n yield await emit(addTurn(currentTurns, mapped));\n }\n }\n }\n response = accumulator.response();\n break;\n } catch (error) {\n const retryOptions = hasProviderProgress\n ? undefined\n : this.retryOptionsForFailure(error, attempt, currentTurns, true);\n if (retryOptions === undefined) {\n throw error;\n }\n await this.scheduleCompletionRetry(\n error,\n attempt,\n currentTurns,\n true,\n retryOptions,\n runObservers,\n );\n }\n }\n } catch (error) {\n await generationObservers.error({ turn: currentTurns, error });\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n\n const generationEndArgs: AgentGenerationEndArgs = {\n turn: currentTurns,\n response,\n };\n if (firstDeltaMs !== undefined) {\n generationEndArgs.firstDeltaMs = firstDeltaMs;\n }\n await generationObservers.end(generationEndArgs);\n response = await this.runCompletionResponseMiddlewares(request, response, currentTurns);\n usage = Usage.add(usage, response.usage);\n await this.runCompletionResponseHook(prompt, response, newMessages);\n await this.runTurnEndHook(currentTurns, response, newMessages);\n\n const toolCalls = response.choice.filter(\n (item): item is ToolCall => item.type === \"tool_call\",\n );\n let assistantMessage = this.generatedAssistantMessage(response, request);\n newMessages.push(assistantMessage);\n\n if (toolCalls.length === 0) {\n let emittedTurnEnd = false;\n if (!bufferOutputDeltas) {\n if (bufferResponseEvents) {\n for (const event of responseStreamEvents(currentTurns, response)) {\n yield await emit(event);\n }\n }\n yield await emit({\n type: \"turn_end\",\n turn: currentTurns,\n response,\n firstDeltaMs,\n });\n emittedTurnEnd = true;\n }\n if (this.steeringMessages.length > 0) {\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n }\n if (\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages)\n ) {\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n continue;\n }\n\n const guardedOutput = await this.runOutputGuardrailsForResponse(\n runId,\n usage,\n response,\n newMessages,\n runObservers,\n );\n for (const decision of guardedOutput.decisions) {\n yield await emit({ type: \"guardrail_decision\", decision });\n }\n response = guardedOutput.response;\n assistantMessage = this.generatedAssistantMessage(response, request);\n newMessages[newMessages.length - 1] = assistantMessage;\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n if (!emittedTurnEnd && (bufferResponseEvents || bufferOutputDeltas)) {\n for (const event of responseStreamEvents(\n currentTurns,\n response,\n bufferResponseEvents,\n )) {\n yield await emit(event);\n }\n }\n if (!emittedTurnEnd) {\n yield await emit({\n type: \"turn_end\",\n turn: currentTurns,\n response,\n firstDeltaMs,\n });\n }\n\n const result: PromptResponse = {\n output: guardedOutput.output,\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n guardrails: [...this.guardrailDecisions],\n ...generationArtifacts(newMessages),\n };\n await this.runRunEndHook(result, newMessages);\n await runObservers.end(result);\n await this.memoryRecorder.commitCompletedRun(\n runId,\n currentTurns,\n newMessages,\n pendingTurnMessages,\n );\n this.runState = \"completed\";\n yield await emit({\n type: \"final\",\n runId,\n output: result.output,\n usage: result.usage,\n contextUsage: result.contextUsage,\n messages: result.messages,\n trace: result.trace,\n guardrails: result.guardrails,\n sources: result.sources,\n providerToolCalls: result.providerToolCalls,\n });\n return;\n }\n\n if (bufferResponseEvents) {\n for (const event of responseStreamEvents(currentTurns, response)) {\n yield await emit(event);\n }\n } else {\n for (const toolCall of toolCalls) {\n if (!emittedToolCallIds.has(toolCall.id)) {\n yield await emit({ type: \"tool_call\", turn: currentTurns, toolCall });\n }\n }\n }\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n yield await emit({\n type: \"turn_end\",\n turn: currentTurns,\n response,\n firstDeltaMs,\n });\n\n const toolResultEvents = createAsyncQueue<ToolExecutionEventPayload>();\n const toolResultsPromise = this.executeToolCalls(\n runId,\n toolCalls,\n newMessages,\n (result) => {\n toolResultEvents.enqueue(result);\n },\n (event) => {\n toolResultEvents.enqueue(event);\n },\n {\n turn: currentTurns,\n runObservers,\n toolDefinitions: request.tools,\n includeToolCallDeltas,\n },\n );\n toolResultsPromise.then(\n () => toolResultEvents.close(),\n (error: unknown) => toolResultEvents.throw(error),\n );\n for await (const result of toolResultEvents) {\n yield await emit({ turn: currentTurns, ...result });\n }\n const toolResults = await toolResultsPromise;\n const toolMessage = Message.tool(toolResults);\n newMessages.push(toolMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [toolMessage],\n pendingTurnMessages,\n );\n await this.drainSteeringMessages(runId, currentTurns, newMessages, pendingTurnMessages);\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n }\n\n throw new MaxTurnsError(this.maxTurnCount, [...this.chatHistory, ...newMessages], lastPrompt);\n } catch (error) {\n if (error instanceof MemoryCompactionError && error.usage !== undefined) {\n usage = Usage.add(usage, error.usage);\n }\n const finalError = await this.runRunErrorHook(error, usage, newMessages);\n this.runState = finalError instanceof PromptCancelledError ? \"cancelled\" : \"errored\";\n const finalUsage = usage;\n await runObservers.error({\n error: finalError,\n usage: finalUsage,\n messages: [...newMessages],\n });\n await this.memoryRecorder.recordError(runId, finalError, newMessages);\n yield await emit({ type: \"error\", error: finalError, usage: finalUsage });\n throw finalError;\n }\n }\n\n readableStream(options: AgentStreamOptions = {}): ReadableStream<Uint8Array> {\n return toReadableStream(this.stream(options));\n }\n\n private async runCompletion(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n turn: number,\n runObservers: ActiveAgentRunObservers,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this.agent.model, request);\n const providerRequest = this.providerTraceRequest(request);\n const generationObservers = await runObservers.startGeneration(\n this.generationStartArgs(turn, request, providerRequest),\n );\n try {\n for (let attempt = 1; ; attempt += 1) {\n let response: CompletionResponse;\n try {\n response = await this.agent.model.completion(request);\n } catch (error) {\n const retryOptions = this.retryOptionsForFailure(error, attempt, turn, false);\n if (retryOptions === undefined) {\n throw error;\n }\n await this.scheduleCompletionRetry(\n error,\n attempt,\n turn,\n false,\n retryOptions,\n runObservers,\n );\n continue;\n }\n await generationObservers.end({ turn, response });\n return response;\n }\n } catch (error) {\n await generationObservers.error({ turn, error });\n throw error;\n }\n }\n\n private generatedAssistantMessage(\n response: CompletionResponse,\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n ): MessageType {\n const metadata: JsonObject = {\n anvia: {\n generation: {\n provider: this.agent.model.provider,\n model: request.model ?? this.agent.model.defaultModel,\n usage: { ...response.usage },\n ...(response.contextUsage === undefined ? {} : { contextUsage: response.contextUsage }),\n ...(response.sources === undefined ? {} : { sources: response.sources }),\n ...(response.providerToolCalls === undefined\n ? {}\n : { providerToolCalls: response.providerToolCalls }),\n },\n },\n };\n return Message.assistant(response.choice, {\n ...(response.messageId === undefined ? {} : { id: response.messageId }),\n metadata,\n });\n }\n\n private providerTraceRequest(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject | undefined {\n try {\n return this.agent.model.traceRequest?.(request, options);\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private generationStartArgs(\n turn: number,\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n providerRequest: JsonObject | undefined,\n ): AgentGenerationStartArgs & { modelInfo: AgentGenerationModelInfo } {\n const args: AgentGenerationStartArgs & { modelInfo: AgentGenerationModelInfo } = {\n turn,\n request,\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n };\n if (providerRequest !== undefined) {\n args.providerRequest = providerRequest;\n }\n return args;\n }\n\n private retryOptionsForFailure(\n error: unknown,\n attempt: number,\n turn: number,\n streaming: boolean,\n ): ResolvedCompletionRetryOptions | undefined {\n const options = this.completionRetryOptions;\n if (options === undefined || attempt >= options.maxAttempts) {\n return undefined;\n }\n const shouldRetry = options.shouldRetry({\n error,\n attempt,\n maxAttempts: options.maxAttempts,\n turn,\n streaming,\n });\n return shouldRetry ? options : undefined;\n }\n\n private async scheduleCompletionRetry(\n error: unknown,\n attempt: number,\n turn: number,\n streaming: boolean,\n options: ResolvedCompletionRetryOptions,\n runObservers: ActiveAgentRunObservers,\n ): Promise<void> {\n const delayMs = completionRetryDelayMs(options, attempt);\n await runObservers.event({\n name: \"completion.retry\",\n level: \"WARNING\",\n attributes: {\n turn,\n attempt,\n nextAttempt: attempt + 1,\n maxAttempts: options.maxAttempts,\n delayMs,\n streaming,\n ...completionRetryErrorAttributes(error),\n },\n });\n await waitForCompletionRetry(delayMs);\n }\n\n private async executeToolCalls(\n runId: string,\n toolCalls: ToolCall[],\n newMessages: MessageType[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResult[]> {\n const executor = new ToolCallExecutor(\n this.agent,\n this.activeHook,\n this.approvalOptions,\n {\n runId,\n sessionId: this.memoryContext?.sessionId,\n metadata: this.memoryContext?.metadata,\n },\n this.concurrency,\n this.requestMiddlewares,\n observation?.includeToolCallDeltas ?? false,\n (reason) => this.cancelled(newMessages, reason),\n );\n return executor.execute(toolCalls, onResult, onStreamEvent, observation);\n }\n\n private async runOutputGuardrailsForResponse(\n runId: string,\n usage: Usage,\n response: CompletionResponse,\n messages: MessageType[],\n runObservers: ActiveAgentRunObservers,\n ): Promise<{\n output: string;\n response: CompletionResponse;\n decisions: GuardrailDecisionRecord[];\n }> {\n const originalOutput = textFromAssistantContent(response.choice);\n const result = await runOutputGuardrails(this.guardrailPolicies, {\n outputText: originalOutput,\n messages: [...this.chatHistory, ...messages],\n usage,\n run: this.guardrailRunContext(runId),\n });\n for (const decision of result.decisions) {\n await this.recordGuardrailDecision(decision, runObservers);\n }\n const output = result.blocked\n ? (result.message ?? \"The response was blocked by a guardrail.\")\n : result.outputText;\n if (output === originalOutput) {\n return { output, response, decisions: result.decisions };\n }\n return {\n output,\n response: {\n ...response,\n choice: [AssistantContent.text(output)],\n },\n decisions: result.decisions,\n };\n }\n\n private async recordGuardrailDecision(\n decision: GuardrailDecisionRecord,\n runObservers: ActiveAgentRunObservers,\n ): Promise<void> {\n this.guardrailDecisions.push(decision);\n await runObservers.event({\n name: \"guardrail.decision\",\n level: decision.action === \"block\" ? \"WARNING\" : \"DEFAULT\",\n attributes: guardrailDecisionAttributes(decision),\n });\n }\n\n private async recordMemoryCompaction(\n preparation: MemoryPreparation,\n runObservers: ActiveAgentRunObservers,\n ): Promise<void> {\n const compaction = preparation.compaction;\n if (compaction === undefined) {\n return;\n }\n await runObservers.event({\n name: \"memory.compaction\",\n attributes: {\n originalMessageCount: compaction.originalMessageCount,\n compactedMessageCount: compaction.compactedMessageCount,\n retainedMessageCount: compaction.retainedMessageCount,\n conflictRetries: compaction.conflictRetries,\n inputTokens: preparation.usage.inputTokens,\n outputTokens: preparation.usage.outputTokens,\n totalTokens: preparation.usage.totalTokens,\n },\n });\n }\n\n private guardrailRunContext(runId: string): GuardrailRunContext {\n const context: GuardrailRunContext = {\n agentId: this.agent.id,\n runId,\n };\n if (this.memoryContext !== undefined) {\n context.sessionId = this.memoryContext.sessionId;\n if (this.memoryContext.metadata !== undefined) {\n context.metadata = this.memoryContext.metadata;\n }\n }\n return context;\n }\n\n private async startRunObservers(): Promise<ActiveAgentRunObservers> {\n const failOnObserverError =\n this.traceOptions?.failOnObserverError === true ||\n this.agent.observers.some((registration) => registration.failOnObserverError === true);\n return startAgentRunObservers(\n this.agent.observers,\n {\n agentName: this.agent.name,\n agentDescription: this.agent.description,\n instructions: this.agent.instructions,\n trace: this.traceOptions,\n promptRef: this.traceOptions?.promptRef,\n prompt: this.promptMessage,\n history: this.chatHistory,\n maxTurns: this.maxTurnCount,\n },\n failOnObserverError,\n );\n }\n\n private async recordAgentEvent(runId: string, event: AgentStreamEvent): Promise<void> {\n const registration = this.agent.eventStore;\n if (registration === undefined) {\n return;\n }\n if (registration.options.include === \"agent_tool_events\" && event.type !== \"agent_tool_event\") {\n return;\n }\n\n const turn = \"turn\" in event ? event.turn : undefined;\n const agentId = event.type === \"agent_tool_event\" ? event.agentId : this.agent.id;\n const agentName = event.type === \"agent_tool_event\" ? event.agentName : this.agent.name;\n const input: AgentEventAppendInput = {\n runId,\n agentId,\n event,\n };\n if (agentName !== undefined) {\n input.agentName = agentName;\n }\n if (turn !== undefined) {\n input.turn = turn;\n }\n if (event.type === \"agent_tool_event\") {\n input.toolName = event.toolName;\n input.internalCallId = event.internalCallId;\n if (event.toolCallId !== undefined) {\n input.toolCallId = event.toolCallId;\n }\n }\n await registration.store.append(input);\n }\n\n private async runCompletionCallHook(\n prompt: MessageType,\n history: MessageType[],\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionCall?.({\n prompt,\n history,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunStartHook(newMessages: MessageType[]): Promise<void> {\n const action = await this.activeHook?.onRunStart?.({\n prompt: this.promptMessage,\n history: this.chatHistory,\n maxTurns: this.maxTurnCount,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunEndHook(result: PromptResponse, newMessages: MessageType[]): Promise<void> {\n const action = await this.activeHook?.onRunEnd?.({\n output: result.output,\n usage: result.usage,\n messages: result.messages,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunErrorHook(\n error: unknown,\n usage: Usage,\n newMessages: MessageType[],\n ): Promise<unknown> {\n const action = await this.activeHook?.onRunError?.({\n error,\n usage,\n messages: [...this.chatHistory, ...newMessages],\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n return this.cancelled(newMessages, action.reason);\n }\n return error;\n }\n\n private async runTurnStartHook(\n turn: number,\n prompt: MessageType,\n history: MessageType[],\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onTurnStart?.({\n turn,\n prompt,\n history,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runTurnEndHook(\n turn: number,\n response: CompletionResponse,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onTurnEnd?.({\n turn,\n response,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runCompletionRequestMiddlewares(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n turn: number,\n ): Promise<ReturnType<CompletionRequestBuilder[\"build\"]>> {\n let current = request;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onCompletionRequest?.({\n turn,\n request: current,\n originalRequest: request,\n });\n if (replacement?.request !== undefined) {\n current = replacement.request;\n }\n }\n return current;\n }\n\n private async runCompletionResponseMiddlewares(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n response: CompletionResponse,\n turn: number,\n ): Promise<CompletionResponse> {\n let current = response;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onCompletionResponse?.({\n turn,\n request,\n response: current,\n originalResponse: response,\n });\n if (replacement?.response !== undefined) {\n current = replacement.response;\n }\n }\n return current;\n }\n\n private async runCompletionResponseHook(\n prompt: MessageType,\n response:\n | Awaited<ReturnType<M[\"completion\"]>>\n | Awaited<ReturnType<CompletionModel[\"completion\"]>>,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionResponse?.({\n prompt,\n response,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runCompletionErrorHook(\n prompt: MessageType,\n error: unknown,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionError?.({\n prompt,\n error,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private activeMiddlewares(): AgentMiddleware[] {\n return [...this.agent.middlewares, ...this.requestMiddlewares];\n }\n\n private shouldBufferStreamResponseEvents(): boolean {\n return (\n this.activeHook?.onCompletionResponse !== undefined ||\n this.activeMiddlewares().some((middleware) => middleware.onCompletionResponse !== undefined)\n );\n }\n\n private async drainSteeringMessages(\n runId: string,\n turn: number,\n newMessages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<boolean> {\n const messages = this.steeringMessages.splice(0);\n if (messages.length === 0) {\n return false;\n }\n\n newMessages.push(...messages);\n await this.memoryRecorder.commitMessages(runId, turn, messages, pendingTurnMessages);\n return true;\n }\n\n private startRun(): void {\n if (this.runState === \"idle\") {\n this.runState = \"running\";\n return;\n }\n if (this.runState === \"running\") {\n throw new Error(\"PromptRequest is already running.\");\n }\n throw new Error(\"PromptRequest has already been used.\");\n }\n\n private isTerminal(): boolean {\n return (\n this.runState === \"completed\" || this.runState === \"errored\" || this.runState === \"cancelled\"\n );\n }\n\n private cancelled(newMessages: MessageType[], reason: string): PromptCancelledError {\n return new PromptCancelledError([...this.chatHistory, ...newMessages], reason);\n }\n}\n\nfunction normalizePromptInput(prompt: string | MessageType | MessageType[]): {\n prompt: MessageType;\n history: MessageType[];\n} {\n if (typeof prompt === \"string\") {\n return { prompt: Message.user(prompt), history: [] };\n }\n if (!Array.isArray(prompt)) {\n return { prompt, history: [] };\n }\n if (prompt.length === 0) {\n throw new TypeError(\"Prompt transcript must contain at least one message.\");\n }\n const activePrompt = prompt.at(-1);\n if (activePrompt === undefined) {\n throw new TypeError(\"Prompt transcript must contain at least one message.\");\n }\n return {\n prompt: activePrompt,\n history: prompt.slice(0, -1),\n };\n}\n\nfunction normalizeSteeringInput(input: string | MessageType | MessageType[]): MessageType[] {\n if (typeof input === \"string\") {\n return [Message.user(input)];\n }\n return Array.isArray(input) ? [...input] : [input];\n}\n\nfunction responseStreamEvents(\n turn: number,\n response: CompletionResponse,\n includeProviderArtifacts = true,\n): AgentStreamEvent[] {\n const events: AgentStreamEvent[] = [];\n for (const item of response.choice) {\n if (item.type === \"text\") {\n if (item.text.length > 0) {\n events.push({ type: \"text_delta\", turn, delta: item.text });\n }\n continue;\n }\n\n if (item.type === \"reasoning\") {\n if (item.content === undefined) {\n if (item.text.length > 0) {\n events.push(reasoningDeltaEvent(turn, item.text, { id: item.id }));\n }\n continue;\n }\n\n for (const content of item.content) {\n const delta =\n content.type === \"encrypted\" || content.type === \"redacted\" ? content.data : content.text;\n events.push(\n reasoningDeltaEvent(turn, delta, {\n id: item.id,\n contentType: content.type,\n signature: content.type === \"text\" ? content.signature : undefined,\n }),\n );\n }\n continue;\n }\n\n if (item.type === \"tool_call\") {\n events.push({ type: \"tool_call\", turn, toolCall: item });\n }\n }\n if (includeProviderArtifacts) {\n for (const source of response.sources ?? []) {\n events.push({ type: \"source\", turn, source });\n }\n for (const toolCall of response.providerToolCalls ?? []) {\n events.push({ type: \"provider_tool_call\", turn, toolCall });\n }\n }\n return events;\n}\n\nfunction generationArtifacts(messages: MessageType[]): {\n sources?: CompletionSource[];\n providerToolCalls?: ProviderToolCall[];\n contextUsage?: import(\"../completion/index\").ContextUsage;\n} {\n const sources = new Map<string, CompletionSource>();\n const providerToolCalls = new Map<string, ProviderToolCall>();\n let contextUsage: import(\"../completion/index\").ContextUsage | undefined;\n for (const message of messages) {\n const metadata = getAssistantGenerationMetadata(message);\n if (metadata !== undefined) {\n contextUsage = metadata.contextUsage;\n }\n for (const source of metadata?.sources ?? []) {\n const key = `${source.url}\\u0000${source.startIndex ?? \"\"}\\u0000${source.endIndex ?? \"\"}`;\n sources.set(key, source);\n }\n for (const toolCall of metadata?.providerToolCalls ?? []) {\n providerToolCalls.set(toolCall.id, toolCall);\n }\n }\n return {\n ...(sources.size === 0 ? {} : { sources: [...sources.values()] }),\n ...(providerToolCalls.size === 0 ? {} : { providerToolCalls: [...providerToolCalls.values()] }),\n ...(contextUsage === undefined ? {} : { contextUsage }),\n };\n}\n\ntype ReasoningDeltaEvent = Extract<AgentStreamEvent, { type: \"reasoning_delta\" }>;\n\nfunction reasoningDeltaEvent(\n turn: number,\n delta: string,\n details: {\n id?: ReasoningDeltaEvent[\"id\"] | undefined;\n contentType?: ReasoningDeltaEvent[\"contentType\"] | undefined;\n signature?: ReasoningDeltaEvent[\"signature\"] | undefined;\n } = {},\n): ReasoningDeltaEvent {\n const event: ReasoningDeltaEvent = {\n type: \"reasoning_delta\",\n turn,\n delta,\n };\n if (details.id !== undefined) {\n event.id = details.id;\n }\n if (details.contentType !== undefined) {\n event.contentType = details.contentType;\n }\n if (details.signature !== undefined) {\n event.signature = details.signature;\n }\n return event;\n}\n\nfunction textFromMessage(message: MessageType): string {\n if (message.role === \"system\") {\n return message.content;\n }\n return message.content\n .flatMap((content) => {\n if (content.type === \"text\") {\n return [content.text];\n }\n if (content.type === \"document\" && content.source.type === \"text\") {\n return [content.source.text];\n }\n return [];\n })\n .join(\"\\n\");\n}\n\nfunction guardrailDecisionAttributes(\n decision: GuardrailDecisionRecord,\n): Record<string, JsonValue | undefined> {\n const attributes: Record<string, JsonValue | undefined> = {\n policyId: decision.policyId,\n guardrailId: decision.guardrailId,\n boundary: decision.boundary,\n mode: decision.mode,\n action: decision.action,\n applied: decision.applied,\n latencyMs: decision.latencyMs,\n };\n if (decision.reason !== undefined) {\n attributes.reason = decision.reason;\n }\n if (decision.message !== undefined) {\n attributes.message = decision.message;\n }\n return attributes;\n}\n"],"mappings":"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","names":["key","reasoning","reasoningDeltaEvent"]}
|