@anvia/core 0.12.3 → 0.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,14 @@
1
1
  # @anvia/core
2
2
 
3
- Core runtime primitives for Anvia agents, tools, structured extraction, pipelines, streaming, RAG, MCP, skills, and observability.
3
+ Small, explicit, embeddable runtime contracts for Anvia agents, tools, structured extraction, pipelines, streaming, RAG, MCP, skills, and observability.
4
4
 
5
- This package is provider-neutral. Pair it with a provider adapter such as `@anvia/openai`, `@anvia/anthropic`, or `@anvia/gemini` to create runnable models.
5
+ This package is provider-neutral. Pair it with a provider adapter such as `@anvia/openai`, `@anvia/anthropic`, or `@anvia/gemini` to create runnable model objects, then pass those objects into agents, extractors, pipelines, or direct completion helpers.
6
+
7
+ ## Design Philosophy
8
+
9
+ `@anvia/core` owns the model/tool loop and the runtime contracts around it. Your application owns provider client construction, credentials, product data access, permissions, storage, deployment, observability backends, and response shape.
10
+
11
+ The package is dependency-injection oriented: create provider models, typed tools, memory stores, vector indexes, observers, and services in application code, then pass the relevant objects into agents, prompt requests, runners, or adapters. Core receives those objects and coordinates the run without taking over product architecture.
6
12
 
7
13
  ## Installation
8
14
 
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  AgentBuilder
3
- } from "../chunk-FBN6IEZA.js";
4
- import "../chunk-3CPOJSKK.js";
5
- import "../chunk-4NCRFQHS.js";
3
+ } from "../chunk-OODGSEUU.js";
4
+ import "../chunk-OQXRM5DO.js";
5
+ import "../chunk-C7JLBS3F.js";
6
6
  import "../chunk-YK4WAAS4.js";
7
7
  import "../chunk-XUUY2L2D.js";
8
8
  import "../chunk-YVQBC3SJ.js";
@@ -289,48 +289,34 @@ function formatMetadata(metadata) {
289
289
  }
290
290
 
291
291
  // src/internal/prompt-runtime/stream-accumulator.ts
292
- var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
293
- static defaultReasoningKey = "reasoning";
294
- text = "";
295
- reasoningById = /* @__PURE__ */ new Map();
296
- reasoningOrder = [];
292
+ var CompletionStreamAccumulator = class {
293
+ orderedParts = [];
294
+ textParts = /* @__PURE__ */ new Map();
295
+ reasoningByKey = /* @__PURE__ */ new Map();
296
+ reasoningKeyById = /* @__PURE__ */ new Map();
297
297
  toolCalls = /* @__PURE__ */ new Map();
298
- toolCallOrder = [];
299
298
  finalResponse;
300
299
  messageId;
300
+ nextTextKey = 0;
301
+ nextReasoningKey = 0;
301
302
  accept(event) {
302
303
  if (event.type === "text_delta") {
303
- this.text += event.delta;
304
+ this.appendText(event.delta);
304
305
  return { type: "text_delta", delta: event.delta };
305
306
  }
306
307
  if (event.type === "reasoning_delta") {
307
- const key = event.id ?? _CompletionStreamAccumulator.defaultReasoningKey;
308
- const existing = this.reasoningById.get(key);
309
- const reasoning = existing ?? { text: "" };
310
- if (!existing) {
311
- this.reasoningOrder.push(key);
312
- }
308
+ const reasoning = this.reasoningStateForEvent(event);
313
309
  this.appendReasoning(reasoning, event);
314
- this.reasoningById.set(key, reasoning);
315
310
  return reasoningDeltaEvent(event);
316
311
  }
317
312
  if (event.type === "tool_call_delta") {
318
- const existing = this.toolCalls.get(event.id);
319
- const toolCall = existing ?? {
320
- id: event.id,
321
- name: "",
322
- argumentsText: ""
323
- };
324
- if (!existing) {
325
- this.toolCallOrder.push(event.id);
326
- }
313
+ const toolCall = this.toolCallStateForId(event.id);
327
314
  if (event.callId !== void 0) toolCall.callId = event.callId;
328
315
  if (event.name !== void 0) toolCall.name = event.name;
329
316
  if (event.signature !== void 0) toolCall.signature = event.signature;
330
317
  if (event.argumentsDelta !== void 0) {
331
318
  toolCall.argumentsText += event.argumentsDelta;
332
319
  }
333
- this.toolCalls.set(event.id, toolCall);
334
320
  return void 0;
335
321
  }
336
322
  if (event.type === "tool_call") {
@@ -350,16 +336,8 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
350
336
  response() {
351
337
  const accumulatedResponse = this.buildAccumulatedResponse();
352
338
  if (this.finalResponse !== void 0) {
353
- if (this.finalResponse.choice.length === 0) {
354
- const response = {
355
- ...accumulatedResponse,
356
- usage: this.finalResponse.usage,
357
- rawResponse: this.finalResponse.rawResponse
358
- };
359
- if (this.finalResponse.messageId !== void 0) {
360
- response.messageId = this.finalResponse.messageId;
361
- }
362
- return response;
339
+ if (accumulatedResponse.choice.length === 0) {
340
+ return this.withMessageIdFallback(this.finalResponse, accumulatedResponse);
363
341
  }
364
342
  return this.mergeFinalResponse(accumulatedResponse, this.finalResponse);
365
343
  }
@@ -367,33 +345,24 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
367
345
  }
368
346
  buildAccumulatedResponse() {
369
347
  const choice = [];
370
- if (this.text.length > 0) {
371
- choice.push({ type: "text", text: this.text });
372
- }
373
- for (const key of this.reasoningOrder) {
374
- const reasoning = this.reasoningById.get(key) ?? { text: "" };
375
- const id = key === _CompletionStreamAccumulator.defaultReasoningKey ? void 0 : key;
376
- const content = reasoning.content === void 0 ? { type: "reasoning", text: reasoning.text } : { type: "reasoning", text: reasoning.text, content: reasoning.content };
377
- choice.push(id === void 0 ? content : { ...content, id });
378
- }
379
- for (const id of this.toolCallOrder) {
380
- const toolCall = this.toolCalls.get(id);
381
- if (toolCall !== void 0) {
382
- const content = {
383
- type: "tool_call",
384
- id: toolCall.id,
385
- function: {
386
- name: toolCall.name,
387
- arguments: parseJsonValue(toolCall.argumentsText)
388
- }
389
- };
390
- if (toolCall.callId !== void 0) {
391
- content.callId = toolCall.callId;
348
+ for (const part of this.orderedParts) {
349
+ if (part.type === "text") {
350
+ const text = this.textParts.get(part.key) ?? "";
351
+ if (text.length > 0) {
352
+ choice.push({ type: "text", text });
392
353
  }
393
- if (toolCall.signature !== void 0) {
394
- content.signature = toolCall.signature;
354
+ continue;
355
+ }
356
+ if (part.type === "reasoning") {
357
+ const reasoning = this.reasoningByKey.get(part.key);
358
+ if (reasoning !== void 0) {
359
+ choice.push(reasoningContent(reasoning));
395
360
  }
396
- choice.push(content);
361
+ continue;
362
+ }
363
+ const toolCall = this.toolCalls.get(part.key);
364
+ if (toolCall !== void 0) {
365
+ choice.push(toolCallContent(toolCall));
397
366
  }
398
367
  }
399
368
  const response = {
@@ -408,7 +377,7 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
408
377
  }
409
378
  upsertToolCall(toolCall) {
410
379
  if (!this.toolCalls.has(toolCall.id)) {
411
- this.toolCallOrder.push(toolCall.id);
380
+ this.orderedParts.push({ type: "tool_call", key: toolCall.id });
412
381
  }
413
382
  const partial = {
414
383
  id: toolCall.id,
@@ -421,39 +390,120 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
421
390
  if (toolCall.signature !== void 0) {
422
391
  partial.signature = toolCall.signature;
423
392
  }
393
+ if (toolCall.additionalParams !== void 0) {
394
+ partial.additionalParams = toolCall.additionalParams;
395
+ }
424
396
  this.toolCalls.set(toolCall.id, partial);
425
397
  }
426
398
  mergeFinalResponse(accumulatedResponse, finalResponse) {
427
- const accumulatedById = /* @__PURE__ */ new Map();
428
- const accumulatedByCallId = /* @__PURE__ */ new Map();
429
- for (const content of accumulatedResponse.choice) {
399
+ if (finalResponse.choice.length === 0) {
400
+ return this.withMessageIdFallback(
401
+ {
402
+ ...accumulatedResponse,
403
+ usage: finalResponse.usage,
404
+ rawResponse: finalResponse.rawResponse,
405
+ ...finalResponse.messageId === void 0 ? {} : { messageId: finalResponse.messageId }
406
+ },
407
+ accumulatedResponse
408
+ );
409
+ }
410
+ const finalById = /* @__PURE__ */ new Map();
411
+ const finalByCallId = /* @__PURE__ */ new Map();
412
+ for (const content of finalResponse.choice) {
430
413
  if (content.type !== "tool_call") {
431
414
  continue;
432
415
  }
433
- accumulatedById.set(content.id, content);
416
+ finalById.set(content.id, content);
434
417
  if (content.callId !== void 0) {
435
- accumulatedByCallId.set(content.callId, content);
418
+ finalByCallId.set(content.callId, content);
436
419
  }
437
420
  }
438
- return {
439
- ...finalResponse,
440
- choice: finalResponse.choice.map((content) => {
441
- if (content.type !== "tool_call" || !isEmptyToolArguments(content.function.arguments)) {
442
- return content;
443
- }
444
- const accumulated = accumulatedById.get(content.id) ?? (content.callId === void 0 ? void 0 : accumulatedByCallId.get(content.callId));
445
- if (accumulated === void 0 || isEmptyToolArguments(accumulated.function.arguments)) {
446
- return content;
421
+ const matchedFinalToolCalls = /* @__PURE__ */ new Set();
422
+ const choice = accumulatedResponse.choice.map((content) => {
423
+ if (content.type !== "tool_call") {
424
+ return content;
425
+ }
426
+ const finalToolCall = finalById.get(content.id) ?? (content.callId === void 0 ? void 0 : finalByCallId.get(content.callId));
427
+ if (finalToolCall === void 0) {
428
+ return content;
429
+ }
430
+ matchedFinalToolCalls.add(finalToolCall);
431
+ return mergeFinalToolCall(content, finalToolCall);
432
+ });
433
+ for (const content of finalResponse.choice) {
434
+ if (content.type !== "tool_call") {
435
+ continue;
436
+ }
437
+ if (!matchedFinalToolCalls.has(content)) {
438
+ choice.push(content);
439
+ }
440
+ }
441
+ return this.withMessageIdFallback({ ...finalResponse, choice }, accumulatedResponse);
442
+ }
443
+ appendText(delta) {
444
+ const lastPart = this.orderedParts.at(-1);
445
+ const key = lastPart?.type === "text" ? lastPart.key : this.createTextKey();
446
+ if (lastPart?.type !== "text") {
447
+ this.orderedParts.push({ type: "text", key });
448
+ }
449
+ this.textParts.set(key, `${this.textParts.get(key) ?? ""}${delta}`);
450
+ }
451
+ reasoningStateForEvent(event) {
452
+ if (event.id !== void 0) {
453
+ const existingKey = this.reasoningKeyById.get(event.id);
454
+ if (existingKey !== void 0) {
455
+ const existing = this.reasoningByKey.get(existingKey);
456
+ if (existing !== void 0) {
457
+ return existing;
447
458
  }
448
- return {
449
- ...content,
450
- function: {
451
- ...content.function,
452
- arguments: accumulated.function.arguments
453
- }
454
- };
455
- })
459
+ }
460
+ const key2 = this.createReasoningKey();
461
+ const reasoning2 = { id: event.id, text: "" };
462
+ this.reasoningKeyById.set(event.id, key2);
463
+ this.reasoningByKey.set(key2, reasoning2);
464
+ this.orderedParts.push({ type: "reasoning", key: key2 });
465
+ return reasoning2;
466
+ }
467
+ const lastPart = this.orderedParts.at(-1);
468
+ if (lastPart?.type === "reasoning") {
469
+ const lastReasoning = this.reasoningByKey.get(lastPart.key);
470
+ if (lastReasoning !== void 0 && lastReasoning.id === void 0) {
471
+ return lastReasoning;
472
+ }
473
+ }
474
+ const key = this.createReasoningKey();
475
+ const reasoning = { text: "" };
476
+ this.reasoningByKey.set(key, reasoning);
477
+ this.orderedParts.push({ type: "reasoning", key });
478
+ return reasoning;
479
+ }
480
+ toolCallStateForId(id) {
481
+ const existing = this.toolCalls.get(id);
482
+ if (existing !== void 0) {
483
+ return existing;
484
+ }
485
+ const toolCall = {
486
+ id,
487
+ name: "",
488
+ argumentsText: ""
456
489
  };
490
+ this.toolCalls.set(id, toolCall);
491
+ this.orderedParts.push({ type: "tool_call", key: id });
492
+ return toolCall;
493
+ }
494
+ withMessageIdFallback(response, accumulatedResponse) {
495
+ if (response.messageId !== void 0 || accumulatedResponse.messageId === void 0) {
496
+ return response;
497
+ }
498
+ return { ...response, messageId: accumulatedResponse.messageId };
499
+ }
500
+ createTextKey() {
501
+ this.nextTextKey += 1;
502
+ return `text_${this.nextTextKey.toString()}`;
503
+ }
504
+ createReasoningKey() {
505
+ this.nextReasoningKey += 1;
506
+ return `reasoning_${this.nextReasoningKey.toString()}`;
457
507
  }
458
508
  appendReasoning(reasoning, event) {
459
509
  const contentType = event.contentType ?? "text";
@@ -493,6 +543,42 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
493
543
  reasoning.content.push({ type: "redacted", data: event.delta });
494
544
  }
495
545
  };
546
+ function reasoningContent(reasoning) {
547
+ const content = reasoning.content === void 0 ? { type: "reasoning", text: reasoning.text } : { type: "reasoning", text: reasoning.text, content: reasoning.content };
548
+ return reasoning.id === void 0 ? content : { ...content, id: reasoning.id };
549
+ }
550
+ function toolCallContent(toolCall) {
551
+ const content = {
552
+ type: "tool_call",
553
+ id: toolCall.id,
554
+ function: {
555
+ name: toolCall.name,
556
+ arguments: parseJsonValue(toolCall.argumentsText)
557
+ }
558
+ };
559
+ if (toolCall.callId !== void 0) {
560
+ content.callId = toolCall.callId;
561
+ }
562
+ if (toolCall.signature !== void 0) {
563
+ content.signature = toolCall.signature;
564
+ }
565
+ if (toolCall.additionalParams !== void 0) {
566
+ content.additionalParams = toolCall.additionalParams;
567
+ }
568
+ return content;
569
+ }
570
+ function mergeFinalToolCall(accumulated, finalToolCall) {
571
+ const argumentsValue = isEmptyToolArguments(finalToolCall.function.arguments) ? accumulated.function.arguments : finalToolCall.function.arguments;
572
+ return {
573
+ ...accumulated,
574
+ ...finalToolCall,
575
+ function: {
576
+ ...accumulated.function,
577
+ ...finalToolCall.function,
578
+ arguments: argumentsValue
579
+ }
580
+ };
581
+ }
496
582
  function reasoningDeltaEvent(event) {
497
583
  const mapped = { type: "reasoning_delta", delta: event.delta };
498
584
  if (event.id !== void 0) mapped.id = event.id;
@@ -2014,4 +2100,4 @@ export {
2014
2100
  extractRagText,
2015
2101
  PromptRequest
2016
2102
  };
2017
- //# sourceMappingURL=chunk-4NCRFQHS.js.map
2103
+ //# sourceMappingURL=chunk-C7JLBS3F.js.map
@@ -0,0 +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/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 } from \"../../completion/index\";\nimport type { MemoryContext, MemoryRegistration, MemorySavePolicy } from \"../../memory/types\";\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<MessageType[]> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return this.initialHistory;\n }\n\n const memoryHistory = await memory.store.load(this.memoryContext);\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 chatHistory;\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","import type { Agent } from \"../../agent/agent\";\nimport type { Document, ToolDefinition } from \"../../completion/index\";\nimport { compact } from \"../compact\";\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 documents.push(\n compact({\n id: result.id,\n text:\n typeof result.document === \"string\"\n ? result.document\n : JSON.stringify(result.document, null, 2),\n additionalProps: metadata,\n }) as Document,\n );\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 CompletionStreamEvent,\n JsonValue,\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 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) toolCall.callId = event.callId;\n if (event.name !== undefined) toolCall.name = event.name;\n if (event.signature !== undefined) toolCall.signature = event.signature;\n if (event.argumentsDelta !== undefined) {\n toolCall.argumentsText += event.argumentsDelta;\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 === \"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.withMessageIdFallback(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(toolCallContent(toolCall));\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 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 return this.withMessageIdFallback(\n {\n ...accumulatedResponse,\n usage: finalResponse.usage,\n rawResponse: finalResponse.rawResponse,\n ...(finalResponse.messageId === undefined ? {} : { messageId: finalResponse.messageId }),\n },\n accumulatedResponse,\n );\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.withMessageIdFallback({ ...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 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 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): ToolCall {\n const content: ToolCall = {\n type: \"tool_call\",\n id: toolCall.id,\n function: {\n name: toolCall.name,\n arguments: parseJsonValue(toolCall.argumentsText),\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 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 parseJsonValue(text: string): JsonValue {\n if (text.trim().length === 0) {\n return {};\n }\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n","import type { AgentDeltaEvent, AgentStreamEvent } 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 return { type: \"tool_call\", turn, toolCall: event.toolCall };\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 );\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 { 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 ToolApprovalsOptions,\n ToolCallStreamEvent,\n} from \"../../tool\";\nimport { parseToolArgs, toolResultContentToText } from \"../../tool\";\nimport type {\n AgentMiddleware,\n ToolOutputMiddlewareArgs,\n ToolOutputMiddlewareResult,\n} from \"../../tool/middleware\";\nimport { compact } from \"../compact\";\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};\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 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 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 toolObservers = await observation?.runObservers.startTool(\n compact({\n turn: observation.turn,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n toolCallId: toolCall.callId,\n toolDefinition,\n toolMetadata,\n }),\n );\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, toolCall.callId);\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 return await this.agent.callTool(toolCall.function.name, middlewareArgs, {\n emitStreamEvent: async (event) => {\n await toolObservers?.streamEvent(\n compact({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId: hookArgs.internalCallId,\n args: middlewareArgs,\n toolCallId: toolCall.callId,\n event,\n }),\n );\n const payload = agentToolEventPayload(toolCall, hookArgs.internalCallId, event);\n if (payload !== undefined) {\n onStreamEvent?.(payload);\n }\n },\n });\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 turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId: hookArgs.internalCallId,\n args: middlewareArgs,\n ...(toolCall.callId !== undefined && { toolCallId: toolCall.callId }),\n error,\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 const legacyReplacement = await middleware.onResult?.({\n ...args,\n result,\n structuredResult,\n });\n if (legacyReplacement !== undefined) {\n result = legacyReplacement;\n structuredResult = undefined;\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 return this.requestApproval(tool, hookArgs, compact({ reason, rejectMessage }));\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 = compact({\n ...approvalContext(tool, hookArgs, this.agent, this.runContext),\n reason: options.reason,\n rejectMessage: options.rejectMessage,\n }) as ToolApprovalRequest;\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 return compact({\n toolName: hookArgs.toolName,\n args: parsedArgs,\n rawArgs: hookArgs.args,\n toolCallId: hookArgs.toolCallId,\n internalCallId: hookArgs.internalCallId,\n run: compact({\n agentId: agent.id,\n runId: run.runId,\n sessionId: run.sessionId,\n metadata: run.metadata,\n }),\n }) as ToolApprovalContext;\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 return {\n approvalRequired: tool.approval !== undefined,\n ...(typeof mcpMetadata?.serverName === \"string\" && mcpMetadata.serverName.length > 0\n ? { mcpServerName: mcpMetadata.serverName }\n : {}),\n };\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 return compact({\n type: \"agent_tool_event\" as const,\n toolName: toolCall.function.name,\n toolCallId: toolCall.callId,\n internalCallId,\n agentId: event.agentId,\n agentName: event.agentName,\n event: event.event as AgentChildStreamEvent,\n });\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 { Agent } from \"../agent/agent\";\nimport { isStreamingCompletionModel } from \"../completion/create-completion\";\nimport {\n AssistantContent,\n assertCompletionRequestSupported,\n type CompletionModel,\n CompletionRequestBuilder,\n type CompletionResponse,\n type JsonObject,\n type JsonValue,\n Message,\n type Message as MessageType,\n type ToolCall,\n type ToolDefinition,\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 { compact } from \"../internal/compact\";\nimport { PromptRequestMemory } from \"../internal/prompt-runtime/memory\";\nimport { fetchDynamicContext, fetchToolDefinitions } from \"../internal/prompt-runtime/retrieval\";\nimport { CompletionStreamAccumulator } from \"../internal/prompt-runtime/stream-accumulator\";\nimport { addTurn, isGenerationDeltaEvent } from \"../internal/prompt-runtime/stream-events\";\nimport {\n type AgentToolEventPayload,\n ToolCallExecutor,\n type ToolExecutionEventPayload,\n type ToolResultEventPayload,\n} from \"../internal/prompt-runtime/tool-execution\";\nimport { extractRagText } from \"../internal/rag-text\";\nimport type { MemoryContext } from \"../memory/types\";\nimport { type ActiveAgentRunObservers, startAgentRunObservers } from \"../observability/group\";\nimport type { AgentTraceOptions } from \"../observability/types\";\nimport { toReadableStream } from \"../streaming\";\nimport type { ToolApprovalsOptions } from \"../tool\";\nimport type { AgentMiddleware, ToolMiddleware } from \"../tool/middleware\";\nimport { MaxTurnsError, PromptCancelledError } from \"./errors\";\nimport type { AgentStreamEvent, PromptResponse } 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 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 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 /**\n * @deprecated Use `withHook` instead.\n */\n requestHook(hook: PromptHook): this {\n return this.withHook(hook);\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 /**\n * @deprecated Use `withMiddleware` instead.\n */\n withToolMiddleware(middleware: ToolMiddleware): this {\n return this.withMiddleware(middleware);\n }\n\n /**\n * @deprecated Use `withMiddlewares` instead.\n */\n withToolMiddlewares(middlewares: ToolMiddleware[]): this {\n return this.withMiddlewares(middlewares);\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 this.chatHistory = await this.memoryRecorder.prepareRun(runId, newMessages);\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)\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 = Message.assistant(response.choice, response.messageId);\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 = Message.assistant(response.choice, response.messageId);\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 };\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 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 async *stream(): 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 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 this.chatHistory = await this.memoryRecorder.prepareRun(runId, newMessages);\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)\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 generationObservers = await runObservers.startGeneration(\n compact({\n turn: currentTurns,\n request,\n providerRequest,\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n }),\n );\n const accumulator = new CompletionStreamAccumulator();\n const generationStartedAt = Date.now();\n let firstDeltaMs: number | undefined;\n const bufferResponseEvents = this.shouldBufferStreamResponseEvents();\n const emittedToolCallIds = new Set<string>();\n try {\n for await (const event of this.agent.model.streamCompletion(request)) {\n if (firstDeltaMs === undefined && isGenerationDeltaEvent(event.type)) {\n firstDeltaMs = Date.now() - generationStartedAt;\n }\n const mapped = accumulator.accept(event);\n if (event.type === \"error\") {\n throw event.error;\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 } catch (error) {\n await generationObservers.error({ turn: currentTurns, error });\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n\n let response = accumulator.response();\n await generationObservers.end(\n compact({\n turn: currentTurns,\n response,\n firstDeltaMs,\n }),\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 let assistantMessage = Message.assistant(response.choice, response.messageId);\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({ type: \"turn_end\", turn: currentTurns, response });\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 = Message.assistant(response.choice, response.messageId);\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(currentTurns, response)) {\n yield await emit(event);\n }\n }\n if (!emittedTurnEnd) {\n yield await emit({ type: \"turn_end\", turn: currentTurns, response });\n }\n\n const result: PromptResponse = {\n output: guardedOutput.output,\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n guardrails: [...this.guardrailDecisions],\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 });\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({ type: \"turn_end\", turn: currentTurns, response });\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 },\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 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 yield await emit({ type: \"error\", error: finalError });\n throw finalError;\n }\n }\n\n readableStream(): ReadableStream<Uint8Array> {\n return toReadableStream(this.stream());\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 compact({\n turn,\n request,\n providerRequest,\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n }),\n );\n try {\n const response = await this.agent.model.completion(request);\n await generationObservers.end({ turn, response });\n return response;\n } catch (error) {\n await generationObservers.error({ turn, error });\n throw error;\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 async executeToolCalls(\n runId: string,\n toolCalls: ToolCall[],\n newMessages: MessageType[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: {\n turn: number;\n runObservers: ActiveAgentRunObservers;\n toolDefinitions?: ToolDefinition[];\n },\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 (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 guardrailRunContext(runId: string): GuardrailRunContext {\n return compact({\n agentId: this.agent.id,\n runId,\n sessionId: this.memoryContext?.sessionId,\n metadata: this.memoryContext?.metadata,\n }) as GuardrailRunContext;\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 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 await registration.store.append({\n runId,\n agentId,\n ...compact({ agentName, turn }),\n ...(event.type === \"agent_tool_event\"\n ? compact({\n toolName: event.toolName,\n toolCallId: event.toolCallId,\n internalCallId: event.internalCallId,\n })\n : {}),\n event,\n });\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(turn: number, response: CompletionResponse): 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(\n compact({ type: \"reasoning_delta\" as const, turn, delta: item.text, id: item.id }),\n );\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 compact({\n type: \"reasoning_delta\" as const,\n turn,\n 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 return events;\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 return compact({\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 reason: decision.reason,\n message: decision.message,\n latencyMs: decision.latencyMs,\n }) as Record<string, JsonValue | undefined>;\n}\n"],"mappings":"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","names":["key","reasoning"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Agent,
3
3
  normalizeAgentId
4
- } from "./chunk-3CPOJSKK.js";
4
+ } from "./chunk-OQXRM5DO.js";
5
5
  import {
6
6
  ToolSet
7
7
  } from "./chunk-YVQBC3SJ.js";
@@ -212,4 +212,4 @@ var AgentBuilder = class {
212
212
  export {
213
213
  AgentBuilder
214
214
  };
215
- //# sourceMappingURL=chunk-FBN6IEZA.js.map
215
+ //# sourceMappingURL=chunk-OODGSEUU.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  PromptRequest
3
- } from "./chunk-4NCRFQHS.js";
3
+ } from "./chunk-C7JLBS3F.js";
4
4
  import {
5
5
  isSkillTool
6
6
  } from "./chunk-YK4WAAS4.js";
@@ -204,4 +204,4 @@ export {
204
204
  Agent,
205
205
  AgentSession
206
206
  };
207
- //# sourceMappingURL=chunk-3CPOJSKK.js.map
207
+ //# sourceMappingURL=chunk-OQXRM5DO.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  AgentBuilder
3
- } from "./chunk-FBN6IEZA.js";
3
+ } from "./chunk-OODGSEUU.js";
4
4
  import {
5
5
  extractRagText
6
- } from "./chunk-4NCRFQHS.js";
6
+ } from "./chunk-C7JLBS3F.js";
7
7
  import {
8
8
  createTool
9
9
  } from "./chunk-QKA6OQTH.js";
@@ -138,4 +138,4 @@ export {
138
138
  Extractor,
139
139
  ExtractorBuilder
140
140
  };
141
- //# sourceMappingURL=chunk-LLA7EW5W.js.map
141
+ //# sourceMappingURL=chunk-ZHIZZWBJ.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ExtractorBuilder
3
- } from "../chunk-LLA7EW5W.js";
4
- import "../chunk-FBN6IEZA.js";
5
- import "../chunk-3CPOJSKK.js";
6
- import "../chunk-4NCRFQHS.js";
3
+ } from "../chunk-ZHIZZWBJ.js";
4
+ import "../chunk-OODGSEUU.js";
5
+ import "../chunk-OQXRM5DO.js";
6
+ import "../chunk-C7JLBS3F.js";
7
7
  import "../chunk-YK4WAAS4.js";
8
8
  import "../chunk-XUUY2L2D.js";
9
9
  import "../chunk-YVQBC3SJ.js";
@@ -2,10 +2,10 @@ import {
2
2
  ExtractionError,
3
3
  Extractor,
4
4
  ExtractorBuilder
5
- } from "../chunk-LLA7EW5W.js";
6
- import "../chunk-FBN6IEZA.js";
7
- import "../chunk-3CPOJSKK.js";
8
- import "../chunk-4NCRFQHS.js";
5
+ } from "../chunk-ZHIZZWBJ.js";
6
+ import "../chunk-OODGSEUU.js";
7
+ import "../chunk-OQXRM5DO.js";
8
+ import "../chunk-C7JLBS3F.js";
9
9
  import "../chunk-YK4WAAS4.js";
10
10
  import "../chunk-XUUY2L2D.js";
11
11
  import "../chunk-YVQBC3SJ.js";
package/dist/index.js CHANGED
@@ -9,13 +9,13 @@ import {
9
9
  } from "./chunk-LKLKEECY.js";
10
10
  import {
11
11
  AgentBuilder
12
- } from "./chunk-FBN6IEZA.js";
13
- import "./chunk-3CPOJSKK.js";
12
+ } from "./chunk-OODGSEUU.js";
13
+ import "./chunk-OQXRM5DO.js";
14
14
  import {
15
15
  MaxTurnsError,
16
16
  PromptCancelledError,
17
17
  ToolApprovalRequiredError
18
- } from "./chunk-4NCRFQHS.js";
18
+ } from "./chunk-C7JLBS3F.js";
19
19
  import "./chunk-YK4WAAS4.js";
20
20
  import "./chunk-XUUY2L2D.js";
21
21
  import {
@@ -2,8 +2,8 @@ import {
2
2
  Agent,
3
3
  AgentSession,
4
4
  DEFAULT_MAX_TURNS
5
- } from "../chunk-3CPOJSKK.js";
6
- import "../chunk-4NCRFQHS.js";
5
+ } from "../chunk-OQXRM5DO.js";
6
+ import "../chunk-C7JLBS3F.js";
7
7
  import "../chunk-YK4WAAS4.js";
8
8
  import "../chunk-XUUY2L2D.js";
9
9
  import "../chunk-YVQBC3SJ.js";
@@ -3,7 +3,7 @@ import {
3
3
  PromptCancelledError,
4
4
  PromptRequest,
5
5
  ToolApprovalRequiredError
6
- } from "../chunk-4NCRFQHS.js";
6
+ } from "../chunk-C7JLBS3F.js";
7
7
  import "../chunk-XUUY2L2D.js";
8
8
  import "../chunk-YVQBC3SJ.js";
9
9
  import "../chunk-QKA6OQTH.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/core",
3
- "version": "0.12.3",
3
+ "version": "0.12.4",
4
4
  "description": "Core runtime primitives for context-aware Anvia agents.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -1 +0,0 @@
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/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 } from \"../../completion/index\";\nimport type { MemoryContext, MemoryRegistration, MemorySavePolicy } from \"../../memory/types\";\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<MessageType[]> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return this.initialHistory;\n }\n\n const memoryHistory = await memory.store.load(this.memoryContext);\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 chatHistory;\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","import type { Agent } from \"../../agent/agent\";\nimport type { Document, ToolDefinition } from \"../../completion/index\";\nimport { compact } from \"../compact\";\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 documents.push(\n compact({\n id: result.id,\n text:\n typeof result.document === \"string\"\n ? result.document\n : JSON.stringify(result.document, null, 2),\n additionalProps: metadata,\n }) as Document,\n );\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 CompletionStreamEvent,\n JsonValue,\n ReasoningContent,\n ToolCall,\n} from \"../../completion/index\";\nimport { Usage } from \"../../completion/index\";\nimport type { AgentDeltaEvent } from \"../../request/types\";\n\ntype ReasoningState = {\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};\n\nexport class CompletionStreamAccumulator<RawResponse = unknown> {\n private static readonly defaultReasoningKey = \"reasoning\";\n private text = \"\";\n private reasoningById = new Map<string, ReasoningState>();\n private reasoningOrder: string[] = [];\n private toolCalls = new Map<string, PartialToolCall>();\n private toolCallOrder: string[] = [];\n private finalResponse: CompletionResponse<RawResponse> | undefined;\n private messageId: string | undefined;\n\n accept(event: CompletionStreamEvent<RawResponse>): AgentDeltaEvent | undefined {\n if (event.type === \"text_delta\") {\n this.text += event.delta;\n return { type: \"text_delta\", delta: event.delta };\n }\n\n if (event.type === \"reasoning_delta\") {\n const key = event.id ?? CompletionStreamAccumulator.defaultReasoningKey;\n const existing = this.reasoningById.get(key);\n const reasoning = existing ?? { text: \"\" };\n if (!existing) {\n this.reasoningOrder.push(key);\n }\n this.appendReasoning(reasoning, event);\n this.reasoningById.set(key, reasoning);\n return reasoningDeltaEvent(event);\n }\n\n if (event.type === \"tool_call_delta\") {\n const existing = this.toolCalls.get(event.id);\n const toolCall = existing ?? {\n id: event.id,\n name: \"\",\n argumentsText: \"\",\n };\n if (!existing) {\n this.toolCallOrder.push(event.id);\n }\n if (event.callId !== undefined) toolCall.callId = event.callId;\n if (event.name !== undefined) toolCall.name = event.name;\n if (event.signature !== undefined) toolCall.signature = event.signature;\n if (event.argumentsDelta !== undefined) {\n toolCall.argumentsText += event.argumentsDelta;\n }\n this.toolCalls.set(event.id, toolCall);\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 === \"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 (this.finalResponse.choice.length === 0) {\n const response = {\n ...accumulatedResponse,\n usage: this.finalResponse.usage,\n rawResponse: this.finalResponse.rawResponse,\n };\n if (this.finalResponse.messageId !== undefined) {\n response.messageId = this.finalResponse.messageId;\n }\n return response;\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 if (this.text.length > 0) {\n choice.push({ type: \"text\", text: this.text });\n }\n for (const key of this.reasoningOrder) {\n const reasoning = this.reasoningById.get(key) ?? { text: \"\" };\n const id = key === CompletionStreamAccumulator.defaultReasoningKey ? undefined : key;\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 choice.push(id === undefined ? content : { ...content, id });\n }\n for (const id of this.toolCallOrder) {\n const toolCall = this.toolCalls.get(id);\n if (toolCall !== undefined) {\n const content: ToolCall = {\n type: \"tool_call\",\n id: toolCall.id,\n function: {\n name: toolCall.name,\n arguments: parseJsonValue(toolCall.argumentsText),\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 choice.push(content);\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 return response;\n }\n\n private upsertToolCall(toolCall: ToolCall): void {\n if (!this.toolCalls.has(toolCall.id)) {\n this.toolCallOrder.push(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 this.toolCalls.set(toolCall.id, partial);\n }\n\n private mergeFinalResponse(\n accumulatedResponse: CompletionResponse<RawResponse>,\n finalResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n const accumulatedById = new Map<string, ToolCall>();\n const accumulatedByCallId = new Map<string, ToolCall>();\n for (const content of accumulatedResponse.choice) {\n if (content.type !== \"tool_call\") {\n continue;\n }\n accumulatedById.set(content.id, content);\n if (content.callId !== undefined) {\n accumulatedByCallId.set(content.callId, content);\n }\n }\n\n return {\n ...finalResponse,\n choice: finalResponse.choice.map((content) => {\n if (content.type !== \"tool_call\" || !isEmptyToolArguments(content.function.arguments)) {\n return content;\n }\n\n const accumulated =\n accumulatedById.get(content.id) ??\n (content.callId === undefined ? undefined : accumulatedByCallId.get(content.callId));\n if (accumulated === undefined || isEmptyToolArguments(accumulated.function.arguments)) {\n return content;\n }\n\n return {\n ...content,\n function: {\n ...content.function,\n arguments: accumulated.function.arguments,\n },\n };\n }),\n };\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 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 parseJsonValue(text: string): JsonValue {\n if (text.trim().length === 0) {\n return {};\n }\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n","import type { AgentDeltaEvent, AgentStreamEvent } 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 return { type: \"tool_call\", turn, toolCall: event.toolCall };\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 );\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 { 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 ToolApprovalsOptions,\n ToolCallStreamEvent,\n} from \"../../tool\";\nimport { parseToolArgs, toolResultContentToText } from \"../../tool\";\nimport type {\n AgentMiddleware,\n ToolOutputMiddlewareArgs,\n ToolOutputMiddlewareResult,\n} from \"../../tool/middleware\";\nimport { compact } from \"../compact\";\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};\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 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 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 toolObservers = await observation?.runObservers.startTool(\n compact({\n turn: observation.turn,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n toolCallId: toolCall.callId,\n toolDefinition,\n toolMetadata,\n }),\n );\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, toolCall.callId);\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 return await this.agent.callTool(toolCall.function.name, middlewareArgs, {\n emitStreamEvent: async (event) => {\n await toolObservers?.streamEvent(\n compact({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId: hookArgs.internalCallId,\n args: middlewareArgs,\n toolCallId: toolCall.callId,\n event,\n }),\n );\n const payload = agentToolEventPayload(toolCall, hookArgs.internalCallId, event);\n if (payload !== undefined) {\n onStreamEvent?.(payload);\n }\n },\n });\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 turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId: hookArgs.internalCallId,\n args: middlewareArgs,\n ...(toolCall.callId !== undefined && { toolCallId: toolCall.callId }),\n error,\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 const legacyReplacement = await middleware.onResult?.({\n ...args,\n result,\n structuredResult,\n });\n if (legacyReplacement !== undefined) {\n result = legacyReplacement;\n structuredResult = undefined;\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 return this.requestApproval(tool, hookArgs, compact({ reason, rejectMessage }));\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 = compact({\n ...approvalContext(tool, hookArgs, this.agent, this.runContext),\n reason: options.reason,\n rejectMessage: options.rejectMessage,\n }) as ToolApprovalRequest;\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 return compact({\n toolName: hookArgs.toolName,\n args: parsedArgs,\n rawArgs: hookArgs.args,\n toolCallId: hookArgs.toolCallId,\n internalCallId: hookArgs.internalCallId,\n run: compact({\n agentId: agent.id,\n runId: run.runId,\n sessionId: run.sessionId,\n metadata: run.metadata,\n }),\n }) as ToolApprovalContext;\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 return {\n approvalRequired: tool.approval !== undefined,\n ...(typeof mcpMetadata?.serverName === \"string\" && mcpMetadata.serverName.length > 0\n ? { mcpServerName: mcpMetadata.serverName }\n : {}),\n };\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 return compact({\n type: \"agent_tool_event\" as const,\n toolName: toolCall.function.name,\n toolCallId: toolCall.callId,\n internalCallId,\n agentId: event.agentId,\n agentName: event.agentName,\n event: event.event as AgentChildStreamEvent,\n });\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 { Agent } from \"../agent/agent\";\nimport { isStreamingCompletionModel } from \"../completion/create-completion\";\nimport {\n AssistantContent,\n assertCompletionRequestSupported,\n type CompletionModel,\n CompletionRequestBuilder,\n type CompletionResponse,\n type JsonObject,\n type JsonValue,\n Message,\n type Message as MessageType,\n type ToolCall,\n type ToolDefinition,\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 { compact } from \"../internal/compact\";\nimport { PromptRequestMemory } from \"../internal/prompt-runtime/memory\";\nimport { fetchDynamicContext, fetchToolDefinitions } from \"../internal/prompt-runtime/retrieval\";\nimport { CompletionStreamAccumulator } from \"../internal/prompt-runtime/stream-accumulator\";\nimport { addTurn, isGenerationDeltaEvent } from \"../internal/prompt-runtime/stream-events\";\nimport {\n type AgentToolEventPayload,\n ToolCallExecutor,\n type ToolExecutionEventPayload,\n type ToolResultEventPayload,\n} from \"../internal/prompt-runtime/tool-execution\";\nimport { extractRagText } from \"../internal/rag-text\";\nimport type { MemoryContext } from \"../memory/types\";\nimport { type ActiveAgentRunObservers, startAgentRunObservers } from \"../observability/group\";\nimport type { AgentTraceOptions } from \"../observability/types\";\nimport { toReadableStream } from \"../streaming\";\nimport type { ToolApprovalsOptions } from \"../tool\";\nimport type { AgentMiddleware, ToolMiddleware } from \"../tool/middleware\";\nimport { MaxTurnsError, PromptCancelledError } from \"./errors\";\nimport type { AgentStreamEvent, PromptResponse } 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 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 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 /**\n * @deprecated Use `withHook` instead.\n */\n requestHook(hook: PromptHook): this {\n return this.withHook(hook);\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 /**\n * @deprecated Use `withMiddleware` instead.\n */\n withToolMiddleware(middleware: ToolMiddleware): this {\n return this.withMiddleware(middleware);\n }\n\n /**\n * @deprecated Use `withMiddlewares` instead.\n */\n withToolMiddlewares(middlewares: ToolMiddleware[]): this {\n return this.withMiddlewares(middlewares);\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 this.chatHistory = await this.memoryRecorder.prepareRun(runId, newMessages);\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)\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 = Message.assistant(response.choice, response.messageId);\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 = Message.assistant(response.choice, response.messageId);\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 };\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 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 async *stream(): 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 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 this.chatHistory = await this.memoryRecorder.prepareRun(runId, newMessages);\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)\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 generationObservers = await runObservers.startGeneration(\n compact({\n turn: currentTurns,\n request,\n providerRequest,\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n }),\n );\n const accumulator = new CompletionStreamAccumulator();\n const generationStartedAt = Date.now();\n let firstDeltaMs: number | undefined;\n const bufferResponseEvents = this.shouldBufferStreamResponseEvents();\n const emittedToolCallIds = new Set<string>();\n try {\n for await (const event of this.agent.model.streamCompletion(request)) {\n if (firstDeltaMs === undefined && isGenerationDeltaEvent(event.type)) {\n firstDeltaMs = Date.now() - generationStartedAt;\n }\n const mapped = accumulator.accept(event);\n if (event.type === \"error\") {\n throw event.error;\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 } catch (error) {\n await generationObservers.error({ turn: currentTurns, error });\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n\n let response = accumulator.response();\n await generationObservers.end(\n compact({\n turn: currentTurns,\n response,\n firstDeltaMs,\n }),\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 let assistantMessage = Message.assistant(response.choice, response.messageId);\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({ type: \"turn_end\", turn: currentTurns, response });\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 = Message.assistant(response.choice, response.messageId);\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(currentTurns, response)) {\n yield await emit(event);\n }\n }\n if (!emittedTurnEnd) {\n yield await emit({ type: \"turn_end\", turn: currentTurns, response });\n }\n\n const result: PromptResponse = {\n output: guardedOutput.output,\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n guardrails: [...this.guardrailDecisions],\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 });\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({ type: \"turn_end\", turn: currentTurns, response });\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 },\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 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 yield await emit({ type: \"error\", error: finalError });\n throw finalError;\n }\n }\n\n readableStream(): ReadableStream<Uint8Array> {\n return toReadableStream(this.stream());\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 compact({\n turn,\n request,\n providerRequest,\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n }),\n );\n try {\n const response = await this.agent.model.completion(request);\n await generationObservers.end({ turn, response });\n return response;\n } catch (error) {\n await generationObservers.error({ turn, error });\n throw error;\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 async executeToolCalls(\n runId: string,\n toolCalls: ToolCall[],\n newMessages: MessageType[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: {\n turn: number;\n runObservers: ActiveAgentRunObservers;\n toolDefinitions?: ToolDefinition[];\n },\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 (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 guardrailRunContext(runId: string): GuardrailRunContext {\n return compact({\n agentId: this.agent.id,\n runId,\n sessionId: this.memoryContext?.sessionId,\n metadata: this.memoryContext?.metadata,\n }) as GuardrailRunContext;\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 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 await registration.store.append({\n runId,\n agentId,\n ...compact({ agentName, turn }),\n ...(event.type === \"agent_tool_event\"\n ? compact({\n toolName: event.toolName,\n toolCallId: event.toolCallId,\n internalCallId: event.internalCallId,\n })\n : {}),\n event,\n });\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(turn: number, response: CompletionResponse): 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(\n compact({ type: \"reasoning_delta\" as const, turn, delta: item.text, id: item.id }),\n );\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 compact({\n type: \"reasoning_delta\" as const,\n turn,\n 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 return events;\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 return compact({\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 reason: decision.reason,\n message: decision.message,\n latencyMs: decision.latencyMs,\n }) as Record<string, JsonValue | undefined>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YACW,UACA,aACA,QACT;AACA,UAAM,2BAA2B,QAAQ,EAAE;AAJlC;AACA;AACA;AAGT,SAAK,OAAO;AAAA,EACd;AAAA,EANW;AAAA,EACA;AAAA,EACA;AAKb;AAEO,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAC9C,YACW,aACA,QACT;AACA,UAAM,qBAAqB,MAAM,EAAE;AAH1B;AACA;AAGT,SAAK,OAAO;AAAA,EACd;AAAA,EALW;AAAA,EACA;AAKb;AAEO,IAAM,4BAAN,cAAwC,MAAM;AAAA,EACnD,YAAqB,SAA8B;AACjD,UAAM,8BAA8B,QAAQ,QAAQ,0CAA0C;AAD3E;AAEnB,SAAK,OAAO;AAAA,EACd;AAAA,EAHqB;AAIvB;;;AClBO,SAAS,mBAAqC;AACnD,QAAM,SAAc,CAAC;AACrB,QAAM,UAAiC,CAAC;AACxC,MAAI,SAAS;AACb,MAAI;AAEJ,WAAS,QAAc;AACrB,WAAO,QAAQ,SAAS,KAAK,OAAO,SAAS,GAAG;AAC9C,YAAM,SAAS,QAAQ,MAAM;AAC7B,YAAM,QAAQ,OAAO,MAAM;AAC3B,UAAI,WAAW,QAAW;AACxB,eAAO,QAAQ,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,MACvC;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,KAAK,QAAQ,WAAW,KAAK,CAAC,QAAQ;AACxD;AAAA,IACF;AAEA,WAAO,QAAQ,SAAS,GAAG;AACzB,YAAM,SAAS,QAAQ,MAAM;AAC7B,UAAI,WAAW,QAAW;AACxB;AAAA,MACF;AACA,UAAI,UAAU,QAAW;AACvB,eAAO,OAAO,KAAK;AAAA,MACrB,OAAO;AACL,eAAO,QAAQ,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ,OAAgB;AACtB,UAAI,QAAQ;AACV;AAAA,MACF;AACA,aAAO,KAAK,KAAK;AACjB,YAAM;AAAA,IACR;AAAA,IACA,QAAc;AACZ,eAAS;AACT,YAAM;AAAA,IACR;AAAA,IACA,MAAM,QAAuB;AAC3B,eAAS;AACT,cAAQ;AACR,YAAM;AAAA,IACR;AAAA,IACA,CAAC,OAAO,aAAa,IAAsB;AACzC,aAAO;AAAA,QACL,OAAmC;AACjC,cAAI,OAAO,SAAS,GAAG;AACrB,kBAAM,QAAQ,OAAO,MAAM;AAC3B,mBAAO,QAAQ,QAAQ,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,UAC/C;AACA,cAAI,UAAU,QAAW;AACvB,mBAAO,QAAQ,OAAO,KAAK;AAAA,UAC7B;AACA,cAAI,QAAQ;AACV,mBAAO,QAAQ,QAAQ,EAAE,OAAO,QAAW,MAAM,KAAK,CAAC;AAAA,UACzD;AACA,iBAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,oBAAQ,KAAK,EAAE,SAAS,OAAO,CAAC;AAAA,UAClC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC5EO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YACmB,OACA,eACA,gBACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAHgB;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,eAA6C;AAC3C,WAAO,KAAK,OAAO,GAAG,QAAQ;AAAA,EAChC;AAAA,EAEA,oBAAoB,aAA2C;AAC7D,WAAO,KAAK,aAAa,MAAM,SAAS,CAAC,GAAG,WAAW,IAAI,CAAC;AAAA,EAC9D;AAAA,EAEA,MAAM,WAAW,OAAe,aAAoD;AAClF,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,WAAW,UAAa,KAAK,kBAAkB,QAAW;AAC5D,aAAO,KAAK;AAAA,IACd;AAEA,UAAM,gBAAgB,MAAM,OAAO,MAAM,KAAK,KAAK,aAAa;AAChE,UAAM,cAAc,CAAC,GAAG,eAAe,GAAG,KAAK,cAAc;AAC7D,QAAI,OAAO,QAAQ,eAAe,WAAW;AAC3C,YAAM,OAAO,MAAM,OAAO;AAAA,QACxB,SAAS,KAAK;AAAA,QACd;AAAA,QACA,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eACJ,OACA,MACA,UACA,qBACe;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,WAAW,UAAa,KAAK,kBAAkB,UAAa,SAAS,WAAW,GAAG;AACrF;AAAA,IACF;AACA,QAAI,OAAO,QAAQ,eAAe,WAAW;AAC3C,YAAM,OAAO,MAAM,OAAO;AAAA,QACxB,SAAS,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,WAAW,OAAO,QAAQ,eAAe,QAAQ;AAC/C,0BAAoB,KAAK,GAAG,QAAQ;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,OACA,MACA,qBACe;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,QACE,WAAW,UACX,KAAK,kBAAkB,UACvB,OAAO,QAAQ,eAAe,UAC9B,oBAAoB,WAAW,GAC/B;AACA;AAAA,IACF;AACA,UAAM,OAAO,MAAM,OAAO;AAAA,MACxB,SAAS,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA,UAAU,CAAC,GAAG,mBAAmB;AAAA,IACnC,CAAC;AACD,wBAAoB,SAAS;AAAA,EAC/B;AAAA,EAEA,MAAM,mBACJ,OACA,MACA,aACA,qBACe;AACf,UAAM,KAAK,oBAAoB,OAAO,MAAM,mBAAmB;AAC/D,UAAM,SAAS,KAAK,OAAO;AAC3B,QACE,WAAW,UACX,KAAK,kBAAkB,UACvB,OAAO,QAAQ,eAAe,OAC9B;AACA;AAAA,IACF;AACA,UAAM,OAAO,MAAM,OAAO;AAAA,MACxB,SAAS,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA,UAAU,CAAC,GAAG,WAAW;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,OAAe,OAAgB,aAA2C;AAC1F,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,WAAW,UAAa,KAAK,kBAAkB,QAAW;AAC5D;AAAA,IACF;AACA,UAAM,OAAO,MAAM,cAAc;AAAA,MAC/B,SAAS,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA,UAAU,CAAC,GAAG,WAAW;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEQ,SAAyC;AAC/C,WAAO,KAAK,kBAAkB,SAAY,SAAY,KAAK,MAAM;AAAA,EACnE;AACF;;;ACtHA,eAAsB,oBACpB,OACA,SACqB;AACrB,MAAI,YAAY,UAAa,QAAQ,WAAW,KAAK,MAAM,gBAAgB,WAAW,GAAG;AACvF,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAwB,CAAC;AAC/B,aAAW,gBAAgB,MAAM,iBAAiB;AAChD,UAAM,UAAU,MAAM,aAAa,MAAM,OAAO;AAAA,MAC9C,OAAO;AAAA,MACP,MAAM,aAAa,QAAQ;AAAA,MAC3B,WAAW,aAAa,QAAQ;AAAA,MAChC,QAAQ,aAAa,QAAQ;AAAA,IAC/B,CAAC;AACD,eAAW,UAAU,SAAS;AAC5B,YAAM,YAAY,aAAa,QAAQ,SAAS,MAAM;AACtD,UAAI,cAAc,QAAW;AAC3B,kBAAU,KAAK,SAAS;AAAA,MAC1B,OAAO;AACL,cAAM,WAAW,eAAe,OAAO,QAAQ;AAC/C,kBAAU;AAAA,UACR,QAAQ;AAAA,YACN,IAAI,OAAO;AAAA,YACX,MACE,OAAO,OAAO,aAAa,WACvB,OAAO,WACP,KAAK,UAAU,OAAO,UAAU,MAAM,CAAC;AAAA,YAC7C,iBAAiB;AAAA,UACnB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,qBACpB,OACA,SAC2B;AAC3B,QAAM,oBAAoB,MAAM,MAAM,QAAQ,mBAAmB,OAAO;AACxE,MAAI,YAAY,UAAa,QAAQ,WAAW,KAAK,MAAM,aAAa,WAAW,GAAG;AACpF,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,CAAC,GAAG,iBAAiB;AACzC,QAAM,QAAQ,IAAI,IAAI,kBAAkB,IAAI,CAAC,eAAe,WAAW,IAAI,CAAC;AAC5E,aAAW,gBAAgB,MAAM,cAAc;AAC7C,UAAM,UAAU,MAAM,aAAa,MAAM,OAAO;AAAA,MAC9C,OAAO;AAAA,MACP,MAAM,aAAa,QAAQ;AAAA,MAC3B,WAAW,aAAa,QAAQ;AAAA,MAChC,QAAQ,aAAa,QAAQ;AAAA,IAC/B,CAAC;AACD,eAAW,UAAU,SAAS;AAC5B,UAAI,MAAM,IAAI,OAAO,SAAS,QAAQ,GAAG;AACvC;AAAA,MACF;AACA,YAAM,IAAI,OAAO,SAAS,QAAQ;AAClC,kBAAY,KAAK,OAAO,SAAS,UAAU;AAAA,IAC7C;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eACP,UACoC;AACpC,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,YAAY,OAAO,QAAQ,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;AAChG;;;ACvDO,IAAM,8BAAN,MAAM,6BAAmD;AAAA,EAC9D,OAAwB,sBAAsB;AAAA,EACtC,OAAO;AAAA,EACP,gBAAgB,oBAAI,IAA4B;AAAA,EAChD,iBAA2B,CAAC;AAAA,EAC5B,YAAY,oBAAI,IAA6B;AAAA,EAC7C,gBAA0B,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EAER,OAAO,OAAwE;AAC7E,QAAI,MAAM,SAAS,cAAc;AAC/B,WAAK,QAAQ,MAAM;AACnB,aAAO,EAAE,MAAM,cAAc,OAAO,MAAM,MAAM;AAAA,IAClD;AAEA,QAAI,MAAM,SAAS,mBAAmB;AACpC,YAAM,MAAM,MAAM,MAAM,6BAA4B;AACpD,YAAM,WAAW,KAAK,cAAc,IAAI,GAAG;AAC3C,YAAM,YAAY,YAAY,EAAE,MAAM,GAAG;AACzC,UAAI,CAAC,UAAU;AACb,aAAK,eAAe,KAAK,GAAG;AAAA,MAC9B;AACA,WAAK,gBAAgB,WAAW,KAAK;AACrC,WAAK,cAAc,IAAI,KAAK,SAAS;AACrC,aAAO,oBAAoB,KAAK;AAAA,IAClC;AAEA,QAAI,MAAM,SAAS,mBAAmB;AACpC,YAAM,WAAW,KAAK,UAAU,IAAI,MAAM,EAAE;AAC5C,YAAM,WAAW,YAAY;AAAA,QAC3B,IAAI,MAAM;AAAA,QACV,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AACA,UAAI,CAAC,UAAU;AACb,aAAK,cAAc,KAAK,MAAM,EAAE;AAAA,MAClC;AACA,UAAI,MAAM,WAAW,OAAW,UAAS,SAAS,MAAM;AACxD,UAAI,MAAM,SAAS,OAAW,UAAS,OAAO,MAAM;AACpD,UAAI,MAAM,cAAc,OAAW,UAAS,YAAY,MAAM;AAC9D,UAAI,MAAM,mBAAmB,QAAW;AACtC,iBAAS,iBAAiB,MAAM;AAAA,MAClC;AACA,WAAK,UAAU,IAAI,MAAM,IAAI,QAAQ;AACrC,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,SAAS,aAAa;AAC9B,WAAK,eAAe,MAAM,QAAQ;AAClC,aAAO,EAAE,MAAM,aAAa,UAAU,MAAM,SAAS;AAAA,IACvD;AAEA,QAAI,MAAM,SAAS,cAAc;AAC/B,WAAK,YAAY,MAAM;AACvB,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,SAAS,SAAS;AAC1B,WAAK,gBAAgB,MAAM;AAC3B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAA4C;AAC1C,UAAM,sBAAsB,KAAK,yBAAyB;AAC1D,QAAI,KAAK,kBAAkB,QAAW;AACpC,UAAI,KAAK,cAAc,OAAO,WAAW,GAAG;AAC1C,cAAM,WAAW;AAAA,UACf,GAAG;AAAA,UACH,OAAO,KAAK,cAAc;AAAA,UAC1B,aAAa,KAAK,cAAc;AAAA,QAClC;AACA,YAAI,KAAK,cAAc,cAAc,QAAW;AAC9C,mBAAS,YAAY,KAAK,cAAc;AAAA,QAC1C;AACA,eAAO;AAAA,MACT;AACA,aAAO,KAAK,mBAAmB,qBAAqB,KAAK,aAAa;AAAA,IACxE;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,2BAA4D;AAClE,UAAM,SAAiC,CAAC;AACxC,QAAI,KAAK,KAAK,SAAS,GAAG;AACxB,aAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAAA,IAC/C;AACA,eAAW,OAAO,KAAK,gBAAgB;AACrC,YAAM,YAAY,KAAK,cAAc,IAAI,GAAG,KAAK,EAAE,MAAM,GAAG;AAC5D,YAAM,KAAK,QAAQ,6BAA4B,sBAAsB,SAAY;AACjF,YAAM,UACJ,UAAU,YAAY,SAClB,EAAE,MAAM,aAAsB,MAAM,UAAU,KAAK,IACnD,EAAE,MAAM,aAAsB,MAAM,UAAU,MAAM,SAAS,UAAU,QAAQ;AACrF,aAAO,KAAK,OAAO,SAAY,UAAU,EAAE,GAAG,SAAS,GAAG,CAAC;AAAA,IAC7D;AACA,eAAW,MAAM,KAAK,eAAe;AACnC,YAAM,WAAW,KAAK,UAAU,IAAI,EAAE;AACtC,UAAI,aAAa,QAAW;AAC1B,cAAM,UAAoB;AAAA,UACxB,MAAM;AAAA,UACN,IAAI,SAAS;AAAA,UACb,UAAU;AAAA,YACR,MAAM,SAAS;AAAA,YACf,WAAW,eAAe,SAAS,aAAa;AAAA,UAClD;AAAA,QACF;AACA,YAAI,SAAS,WAAW,QAAW;AACjC,kBAAQ,SAAS,SAAS;AAAA,QAC5B;AACA,YAAI,SAAS,cAAc,QAAW;AACpC,kBAAQ,YAAY,SAAS;AAAA,QAC/B;AACA,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,WAA4C;AAAA,MAChD;AAAA,MACA,OAAO,MAAM,MAAM;AAAA,MACnB,aAAa;AAAA,IACf;AACA,QAAI,KAAK,cAAc,QAAW;AAChC,eAAS,YAAY,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,UAA0B;AAC/C,QAAI,CAAC,KAAK,UAAU,IAAI,SAAS,EAAE,GAAG;AACpC,WAAK,cAAc,KAAK,SAAS,EAAE;AAAA,IACrC;AACA,UAAM,UAA2B;AAAA,MAC/B,IAAI,SAAS;AAAA,MACb,MAAM,SAAS,SAAS;AAAA,MACxB,eAAe,KAAK,UAAU,SAAS,SAAS,aAAa,CAAC,CAAC;AAAA,IACjE;AACA,QAAI,SAAS,WAAW,QAAW;AACjC,cAAQ,SAAS,SAAS;AAAA,IAC5B;AACA,QAAI,SAAS,cAAc,QAAW;AACpC,cAAQ,YAAY,SAAS;AAAA,IAC/B;AACA,SAAK,UAAU,IAAI,SAAS,IAAI,OAAO;AAAA,EACzC;AAAA,EAEQ,mBACN,qBACA,eACiC;AACjC,UAAM,kBAAkB,oBAAI,IAAsB;AAClD,UAAM,sBAAsB,oBAAI,IAAsB;AACtD,eAAW,WAAW,oBAAoB,QAAQ;AAChD,UAAI,QAAQ,SAAS,aAAa;AAChC;AAAA,MACF;AACA,sBAAgB,IAAI,QAAQ,IAAI,OAAO;AACvC,UAAI,QAAQ,WAAW,QAAW;AAChC,4BAAoB,IAAI,QAAQ,QAAQ,OAAO;AAAA,MACjD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ,cAAc,OAAO,IAAI,CAAC,YAAY;AAC5C,YAAI,QAAQ,SAAS,eAAe,CAAC,qBAAqB,QAAQ,SAAS,SAAS,GAAG;AACrF,iBAAO;AAAA,QACT;AAEA,cAAM,cACJ,gBAAgB,IAAI,QAAQ,EAAE,MAC7B,QAAQ,WAAW,SAAY,SAAY,oBAAoB,IAAI,QAAQ,MAAM;AACpF,YAAI,gBAAgB,UAAa,qBAAqB,YAAY,SAAS,SAAS,GAAG;AACrF,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,UAAU;AAAA,YACR,GAAG,QAAQ;AAAA,YACX,WAAW,YAAY,SAAS;AAAA,UAClC;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,gBACN,WACA,OACM;AACN,UAAM,cAAc,MAAM,eAAe;AACzC,QAAI,gBAAgB,UAAU,gBAAgB,WAAW;AACvD,gBAAU,QAAQ,MAAM;AAAA,IAC1B;AAEA,QAAI,MAAM,gBAAgB,UAAa,MAAM,cAAc,QAAW;AACpE;AAAA,IACF;AAEA,cAAU,YAAY,CAAC;AACvB,UAAM,OAAO,UAAU,QAAQ,GAAG,EAAE;AACpC,QAAI,gBAAgB,QAAQ;AAC1B,UAAI,MAAM,SAAS,QAAQ;AACzB,aAAK,QAAQ,MAAM;AACnB,YAAI,MAAM,cAAc,QAAW;AACjC,eAAK,YAAY,MAAM;AAAA,QACzB;AAAA,MACF,OAAO;AACL,kBAAU,QAAQ;AAAA,UAChB,MAAM,cAAc,SAChB,EAAE,MAAM,QAAQ,MAAM,MAAM,MAAM,IAClC,EAAE,MAAM,QAAQ,MAAM,MAAM,OAAO,WAAW,MAAM,UAAU;AAAA,QACpE;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,gBAAgB,WAAW;AAC7B,UAAI,MAAM,SAAS,WAAW;AAC5B,aAAK,QAAQ,MAAM;AAAA,MACrB,OAAO;AACL,kBAAU,QAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,MAAM,MAAM,CAAC;AAAA,MAC/D;AACA;AAAA,IACF;AAEA,QAAI,gBAAgB,aAAa;AAC/B,gBAAU,QAAQ,KAAK,EAAE,MAAM,aAAa,MAAM,MAAM,MAAM,CAAC;AAC/D;AAAA,IACF;AAEA,cAAU,QAAQ,KAAK,EAAE,MAAM,YAAY,MAAM,MAAM,MAAM,CAAC;AAAA,EAChE;AACF;AAEA,SAAS,oBACP,OACiB;AACjB,QAAM,SAA0B,EAAE,MAAM,mBAAmB,OAAO,MAAM,MAAM;AAC9E,MAAI,MAAM,OAAO,OAAW,QAAO,KAAK,MAAM;AAC9C,MAAI,MAAM,gBAAgB,OAAW,QAAO,cAAc,MAAM;AAChE,MAAI,MAAM,cAAc,OAAW,QAAO,YAAY,MAAM;AAC5D,SAAO;AACT;AAEA,SAAS,qBAAqB,OAAyB;AACrD,MAAI,UAAU,UAAa,UAAU,MAAM;AACzC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,KAAK,EAAE,WAAW;AAAA,EACjC;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,WAAW;AAAA,EAC1B;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,OAAO,OAAO,KAAK,EAAE,MAAM,CAAC,SAAS,SAAS,MAAS;AAAA,EAChE;AACA,SAAO;AACT;AAEA,SAAS,eAAe,MAAyB;AAC/C,MAAI,KAAK,KAAK,EAAE,WAAW,GAAG;AAC5B,WAAO,CAAC;AAAA,EACV;AACA,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACzSO,SAAS,QAAQ,MAAc,OAA0C;AAC9E,MAAI,MAAM,SAAS,cAAc;AAC/B,WAAO,EAAE,MAAM,cAAc,MAAM,OAAO,MAAM,MAAM;AAAA,EACxD;AACA,MAAI,MAAM,SAAS,mBAAmB;AACpC,UAAM,SAA2B,EAAE,MAAM,mBAAmB,MAAM,OAAO,MAAM,MAAM;AACrF,QAAI,MAAM,OAAO,OAAW,QAAO,KAAK,MAAM;AAC9C,QAAI,MAAM,gBAAgB,OAAW,QAAO,cAAc,MAAM;AAChE,QAAI,MAAM,cAAc,OAAW,QAAO,YAAY,MAAM;AAC5D,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,aAAa,MAAM,UAAU,MAAM,SAAS;AAC7D;AAEO,SAAS,uBAAuB,MAAuB;AAC5D,SACE,SAAS,gBACT,SAAS,qBACT,SAAS,qBACT,SAAS;AAEb;;;ACUA,IAAM,wBAAwB,uBAAO,IAAI,yBAAyB;AAoC3D,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YACmB,OACA,YACA,WACA,YACA,aACA,oBACA,QACjB;AAPiB;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAPgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGnB,MAAM,QACJ,WACA,UACA,eACA,aACuB;AACvB,WAAO,mBAAmB,WAAW,KAAK,aAAa,OAAO,aAAa;AACzE,YAAM,OAAO,KAAK,UAAU,SAAS,SAAS,aAAa,CAAC,CAAC;AAC7D,YAAM,iBAAiB,WAAW,OAAO,WAAW;AACpD,YAAM,WAAyB;AAAA,QAC7B,UAAU,SAAS,SAAS;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AACA,UAAI,SAAS,WAAW,QAAW;AACjC,iBAAS,aAAa,SAAS;AAAA,MACjC;AACA,YAAM,OAAO,KAAK,MAAM,QAAQ,SAAS,SAAS,IAAI;AACtD,YAAM,iBAAiB,aAAa,iBAAiB;AAAA,QACnD,CAAC,eAAe,WAAW,SAAS,SAAS,SAAS;AAAA,MACxD;AACA,YAAM,eAAe,kBAAkB,IAAI;AAE3C,YAAM,gBAAgB,MAAM,aAAa,aAAa;AAAA,QACpD,QAAQ;AAAA,UACN,MAAM,YAAY;AAAA,UAClB;AAAA,UACA,UAAU,SAAS,SAAS;AAAA,UAC5B;AAAA,UACA;AAAA,UACA,YAAY,SAAS;AAAA,UACrB;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI;AACJ,UAAI,UAAU;AACd,UAAI,gBAAgB;AAEpB,YAAM,aAAa,MAAM,KAAK,YAAY,aAAa;AAAA,QACrD,GAAG;AAAA,QACH,MAAM;AAAA,MACR,CAAC;AACD,UAAI,YAAY,SAAS,aAAa;AACpC,cAAM;AAAA,UACJ;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QACb;AACA,cAAM,KAAK,OAAO,WAAW,MAAM;AAAA,MACrC;AACA,UAAI,YAAY,SAAS,QAAQ;AAC/B,iBAAS,WAAW;AACpB,kBAAU;AAAA,MACZ,OAAO;AACL,YAAI;AACJ,YAAI;AACF,0BAAgB,MAAM,KAAK,wBAAwB;AAAA,YACjD,GAAG;AAAA,YACH,MAAM,aAAa,QAAQ;AAAA,YAC3B,cAAc;AAAA,UAChB,CAAC;AACD,mBAAS,OAAO;AAEhB,6BACE,YAAY,SAAS,qBACjB,MAAM,KAAK,gBAAgB,MAAM,UAAU,UAAU,IACnD,MAAM,KAAK,qBAAqB,MAAM,QAAQ,KAAM,EAAE,UAAU,KAAK;AAC7E,cAAI,CAAC,iBAAiB,UAAU;AAC9B,qBAAS,iBAAiB;AAC1B,sBAAU;AAAA,UACZ,OAAO;AACL,qBAAS,MAAM,KAAK;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,4BAAgB,SAAS;AAAA,UAC3B;AAAA,QACF,SAAS,OAAO;AACd,gBAAM;AAAA,YACJ;AAAA,YACA,aAAa;AAAA,YACb;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,gBAAM;AAAA,QACR;AAAA,MACF;AAEA,UAAI,SAAS,iBAAiB,MAAM;AACpC,UAAI,mBAAmB,6BAA6B,MAAM;AAC1D,UAAI,KAAK,MAAM,0BAA0B,SAAS,SAAS,IAAI,GAAG;AAChE,cAAM,wBAAwB,MAAM,KAAK,yBAAyB;AAAA,UAChE,GAAG;AAAA,UACH,MAAM;AAAA,UACN;AAAA,UACA,gBAAgB;AAAA,UAChB;AAAA,UACA,0BAA0B;AAAA,UAC1B,MAAM,aAAa,QAAQ;AAAA,QAC7B,CAAC;AACD,YAAI,0BAA0B,QAAW;AACvC,mBAAS;AACT,mBAAS,iBAAiB,qBAAqB;AAC/C,6BAAmB,6BAA6B,qBAAqB;AAAA,QACvE;AAAA,MACF;AAEA,YAAM,eAAe,MAAM,KAAK,YAAY,eAAe;AAAA,QACzD,GAAG;AAAA,QACH,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AACD,YAAM,eAAe,IAAI;AAAA,QACvB,MAAM,aAAa,QAAQ;AAAA,QAC3B;AAAA,QACA,UAAU,SAAS,SAAS;AAAA,QAC5B;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,SAAS;AAAA,MACvB,CAAC;AACD,UAAI,cAAc,SAAS,aAAa;AACtC,cAAM,KAAK,OAAO,aAAa,MAAM;AAAA,MACvC;AAEA,YAAM,gBAAwC;AAAA,QAC5C,MAAM;AAAA,QACN,UAAU,SAAS,SAAS;AAAA,QAC5B;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AACA,UAAI,SAAS,WAAW,QAAW;AACjC,sBAAc,aAAa,SAAS;AAAA,MACtC;AACA,iBAAW,aAAa;AACxB,aAAO,YAAY,WAAW,SAAS,IAAI,QAAQ,SAAS,MAAM;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,oBACZ,UACA,UACA,eACA,cACA,eACA,aACA,eACA,uBAAuB,MACQ;AAC/B,UAAM,iBAAiB,uBACnB,MAAM,KAAK,wBAAwB;AAAA,MACjC,GAAG;AAAA,MACH,MAAM;AAAA,MACN,MAAM,aAAa,QAAQ;AAAA,MAC3B;AAAA,IACF,CAAC,IACD;AACJ,aAAS,OAAO;AAChB,QAAI;AACF,aAAO,MAAM,KAAK,MAAM,SAAS,SAAS,SAAS,MAAM,gBAAgB;AAAA,QACvE,iBAAiB,OAAO,UAAU;AAChC,gBAAM,eAAe;AAAA,YACnB,QAAQ;AAAA,cACN,MAAM,aAAa,QAAQ;AAAA,cAC3B;AAAA,cACA,UAAU,SAAS,SAAS;AAAA,cAC5B,gBAAgB,SAAS;AAAA,cACzB,MAAM;AAAA,cACN,YAAY,SAAS;AAAA,cACrB;AAAA,YACF,CAAC;AAAA,UACH;AACA,gBAAM,UAAU,sBAAsB,UAAU,SAAS,gBAAgB,KAAK;AAC9E,cAAI,YAAY,QAAW;AACzB,4BAAgB,OAAO;AAAA,UACzB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,cAAc,MAAM,KAAK,YAAY,cAAc;AAAA,QACvD,GAAG;AAAA,QACH,MAAM;AAAA,QACN;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AACD,YAAM,eAAe,MAAM;AAAA,QACzB,MAAM,aAAa,QAAQ;AAAA,QAC3B;AAAA,QACA,UAAU,SAAS,SAAS;AAAA,QAC5B,gBAAgB,SAAS;AAAA,QACzB,MAAM;AAAA,QACN,GAAI,SAAS,WAAW,UAAa,EAAE,YAAY,SAAS,OAAO;AAAA,QACnE;AAAA,MACF,CAAC;AACD,UAAI,aAAa,SAAS,aAAa;AACrC,cAAM,KAAK,OAAO,YAAY,MAAM;AAAA,MACtC;AACA,aAAO,iBAAiB,QAAQ,MAAM,SAAS,IAAI,OAAO,KAAK;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,MAAc,yBACZ,MAC2C;AAC3C,QAAI,SAAS,KAAK;AAClB,QAAI,mBAAmB,KAAK;AAC5B,QAAI,WAAW;AACf,eAAW,cAAc,KAAK,kBAAkB,GAAG;AACjD,YAAM,oBAAoB,MAAM,WAAW,eAAe;AAAA,QACxD,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,sBAAsB,QAAW;AACnC,cAAM,aAAa,oCAAoC,iBAAiB;AACxE,YAAI,WAAW,WAAW,QAAW;AACnC,mBAAS,WAAW;AACpB,6BAAmB;AAAA,QACrB;AACA,YAAI,WAAW,qBAAqB,QAAW;AAC7C,6BAAmB,WAAW;AAC9B,mBAAS,wBAAwB,WAAW,gBAAgB;AAAA,QAC9D;AACA,mBAAW;AAAA,MACb;AACA,YAAM,oBAAoB,MAAM,WAAW,WAAW;AAAA,QACpD,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,sBAAsB,QAAW;AACnC,iBAAS;AACT,2BAAmB;AACnB,mBAAW;AAAA,MACb;AAAA,IACF;AACA,WAAO,WAAY,oBAAoB,SAAU;AAAA,EACnD;AAAA,EAEA,MAAc,wBACZ,MACiB;AACjB,QAAI,UAAU,KAAK;AACnB,eAAW,cAAc,KAAK,kBAAkB,GAAG;AACjD,YAAM,cAAc,MAAM,WAAW,cAAc;AAAA,QACjD,GAAG;AAAA,QACH,MAAM;AAAA,MACR,CAAC;AACD,UAAI,aAAa,SAAS,QAAW;AACnC,kBACE,OAAO,YAAY,SAAS,WACxB,YAAY,OACZ,KAAK,UAAU,YAAY,IAAI;AAAA,MACvC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,oBAAuC;AAC7C,WAAO,CAAC,GAAG,KAAK,MAAM,aAAa,GAAG,KAAK,kBAAkB;AAAA,EAC/D;AAAA,EAEA,MAAc,qBACZ,MACA,UAC+E;AAC/E,QAAI,MAAM,aAAa,QAAW;AAChC,aAAO;AAAA,IACT;AACA,UAAM,SAAS,KAAK;AACpB,UAAM,UAAU,gBAAgB,MAAM,UAAU,KAAK,OAAO,KAAK,UAAU;AAC3E,UAAM,WAAW,MAAM,OAAO,KAAK,OAAO;AAC1C,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,UAAU,KAAK;AAAA,IAC1B;AAEA,UAAM,SAAS,MAAM,oBAAoB,OAAO,QAAQ,OAAO;AAC/D,UAAM,gBAAgB,MAAM,oBAAoB,OAAO,eAAe,OAAO;AAC7E,WAAO,KAAK,gBAAgB,MAAM,UAAU,QAAQ,EAAE,QAAQ,cAAc,CAAC,CAAC;AAAA,EAChF;AAAA,EAEA,MAAc,gBACZ,MACA,UACA,SACmE;AACnE,UAAM,UAAU,QAAQ;AAAA,MACtB,GAAG,gBAAgB,MAAM,UAAU,KAAK,OAAO,KAAK,UAAU;AAAA,MAC9D,QAAQ,QAAQ;AAAA,MAChB,eAAe,QAAQ;AAAA,IACzB,CAAC;AACD,QAAI,KAAK,cAAc,QAAW;AAChC,YAAM,IAAI,0BAA0B,OAAO;AAAA,IAC7C;AAEA,UAAM,WAAW,0BAA0B,MAAM,KAAK,UAAU,QAAQ,OAAO,CAAC;AAChF,QAAI,SAAS,UAAU;AACrB,aAAO,EAAE,UAAU,KAAK;AAAA,IAC1B;AACA,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QACE,SAAS,iBACT,SAAS,UACT,QAAQ,iBACR;AAAA,IACJ;AAAA,EACF;AACF;AAEA,SAAS,gBACP,MACA,UACA,OACA,KACqB;AACrB,QAAM,gBAAgB,cAAc,SAAS,IAAI;AACjD,QAAM,aAAa,MAAM,oBAAoB,aAAa,KAAK;AAC/D,SAAO,QAAQ;AAAA,IACb,UAAU,SAAS;AAAA,IACnB,MAAM;AAAA,IACN,SAAS,SAAS;AAAA,IAClB,YAAY,SAAS;AAAA,IACrB,gBAAgB,SAAS;AAAA,IACzB,KAAK,QAAQ;AAAA,MACX,SAAS,MAAM;AAAA,MACf,OAAO,IAAI;AAAA,MACX,WAAW,IAAI;AAAA,MACf,UAAU,IAAI;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,0BAA0B,UAIjC;AACA,MAAI,OAAO,aAAa,WAAW;AACjC,WAAO,EAAE,UAAU,SAAS;AAAA,EAC9B;AACA,SAAO;AACT;AAEA,eAAe,oBACb,OACA,SAC6B;AAC7B,SAAO,OAAO,UAAU,aAAa,MAAM,OAAoC,IAAI;AACrF;AAEA,SAAS,oCAAoC,QAG3C;AACA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,EAAE,OAAO;AAAA,EAClB;AACA,SAAO,UAAU,CAAC;AACpB;AAEA,SAAS,kBAAkB,MAAmD;AAC5E,MAAI,SAAS,QAAW;AACtB,WAAO;AAAA,EACT;AACA,QAAM,WAAY,KAA+C,qBAAqB;AACtF,QAAM,cACJ,OAAO,aAAa,YAAY,aAAa,OACxC,WACD;AACN,SAAO;AAAA,IACL,kBAAkB,KAAK,aAAa;AAAA,IACpC,GAAI,OAAO,aAAa,eAAe,YAAY,YAAY,WAAW,SAAS,IAC/E,EAAE,eAAe,YAAY,WAAW,IACxC,CAAC;AAAA,EACP;AACF;AAEA,eAAe,gBACb,eACA,MACA,UACA,gBACA,MACA,OACe;AACf,QAAM,eAAe,MAAM;AAAA,IACzB,MAAM,QAAQ;AAAA,IACd;AAAA,IACA,UAAU,SAAS,SAAS;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,SAAS;AAAA,EACvB,CAAC;AACH;AAEA,SAAS,iBAAiB,QAAsC;AAC9D,SAAO,OAAO,WAAW,WAAW,SAAS,wBAAwB,MAAM;AAC7E;AAEA,SAAS,6BACP,QACiC;AACjC,SAAO,OAAO,WAAW,WAAW,SAAY;AAClD;AAEA,SAAS,sBACP,UACA,gBACA,OACmC;AACnC,MAAI,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,WAAW,GAAG;AACnE,WAAO;AAAA,EACT;AACA,SAAO,QAAQ;AAAA,IACb,MAAM;AAAA,IACN,UAAU,SAAS,SAAS;AAAA,IAC5B,YAAY,SAAS;AAAA,IACrB;AAAA,IACA,SAAS,MAAM;AAAA,IACf,WAAW,MAAM;AAAA,IACjB,OAAO,MAAM;AAAA,EACf,CAAC;AACH;;;ACzgBO,SAAS,eAAe,SAA0C;AACvE,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,QAAQ,QAAQ,QAAQ,CAAC,SAAU,KAAK,SAAS,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAE,EAAE,KAAK,IAAI;AAAA,EAC/F;AAEA,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,QAAQ,QACZ,QAAQ,CAAC,SAAS,KAAK,QAAQ,QAAQ,CAAC,SAAU,KAAK,SAAS,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAE,CAAC,EAC3F,KAAK,IAAI;AAAA,EACd;AAEA,SAAO;AACT;;;ACMA,eAAsB,uBACpB,eACA,MACA,qBACkC;AAClC,QAAM,eAAmC,CAAC;AAC1C,aAAW,gBAAgB,eAAe;AACxC,QAAI;AACF,YAAM,cAAc,MAAM,aAAa,SAAS,SAAS,IAAI;AAC7D,UAAI,gBAAgB,QAAW;AAC7B,qBAAa,KAAK,WAAW;AAAA,MAC/B;AAAA,IACF,SAAS,OAAO;AACd,UAAI,uBAAuB,aAAa,wBAAwB,MAAM;AACpE,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,IAAI,wBAAwB,cAAc,mBAAmB;AACtE;AAEO,IAAM,0BAAN,MAA8B;AAAA,EAGnC,YACmB,cACA,qBACjB;AAFiB;AACA;AAEjB,SAAK,QAAQ,aAAa,KAAK,CAAC,aAAa,SAAS,UAAU,MAAS,GAAG;AAAA,EAC9E;AAAA,EAJmB;AAAA,EACA;AAAA,EAJV;AAAA,EAST,MAAM,gBAAgB,MAAoE;AACxF,UAAM,sBAAiD,CAAC;AACxD,eAAW,eAAe,KAAK,cAAc;AAC3C,UAAI,YAAY,oBAAoB,QAAW;AAC7C;AAAA,MACF;AACA,UAAI;AACF,cAAM,qBAAqB,MAAM,YAAY,gBAAgB,IAAI;AACjE,YAAI,uBAAuB,QAAW;AACpC,8BAAoB,KAAK,kBAAkB;AAAA,QAC7C;AAAA,MACF,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AACA,WAAO,IAAI,0BAA0B,qBAAqB,KAAK,mBAAmB;AAAA,EACpF;AAAA,EAEA,MAAM,UAAU,MAAwD;AACtE,UAAM,gBAAqC,CAAC;AAC5C,eAAW,eAAe,KAAK,cAAc;AAC3C,UAAI,YAAY,cAAc,QAAW;AACvC;AAAA,MACF;AACA,UAAI;AACF,cAAM,eAAe,MAAM,YAAY,UAAU,IAAI;AACrD,YAAI,iBAAiB,QAAW;AAC9B,wBAAc,KAAK,YAAY;AAAA,QACjC;AAAA,MACF,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AACA,WAAO,IAAI,oBAAoB,eAAe,KAAK,mBAAmB;AAAA,EACxE;AAAA,EAEA,MAAM,IAAI,MAAsC;AAC9C,eAAW,eAAe,KAAK,cAAc;AAC3C,UAAI;AACF,cAAM,YAAY,IAAI,IAAI;AAAA,MAC5B,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAwC;AAClD,eAAW,eAAe,KAAK,cAAc;AAC3C,UAAI,YAAY,UAAU,QAAW;AACnC;AAAA,MACF;AACA,UAAI;AACF,cAAM,YAAY,MAAM,IAAI;AAAA,MAC9B,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAwC;AAClD,eAAW,eAAe,KAAK,cAAc;AAC3C,UAAI,YAAY,UAAU,QAAW;AACnC;AAAA,MACF;AACA,UAAI;AACF,cAAM,YAAY,MAAM,IAAI;AAAA,MAC9B,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAY,OAAsB;AACxC,QAAI,KAAK,qBAAqB;AAC5B,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YACmB,qBACA,qBACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAFgB;AAAA,EACA;AAAA,EAGnB,MAAM,IAAI,MAA6C;AACrD,eAAW,YAAY,KAAK,qBAAqB;AAC/C,UAAI;AACF,cAAM,SAAS,IAAI,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAA+C;AACzD,eAAW,YAAY,KAAK,qBAAqB;AAC/C,UAAI,SAAS,UAAU,QAAW;AAChC;AAAA,MACF;AACA,UAAI;AACF,cAAM,SAAS,MAAM,IAAI;AAAA,MAC3B,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAgD;AAC3D,eAAW,YAAY,KAAK,qBAAqB;AAC/C,UAAI,SAAS,WAAW,QAAW;AACjC;AAAA,MACF;AACA,UAAI;AACF,cAAM,SAAS,OAAO,IAAI;AAAA,MAC5B,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAY,OAAsB;AACxC,QAAI,KAAK,qBAAqB;AAC5B,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YACmB,eACA,qBACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAFgB;AAAA,EACA;AAAA,EAGnB,MAAM,YAAY,MAA+C;AAC/D,eAAW,YAAY,KAAK,eAAe;AACzC,UAAI,SAAS,gBAAgB,QAAW;AACtC;AAAA,MACF;AACA,UAAI;AACF,cAAM,SAAS,YAAY,IAAI;AAAA,MACjC,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,MAAuC;AAC/C,eAAW,YAAY,KAAK,eAAe;AACzC,UAAI;AACF,cAAM,SAAS,IAAI,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAyC;AACnD,eAAW,YAAY,KAAK,eAAe;AACzC,UAAI,SAAS,UAAU,QAAW;AAChC;AAAA,MACF;AACA,UAAI;AACF,cAAM,SAAS,MAAM,IAAI;AAAA,MAC3B,SAAS,OAAO;AACd,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAY,OAAsB;AACxC,QAAI,KAAK,qBAAqB;AAC5B,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;AC/KO,IAAM,gBAAN,MAAM,eAA2D;AAAA,EAc9D,YACW,OACT,eACR,iBAAgC,CAAC,GAChB,gBAA2C,QAC5D;AAJiB;AACT;AAES;AAEjB,SAAK,cAAc;AACnB,SAAK,eAAe,MAAM,mBAAmB;AAC7C,SAAK,aAAa,MAAM;AACxB,SAAK,kBAAkB,MAAM;AAC7B,SAAK,oBAAoB,CAAC,GAAG,MAAM,UAAU;AAC7C,SAAK,iBAAiB,IAAI,oBAAoB,OAAO,eAAe,cAAc;AAAA,EACpF;AAAA,EAXmB;AAAA,EACT;AAAA,EAES;AAAA,EAjBX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAgD,CAAC;AAAA,EACjD,cAAc;AAAA,EACd;AAAA,EACA,qBAAwC,CAAC;AAAA,EAChC,mBAAkC,CAAC;AAAA,EAC5C,WAAuE;AAAA,EAC9D;AAAA,EAgBjB,OAAO,UACL,OACA,QACA,UAAyD,CAAC,GACxC;AAClB,UAAM,aAAa,qBAAqB,MAAM;AAC9C,WAAO,IAAI,eAAc,OAAO,WAAW,QAAQ,WAAW,SAAS,QAAQ,aAAa;AAAA,EAC9F;AAAA,EAEA,SAAS,UAAwB;AAC/B,SAAK,eAAe;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,MAAwB;AAC/B,SAAK,aAAa;AAClB,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,SAAqC;AAC7C,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,UAAsC;AAC/C,SAAK,oBAAoB,wBAAwB,KAAK,mBAAmB,QAAQ;AACjF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAwB;AAClC,WAAO,KAAK,SAAS,IAAI;AAAA,EAC3B;AAAA,EAEA,oBAAoB,aAA2B;AAC7C,SAAK,cAAc,KAAK,IAAI,GAAG,WAAW;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,YAAmC;AAChD,SAAK,mBAAmB,KAAK,UAAU;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,aAAsC;AACpD,SAAK,mBAAmB,KAAK,GAAG,WAAW;AAC3C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,YAAkC;AACnD,WAAO,KAAK,eAAe,UAAU;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,aAAqC;AACvD,WAAO,KAAK,gBAAgB,WAAW;AAAA,EACzC;AAAA,EAEA,UAAU,OAAgC;AACxC,SAAK,eAAe;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAsD;AAC1D,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO;AAAA,IACT;AAEA,SAAK,iBAAiB,KAAK,GAAG,uBAAuB,KAAK,CAAC;AAC3D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAgC;AACpC,SAAK,SAAS;AACd,UAAM,QAAQ,WAAW,OAAO,WAAW;AAC3C,QAAI,QAAQ,MAAM,MAAM;AACxB,QAAI,eAAe;AACnB,QAAI,aAAa,KAAK;AACtB,QAAI,cAA6B,CAAC,KAAK,aAAa;AACpD,UAAM,eAAe,MAAM,KAAK,kBAAkB;AAElD,QAAI;AACF,YAAM,cAAc,MAAM,mBAAmB,KAAK,mBAAmB;AAAA,QACnE,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,WAAW,gBAAgB,KAAK,aAAa;AAAA,QAC7C,KAAK,KAAK,oBAAoB,KAAK;AAAA,MACrC,CAAC;AACD,iBAAW,YAAY,YAAY,WAAW;AAC5C,cAAM,KAAK,wBAAwB,UAAU,YAAY;AAAA,MAC3D;AACA,WAAK,gBAAgB,YAAY;AACjC,UAAI,YAAY,SAAS;AACvB,cAAM,SAAS,YAAY,WAAW;AACtC,cAAM,SAAyB;AAAA,UAC7B;AAAA,UACA,OAAO,MAAM,MAAM;AAAA,UACnB,UAAU,CAAC,KAAK,eAAe,QAAQ,UAAU,MAAM,CAAC;AAAA,UACxD,YAAY,CAAC,GAAG,KAAK,kBAAkB;AAAA,QACzC;AACA,cAAM,aAAa,IAAI,MAAM;AAC7B,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AAEA,oBAAc,CAAC,KAAK,aAAa;AACjC,WAAK,cAAc,MAAM,KAAK,eAAe,WAAW,OAAO,WAAW;AAC1E,YAAM,sBAAsB,KAAK,eAAe,oBAAoB,WAAW;AAC/E,YAAM,KAAK,gBAAgB,WAAW;AACtC,aAAO,gBAAgB,KAAK,eAAe,GAAG;AAC5C,cAAM,SAAS,YAAY,GAAG,EAAE;AAChC,YAAI,WAAW,QAAW;AACxB,gBAAM,IAAI,MAAM,6CAA6C;AAAA,QAC/D;AAEA,qBAAa;AACb,wBAAgB;AAEhB,cAAM,oBAAoB,CAAC,GAAG,KAAK,aAAa,GAAG,YAAY,MAAM,GAAG,EAAE,CAAC;AAC3E,cAAM,KAAK,iBAAiB,cAAc,QAAQ,mBAAmB,WAAW;AAChF,cAAM,KAAK,sBAAsB,QAAQ,mBAAmB,WAAW;AAEvE,cAAM,UAAU,eAAe,MAAM;AACrC,cAAM,iBAAiB,MAAM,oBAAoB,KAAK,OAAO,OAAO;AACpE,cAAM,WAAW,MAAM,qBAAqB,KAAK,OAAO,OAAO;AAC/D,YAAI,UAAU,IAAI,yBAAyB,KAAK,MAAM,OAAO,MAAM,EAChE,aAAa,KAAK,MAAM,YAAY,EACpC,SAAS,iBAAiB,EAC1B,UAAU,CAAC,GAAG,KAAK,MAAM,eAAe,GAAG,cAAc,CAAC,EAC1D,MAAM,QAAQ,EACd,YAAY,KAAK,MAAM,WAAW,EAClC,UAAU,KAAK,MAAM,SAAS,EAC9B,iBAAiB,KAAK,MAAM,gBAAgB,EAC5C,WAAW,KAAK,MAAM,UAAU,EAChC,aAAa,KAAK,MAAM,YAAY,EACpC,MAAM;AACT,kBAAW,MAAM,KAAK;AAAA,UACpB;AAAA,UACA;AAAA,QACF;AAEA,YAAI;AACJ,YAAI;AACF,qBAAW,MAAM,KAAK,cAAc,SAAS,cAAc,YAAY;AAAA,QACzE,SAAS,OAAO;AACd,gBAAM,KAAK,uBAAuB,QAAQ,OAAO,WAAW;AAC5D,gBAAM;AAAA,QACR;AACA,mBAAW,MAAM,KAAK,iCAAiC,SAAS,UAAU,YAAY;AACtF,gBAAQ,MAAM,IAAI,OAAO,SAAS,KAAK;AACvC,cAAM,KAAK,0BAA0B,QAAQ,UAAU,WAAW;AAClE,cAAM,KAAK,eAAe,cAAc,UAAU,WAAW;AAE7D,cAAM,YAAY,SAAS,OAAO;AAAA,UAChC,CAAC,SAA2B,KAAK,SAAS;AAAA,QAC5C;AACA,cAAM,mBAAmB,QAAQ,UAAU,SAAS,QAAQ,SAAS,SAAS;AAC9E,oBAAY,KAAK,gBAAgB;AACjC,YAAI,UAAU,WAAW,GAAG;AAC1B,cAAI,KAAK,iBAAiB,SAAS,GAAG;AACpC,kBAAM,KAAK,eAAe;AAAA,cACxB;AAAA,cACA;AAAA,cACA,CAAC,gBAAgB;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AACA,cACE,MAAM,KAAK,sBAAsB,OAAO,cAAc,aAAa,mBAAmB,GACtF;AACA,kBAAM,KAAK,eAAe,oBAAoB,OAAO,cAAc,mBAAmB;AACtF;AAAA,UACF;AAEA,gBAAM,gBAAgB,MAAM,KAAK;AAAA,YAC/B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,qBAAW,cAAc;AACzB,gBAAM,wBAAwB,QAAQ,UAAU,SAAS,QAAQ,SAAS,SAAS;AACnF,sBAAY,YAAY,SAAS,CAAC,IAAI;AACtC,gBAAM,KAAK,eAAe;AAAA,YACxB;AAAA,YACA;AAAA,YACA,CAAC,qBAAqB;AAAA,YACtB;AAAA,UACF;AACA,gBAAM,SAAyB;AAAA,YAC7B,QAAQ,cAAc;AAAA,YACtB;AAAA,YACA,UAAU,CAAC,GAAG,WAAW;AAAA,YACzB,OAAO,aAAa;AAAA,YACpB,YAAY,CAAC,GAAG,KAAK,kBAAkB;AAAA,UACzC;AACA,gBAAM,KAAK,cAAc,QAAQ,WAAW;AAC5C,gBAAM,aAAa,IAAI,MAAM;AAC7B,gBAAM,KAAK,eAAe;AAAA,YACxB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,eAAK,WAAW;AAChB,iBAAO;AAAA,QACT;AAEA,cAAM,KAAK,eAAe;AAAA,UACxB;AAAA,UACA;AAAA,UACA,CAAC,gBAAgB;AAAA,UACjB;AAAA,QACF;AACA,cAAM,cAAc,MAAM,KAAK;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN;AAAA,YACA,iBAAiB,QAAQ;AAAA,UAC3B;AAAA,QACF;AACA,cAAM,cAAc,QAAQ,KAAK,WAAW;AAC5C,oBAAY,KAAK,WAAW;AAC5B,cAAM,KAAK,eAAe;AAAA,UACxB;AAAA,UACA;AAAA,UACA,CAAC,WAAW;AAAA,UACZ;AAAA,QACF;AACA,cAAM,KAAK,sBAAsB,OAAO,cAAc,aAAa,mBAAmB;AACtF,cAAM,KAAK,eAAe,oBAAoB,OAAO,cAAc,mBAAmB;AAAA,MACxF;AAEA,YAAM,IAAI,cAAc,KAAK,cAAc,CAAC,GAAG,KAAK,aAAa,GAAG,WAAW,GAAG,UAAU;AAAA,IAC9F,SAAS,OAAO;AACd,YAAM,aAAa,MAAM,KAAK,gBAAgB,OAAO,OAAO,WAAW;AACvE,WAAK,WAAW,sBAAsB,uBAAuB,cAAc;AAC3E,YAAM,aAAa,MAAM,EAAE,OAAO,YAAY,OAAO,UAAU,CAAC,GAAG,WAAW,EAAE,CAAC;AACjF,YAAM,KAAK,eAAe,YAAY,OAAO,YAAY,WAAW;AACpE,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAO,SAA0C;AAC/C,QAAI,CAAC,KAAK,MAAM,MAAM,aAAa,aAAa,CAAC,2BAA2B,KAAK,MAAM,KAAK,GAAG;AAC7F,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AAEA,SAAK,SAAS;AACd,UAAM,QAAQ,WAAW,OAAO,WAAW;AAC3C,UAAM,OAAO,OAAO,UAAuD;AACzE,YAAM,KAAK,iBAAiB,OAAO,KAAK;AACxC,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,MAAM,MAAM;AACxB,QAAI,eAAe;AACnB,QAAI,aAAa,KAAK;AACtB,QAAI,cAA6B,CAAC,KAAK,aAAa;AACpD,UAAM,eAAe,MAAM,KAAK,kBAAkB;AAClD,UAAM,qBAAqB,4BAA4B,KAAK,iBAAiB;AAE7E,QAAI;AACF,YAAM,cAAc,MAAM,mBAAmB,KAAK,mBAAmB;AAAA,QACnE,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,WAAW,gBAAgB,KAAK,aAAa;AAAA,QAC7C,KAAK,KAAK,oBAAoB,KAAK;AAAA,MACrC,CAAC;AACD,iBAAW,YAAY,YAAY,WAAW;AAC5C,cAAM,KAAK,wBAAwB,UAAU,YAAY;AACzD,cAAM,MAAM,KAAK,EAAE,MAAM,sBAAsB,SAAS,CAAC;AAAA,MAC3D;AACA,WAAK,gBAAgB,YAAY;AACjC,UAAI,YAAY,SAAS;AACvB,cAAM,SAAS,YAAY,WAAW;AACtC,cAAM,SAAyB;AAAA,UAC7B;AAAA,UACA,OAAO,MAAM,MAAM;AAAA,UACnB,UAAU,CAAC,KAAK,eAAe,QAAQ,UAAU,MAAM,CAAC;AAAA,UACxD,YAAY,CAAC,GAAG,KAAK,kBAAkB;AAAA,QACzC;AACA,cAAM,aAAa,IAAI,MAAM;AAC7B,aAAK,WAAW;AAChB,cAAM,MAAM,KAAK;AAAA,UACf,MAAM;AAAA,UACN;AAAA,UACA,QAAQ,OAAO;AAAA,UACf,OAAO,OAAO;AAAA,UACd,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,QACrB,CAAC;AACD;AAAA,MACF;AAEA,oBAAc,CAAC,KAAK,aAAa;AACjC,WAAK,cAAc,MAAM,KAAK,eAAe,WAAW,OAAO,WAAW;AAC1E,YAAM,sBAAsB,KAAK,eAAe,oBAAoB,WAAW;AAC/E,YAAM,KAAK,gBAAgB,WAAW;AACtC,aAAO,gBAAgB,KAAK,eAAe,GAAG;AAC5C,cAAM,SAAS,YAAY,GAAG,EAAE;AAChC,YAAI,WAAW,QAAW;AACxB,gBAAM,IAAI,MAAM,6CAA6C;AAAA,QAC/D;AAEA,qBAAa;AACb,wBAAgB;AAEhB,cAAM,oBAAoB,CAAC,GAAG,KAAK,aAAa,GAAG,YAAY,MAAM,GAAG,EAAE,CAAC;AAC3E,cAAM,MAAM,KAAK;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,SAAS;AAAA,QACX,CAAC;AACD,cAAM,KAAK,iBAAiB,cAAc,QAAQ,mBAAmB,WAAW;AAChF,cAAM,KAAK,sBAAsB,QAAQ,mBAAmB,WAAW;AAEvE,cAAM,UAAU,eAAe,MAAM;AACrC,cAAM,iBAAiB,MAAM,oBAAoB,KAAK,OAAO,OAAO;AACpE,cAAM,WAAW,MAAM,qBAAqB,KAAK,OAAO,OAAO;AAC/D,YAAI,UAAU,IAAI,yBAAyB,KAAK,MAAM,OAAO,MAAM,EAChE,aAAa,KAAK,MAAM,YAAY,EACpC,SAAS,iBAAiB,EAC1B,UAAU,CAAC,GAAG,KAAK,MAAM,eAAe,GAAG,cAAc,CAAC,EAC1D,MAAM,QAAQ,EACd,YAAY,KAAK,MAAM,WAAW,EAClC,UAAU,KAAK,MAAM,SAAS,EAC9B,iBAAiB,KAAK,MAAM,gBAAgB,EAC5C,WAAW,KAAK,MAAM,UAAU,EAChC,aAAa,KAAK,MAAM,YAAY,EACpC,MAAM;AACT,kBAAW,MAAM,KAAK;AAAA,UACpB;AAAA,UACA;AAAA,QACF;AAEA,yCAAiC,KAAK,MAAM,OAAO,SAAS,EAAE,WAAW,KAAK,CAAC;AAC/E,cAAM,kBAAkB,KAAK,qBAAqB,SAAS,EAAE,QAAQ,KAAK,CAAC;AAC3E,cAAM,sBAAsB,MAAM,aAAa;AAAA,UAC7C,QAAQ;AAAA,YACN,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA,WAAW;AAAA,cACT,UAAU,KAAK,MAAM,MAAM;AAAA,cAC3B,cAAc,KAAK,MAAM,MAAM;AAAA,cAC/B,cAAc,KAAK,MAAM,MAAM;AAAA,YACjC;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,cAAc,IAAI,4BAA4B;AACpD,cAAM,sBAAsB,KAAK,IAAI;AACrC,YAAI;AACJ,cAAM,uBAAuB,KAAK,iCAAiC;AACnE,cAAM,qBAAqB,oBAAI,IAAY;AAC3C,YAAI;AACF,2BAAiB,SAAS,KAAK,MAAM,MAAM,iBAAiB,OAAO,GAAG;AACpE,gBAAI,iBAAiB,UAAa,uBAAuB,MAAM,IAAI,GAAG;AACpE,6BAAe,KAAK,IAAI,IAAI;AAAA,YAC9B;AACA,kBAAM,SAAS,YAAY,OAAO,KAAK;AACvC,gBAAI,MAAM,SAAS,SAAS;AAC1B,oBAAM,MAAM;AAAA,YACd;AACA,gBAAI,WAAW,QAAW;AACxB,oBAAM,oBAAoB,SAAS,EAAE,MAAM,cAAc,OAAO,OAAO,CAAC;AACxE,kBAAI,OAAO,SAAS,aAAa;AAC/B,mCAAmB,IAAI,OAAO,SAAS,EAAE;AAAA,cAC3C;AACA,oBAAM,eACJ,wBACC,uBACE,OAAO,SAAS,gBAAgB,OAAO,SAAS;AACrD,kBAAI,CAAC,cAAc;AACjB,sBAAM,MAAM,KAAK,QAAQ,cAAc,MAAM,CAAC;AAAA,cAChD;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,gBAAM,oBAAoB,MAAM,EAAE,MAAM,cAAc,MAAM,CAAC;AAC7D,gBAAM,KAAK,uBAAuB,QAAQ,OAAO,WAAW;AAC5D,gBAAM;AAAA,QACR;AAEA,YAAI,WAAW,YAAY,SAAS;AACpC,cAAM,oBAAoB;AAAA,UACxB,QAAQ;AAAA,YACN,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,mBAAW,MAAM,KAAK,iCAAiC,SAAS,UAAU,YAAY;AACtF,gBAAQ,MAAM,IAAI,OAAO,SAAS,KAAK;AACvC,cAAM,KAAK,0BAA0B,QAAQ,UAAU,WAAW;AAClE,cAAM,KAAK,eAAe,cAAc,UAAU,WAAW;AAE7D,cAAM,YAAY,SAAS,OAAO;AAAA,UAChC,CAAC,SAA2B,KAAK,SAAS;AAAA,QAC5C;AACA,YAAI,mBAAmB,QAAQ,UAAU,SAAS,QAAQ,SAAS,SAAS;AAC5E,oBAAY,KAAK,gBAAgB;AAEjC,YAAI,UAAU,WAAW,GAAG;AAC1B,cAAI,iBAAiB;AACrB,cAAI,CAAC,oBAAoB;AACvB,gBAAI,sBAAsB;AACxB,yBAAW,SAAS,qBAAqB,cAAc,QAAQ,GAAG;AAChE,sBAAM,MAAM,KAAK,KAAK;AAAA,cACxB;AAAA,YACF;AACA,kBAAM,MAAM,KAAK,EAAE,MAAM,YAAY,MAAM,cAAc,SAAS,CAAC;AACnE,6BAAiB;AAAA,UACnB;AACA,cAAI,KAAK,iBAAiB,SAAS,GAAG;AACpC,kBAAM,KAAK,eAAe;AAAA,cACxB;AAAA,cACA;AAAA,cACA,CAAC,gBAAgB;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AACA,cACE,MAAM,KAAK,sBAAsB,OAAO,cAAc,aAAa,mBAAmB,GACtF;AACA,kBAAM,KAAK,eAAe,oBAAoB,OAAO,cAAc,mBAAmB;AACtF;AAAA,UACF;AAEA,gBAAM,gBAAgB,MAAM,KAAK;AAAA,YAC/B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,qBAAW,YAAY,cAAc,WAAW;AAC9C,kBAAM,MAAM,KAAK,EAAE,MAAM,sBAAsB,SAAS,CAAC;AAAA,UAC3D;AACA,qBAAW,cAAc;AACzB,6BAAmB,QAAQ,UAAU,SAAS,QAAQ,SAAS,SAAS;AACxE,sBAAY,YAAY,SAAS,CAAC,IAAI;AACtC,gBAAM,KAAK,eAAe;AAAA,YACxB;AAAA,YACA;AAAA,YACA,CAAC,gBAAgB;AAAA,YACjB;AAAA,UACF;AACA,cAAI,CAAC,mBAAmB,wBAAwB,qBAAqB;AACnE,uBAAW,SAAS,qBAAqB,cAAc,QAAQ,GAAG;AAChE,oBAAM,MAAM,KAAK,KAAK;AAAA,YACxB;AAAA,UACF;AACA,cAAI,CAAC,gBAAgB;AACnB,kBAAM,MAAM,KAAK,EAAE,MAAM,YAAY,MAAM,cAAc,SAAS,CAAC;AAAA,UACrE;AAEA,gBAAM,SAAyB;AAAA,YAC7B,QAAQ,cAAc;AAAA,YACtB;AAAA,YACA,UAAU,CAAC,GAAG,WAAW;AAAA,YACzB,OAAO,aAAa;AAAA,YACpB,YAAY,CAAC,GAAG,KAAK,kBAAkB;AAAA,UACzC;AACA,gBAAM,KAAK,cAAc,QAAQ,WAAW;AAC5C,gBAAM,aAAa,IAAI,MAAM;AAC7B,gBAAM,KAAK,eAAe;AAAA,YACxB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,eAAK,WAAW;AAChB,gBAAM,MAAM,KAAK;AAAA,YACf,MAAM;AAAA,YACN;AAAA,YACA,QAAQ,OAAO;AAAA,YACf,OAAO,OAAO;AAAA,YACd,UAAU,OAAO;AAAA,YACjB,OAAO,OAAO;AAAA,YACd,YAAY,OAAO;AAAA,UACrB,CAAC;AACD;AAAA,QACF;AAEA,YAAI,sBAAsB;AACxB,qBAAW,SAAS,qBAAqB,cAAc,QAAQ,GAAG;AAChE,kBAAM,MAAM,KAAK,KAAK;AAAA,UACxB;AAAA,QACF,OAAO;AACL,qBAAW,YAAY,WAAW;AAChC,gBAAI,CAAC,mBAAmB,IAAI,SAAS,EAAE,GAAG;AACxC,oBAAM,MAAM,KAAK,EAAE,MAAM,aAAa,MAAM,cAAc,SAAS,CAAC;AAAA,YACtE;AAAA,UACF;AAAA,QACF;AACA,cAAM,KAAK,eAAe;AAAA,UACxB;AAAA,UACA;AAAA,UACA,CAAC,gBAAgB;AAAA,UACjB;AAAA,QACF;AACA,cAAM,MAAM,KAAK,EAAE,MAAM,YAAY,MAAM,cAAc,SAAS,CAAC;AAEnE,cAAM,mBAAmB,iBAA4C;AACrE,cAAM,qBAAqB,KAAK;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,WAAW;AACV,6BAAiB,QAAQ,MAAM;AAAA,UACjC;AAAA,UACA,CAAC,UAAU;AACT,6BAAiB,QAAQ,KAAK;AAAA,UAChC;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN;AAAA,YACA,iBAAiB,QAAQ;AAAA,UAC3B;AAAA,QACF;AACA,2BAAmB;AAAA,UACjB,MAAM,iBAAiB,MAAM;AAAA,UAC7B,CAAC,UAAmB,iBAAiB,MAAM,KAAK;AAAA,QAClD;AACA,yBAAiB,UAAU,kBAAkB;AAC3C,gBAAM,MAAM,KAAK,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC;AAAA,QACpD;AACA,cAAM,cAAc,MAAM;AAC1B,cAAM,cAAc,QAAQ,KAAK,WAAW;AAC5C,oBAAY,KAAK,WAAW;AAC5B,cAAM,KAAK,eAAe;AAAA,UACxB;AAAA,UACA;AAAA,UACA,CAAC,WAAW;AAAA,UACZ;AAAA,QACF;AACA,cAAM,KAAK,sBAAsB,OAAO,cAAc,aAAa,mBAAmB;AACtF,cAAM,KAAK,eAAe,oBAAoB,OAAO,cAAc,mBAAmB;AAAA,MACxF;AAEA,YAAM,IAAI,cAAc,KAAK,cAAc,CAAC,GAAG,KAAK,aAAa,GAAG,WAAW,GAAG,UAAU;AAAA,IAC9F,SAAS,OAAO;AACd,YAAM,aAAa,MAAM,KAAK,gBAAgB,OAAO,OAAO,WAAW;AACvE,WAAK,WAAW,sBAAsB,uBAAuB,cAAc;AAC3E,YAAM,aAAa,MAAM,EAAE,OAAO,YAAY,OAAO,UAAU,CAAC,GAAG,WAAW,EAAE,CAAC;AACjF,YAAM,KAAK,eAAe,YAAY,OAAO,YAAY,WAAW;AACpE,YAAM,MAAM,KAAK,EAAE,MAAM,SAAS,OAAO,WAAW,CAAC;AACrD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,iBAA6C;AAC3C,WAAO,iBAAiB,KAAK,OAAO,CAAC;AAAA,EACvC;AAAA,EAEA,MAAc,cACZ,SACA,MACA,cAC6B;AAC7B,qCAAiC,KAAK,MAAM,OAAO,OAAO;AAC1D,UAAM,kBAAkB,KAAK,qBAAqB,OAAO;AACzD,UAAM,sBAAsB,MAAM,aAAa;AAAA,MAC7C,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,UACT,UAAU,KAAK,MAAM,MAAM;AAAA,UAC3B,cAAc,KAAK,MAAM,MAAM;AAAA,UAC/B,cAAc,KAAK,MAAM,MAAM;AAAA,QACjC;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,MAAM,MAAM,WAAW,OAAO;AAC1D,YAAM,oBAAoB,IAAI,EAAE,MAAM,SAAS,CAAC;AAChD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,oBAAoB,MAAM,EAAE,MAAM,MAAM,CAAC;AAC/C,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,qBACN,SACA,UAA4C,CAAC,GACrB;AACxB,QAAI;AACF,aAAO,KAAK,MAAM,MAAM,eAAe,SAAS,OAAO;AAAA,IACzD,SAAS,OAAO;AACd,aAAO;AAAA,QACL,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,iBACZ,OACA,WACA,aACA,UACA,eACA,aAKuB;AACvB,UAAM,WAAW,IAAI;AAAA,MACnB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,QACE;AAAA,QACA,WAAW,KAAK,eAAe;AAAA,QAC/B,UAAU,KAAK,eAAe;AAAA,MAChC;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,CAAC,WAAW,KAAK,UAAU,aAAa,MAAM;AAAA,IAChD;AACA,WAAO,SAAS,QAAQ,WAAW,UAAU,eAAe,WAAW;AAAA,EACzE;AAAA,EAEA,MAAc,+BACZ,OACA,OACA,UACA,UACA,cAKC;AACD,UAAM,iBAAiB,yBAAyB,SAAS,MAAM;AAC/D,UAAM,SAAS,MAAM,oBAAoB,KAAK,mBAAmB;AAAA,MAC/D,YAAY;AAAA,MACZ,UAAU,CAAC,GAAG,KAAK,aAAa,GAAG,QAAQ;AAAA,MAC3C;AAAA,MACA,KAAK,KAAK,oBAAoB,KAAK;AAAA,IACrC,CAAC;AACD,eAAW,YAAY,OAAO,WAAW;AACvC,YAAM,KAAK,wBAAwB,UAAU,YAAY;AAAA,IAC3D;AACA,UAAM,SAAS,OAAO,UACjB,OAAO,WAAW,6CACnB,OAAO;AACX,QAAI,WAAW,gBAAgB;AAC7B,aAAO,EAAE,QAAQ,UAAU,WAAW,OAAO,UAAU;AAAA,IACzD;AACA,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,QACR,GAAG;AAAA,QACH,QAAQ,CAAC,iBAAiB,KAAK,MAAM,CAAC;AAAA,MACxC;AAAA,MACA,WAAW,OAAO;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAc,wBACZ,UACA,cACe;AACf,SAAK,mBAAmB,KAAK,QAAQ;AACrC,UAAM,aAAa,MAAM;AAAA,MACvB,MAAM;AAAA,MACN,OAAO,SAAS,WAAW,UAAU,YAAY;AAAA,MACjD,YAAY,4BAA4B,QAAQ;AAAA,IAClD,CAAC;AAAA,EACH;AAAA,EAEQ,oBAAoB,OAAoC;AAC9D,WAAO,QAAQ;AAAA,MACb,SAAS,KAAK,MAAM;AAAA,MACpB;AAAA,MACA,WAAW,KAAK,eAAe;AAAA,MAC/B,UAAU,KAAK,eAAe;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,oBAAsD;AAClE,UAAM,sBACJ,KAAK,cAAc,wBAAwB,QAC3C,KAAK,MAAM,UAAU,KAAK,CAAC,iBAAiB,aAAa,wBAAwB,IAAI;AACvF,WAAO;AAAA,MACL,KAAK,MAAM;AAAA,MACX;AAAA,QACE,WAAW,KAAK,MAAM;AAAA,QACtB,kBAAkB,KAAK,MAAM;AAAA,QAC7B,cAAc,KAAK,MAAM;AAAA,QACzB,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,iBAAiB,OAAe,OAAwC;AACpF,UAAM,eAAe,KAAK,MAAM;AAChC,QAAI,iBAAiB,QAAW;AAC9B;AAAA,IACF;AACA,QAAI,aAAa,QAAQ,YAAY,uBAAuB,MAAM,SAAS,oBAAoB;AAC7F;AAAA,IACF;AAEA,UAAM,OAAO,UAAU,QAAQ,MAAM,OAAO;AAC5C,UAAM,UAAU,MAAM,SAAS,qBAAqB,MAAM,UAAU,KAAK,MAAM;AAC/E,UAAM,YAAY,MAAM,SAAS,qBAAqB,MAAM,YAAY,KAAK,MAAM;AACnF,UAAM,aAAa,MAAM,OAAO;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,GAAG,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,MAC9B,GAAI,MAAM,SAAS,qBACf,QAAQ;AAAA,QACN,UAAU,MAAM;AAAA,QAChB,YAAY,MAAM;AAAA,QAClB,gBAAgB,MAAM;AAAA,MACxB,CAAC,IACD,CAAC;AAAA,MACL;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,sBACZ,QACA,SACA,aACe;AACf,UAAM,SAAS,MAAM,KAAK,YAAY,mBAAmB;AAAA,MACvD;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAM,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,aAA2C;AACvE,UAAM,SAAS,MAAM,KAAK,YAAY,aAAa;AAAA,MACjD,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,MACf,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAM,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,QAAwB,aAA2C;AAC7F,UAAM,SAAS,MAAM,KAAK,YAAY,WAAW;AAAA,MAC/C,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAM,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAc,gBACZ,OACA,OACA,aACkB;AAClB,UAAM,SAAS,MAAM,KAAK,YAAY,aAAa;AAAA,MACjD;AAAA,MACA;AAAA,MACA,UAAU,CAAC,GAAG,KAAK,aAAa,GAAG,WAAW;AAAA,MAC9C,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,aAAO,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,iBACZ,MACA,QACA,SACA,aACe;AACf,UAAM,SAAS,MAAM,KAAK,YAAY,cAAc;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAM,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAc,eACZ,MACA,UACA,aACe;AACf,UAAM,SAAS,MAAM,KAAK,YAAY,YAAY;AAAA,MAChD;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAM,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAc,gCACZ,SACA,MACwD;AACxD,QAAI,UAAU;AACd,eAAW,cAAc,KAAK,kBAAkB,GAAG;AACjD,YAAM,cAAc,MAAM,WAAW,sBAAsB;AAAA,QACzD;AAAA,QACA,SAAS;AAAA,QACT,iBAAiB;AAAA,MACnB,CAAC;AACD,UAAI,aAAa,YAAY,QAAW;AACtC,kBAAU,YAAY;AAAA,MACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,iCACZ,SACA,UACA,MAC6B;AAC7B,QAAI,UAAU;AACd,eAAW,cAAc,KAAK,kBAAkB,GAAG;AACjD,YAAM,cAAc,MAAM,WAAW,uBAAuB;AAAA,QAC1D;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,kBAAkB;AAAA,MACpB,CAAC;AACD,UAAI,aAAa,aAAa,QAAW;AACvC,kBAAU,YAAY;AAAA,MACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,0BACZ,QACA,UAGA,aACe;AACf,UAAM,SAAS,MAAM,KAAK,YAAY,uBAAuB;AAAA,MAC3D;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAM,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAc,uBACZ,QACA,OACA,aACe;AACf,UAAM,SAAS,MAAM,KAAK,YAAY,oBAAoB;AAAA,MACxD;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AACD,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAM,KAAK,UAAU,aAAa,OAAO,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEQ,oBAAuC;AAC7C,WAAO,CAAC,GAAG,KAAK,MAAM,aAAa,GAAG,KAAK,kBAAkB;AAAA,EAC/D;AAAA,EAEQ,mCAA4C;AAClD,WACE,KAAK,YAAY,yBAAyB,UAC1C,KAAK,kBAAkB,EAAE,KAAK,CAAC,eAAe,WAAW,yBAAyB,MAAS;AAAA,EAE/F;AAAA,EAEA,MAAc,sBACZ,OACA,MACA,aACA,qBACkB;AAClB,UAAM,WAAW,KAAK,iBAAiB,OAAO,CAAC;AAC/C,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,gBAAY,KAAK,GAAG,QAAQ;AAC5B,UAAM,KAAK,eAAe,eAAe,OAAO,MAAM,UAAU,mBAAmB;AACnF,WAAO;AAAA,EACT;AAAA,EAEQ,WAAiB;AACvB,QAAI,KAAK,aAAa,QAAQ;AAC5B,WAAK,WAAW;AAChB;AAAA,IACF;AACA,QAAI,KAAK,aAAa,WAAW;AAC/B,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AAAA,EAEQ,aAAsB;AAC5B,WACE,KAAK,aAAa,eAAe,KAAK,aAAa,aAAa,KAAK,aAAa;AAAA,EAEtF;AAAA,EAEQ,UAAU,aAA4B,QAAsC;AAClF,WAAO,IAAI,qBAAqB,CAAC,GAAG,KAAK,aAAa,GAAG,WAAW,GAAG,MAAM;AAAA,EAC/E;AACF;AAEA,SAAS,qBAAqB,QAG5B;AACA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,EAAE,QAAQ,QAAQ,KAAK,MAAM,GAAG,SAAS,CAAC,EAAE;AAAA,EACrD;AACA,MAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,WAAO,EAAE,QAAQ,SAAS,CAAC,EAAE;AAAA,EAC/B;AACA,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,UAAU,sDAAsD;AAAA,EAC5E;AACA,QAAM,eAAe,OAAO,GAAG,EAAE;AACjC,MAAI,iBAAiB,QAAW;AAC9B,UAAM,IAAI,UAAU,sDAAsD;AAAA,EAC5E;AACA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS,OAAO,MAAM,GAAG,EAAE;AAAA,EAC7B;AACF;AAEA,SAAS,uBAAuB,OAA4D;AAC1F,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,CAAC,QAAQ,KAAK,KAAK,CAAC;AAAA,EAC7B;AACA,SAAO,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK;AACnD;AAEA,SAAS,qBAAqB,MAAc,UAAkD;AAC5F,QAAM,SAA6B,CAAC;AACpC,aAAW,QAAQ,SAAS,QAAQ;AAClC,QAAI,KAAK,SAAS,QAAQ;AACxB,UAAI,KAAK,KAAK,SAAS,GAAG;AACxB,eAAO,KAAK,EAAE,MAAM,cAAc,MAAM,OAAO,KAAK,KAAK,CAAC;AAAA,MAC5D;AACA;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,aAAa;AAC7B,UAAI,KAAK,YAAY,QAAW;AAC9B,YAAI,KAAK,KAAK,SAAS,GAAG;AACxB,iBAAO;AAAA,YACL,QAAQ,EAAE,MAAM,mBAA4B,MAAM,OAAO,KAAK,MAAM,IAAI,KAAK,GAAG,CAAC;AAAA,UACnF;AAAA,QACF;AACA;AAAA,MACF;AAEA,iBAAW,WAAW,KAAK,SAAS;AAClC,cAAM,QACJ,QAAQ,SAAS,eAAe,QAAQ,SAAS,aAAa,QAAQ,OAAO,QAAQ;AACvF,eAAO;AAAA,UACL,QAAQ;AAAA,YACN,MAAM;AAAA,YACN;AAAA,YACA;AAAA,YACA,IAAI,KAAK;AAAA,YACT,aAAa,QAAQ;AAAA,YACrB,WAAW,QAAQ,SAAS,SAAS,QAAQ,YAAY;AAAA,UAC3D,CAAC;AAAA,QACH;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,aAAa;AAC7B,aAAO,KAAK,EAAE,MAAM,aAAa,MAAM,UAAU,KAAK,CAAC;AAAA,IACzD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,SAA8B;AACrD,MAAI,QAAQ,SAAS,UAAU;AAC7B,WAAO,QAAQ;AAAA,EACjB;AACA,SAAO,QAAQ,QACZ,QAAQ,CAAC,YAAY;AACpB,QAAI,QAAQ,SAAS,QAAQ;AAC3B,aAAO,CAAC,QAAQ,IAAI;AAAA,IACtB;AACA,QAAI,QAAQ,SAAS,cAAc,QAAQ,OAAO,SAAS,QAAQ;AACjE,aAAO,CAAC,QAAQ,OAAO,IAAI;AAAA,IAC7B;AACA,WAAO,CAAC;AAAA,EACV,CAAC,EACA,KAAK,IAAI;AACd;AAEA,SAAS,4BACP,UACuC;AACvC,SAAO,QAAQ;AAAA,IACb,UAAU,SAAS;AAAA,IACnB,aAAa,SAAS;AAAA,IACtB,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,SAAS,SAAS;AAAA,IAClB,QAAQ,SAAS;AAAA,IACjB,SAAS,SAAS;AAAA,IAClB,WAAW,SAAS;AAAA,EACtB,CAAC;AACH;","names":[]}