@agentskit/adapters 0.17.4 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/catalog/index.cjs +78 -93
- package/dist/catalog/index.cjs.map +1 -1
- package/dist/catalog/index.d.cts +1 -1
- package/dist/catalog/index.d.ts +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/{chunk-ICIKG7XA.js → chunk-MJDQXBVD.js} +89 -100
- package/dist/chunk-MJDQXBVD.js.map +1 -0
- package/dist/index.cjs +97 -112
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -4
- package/dist/index.d.ts +29 -4
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/retry-Bc6xtQCm.d.cts +49 -0
- package/dist/retry-Bc6xtQCm.d.ts +49 -0
- package/package.json +6 -5
- package/dist/chunk-ICIKG7XA.js.map +0 -1
- package/dist/utils-ddwu4MN4.d.cts +0 -66
- package/dist/utils-ddwu4MN4.d.ts +0 -66
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stream-errors.ts","../src/createAdapter.ts","../src/generic.ts","../src/stream-lines.ts","../src/openai-stream.ts","../src/utils.ts","../src/stream-source.ts","../src/tool-history.ts","../src/anthropic.ts","../src/openai.ts","../src/gemini.ts","../src/openai-compatible.ts","../src/grok.ts","../src/ollama.ts","../src/deepseek.ts","../src/kimi.ts","../src/langchain.ts","../src/vercel-ai.ts","../src/mistral.ts","../src/cohere.ts","../src/together.ts","../src/groq.ts","../src/fireworks.ts","../src/openrouter.ts","../src/huggingface.ts","../src/lmstudio.ts","../src/vllm.ts","../src/llamacpp.ts","../src/cerebras.ts","../src/azure-openai.ts","../src/replicate.ts","../src/bail.ts","../src/vertex.ts","../src/bedrock.ts","../src/webllm.ts","../src/router.ts","../src/carbon.ts","../src/ensemble.ts","../src/fallback.ts","../src/mock.ts","../src/embedders/shared.ts","../src/embedders/openai.ts","../src/embedders/gemini.ts","../src/embedders/ollama.ts","../src/embedders/openai-compatible.ts","../src/embedders/deepseek.ts","../src/embedders/grok.ts","../src/embedders/kimi.ts","../src/deprecation.ts","../src/credential-rotation.ts"],"names":["AdapterError","ErrorCodes","resolve","previous","DEFAULT_MODEL","baseFactory","ConfigError","cachedSdk","loadSdk","c","err","fetchAvailableModels","buildModelError"],"mappings":"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","file":"index.cjs","sourcesContent":["import { AdapterError, ErrorCodes } from '@agentskit/core'\nimport type { StreamChunk } from '@agentskit/core'\n\n/** True when the error is a caller-initiated abort. */\nexport function isAbortError(err: unknown): boolean {\n if (err instanceof DOMException && err.name === 'AbortError') return true\n if (err instanceof Error && err.name === 'AbortError') return true\n return false\n}\n\n/**\n * Terminal adapter failure as a stream chunk (ADR 0001 A3/A9).\n * Always attaches `metadata.error` as an Error — prefer AdapterError.\n */\nexport function adapterErrorChunk(\n message: string,\n options?: { cause?: unknown; code?: string },\n): StreamChunk {\n const error = new AdapterError({\n code: options?.code ?? ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause: options?.cause,\n })\n return {\n type: 'error',\n content: message,\n metadata: { error },\n }\n}\n\n/** Validate complete tool-call args JSON before emitting A5 tool_call. */\nexport function parseCompleteToolArgs(\n args: string,\n): { ok: true; args: string } | { ok: false; error: Error } {\n const raw = args.length > 0 ? args : '{}'\n try {\n JSON.parse(raw)\n return { ok: true, args: raw }\n } catch (cause) {\n return {\n ok: false,\n error: new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'Incomplete or malformed tool-call arguments JSON',\n cause,\n }),\n }\n }\n}\n\n/**\n * Race a promise against abort. Rejects promptly with AbortError when the\n * signal fires; cleans up the abort listener either way.\n */\nexport function raceAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) {\n return Promise.reject(new DOMException('Aborted', 'AbortError'))\n }\n return new Promise<T>((resolve, reject) => {\n let settled = false\n const onAbort = (): void => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(new DOMException('Aborted', 'AbortError'))\n }\n signal.addEventListener('abort', onAbort)\n promise.then(\n value => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n resolve(value)\n },\n err => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(err)\n },\n )\n })\n}\n\n/** Abort-aware delay used by retry backoff. */\nexport async function abortableSleep(\n ms: number,\n signal: AbortSignal,\n sleep: (ms: number) => Promise<void>,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n await raceAbort(sleep(ms), signal)\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n}\n\nexport async function cancelBody(body: ReadableStream | null | undefined): Promise<void> {\n if (!body) return\n try {\n await body.cancel()\n } catch {\n // ignore\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { CreateAdapterConfig } from './types'\nimport { adapterErrorChunk, isAbortError, raceAbort } from './stream-errors'\n\nexport function createAdapter(config: CreateAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let activeStream: ReadableStream | null = null\n let parseIter: AsyncIterator<StreamChunk> | null = null\n\n const cleanup = (): void => {\n try {\n void activeStream?.cancel()\n } catch {\n // ignore\n }\n activeStream = null\n if (parseIter && typeof parseIter.return === 'function') {\n void parseIter.return(undefined).catch(() => {})\n }\n parseIter = null\n try {\n config.abort?.()\n } catch {\n // ignore\n }\n }\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n const result = await raceAbort(config.send(request, controller.signal), controller.signal)\n if (controller.signal.aborted) {\n if (result instanceof Response) {\n try {\n await result.body?.cancel()\n } catch {\n // ignore\n }\n }\n return\n }\n\n const stream =\n result instanceof Response\n ? result.body\n : result\n if (!stream) {\n yield adapterErrorChunk('Adapter send() returned empty body')\n return\n }\n activeStream = stream\n\n const response = result instanceof Response ? result : undefined\n const iterable = config.parse(stream, response)\n parseIter = iterable[Symbol.asyncIterator]()\n\n while (true) {\n if (controller.signal.aborted) {\n cleanup()\n return\n }\n let next: IteratorResult<StreamChunk>\n try {\n next = await raceAbort(parseIter.next(), controller.signal)\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted) {\n cleanup()\n return\n }\n throw err\n }\n if (next.done) break\n if (controller.signal.aborted) {\n cleanup()\n return\n }\n yield next.value\n if (next.value.type === 'done' || next.value.type === 'error') {\n if (typeof parseIter.return === 'function') {\n await parseIter.return(undefined).catch(() => {})\n }\n parseIter = null\n activeStream = null\n return\n }\n }\n yield adapterErrorChunk('Adapter parser ended without a terminal chunk')\n activeStream = null\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted) return\n // Parser failures must release the response and iterator before the\n // terminal error is exposed; otherwise a failed stream can retain\n // a socket/body until the provider times out.\n cleanup()\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n } finally {\n if (controller.signal.aborted) cleanup()\n }\n },\n abort: () => {\n if (!controller.signal.aborted) controller.abort()\n cleanup()\n },\n }\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { GenericAdapterConfig } from './types'\nimport { isAbortError, raceAbort } from './stream-errors'\n\nexport function generic(config: GenericAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n const decoder = new TextDecoder()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n const stream = await raceAbort(\n config.send(request, controller.signal),\n controller.signal,\n )\n if (controller.signal.aborted) {\n try {\n await stream.cancel()\n } catch {\n // ignore\n }\n return\n }\n reader = stream.getReader()\n\n while (true) {\n if (controller.signal.aborted) {\n try {\n await reader.cancel()\n } catch {\n // ignore\n }\n return\n }\n const { done, value } = await raceAbort(reader.read(), controller.signal)\n if (done) break\n const text = decoder.decode(value, { stream: true })\n yield { type: 'text', content: text }\n }\n\n if (controller.signal.aborted) return\n yield { type: 'done' }\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted) return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n metadata: {\n error: err instanceof Error ? err : new Error(String(err)),\n },\n }\n } finally {\n try {\n reader?.releaseLock()\n } catch {\n // ignore\n }\n }\n },\n abort: () => {\n if (!controller.signal.aborted) controller.abort()\n void reader?.cancel().catch(() => {})\n },\n }\n },\n }\n}\n","export async function* readSSELines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n if (!line.startsWith('data: ')) continue\n const data = line.slice(6).trim()\n if (data) yield data\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* readNDJSONLines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed) yield trimmed\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n","import type { StreamChunk } from '@agentskit/core'\nimport { readSSELines } from './stream-lines'\nimport { adapterErrorChunk, parseCompleteToolArgs } from './stream-errors'\n\nconst SUCCESS_FINISH_REASONS = new Set(['stop', 'tool_calls', 'function_call'])\n\nexport async function* parseOpenAIStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n let finishReason: string | undefined\n\n const terminalError = (message: string, extra?: Record<string, unknown>): StreamChunk => {\n const chunk = adapterErrorChunk(message)\n return {\n ...chunk,\n metadata: { ...chunk.metadata, ...extra, finishReason },\n }\n }\n\n const flushToolCalls = function* (): Generator<StreamChunk, boolean> {\n for (const [, toolCall] of pendingToolCalls) {\n const parsed = parseCompleteToolArgs(toolCall.args)\n if (!parsed.ok) {\n pendingToolCalls.clear()\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error, finishReason },\n }\n return false\n }\n yield {\n type: 'tool_call',\n toolCall: { id: toolCall.id, name: toolCall.name, args: parsed.args },\n }\n }\n pendingToolCalls.clear()\n return true\n }\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') {\n if (finishReason !== undefined && !SUCCESS_FINISH_REASONS.has(finishReason)) {\n pendingToolCalls.clear()\n yield terminalError(\n `OpenAI stream ended with non-success finish reason \"${finishReason}\".`,\n { finishReason },\n )\n return\n }\n if (!(yield* flushToolCalls())) return\n yield { type: 'done' }\n return\n }\n\n try {\n const event = JSON.parse(data) as {\n choices?: Array<{\n delta?: {\n content?: string\n tool_calls?: Array<{\n index?: number\n id?: string\n function?: { name?: string; arguments?: string }\n }>\n }\n finish_reason?: string\n }>\n usage?: {\n prompt_tokens?: number\n completion_tokens?: number\n total_tokens?: number\n }\n }\n const delta = event.choices?.[0]?.delta\n const candidateFinishReason = event.choices?.find(\n choice => typeof choice.finish_reason === 'string',\n )?.finish_reason\n if (typeof candidateFinishReason === 'string') finishReason = candidateFinishReason\n\n if (typeof delta?.content === 'string') yield { type: 'text', content: delta.content }\n\n if (Array.isArray(delta?.tool_calls)) {\n for (const toolCall of delta.tool_calls) {\n const index: number = toolCall.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (toolCall?.function?.name) {\n pendingToolCalls.set(index, {\n id: toolCall.id ?? existing?.id ?? `tool-${index}-${Date.now()}`,\n name: toolCall.function.name,\n args: (existing?.args ?? '') + (toolCall.function.arguments ?? ''),\n })\n } else if (existing && toolCall?.function?.arguments) {\n existing.args += toolCall.function.arguments\n }\n }\n }\n\n if (event.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.prompt_tokens ?? 0,\n completionTokens: event.usage.completion_tokens ?? 0,\n totalTokens: event.usage.total_tokens ?? 0,\n },\n } as StreamChunk\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n if (finishReason !== undefined && !SUCCESS_FINISH_REASONS.has(finishReason)) {\n pendingToolCalls.clear()\n yield terminalError(\n `OpenAI stream ended with non-success finish reason \"${finishReason}\".`,\n { finishReason },\n )\n return\n }\n if (!finishReason) {\n pendingToolCalls.clear()\n yield terminalError('OpenAI stream ended before a terminal marker.')\n return\n }\n\n if (!(yield* flushToolCalls())) return\n yield { type: 'done' }\n}\n","import type { Message, StreamChunk, StreamSource } from '@agentskit/core'\nimport { readNDJSONLines, readSSELines } from './stream-lines'\nimport {\n abortableSleep,\n adapterErrorChunk,\n cancelBody,\n isAbortError,\n parseCompleteToolArgs,\n} from './stream-errors'\n\nexport { parseOpenAIStream } from './openai-stream'\nexport { readNDJSONLines, readSSELines } from './stream-lines'\nexport type { StreamParser } from './stream-types'\n\nexport function toProviderMessages(messages: Message[]) {\n // Track which tool_call ids were declared by preceding assistant turns so\n // we can drop orphan tool messages — the OpenAI Chat Completions API\n // rejects a tool message whose tool_call_id isn't bound to a previous\n // assistant message.\n const knownToolCallIds = new Set<string>()\n const output: Array<Record<string, unknown>> = []\n\n for (const message of messages) {\n if (message.role === 'tool') {\n const id = message.toolCallId\n // Orphan (no id, or id not declared) — skip; it would 400 the API.\n if (!id || !knownToolCallIds.has(id)) continue\n output.push({\n role: 'tool' as const,\n content: message.content,\n tool_call_id: id,\n })\n continue\n }\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownToolCallIds.add(tc.id)\n output.push({\n role: 'assistant' as const,\n content: message.content || null,\n tool_calls: message.toolCalls.map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: {\n name: tc.name,\n arguments: typeof tc.args === 'string' ? tc.args : JSON.stringify(tc.args ?? {}),\n },\n })),\n })\n continue\n }\n\n // Skip assistant messages with no content AND no tool calls. These\n // happen when a turn was interrupted (Ctrl+C, crashed adapter, etc.)\n // and the placeholder assistant message never received content —\n // sending `{role:'assistant', content:''}` back to the provider either\n // 400s or confuses the model into silence on the next turn.\n if (message.role === 'assistant' && !message.content) continue\n\n output.push({ role: message.role, content: message.content })\n }\n\n return output\n}\nexport async function* parseAnthropicStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n let sawMessageStop = false\n\n const emitToolCall = function* (\n tc: { id: string; name: string; args: string },\n ): Generator<StreamChunk, boolean> {\n const parsed = parseCompleteToolArgs(tc.args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return false\n }\n yield {\n type: 'tool_call',\n toolCall: { id: tc.id, name: tc.name, args: parsed.args },\n }\n return true\n }\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') continue\n\n try {\n const event = JSON.parse(data) as {\n type?: string\n index?: number\n delta?: { type?: string; text?: string; partial_json?: string }\n content_block?: { type?: string; id?: string; name?: string }\n usage?: { input_tokens?: number; output_tokens?: number }\n message?: { usage?: { input_tokens?: number } }\n error?: { type?: string; message?: string }\n }\n\n if (event.type === 'error') {\n const msg =\n event.error?.message ??\n event.error?.type ??\n 'Anthropic stream error'\n yield adapterErrorChunk(String(msg))\n return\n }\n\n if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta?.text) {\n yield { type: 'text', content: event.delta.text }\n } else if (event.type === 'content_block_delta' && event.delta?.type === 'input_json_delta') {\n const index: number = event.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) {\n existing.args += event.delta.partial_json ?? ''\n }\n } else if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {\n const index: number = event.index ?? 0\n pendingToolCalls.set(index, {\n id: event.content_block.id ?? `tool-${index}`,\n name: event.content_block.name ?? 'unknown',\n args: '',\n })\n } else if (event.type === 'content_block_stop') {\n const index: number = event.index ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n if (!(yield* emitToolCall(tc))) {\n pendingToolCalls.clear()\n return\n }\n pendingToolCalls.delete(index)\n }\n } else if (event.type === 'message_delta' && event.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.input_tokens ?? 0,\n completionTokens: event.usage.output_tokens ?? 0,\n totalTokens: (event.usage.input_tokens ?? 0) + (event.usage.output_tokens ?? 0),\n },\n } as StreamChunk\n } else if (event.type === 'message_start' && event.message?.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.message.usage.input_tokens ?? 0,\n completionTokens: 0,\n totalTokens: event.message.usage.input_tokens ?? 0,\n },\n } as StreamChunk\n } else if (event.type === 'message_stop') {\n sawMessageStop = true\n for (const [, tc] of pendingToolCalls) {\n if (!(yield* emitToolCall(tc))) {\n pendingToolCalls.clear()\n return\n }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n pendingToolCalls.clear()\n if (!sawMessageStop) {\n yield adapterErrorChunk('Anthropic stream ended before message_stop')\n return\n }\n yield { type: 'done' }\n}\n\nconst GEMINI_SUCCESS_FINISH = new Set([\n 'STOP',\n 'stop',\n 'FINISH_REASON_STOP',\n])\n\nexport async function* parseGeminiStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n let finishReason: string | undefined\n\n for await (const data of readSSELines(stream)) {\n try {\n const event = JSON.parse(data) as {\n usageMetadata?: {\n promptTokenCount?: number\n candidatesTokenCount?: number\n totalTokenCount?: number\n }\n candidates?: Array<{\n finishReason?: string\n content?: {\n parts?: Array<{\n text?: string\n functionCall?: { id?: string; name?: string; args?: unknown }\n }>\n }\n }>\n }\n\n if (event.usageMetadata) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usageMetadata.promptTokenCount ?? 0,\n completionTokens: event.usageMetadata.candidatesTokenCount ?? 0,\n totalTokens: event.usageMetadata.totalTokenCount ?? 0,\n },\n } as StreamChunk\n }\n\n const candidate = event.candidates?.[0]\n if (typeof candidate?.finishReason === 'string') {\n finishReason = candidate.finishReason\n }\n\n const parts = candidate?.content?.parts\n if (!Array.isArray(parts)) continue\n\n for (const part of parts) {\n if (typeof part.text === 'string' && part.text) {\n yield { type: 'text', content: part.text }\n } else if (part.functionCall) {\n const fc = part.functionCall\n const args =\n typeof fc.args === 'string' ? fc.args : JSON.stringify(fc.args ?? {})\n const parsed = parseCompleteToolArgs(args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return\n }\n yield {\n type: 'tool_call',\n toolCall: {\n id: fc.id ?? `${fc.name}-${Date.now()}`,\n name: fc.name ?? 'unknown',\n args: parsed.args,\n },\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n if (!finishReason || !GEMINI_SUCCESS_FINISH.has(finishReason)) {\n if (finishReason && !GEMINI_SUCCESS_FINISH.has(finishReason)) {\n yield adapterErrorChunk(\n `Gemini stream ended with non-success finish reason \"${finishReason}\"`,\n )\n return\n }\n yield adapterErrorChunk('Gemini stream ended without a successful finishReason')\n return\n }\n\n yield { type: 'done' }\n}\n\nexport async function* parseOllamaStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n let sawDone = false\n\n for await (const data of readNDJSONLines(stream)) {\n try {\n const event = JSON.parse(data) as {\n message?: {\n content?: string\n tool_calls?: Array<{\n id?: string\n function?: { name?: string; arguments?: unknown }\n }>\n }\n done?: boolean\n prompt_eval_count?: number\n eval_count?: number\n }\n if (event.message?.content) {\n yield { type: 'text', content: event.message.content }\n }\n if (Array.isArray(event.message?.tool_calls)) {\n for (const tc of event.message.tool_calls) {\n if (tc?.function?.name) {\n const args =\n typeof tc.function.arguments === 'string'\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments ?? {})\n const parsed = parseCompleteToolArgs(args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return\n }\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id ?? `${tc.function.name}-${Date.now()}`,\n name: tc.function.name,\n args: parsed.args,\n },\n }\n }\n }\n }\n if (event.done) {\n sawDone = true\n if (typeof event.prompt_eval_count === 'number' || typeof event.eval_count === 'number') {\n const promptTokens = event.prompt_eval_count ?? 0\n const completionTokens = event.eval_count ?? 0\n yield {\n type: 'usage',\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n },\n } as StreamChunk\n }\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n if (!sawDone) {\n yield adapterErrorChunk('Ollama stream ended without done:true')\n return\n }\n yield { type: 'done' }\n}\n\n/**\n * Retry knobs for adapter fetches. Tunable per call to createStreamSource.\n *\n * Default behavior:\n * - 3 attempts total (1 initial + 2 retries)\n * - exponential backoff: 500ms, 1000ms, 2000ms ... (capped at maxDelayMs)\n * - full jitter on each delay\n * - retry on HTTP 408, 429, 500, 502, 503, 504\n * - retry on network errors (fetch throws)\n * - DO NOT retry on 4xx other than 408/429 (those are bad requests / auth)\n * - retries only the initial fetch — never mid-stream\n * - respects Retry-After header when present\n */\nexport interface RetryOptions {\n maxAttempts?: number\n baseDelayMs?: number\n maxDelayMs?: number\n jitter?: boolean\n retryOn?: (info: { error?: unknown; response?: Response; attempt: number }) => boolean\n /** Hook for tests + logging. Called after every failed attempt. */\n onRetry?: (info: { attempt: number; delayMs: number; reason: string }) => void\n /** Sleep override for tests. Defaults to setTimeout. */\n sleep?: (ms: number) => Promise<void>\n}\n\nconst DEFAULT_RETRY: Required<Omit<RetryOptions, 'onRetry' | 'sleep' | 'retryOn'>> & {\n retryOn: NonNullable<RetryOptions['retryOn']>\n} = {\n maxAttempts: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n jitter: true,\n retryOn: ({ error, response }) => {\n if (response) {\n return [408, 429, 500, 502, 503, 504].includes(response.status)\n }\n if (isAbortError(error)) return false\n // Network error: TypeError from fetch, AbortError from upstream timeout, etc.\n return true\n },\n}\n\nfunction defaultSleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction computeDelay(attempt: number, opts: Required<Pick<RetryOptions, 'baseDelayMs' | 'maxDelayMs' | 'jitter'>>): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * Math.pow(2, attempt - 1))\n if (!opts.jitter) return exp\n return Math.floor(Math.random() * exp)\n}\n\nfunction parseRetryAfter(value: string | null, maxDelayMs: number): number | undefined {\n if (!value) return undefined\n const n = Number(value)\n if (Number.isFinite(n) && n >= 0) return Math.min(n * 1000, maxDelayMs)\n const date = Date.parse(value)\n if (!Number.isNaN(date)) return Math.min(maxDelayMs, Math.max(0, date - Date.now()))\n return undefined\n}\n\n/**\n * Run a fetch with retries on transient failures. Returns the final\n * Response (whether successful or not — caller decides), or throws if\n * the AbortSignal fires or all attempts fail with a thrown error.\n */\nexport async function fetchWithRetry(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n signal: AbortSignal,\n retryOpt: RetryOptions = {},\n): Promise<Response> {\n const opts = {\n ...DEFAULT_RETRY,\n ...retryOpt,\n }\n const sleep = retryOpt.sleep ?? defaultSleep\n let lastError: unknown\n\n for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n\n try {\n const response = await doFetch(signal)\n\n // Success or non-retryable failure → return.\n if (response.ok) return response\n if (attempt >= opts.maxAttempts || !opts.retryOn({ response, attempt })) {\n return response\n }\n\n const retryAfterMs = parseRetryAfter(response.headers.get('retry-after'), opts.maxDelayMs)\n const delay = retryAfterMs ?? computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: `HTTP ${response.status}` })\n // Drain the body so the connection can be reused / does not leak.\n await cancelBody(response.body)\n await abortableSleep(delay, signal, sleep)\n } catch (err) {\n lastError = err\n if (isAbortError(err)) throw err\n if (attempt >= opts.maxAttempts || !opts.retryOn({ error: err, attempt })) throw err\n\n const delay = computeDelay(attempt, opts)\n retryOpt.onRetry?.({\n attempt,\n delayMs: delay,\n reason: err instanceof Error ? err.message : String(err),\n })\n await abortableSleep(delay, signal, sleep)\n }\n }\n\n // Unreachable, but the TS narrowing needs it.\n throw lastError ?? new Error('fetchWithRetry: exhausted attempts')\n}\n\n/**\n * Chunk-splitter that turns one large string into N streamable text chunks.\n * Useful when a provider returns the full response in one shot and you\n * want to feed it to a UI that expects streaming.\n *\n * Default splits by whitespace boundaries with a target chunk size of ~32\n * characters.\n */\nexport function chunkText(text: string, targetSize = 32): string[] {\n if (text.length <= targetSize) return [text]\n const out: string[] = []\n let i = 0\n while (i < text.length) {\n let end = Math.min(text.length, i + targetSize)\n // Prefer to cut on whitespace within the next few chars\n if (end < text.length) {\n const nextSpace = text.indexOf(' ', end)\n if (nextSpace !== -1 && nextSpace - end <= 8) end = nextSpace + 1\n }\n out.push(text.slice(i, end))\n i = end\n }\n return out\n}\n\n/**\n * Build a StreamSource from a non-streaming fetch. The adapter is\n * auto-completing: it fetches once, then yields the text as a sequence\n * of chunks so UIs see the same streaming shape they'd see from a\n * native streaming provider.\n *\n * Use this when you're wiring a provider that only has a non-streaming\n * endpoint but you want consumers (useChat, the runtime) to get\n * identical ergonomics.\n */\nexport function simulateStream(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n extractText: (response: Response) => Promise<string>,\n errorLabel: string,\n options: { chunkSize?: number; delayMs?: number; retry?: RetryOptions } = {},\n): StreamSource {\n const { chunkSize = 32, delayMs = 8, retry } = options\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const controller = abortController\n if (!controller) return\n try {\n const response = await fetchWithRetry(doFetch, controller.signal, retry ?? {})\n\n if (!response.ok) {\n await cancelBody(response.body)\n yield adapterErrorChunk(`${errorLabel} error: ${response.status}`)\n return\n }\n\n let text: string\n try {\n text = await extractText(response)\n } catch (err) {\n await cancelBody(response.body)\n if (isAbortError(err)) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n return\n }\n\n const chunks = chunkText(text, chunkSize)\n for (const chunk of chunks) {\n if (abortController === null || controller.signal.aborted) return\n if (delayMs > 0) {\n await abortableSleep(delayMs, controller.signal, defaultSleep)\n }\n yield { type: 'text', content: chunk }\n }\n yield { type: 'done' }\n } catch (err) {\n if (isAbortError(err)) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, cancelBody, isAbortError } from './stream-errors'\nimport type { StreamParser } from './stream-types'\nimport { fetchWithRetry, type RetryOptions } from './utils'\n\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: StreamParser,\n errorLabel: string,\n retry?: RetryOptions,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const controller = abortController\n if (!controller) return\n try {\n const response = await fetchWithRetry(doFetch, controller.signal, retry ?? {})\n\n if (!response.ok) {\n await cancelBody(response.body)\n yield adapterErrorChunk(`${errorLabel} error: ${response.status}`)\n return\n }\n\n if (!response.body) {\n yield adapterErrorChunk(`${errorLabel} error: empty response body`)\n return\n }\n\n for await (const chunk of parse(response.body, response)) {\n if (controller.signal.aborted || abortController === null) return\n yield chunk\n }\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted || abortController === null) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { Message } from '@agentskit/core'\n\n/** Normalize tool-call args for provider wire formats. */\nfunction toolInput(args: unknown): Record<string, unknown> {\n if (args == null) return {}\n if (typeof args === 'string') {\n try {\n const parsed: unknown = JSON.parse(args)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>\n }\n return { value: parsed }\n } catch {\n return {}\n }\n }\n if (typeof args === 'object' && !Array.isArray(args)) {\n return args as Record<string, unknown>\n }\n return { value: args }\n}\n\nfunction toolResponsePayload(content: string): Record<string, unknown> {\n try {\n const parsed: unknown = JSON.parse(content)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>\n }\n return { result: parsed }\n } catch {\n return { result: content }\n }\n}\n\n/**\n * Anthropic Messages API multi-turn tool history.\n * Assistant tool calls → `tool_use` blocks; tool results → user `tool_result` blocks.\n * Shared by Anthropic direct and Bedrock Anthropic models.\n */\nexport function toAnthropicMessages(\n messages: Message[],\n): Array<{ role: string; content: unknown }> {\n const knownNames = new Map<string, string>()\n const output: Array<{ role: string; content: unknown }> = []\n\n for (const message of messages) {\n if (message.role === 'system') continue\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownNames.set(tc.id, tc.name)\n const blocks: Array<Record<string, unknown>> = []\n if (message.content) {\n blocks.push({ type: 'text', text: message.content })\n }\n for (const tc of message.toolCalls) {\n blocks.push({\n type: 'tool_use',\n id: tc.id,\n name: tc.name,\n input: toolInput(tc.args),\n })\n }\n output.push({ role: 'assistant', content: blocks })\n continue\n }\n\n if (message.role === 'tool') {\n const id = message.toolCallId\n if (!id || !knownNames.has(id)) continue\n const block = {\n type: 'tool_result',\n tool_use_id: id,\n content: message.content,\n }\n const previous = output[output.length - 1]\n if (\n previous?.role === 'user' &&\n Array.isArray(previous.content) &&\n previous.content.every(item => (\n item && typeof item === 'object' && (item as { type?: unknown }).type === 'tool_result'\n ))\n ) {\n previous.content.push(block)\n } else {\n output.push({ role: 'user', content: [block] })\n }\n continue\n }\n\n if (message.role === 'assistant' && !message.content) continue\n\n const previous = output[output.length - 1]\n if (message.role === 'user' && previous?.role === 'user') {\n const previousBlocks = Array.isArray(previous.content)\n ? previous.content\n : [{ type: 'text', text: previous.content }]\n previous.content = [...previousBlocks, { type: 'text', text: message.content }]\n } else {\n output.push({ role: message.role, content: message.content })\n }\n }\n\n return output\n}\n\n/**\n * Gemini / Vertex multi-turn tool history.\n * Assistant tool calls → model `functionCall` parts;\n * tool results → user `functionResponse` parts (name correlated via toolCallId).\n */\nexport function toGeminiContents(\n messages: Message[],\n): Array<{ role: string; parts: Array<Record<string, unknown>> }> {\n const knownNames = new Map<string, string>()\n const output: Array<{ role: string; parts: Array<Record<string, unknown>> }> = []\n\n for (const message of messages) {\n if (message.role === 'system') continue\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownNames.set(tc.id, tc.name)\n const parts: Array<Record<string, unknown>> = []\n if (message.content) {\n parts.push({ text: message.content })\n }\n for (const tc of message.toolCalls) {\n parts.push({\n functionCall: {\n id: tc.id,\n name: tc.name,\n args: toolInput(tc.args),\n },\n })\n }\n output.push({ role: 'model', parts })\n continue\n }\n\n if (message.role === 'tool') {\n const id = message.toolCallId\n const name = id ? knownNames.get(id) : undefined\n if (!name) continue\n const part = {\n functionResponse: {\n id,\n name,\n response: toolResponsePayload(message.content),\n },\n }\n const previous = output[output.length - 1]\n if (\n previous?.role === 'user' &&\n previous.parts.every(item => item.functionResponse !== undefined)\n ) {\n previous.parts.push(part)\n } else {\n output.push({ role: 'user', parts: [part] })\n }\n continue\n }\n\n if (message.role === 'assistant' && !message.content) continue\n\n const role = message.role === 'assistant' ? 'model' : 'user'\n const previous = output[output.length - 1]\n if (previous?.role === role) {\n previous.parts.push({ text: message.content })\n } else {\n output.push({ role, parts: [{ text: message.content }] })\n }\n }\n\n return output\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseAnthropicStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { toAnthropicMessages } from './tool-history'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n retry?: RetryOptions\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096, retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages: toAnthropicMessages(request.messages),\n system: request.messages.find(message => message.role === 'system')?.content,\n tools: request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n })),\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseAnthropicStream,\n 'Anthropic API',\n retry,\n )\n },\n }\n}\n","import type { AdapterCapabilities, AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n /**\n * Ask the provider to include token usage in the final stream chunk via\n * `stream_options: { include_usage: true }`. Off by default because some\n * OpenAI-compatible providers (OpenRouter proxies to a long tail of\n * backends) reject unknown params with a 4xx and break the whole stream.\n * Turn this on for vanilla `api.openai.com`.\n */\n includeUsage?: boolean\n /** Explicit capability facts for OpenAI-compatible providers with custom models. */\n capabilities?: Partial<AdapterCapabilities>\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com', retry } = config\n // Normalize: many compatible endpoints are declared WITH a trailing `/v1`\n // (together, mistral, fireworks, openrouter `/api/v1`, …) while others are\n // declared without it. We always append `/v1/chat/completions`, so strip a\n // trailing `/v1` first to avoid a double `/v1/v1/...` (→ 404).\n const apiRoot = baseUrl.replace(/\\/v1\\/?$/, '')\n // Auto: on for canonical OpenAI, off for every other compatible endpoint\n // where the param is a known source of 4xx surprises.\n // Match the canonical OpenAI host exactly — a substring/prefix check\n // would also accept `https://api.openai.com.evil.test`.\n const isCanonicalOpenAI = (() => {\n try {\n return new URL(baseUrl).host === 'api.openai.com'\n } catch {\n return false\n }\n })()\n const includeUsage = config.includeUsage ?? isCanonicalOpenAI\n\n return {\n capabilities: {\n streaming: true,\n tools: config.capabilities?.tools ?? true,\n // o1 / o3 models emit reasoning; older models don't. Accurate per-model\n // detection would need a model registry; 'true' is the safer default here.\n reasoning: config.capabilities?.reasoning ?? (model.startsWith('o1') || model.startsWith('o3')),\n multiModal: config.capabilities?.multiModal ?? (model.startsWith('gpt-4') || model.startsWith('o')),\n usage: true,\n ...config.capabilities,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body: Record<string, unknown> = {\n model,\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n if (includeUsage) body.stream_options = { include_usage: true }\n\n return createStreamSource(\n (signal) => fetch(`${apiRoot}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'OpenAI API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseGeminiStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { toGeminiContents } from './tool-history'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const systemMessage = request.messages.find(message => message.role === 'system')\n const body = {\n contents: toGeminiContents(request.messages),\n systemInstruction: systemMessage\n ? { role: 'system', parts: [{ text: systemMessage.content }] }\n : undefined,\n tools: request.context?.tools && request.context.tools.length > 0\n ? [{\n functionDeclarations: request.context.tools.map(tool => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n })),\n }]\n : undefined,\n }\n\n return createStreamSource(\n (signal) => fetch(\n `${baseUrl}/v1beta/models/${model}:streamGenerateContent?alt=sse`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-goog-api-key': apiKey,\n },\n body: JSON.stringify(body),\n signal,\n },\n ),\n parseGeminiStream,\n 'Gemini API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory } from '@agentskit/core'\nimport { openai, type OpenAIConfig } from './openai'\n\nexport interface OpenAICompatibleConfig extends OpenAIConfig {}\n\nexport function createOpenAICompatibleAdapter(defaultBaseUrl: string) {\n return function openAICompatibleAdapter(config: OpenAICompatibleConfig): AdapterFactory {\n return openai({\n ...config,\n baseUrl: config.baseUrl ?? defaultBaseUrl,\n })\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GrokConfig extends OpenAICompatibleConfig {}\n\nexport const grok = createOpenAICompatibleAdapter('https://api.x.ai')\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseOllamaStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: false, // varies by model; default 'false' — enable via capabilities.extensions if your model supports it\n multiModal: model.includes('llava') || model.includes('vision'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n stream: true,\n messages: request.messages.map(message => ({\n role: message.role,\n content: message.content,\n })),\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n }),\n parseOllamaStream,\n 'Ollama API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface DeepSeekConfig extends OpenAICompatibleConfig {}\n\nexport const deepseek = createOpenAICompatibleAdapter('https://api.deepseek.com')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface KimiConfig extends OpenAICompatibleConfig {}\n\nexport const kimi = createOpenAICompatibleAdapter('https://api.moonshot.ai')\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from './stream-errors'\n\ntype LangChainRunnable = {\n stream?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>\n streamEvents?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<Record<string, unknown>> | Promise<AsyncIterable<Record<string, unknown>>>\n}\n\nexport interface LangChainConfig {\n runnable: LangChainRunnable\n mode?: 'stream' | 'events'\n}\n\nfunction asText(value: unknown): string {\n if (typeof value === 'string') return value\n if (value && typeof value === 'object' && 'content' in value) {\n const content = (value as { content?: unknown }).content\n if (typeof content === 'string') return content\n }\n return ''\n}\n\nfunction isToolStartEvent(eventName: string): boolean {\n return eventName === 'on_tool_start' || eventName.endsWith('_tool_start')\n}\n\nexport function langchain(config: LangChainConfig): AdapterFactory {\n const { runnable, mode = 'stream' } = config\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n const runnableConfig: Record<string, unknown> = {\n version: 'v2',\n signal: controller.signal,\n }\n\n if (mode === 'events' && runnable.streamEvents) {\n const events = await runnable.streamEvents(\n { messages: request.messages },\n runnableConfig,\n )\n\n for await (const event of events) {\n if (controller.signal.aborted) return\n const eventName = String(event.event ?? '')\n if (eventName.endsWith('_stream')) {\n const chunk = asText(event.data)\n if (chunk) yield { type: 'text', content: chunk }\n } else if (isToolStartEvent(eventName) && event.name) {\n // Only genuine tool-start events — not chain/model starts.\n yield {\n type: 'tool_call',\n toolCall: {\n id: String(event.run_id ?? `${event.name}-${Date.now()}`),\n name: String(event.name),\n args: JSON.stringify(event.data ?? {}),\n },\n }\n }\n }\n } else if (runnable.stream) {\n const stream = await runnable.stream(\n { messages: request.messages },\n runnableConfig,\n )\n for await (const value of stream) {\n if (controller.signal.aborted) return\n const chunk = asText(value)\n if (chunk) yield { type: 'text', content: chunk }\n }\n } else {\n yield adapterErrorChunk('Runnable does not implement stream() or streamEvents()')\n return\n }\n\n if (controller.signal.aborted) return\n yield { type: 'done' }\n } catch (error) {\n // Abort should terminate quietly (no error chunk).\n if (isAbortError(error) || controller.signal.aborted) return\n const message = error instanceof Error ? error.message : String(error)\n yield adapterErrorChunk(message, { cause: error })\n }\n },\n abort: () => {\n controller.abort()\n },\n }\n },\n }\n}\n\nexport interface LangGraphConfig {\n graph: LangChainRunnable\n}\n\nexport function langgraph(config: LangGraphConfig): AdapterFactory {\n return langchain({\n runnable: config.graph,\n mode: 'events',\n })\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { readSSELines } from './stream-lines'\nimport { adapterErrorChunk } from './stream-errors'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\n retry?: RetryOptions\n}\n\nconst UI_STREAM_HEADER = 'x-vercel-ai-ui-message-stream'\n\n/**\n * Plain text mode: body bytes are text deltas. Used when the response is not\n * UI Message Stream v1.\n */\nasync function* parseVercelTextStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n if (text) yield { type: 'text', content: text }\n }\n } finally {\n reader.releaseLock()\n }\n\n yield { type: 'done' }\n}\n\n/**\n * Official AI SDK UI Message Stream protocol v1 (SSE):\n * data JSON parts (text-delta / reasoning-delta / error / abort / finish),\n * ending with `data: [DONE]`.\n */\nasync function* parseVercelUiMessageStreamV1(\n stream: ReadableStream,\n): AsyncIterableIterator<StreamChunk> {\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') {\n yield { type: 'done' }\n return\n }\n\n try {\n const part = JSON.parse(data) as {\n type?: string\n delta?: string\n textDelta?: string\n errorText?: string\n message?: string\n reason?: string\n }\n const type = part.type\n if (type === 'text-delta') {\n const delta = part.delta ?? part.textDelta\n if (typeof delta === 'string' && delta) {\n yield { type: 'text', content: delta }\n }\n } else if (type === 'reasoning-delta') {\n const delta = part.delta ?? part.textDelta\n if (typeof delta === 'string' && delta) {\n yield { type: 'reasoning', content: delta }\n }\n } else if (type === 'error') {\n const message = part.errorText ?? part.message ?? 'Vercel AI UI stream error'\n yield adapterErrorChunk(String(message))\n return\n } else if (type === 'abort') {\n yield adapterErrorChunk(part.reason ?? 'Vercel AI UI stream aborted by provider')\n return\n } else if (type === 'finish') {\n // Wait for [DONE] sentinel.\n continue\n }\n } catch {\n // Ignore non-JSON data lines.\n }\n }\n\n yield adapterErrorChunk('Vercel AI UI stream truncated before [DONE]')\n}\n\n/**\n * Dispatch parser: UI Message Stream v1 when header is present; otherwise\n * plain text mode. Second arg is the Response from createStreamSource.\n */\nexport async function* parseVercelStream(\n stream: ReadableStream,\n response?: Response,\n): AsyncIterableIterator<StreamChunk> {\n const header =\n response?.headers.get(UI_STREAM_HEADER) ??\n response?.headers.get(UI_STREAM_HEADER.toLowerCase())\n if (header === 'v1') {\n yield* parseVercelUiMessageStreamV1(stream)\n return\n }\n yield* parseVercelTextStream(stream)\n}\n\nexport function vercelAI(config: VercelAIConfig): AdapterFactory {\n const { api, headers = {}, retry } = config\n\n return {\n capabilities: {\n // Vercel AI routes can do any of these — whether they do depends on\n // your route handler. Omit the field instead of lying.\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n messages: request.messages.map(message => ({ role: message.role, content: message.content })),\n tools: request.context?.tools,\n systemPrompt: request.context?.systemPrompt,\n }\n\n return createStreamSource(\n (signal) => fetch(api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(body),\n signal,\n }),\n parseVercelStream,\n 'API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface MistralConfig extends OpenAICompatibleConfig {}\n\n/**\n * Mistral AI. Uses the OpenAI-compatible chat completions endpoint.\n * Default models: `mistral-large-latest`, `mistral-small-latest`,\n * `open-mistral-nemo`.\n */\nexport const mistral = createOpenAICompatibleAdapter('https://api.mistral.ai/v1')\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface CohereConfig extends OpenAICompatibleConfig {}\n\nconst COHERE_BASE_URL = 'https://api.cohere.com/compatibility/v1'\nconst DEFAULT_MODEL = 'command-r-plus'\n\nconst baseFactory = createOpenAICompatibleAdapter(COHERE_BASE_URL)\n\n/**\n * Cohere Command models via Cohere's OpenAI-compatibility endpoint.\n *\n * - Streams tokens via SSE (OpenAI-compatible chunks).\n * - Supports tool calls in the OpenAI `tools` shape.\n * - Reports `usage` on the final stream chunk when the upstream model\n * returns it (Cohere's compatibility layer mirrors OpenAI's\n * `stream_options: { include_usage: true }` semantics).\n * - Inherits auto-retry from the shared OpenAI core (`retry`).\n *\n * Default model: `command-r-plus`. Override via `model`.\n */\nexport function cohere(config: Partial<CohereConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as CohereConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n }\n}\n\n/** Alias for naming consistency with other native adapters. */\nexport const cohereAdapter = cohere\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface TogetherConfig extends OpenAICompatibleConfig {}\n\n/**\n * Together AI. OpenAI-compatible endpoint, broad open-model catalog\n * (Llama, Qwen, DeepSeek, Mixtral, etc.).\n */\nexport const together = createOpenAICompatibleAdapter('https://api.together.xyz/v1')\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GroqConfig extends OpenAICompatibleConfig {}\n\nconst GROQ_BASE_URL = 'https://api.groq.com/openai/v1'\nconst DEFAULT_MODEL = 'openai/gpt-oss-120b'\n\nconst baseFactory = createOpenAICompatibleAdapter(GROQ_BASE_URL)\n\n/**\n * Groq — OpenAI-compatible endpoint serving Llama / Mixtral on LPUs.\n * Known for very low first-token latency.\n *\n * Default model: `openai/gpt-oss-120b`.\n */\nexport function groq(config: Partial<GroqConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as GroqConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n }\n}\n\n/** Alias for naming consistency with other native adapters. */\nexport const groqAdapter = groq\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface FireworksConfig extends OpenAICompatibleConfig {}\n\n/**\n * Fireworks AI. OpenAI-compatible endpoint with tuned open-source\n * models and fine-tunes (Llama, DeepSeek, Qwen, etc.).\n */\nexport const fireworks = createOpenAICompatibleAdapter('https://api.fireworks.ai/inference/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface OpenRouterConfig extends OpenAICompatibleConfig {}\n\n/**\n * OpenRouter — routes to 300+ provider models behind a single\n * OpenAI-compatible endpoint. Pass the fully-qualified id as\n * `model`, e.g. `anthropic/claude-sonnet-4-6`.\n */\nexport const openrouter = createOpenAICompatibleAdapter('https://openrouter.ai/api/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface HuggingFaceConfig extends OpenAICompatibleConfig {}\n\n/**\n * Hugging Face Inference Providers router. OpenAI-compatible\n * endpoint that fans out to HF-hosted model inference providers.\n * Pass any supported repo id as `model`, e.g.\n * `meta-llama/Meta-Llama-3.1-8B-Instruct`.\n */\nexport const huggingface = createOpenAICompatibleAdapter('https://router.huggingface.co/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface LMStudioConfig extends OpenAICompatibleConfig {}\n\n/**\n * LM Studio local server. Start the built-in OpenAI-compatible\n * server in LM Studio, then point this adapter at\n * `http://localhost:1234/v1` (the default).\n */\nexport const lmstudio = createOpenAICompatibleAdapter('http://localhost:1234/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface VLLMConfig extends OpenAICompatibleConfig {}\n\n/**\n * vLLM's OpenAI-compatible serving endpoint. Defaults to\n * `http://localhost:8000/v1` — the standard `vllm serve ...` port.\n */\nexport const vllm = createOpenAICompatibleAdapter('http://localhost:8000/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface LlamaCppConfig extends OpenAICompatibleConfig {}\n\n/**\n * llama.cpp's OpenAI-compatible HTTP server (`llama-server`). Defaults\n * to `http://localhost:8080/v1`, matching the binary's default port.\n */\nexport const llamacpp = createOpenAICompatibleAdapter('http://localhost:8080/v1')\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface CerebrasConfig extends OpenAICompatibleConfig {}\n\nconst CEREBRAS_BASE_URL = 'https://api.cerebras.ai/v1'\nconst DEFAULT_MODEL = 'llama-3.3-70b'\n\nconst baseFactory = createOpenAICompatibleAdapter(CEREBRAS_BASE_URL)\n\n/**\n * Cerebras — ultra-fast inference on wafer-scale chips. OpenAI-compatible\n * endpoint serving Llama / Qwen models with very low first-token latency.\n *\n * Default model: `llama-3.3-70b`.\n */\nexport function cerebras(config: Partial<CerebrasConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as CerebrasConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n }\n}\n\nexport const cerebrasAdapter = cerebras\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\n\nexport interface AzureOpenAIConfig {\n apiKey: string\n /** Resource endpoint, e.g. `https://my-resource.openai.azure.com`. */\n endpoint: string\n /** Deployment name (NOT the underlying model name — Azure routes by deployment). */\n deployment: string\n /** Azure REST `api-version`. Defaults to `2024-10-21`. */\n apiVersion?: string\n retry?: RetryOptions\n /** Surface usage by setting `stream_options.include_usage`. Defaults to true. */\n includeUsage?: boolean\n}\n\nconst DEFAULT_API_VERSION = '2024-10-21'\n\nexport function azureOpenAI(config: AzureOpenAIConfig): AdapterFactory {\n const { apiKey, endpoint, deployment, apiVersion = DEFAULT_API_VERSION, retry } = config\n const includeUsage = config.includeUsage ?? true\n const url = `${endpoint.replace(/\\/$/, '')}/openai/deployments/${encodeURIComponent(deployment)}/chat/completions?api-version=${encodeURIComponent(apiVersion)}`\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body: Record<string, unknown> = {\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n if (includeUsage) body.stream_options = { include_usage: true }\n\n return createStreamSource(\n (signal) => fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': apiKey,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'Azure OpenAI API',\n retry,\n )\n },\n }\n}\n\nexport const azureOpenAIAdapter = azureOpenAI\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from './stream-errors'\n\nexport interface ReplicateConfig {\n apiKey: string\n /** Replicate model id, e.g. `meta/meta-llama-3-70b-instruct`. */\n model: string\n /** Optional pinned version hash (for non-official models). */\n version?: string\n /** Override the prediction endpoint base. */\n baseUrl?: string\n /** Map AdapterRequest → Replicate `input` object. Defaults to `{ prompt }`. */\n toInput?: (request: AdapterRequest) => Record<string, unknown>\n}\n\nconst DEFAULT_BASE_URL = 'https://api.replicate.com'\n\nfunction defaultPrompt(request: AdapterRequest): string {\n return request.messages\n .map(m => {\n if (m.role === 'system') return `[SYSTEM] ${m.content}`\n if (m.role === 'assistant') return `[ASSISTANT] ${m.content}`\n return `[USER] ${m.content}`\n })\n .join('\\n\\n') + '\\n\\n[ASSISTANT] '\n}\n\ninterface PredictionResponse {\n id: string\n urls?: { stream?: string; cancel?: string }\n error?: string\n}\n\nasync function* parseReplicateStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent = ''\n let sawDone = false\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n for (const line of lines) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7).trim()\n continue\n }\n if (!line.startsWith('data: ')) continue\n const data = line.slice(6)\n if (currentEvent === 'output' && data) {\n yield { type: 'text', content: data }\n } else if (currentEvent === 'done') {\n sawDone = true\n yield { type: 'done' }\n return\n } else if (currentEvent === 'error') {\n yield adapterErrorChunk(data || 'replicate stream error')\n return\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n if (!sawDone) {\n yield adapterErrorChunk('Replicate stream ended without done event')\n return\n }\n yield { type: 'done' }\n}\n\nexport function replicate(config: ReplicateConfig): AdapterFactory {\n const { apiKey, model, version, baseUrl = DEFAULT_BASE_URL, toInput = (r) => ({ prompt: defaultPrompt(r) }) } = config\n\n const predictionUrl = version\n ? `${baseUrl}/v1/predictions`\n : `${baseUrl}/v1/models/${model}/predictions`\n\n return {\n capabilities: {\n streaming: true,\n tools: false,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let aborted = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted) return\n try {\n const body: Record<string, unknown> = {\n input: toInput(request),\n stream: true,\n }\n if (version) body.version = version\n\n const response = await fetch(predictionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n })\n\n if (!response.ok) {\n yield adapterErrorChunk(`Replicate API error: ${response.status}`)\n return\n }\n\n const prediction = await response.json() as PredictionResponse\n if (prediction.error) {\n yield adapterErrorChunk(prediction.error)\n return\n }\n const streamUrl = prediction.urls?.stream\n if (!streamUrl) {\n yield adapterErrorChunk('Replicate prediction has no stream URL')\n return\n }\n\n const streamResponse = await fetch(streamUrl, {\n method: 'GET',\n headers: { Accept: 'text/event-stream' },\n signal: controller.signal,\n })\n if (!streamResponse.ok || !streamResponse.body) {\n yield adapterErrorChunk(`Replicate stream error: ${streamResponse.status}`)\n return\n }\n\n for await (const chunk of parseReplicateStream(streamResponse.body)) {\n if (aborted) return\n yield chunk\n }\n } catch (err) {\n if (isAbortError(err) || aborted) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n aborted = true\n controller.abort()\n },\n }\n },\n }\n}\n\nexport const replicateAdapter = replicate\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface BailConfig extends OpenAICompatibleConfig {}\n\nconst BAIL_BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1'\nconst DEFAULT_MODEL = 'qwen-max'\n\nconst baseFactory = createOpenAICompatibleAdapter(BAIL_BASE_URL)\n\n/**\n * Alibaba Bailian (Qwen) via the DashScope OpenAI-compatibility endpoint.\n *\n * Supports the Qwen-2.5 / 3 chat series and Qwen-VL multimodal models. APAC\n * users typically prefer this over OpenAI for latency + data residency.\n *\n * Default model: `qwen-max`.\n */\nexport function bail(config: Partial<BailConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as BailConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n }\n}\n\nexport const bailAdapter = bail\n/** Alias matching Alibaba's product naming. */\nexport const qwen = bail\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseGeminiStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { toGeminiContents } from './tool-history'\n\nexport interface VertexConfig {\n /** GCP project id. */\n project: string\n /** Region, e.g. `us-central1`. */\n region: string\n /** Vertex model id, e.g. `gemini-2.5-pro`. */\n model: string\n /**\n * OAuth2 access token, or a function returning one (called per request).\n *\n * Use the `google-auth-library` (or `gcloud auth print-access-token`) to\n * mint these — the adapter intentionally doesn't take that as a hard dep.\n */\n accessToken: string | (() => string | Promise<string>)\n /** Override the publisher (defaults to `google`; set for partner publishers). */\n publisher?: string\n retry?: RetryOptions\n}\n\nexport function vertex(config: VertexConfig): AdapterFactory {\n const { project, region, model, accessToken, publisher = 'google', retry } = config\n const url = `https://${region}-aiplatform.googleapis.com/v1/projects/${project}/locations/${region}/publishers/${publisher}/models/${model}:streamGenerateContent?alt=sse`\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n reasoning: model.includes('pro'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const systemMessage = request.messages.find(message => message.role === 'system')\n const body = {\n contents: toGeminiContents(request.messages),\n systemInstruction: systemMessage\n ? { role: 'system', parts: [{ text: systemMessage.content }] }\n : undefined,\n tools: request.context?.tools && request.context.tools.length > 0\n ? [{\n functionDeclarations: request.context.tools.map(tool => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n })),\n }]\n : undefined,\n }\n\n return createStreamSource(\n async (signal) => {\n const token = typeof accessToken === 'string' ? accessToken : await accessToken()\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n signal,\n })\n },\n parseGeminiStream,\n 'Vertex AI',\n retry,\n )\n },\n }\n}\n\nexport const vertexAdapter = vertex\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError, parseCompleteToolArgs } from './stream-errors'\nimport { toAnthropicMessages } from './tool-history'\n\nexport interface BedrockConfig {\n /** Bedrock model id, e.g. `anthropic.claude-3-5-sonnet-20241022-v2:0`. */\n model: string\n /** AWS region (e.g. `us-east-1`). Falls back to the SDK's default credential chain. */\n region?: string\n /** Override `max_tokens` (Anthropic on Bedrock requires it). Defaults to 4096. */\n maxTokens?: number\n /**\n * Override the SDK client. Mostly for tests; production code should let the\n * adapter create the client from `region` + the SDK's default credential\n * chain.\n */\n client?: BedrockRuntimeClientLike\n}\n\n/**\n * Minimal structural type for `BedrockRuntimeClient` so we don't take a hard\n * dep on `@aws-sdk/client-bedrock-runtime`.\n *\n * Second options argument is optional so existing one-argument injected\n * clients remain structurally valid.\n */\nexport interface BedrockRuntimeClientLike {\n send(\n command: { input: BedrockInvokeInput },\n options?: { abortSignal?: AbortSignal },\n ): Promise<{\n body?: AsyncIterable<{ chunk?: { bytes?: Uint8Array } }>\n }>\n}\n\ninterface BedrockInvokeInput {\n modelId: string\n contentType: string\n accept: string\n body: string\n}\n\ninterface SdkModule {\n BedrockRuntimeClient: new (config: { region?: string }) => BedrockRuntimeClientLike\n InvokeModelWithResponseStreamCommand: new (input: BedrockInvokeInput) => {\n input: BedrockInvokeInput\n }\n}\n\nlet cachedSdk: Promise<SdkModule> | null = null\nasync function loadSdk(): Promise<SdkModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n // Optional peer dep — resolved lazily so installs without AWS keep working.\n const moduleId = '@aws-sdk/client-bedrock-runtime'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as SdkModule\n } catch {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_MISSING,\n message:\n 'Install @aws-sdk/client-bedrock-runtime to use the bedrock adapter: npm install @aws-sdk/client-bedrock-runtime',\n hint: 'bedrock depends on the optional peer @aws-sdk/client-bedrock-runtime.',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nfunction isAnthropicModel(model: string): boolean {\n return model.startsWith('anthropic.')\n}\n\nfunction buildAnthropicBody(request: AdapterRequest, maxTokens: number): string {\n const messages = toAnthropicMessages(request.messages)\n const system = request.messages.find(m => m.role === 'system')?.content\n const tools = request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n }))\n const body: Record<string, unknown> = {\n anthropic_version: 'bedrock-2023-05-31',\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages,\n }\n if (system) body.system = system\n if (tools && tools.length > 0) body.tools = tools\n return JSON.stringify(body)\n}\n\nasync function* parseAnthropicBedrockEvents(\n events: AsyncIterable<{ chunk?: { bytes?: Uint8Array } }>,\n): AsyncIterableIterator<StreamChunk> {\n const decoder = new TextDecoder()\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n const emitTool = function* (\n tc: { id: string; name: string; args: string },\n ): Generator<StreamChunk, boolean> {\n const parsed = parseCompleteToolArgs(tc.args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return false\n }\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: parsed.args } }\n return true\n }\n\n for await (const item of events) {\n const bytes = item.chunk?.bytes\n if (!bytes) continue\n let event: Record<string, unknown>\n try {\n event = JSON.parse(decoder.decode(bytes)) as Record<string, unknown>\n } catch {\n continue\n }\n const type = event.type as string | undefined\n if (type === 'content_block_delta') {\n const delta = event.delta as { type?: string; text?: string; partial_json?: string } | undefined\n if (delta?.type === 'text_delta' && delta.text) {\n yield { type: 'text', content: delta.text }\n } else if (delta?.type === 'input_json_delta') {\n const index = (event.index as number | undefined) ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) existing.args += delta.partial_json ?? ''\n }\n } else if (type === 'content_block_start') {\n const index = (event.index as number | undefined) ?? 0\n const block = event.content_block as { type?: string; id?: string; name?: string } | undefined\n if (block?.type === 'tool_use' && block.id && block.name) {\n pendingToolCalls.set(index, { id: block.id, name: block.name, args: '' })\n }\n } else if (type === 'content_block_stop') {\n const index = (event.index as number | undefined) ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n if (!(yield* emitTool(tc))) {\n pendingToolCalls.clear()\n return\n }\n pendingToolCalls.delete(index)\n }\n } else if (type === 'message_delta') {\n const usage = event.usage as { input_tokens?: number; output_tokens?: number } | undefined\n if (usage) {\n const promptTokens = usage.input_tokens ?? 0\n const completionTokens = usage.output_tokens ?? 0\n yield {\n type: 'usage',\n usage: { promptTokens, completionTokens, totalTokens: promptTokens + completionTokens },\n } as StreamChunk\n }\n } else if (type === 'message_start') {\n const usage = (event.message as { usage?: { input_tokens?: number } } | undefined)?.usage\n if (usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: usage.input_tokens ?? 0,\n completionTokens: 0,\n totalTokens: usage.input_tokens ?? 0,\n },\n } as StreamChunk\n }\n } else if (type === 'message_stop') {\n for (const [, tc] of pendingToolCalls) {\n if (!(yield* emitTool(tc))) {\n pendingToolCalls.clear()\n return\n }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n }\n\n pendingToolCalls.clear()\n yield adapterErrorChunk('Bedrock stream ended before message_stop')\n}\n\nexport function bedrock(config: BedrockConfig): AdapterFactory {\n const { model, region, maxTokens = 4096 } = config\n\n if (!isAnthropicModel(model)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `bedrock: model \"${model}\" is not supported in v1. Only anthropic.* models are wired up; Titan + others are tracked as a follow-up.`,\n hint: 'Pass an anthropic.* model id like \"anthropic.claude-3-5-sonnet-20241022-v2:0\".',\n })\n }\n\n let clientPromise: Promise<BedrockRuntimeClientLike> | null = null\n const getClient = async (): Promise<BedrockRuntimeClientLike> => {\n if (config.client) return config.client\n if (!clientPromise) {\n clientPromise = (async () => {\n const sdk = await loadSdk()\n return new sdk.BedrockRuntimeClient({ region })\n })()\n }\n return clientPromise\n }\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let aborted = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted || controller.signal.aborted) return\n try {\n const client = await getClient()\n if (aborted || controller.signal.aborted) return\n const sdk = config.client ? null : await loadSdk()\n const input: BedrockInvokeInput = {\n modelId: model,\n contentType: 'application/json',\n accept: 'application/json',\n body: buildAnthropicBody(request, maxTokens),\n }\n const command = sdk\n ? new sdk.InvokeModelWithResponseStreamCommand(input)\n : { input }\n const response = await client.send(command, { abortSignal: controller.signal })\n if (!response.body) {\n yield adapterErrorChunk('Bedrock: empty response body')\n return\n }\n for await (const chunk of parseAnthropicBedrockEvents(response.body)) {\n if (aborted || controller.signal.aborted) return\n yield chunk\n }\n } catch (err) {\n if (isAbortError(err) || aborted) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n aborted = true\n controller.abort()\n },\n }\n },\n }\n}\n\nexport const bedrockAdapter = bedrock\n","import { AdapterError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError, raceAbort } from './stream-errors'\n\n/**\n * Browser-only adapter backed by WebLLM (https://github.com/mlc-ai/web-llm).\n * Models run on-device via WebGPU; no network for inference. The MLCEngine\n * is loaded lazily on first stream so apps can ship the import without\n * paying the wasm cost up front.\n *\n * `@mlc-ai/web-llm` is an **optional peer dependency** — install it\n * alongside this package when you opt into browser-only inference.\n */\n\nexport interface WebLlmConfig {\n /** Model id from MLC's catalog, e.g. `Llama-3.1-8B-Instruct-q4f16_1-MLC`. */\n model: string\n /**\n * Override the engine to inject a pre-loaded one (the MLCEngine spin-up\n * is non-trivial — apps usually warm it once, not per turn).\n */\n engine?: WebLlmEngineLike\n /** Engine progress callback (model download / compile percent). */\n onProgress?: (info: { progress: number; text: string }) => void\n}\n\nexport interface WebLlmEngineLike {\n reload(model: string, opts?: { initProgressCallback?: (i: { progress: number; text: string }) => void }): Promise<void>\n chat: {\n completions: {\n create(params: {\n messages: Array<{ role: string; content: string }>\n stream: true\n }): AsyncIterable<{ choices: Array<{ delta?: { content?: string } }> }> | Promise<AsyncIterable<{ choices: Array<{ delta?: { content?: string } }> }>>\n }\n }\n}\n\ninterface WebLlmModule {\n CreateMLCEngine(model: string, opts?: { initProgressCallback?: (i: { progress: number; text: string }) => void }): Promise<WebLlmEngineLike>\n}\n\nlet cachedSdk: Promise<WebLlmModule> | null = null\nasync function loadSdk(): Promise<WebLlmModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n const moduleId = '@mlc-ai/web-llm'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as WebLlmModule\n } catch {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_MISSING,\n message: 'Install @mlc-ai/web-llm to use the webllm adapter: npm install @mlc-ai/web-llm',\n hint: 'webllm is browser-only and depends on the optional peer @mlc-ai/web-llm.',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nexport function webllm(config: WebLlmConfig): AdapterFactory {\n let enginePromise: Promise<WebLlmEngineLike> | null = null\n const getEngine = (): Promise<WebLlmEngineLike> => {\n if (config.engine) return Promise.resolve(config.engine)\n if (!enginePromise) {\n enginePromise = (async () => {\n const sdk = await loadSdk()\n return sdk.CreateMLCEngine(config.model, { initProgressCallback: config.onProgress })\n })()\n }\n return enginePromise\n }\n\n return {\n capabilities: {\n streaming: true,\n tools: false,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let aborted = false\n let activeIter: AsyncIterator<{ choices: Array<{ delta?: { content?: string } }> }> | null = null\n\n const softAbort = (): void => {\n aborted = true\n if (!controller.signal.aborted) controller.abort()\n if (activeIter && typeof activeIter.return === 'function') {\n void activeIter.return(undefined).catch(() => {})\n }\n }\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted || controller.signal.aborted) return\n try {\n const engine = await raceAbort(getEngine(), controller.signal)\n if (aborted || controller.signal.aborted) return\n\n const messages = request.messages.map(m => ({ role: m.role, content: m.content }))\n const completion = await raceAbort(\n Promise.resolve(\n engine.chat.completions.create({ messages, stream: true }),\n ),\n controller.signal,\n )\n if (aborted || controller.signal.aborted) return\n\n activeIter = completion[Symbol.asyncIterator]()\n while (true) {\n if (aborted || controller.signal.aborted) {\n if (typeof activeIter.return === 'function') {\n await activeIter.return(undefined).catch(() => {})\n }\n return\n }\n const next = await raceAbort(activeIter.next(), controller.signal)\n if (next.done) break\n if (aborted || controller.signal.aborted) {\n if (typeof activeIter.return === 'function') {\n await activeIter.return(undefined).catch(() => {})\n }\n return\n }\n const delta = next.value.choices[0]?.delta?.content\n if (delta) yield { type: 'text', content: delta }\n }\n if (aborted || controller.signal.aborted) return\n yield { type: 'done' }\n } catch (err) {\n if (isAbortError(err) || aborted || controller.signal.aborted) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n softAbort()\n },\n }\n },\n }\n}\n\nexport const webllmAdapter = webllm\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type {\n AdapterCapabilities,\n AdapterFactory,\n AdapterRequest,\n DataRegion,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\nimport { isAbortError, raceAbort } from './stream-errors'\n\nexport interface RouterCandidate {\n id: string\n adapter: AdapterFactory\n /** Data residency region for this adapter endpoint. */\n region?: DataRegion\n /**\n * Relative cost hint (lower wins for policy='cheapest'). Only\n * relative values matter — use $/1M tokens or any consistent unit.\n */\n cost?: number\n /** Typical latency in ms. Lower wins for policy='fastest'. */\n latencyMs?: number\n /**\n * Capability override. Defaults to `adapter.capabilities`.\n * Used to reject candidates missing required features\n * (e.g. tools, multiModal).\n */\n capabilities?: AdapterCapabilities\n /** Free-form tags used by classifier routing (e.g. 'fast', 'coding'). */\n tags?: string[]\n /**\n * Estimated grid CO2 intensity (gCO2eq per 1k tokens) for this\n * adapter+region. Lower wins for `policy='greenest'`. Use\n * `applyCarbonTable()` to populate from `DEFAULT_CARBON_TABLE` or\n * a custom table.\n */\n gCO2PerKtok?: number\n}\n\nexport type RouterPolicy =\n | 'cheapest'\n | 'fastest'\n | 'greenest'\n | 'green-cost'\n | 'capability-match'\n | ((input: { request: AdapterRequest; candidates: RouterCandidate[] }) => string | Promise<string>)\n\nexport interface RouterOptions {\n candidates: RouterCandidate[]\n /** Require all selected adapters to match this data-residency region. */\n region?: DataRegion\n /** Dynamic region selector. Takes precedence over `region`. */\n regionOf?: (request: AdapterRequest) => DataRegion | undefined\n /** Policy when `classify` doesn't pick a candidate. Default 'cheapest'. */\n policy?: RouterPolicy\n /**\n * Fast path: inspect the request, return a candidate id or tag(s).\n * Return `undefined` to fall back to `policy`.\n */\n classify?: (request: AdapterRequest) => string | string[] | undefined\n /** Observability hook — fires once per decision. */\n onRoute?: (decision: { id: string; reason: string; request: AdapterRequest }) => void\n}\n\nfunction requireCapabilities(request: AdapterRequest): AdapterCapabilities {\n const needs: AdapterCapabilities = {}\n if (request.context?.tools && request.context.tools.length > 0) needs.tools = true\n return needs\n}\n\nfunction matchesCapabilities(need: AdapterCapabilities, have: AdapterCapabilities | undefined): boolean {\n if (!have) return true\n for (const key of Object.keys(need) as Array<keyof AdapterCapabilities>) {\n if (key === 'extensions') continue\n if (need[key] && have[key] === false) return false\n }\n return true\n}\n\nfunction pickSyncPolicy(\n pool: RouterCandidate[],\n policy: Exclude<RouterPolicy, (...a: never[]) => unknown>,\n): { c: RouterCandidate; reason: string } {\n if (policy === 'cheapest') {\n const c = pool.reduce((best, x) => ((x.cost ?? Infinity) < (best.cost ?? Infinity) ? x : best), pool[0]!)\n return { c, reason: 'cheapest' }\n }\n if (policy === 'fastest') {\n const c = pool.reduce((best, x) => ((x.latencyMs ?? Infinity) < (best.latencyMs ?? Infinity) ? x : best), pool[0]!)\n return { c, reason: 'fastest' }\n }\n if (policy === 'greenest') {\n const c = pool.reduce((best, x) => ((x.gCO2PerKtok ?? Infinity) < (best.gCO2PerKtok ?? Infinity) ? x : best), pool[0]!)\n return { c, reason: 'greenest' }\n }\n if (policy === 'green-cost') {\n // Composite score: normalised carbon × normalised cost. Lower wins.\n // A candidate missing either signal is treated as median (neutral).\n const carbonValues = pool.map(p => p.gCO2PerKtok).filter((v): v is number => v != null)\n const costValues = pool.map(p => p.cost).filter((v): v is number => v != null)\n const maxC = Math.max(1, ...carbonValues)\n const maxCost = Math.max(1, ...costValues)\n const score = (x: RouterCandidate): number => {\n const carbon = (x.gCO2PerKtok ?? maxC / 2) / maxC\n const cost = (x.cost ?? maxCost / 2) / maxCost\n return carbon + cost\n }\n const c = pool.reduce((best, x) => (score(x) < score(best) ? x : best), pool[0]!)\n return { c, reason: 'green-cost' }\n }\n return { c: pool[0]!, reason: 'capability-match' }\n}\n\nfunction matchesRegion(candidate: RouterCandidate, region: DataRegion | undefined): boolean {\n return region === undefined || candidate.region === region\n}\n\n/**\n * Build an AdapterFactory that picks one of N candidates per request.\n *\n * Resolution order:\n * 1. `classify(request)` returns a candidate id → use it\n * 2. `classify(request)` returns tag(s) → filter by tags, then `policy`\n * 3. Fall back to `policy` over all capability-matched candidates\n */\nexport function createRouter(options: RouterOptions): AdapterFactory {\n const { candidates } = options\n if (candidates.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'createRouter requires at least one candidate',\n hint: 'Pass at least one candidate, e.g. createRouter({ candidates: [{ id, adapter, capabilities }] }).',\n })\n }\n const policy = options.policy ?? 'cheapest'\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const need = requireCapabilities(request)\n const region = options.regionOf?.(request) ?? options.region\n const capable = candidates.filter(c => matchesCapabilities(need, c.capabilities ?? c.adapter.capabilities))\n const eligible = capable.filter(c => matchesRegion(c, region))\n\n if (capable.length > 0 && eligible.length === 0 && region !== undefined) {\n // Programmer configuration at createSource time — ADR allows throw.\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `no candidate satisfies required region: ${region}`,\n hint: 'Set candidate.region to the requested data-residency region, or remove the router region requirement.',\n })\n }\n\n const classified = options.classify?.(request)\n if (typeof classified === 'string') {\n const c = eligible.find(x => x.id === classified)\n if (c) {\n options.onRoute?.({ id: c.id, reason: region ? `classify:id:${region}` : 'classify:id', request })\n return c.adapter.createSource(request)\n }\n }\n\n let pool = eligible\n let pickedBy: string | undefined\n if (Array.isArray(classified) && classified.length > 0) {\n const filtered = eligible.filter(c => c.tags && classified.every(t => c.tags!.includes(t)))\n if (filtered.length > 0) {\n pool = filtered\n pickedBy = region ? `classify:tags:${region}` : 'classify:tags'\n }\n }\n\n if (pool.length === 0) {\n // No eligible candidate for this request — config/setup failure at createSource.\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'no candidate satisfies the request',\n hint: 'Ensure at least one candidate declares the required capabilities (tools, json, etc.).',\n })\n }\n\n if (typeof policy === 'function') {\n const maybe = policy({ request, candidates: pool })\n if (typeof maybe !== 'string') {\n // Defer resolution into the streamed source.\n const controller = new AbortController()\n let child: StreamSource | undefined\n return {\n abort: () => {\n controller.abort()\n child?.abort()\n },\n stream: async function* () {\n let id: string\n try {\n id = await raceAbort(maybe, controller.signal)\n } catch (err) {\n if (isAbortError(err)) return\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n const c = pool.find(x => x.id === id)\n if (!c) {\n const error = new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `policy returned unknown id: ${id}`,\n hint: 'Custom policy functions must return one of the candidate ids.',\n })\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n try {\n options.onRoute?.({ id: c.id, reason: pickedBy ?? 'custom policy', request })\n child = c.adapter.createSource(request)\n for await (const chunk of child.stream()) {\n yield chunk\n }\n } catch (err) {\n if (controller.signal.aborted || isAbortError(err)) return\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n }\n },\n }\n }\n const c = pool.find(x => x.id === maybe)\n if (!c) {\n // Sync policy at createSource — programmer error may throw.\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `policy returned unknown id: ${maybe}`,\n hint: 'Custom policy functions must return one of the candidate ids.',\n })\n }\n options.onRoute?.({ id: c.id, reason: pickedBy ?? 'custom policy', request })\n return c.adapter.createSource(request)\n }\n\n const { c, reason } = pickSyncPolicy(pool, policy)\n options.onRoute?.({ id: c.id, reason: pickedBy ?? reason, request })\n return c.adapter.createSource(request)\n },\n }\n}\n","import type { RouterCandidate } from './router'\n\n/**\n * Carbon-aware routing data. Estimated grid CO2 intensity (gCO2eq per\n * 1k tokens) per provider+region. Numbers are best-effort approximations\n * derived from public grid-mix data and provider PUE disclosures — they\n * are good enough to differentiate \"very dirty\" from \"very clean\" but\n * are not audited.\n *\n * Sources:\n * - Electricity Maps (electricitymaps.com) for grid carbon intensity.\n * - Provider PUE / efficiency reports (Anthropic, Google, AWS).\n * - LLMCarbon (Faiz et al., 2024) for tok→J coefficients.\n *\n * Pull-requests welcome to refine. The table is community-updateable\n * and ships at compile time; a runtime table can be passed via\n * `applyCarbonTable(candidates, customTable)`.\n *\n * Closes part of issue #209.\n */\n\nexport type ProviderRegionKey = `${string}:${string}`\n\nexport type CarbonTable = Record<ProviderRegionKey, number>\n\n/**\n * Default carbon table. Keys are `provider:region`; values are\n * estimated gCO2eq per 1k tokens of typical mixed input/output. Lower\n * is greener.\n */\nexport const DEFAULT_CARBON_TABLE: CarbonTable = {\n // Anthropic — primarily AWS us-east-* / eu-west-* via Bedrock-style fronts.\n 'anthropic:us-east-1': 0.42,\n 'anthropic:us-west-2': 0.18,\n 'anthropic:eu-central-1': 0.32,\n 'anthropic:eu-west-1': 0.27,\n\n // OpenAI — Azure East US / West Europe / Sweden Central.\n 'openai:eastus': 0.40,\n 'openai:westus3': 0.19,\n 'openai:swedencentral': 0.04,\n 'openai:westeurope': 0.28,\n\n // Google (Vertex / Gemini) — typically reports lowest PUE.\n 'google:us-central1': 0.34,\n 'google:us-west1': 0.16,\n 'google:europe-west1': 0.21,\n 'google:europe-north1': 0.05,\n\n // AWS Bedrock direct.\n 'aws:us-east-1': 0.42,\n 'aws:us-west-2': 0.18,\n 'aws:eu-west-1': 0.27,\n\n // Local / on-device — only the device's grid matters.\n 'ollama:local': 0.30,\n 'webllm:browser': 0.30,\n 'lmstudio:local': 0.30,\n\n // Self-hosted / community.\n 'groq:us-east-1': 0.40,\n 'fireworks:us-west-2': 0.18,\n 'together:us-east-1': 0.42,\n 'cerebras:us-west-2': 0.18,\n}\n\nexport interface ApplyCarbonOptions {\n /** Override the default table. */\n table?: CarbonTable\n /**\n * How to derive the lookup key for a candidate. Defaults to\n * `${provider}:${region}` where `provider` is the candidate id\n * before the first `-` and `region` is `candidate.region`.\n */\n keyFor?: (candidate: RouterCandidate) => ProviderRegionKey | undefined\n /** Fallback gCO2eq per 1k tokens when no table entry is found. */\n fallback?: number\n}\n\nfunction defaultKey(candidate: RouterCandidate): ProviderRegionKey | undefined {\n if (!candidate.region) return undefined\n const provider = candidate.id.split(/[-:]/)[0]\n return `${provider}:${candidate.region}` as ProviderRegionKey\n}\n\n/**\n * Decorate a list of router candidates with `gCO2PerKtok` from a\n * carbon table. Returns a new list — does not mutate the input.\n *\n * ```ts\n * const candidates = applyCarbonTable([\n * { id: 'openai-eu', adapter: openai({...}), region: 'swedencentral', cost: 0.6 },\n * { id: 'anthropic-us', adapter: anthropic({...}), region: 'us-east-1', cost: 0.5 },\n * ])\n *\n * const router = createRouter({ candidates, policy: 'green-cost' })\n * ```\n */\nexport function applyCarbonTable(\n candidates: RouterCandidate[],\n options: ApplyCarbonOptions = {},\n): RouterCandidate[] {\n const table = options.table ?? DEFAULT_CARBON_TABLE\n const keyFor = options.keyFor ?? defaultKey\n return candidates.map(c => {\n if (c.gCO2PerKtok != null) return c\n const key = keyFor(c)\n const value = key ? table[key] : undefined\n return { ...c, gCO2PerKtok: value ?? options.fallback }\n })\n}\n\n/**\n * Estimated CO2 emitted by a single completion (grams). Multiply\n * `gCO2PerKtok` by `tokens / 1000`. Provided as a convenience for\n * dashboards / chargeback reports — runtimes typically derive this\n * from token usage events.\n */\nexport function estimateCO2Grams(gCO2PerKtok: number | undefined, tokens: number): number {\n if (gCO2PerKtok == null) return 0\n return (tokens / 1000) * gCO2PerKtok\n}\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { isAbortError } from './stream-errors'\n\nexport interface EnsembleCandidate {\n id: string\n adapter: AdapterFactory\n /** Weight used by 'weighted-vote' aggregator. Default 1. */\n weight?: number\n}\n\nexport interface EnsembleBranchResult {\n id: string\n text: string\n chunks: StreamChunk[]\n error?: Error\n}\n\nexport type EnsembleAggregator =\n | 'majority-vote'\n | 'concat'\n | 'longest'\n | ((branches: EnsembleBranchResult[]) => string | Promise<string>)\n\nexport interface EnsembleOptions {\n candidates: EnsembleCandidate[]\n /** How to combine branches into the single output text. Default 'majority-vote'. */\n aggregate?: EnsembleAggregator\n /** Per-candidate timeout in ms. Branches that time out are marked with an error. */\n timeoutMs?: number\n /** Observability hook — fires once with every branch's result. */\n onBranches?: (branches: EnsembleBranchResult[]) => void\n}\n\nasync function drain(source: StreamSource, timeoutMs?: number): Promise<{ chunks: StreamChunk[]; text: string; error?: Error }> {\n const chunks: StreamChunk[] = []\n let text = ''\n let timer: ReturnType<typeof setTimeout> | undefined\n let timedOut = false\n let error: Error | undefined\n if (timeoutMs !== undefined) {\n timer = setTimeout(() => {\n timedOut = true\n source.abort()\n }, timeoutMs)\n }\n try {\n for await (const chunk of source.stream()) {\n chunks.push(chunk)\n if (chunk.type === 'text' && typeof chunk.content === 'string') text += chunk.content\n if (chunk.type === 'error') {\n const metaErr = chunk.metadata?.error\n error = metaErr instanceof Error\n ? metaErr\n : new Error(chunk.content ?? 'stream error')\n }\n }\n } catch (err) {\n if (!isAbortError(err)) {\n error = err instanceof Error ? err : new Error(String(err))\n } else if (!timedOut) {\n error = err instanceof Error ? err : new Error(String(err))\n }\n } finally {\n if (timer) clearTimeout(timer)\n }\n if (timedOut) error = new Error(`timeout after ${timeoutMs}ms`)\n return { chunks, text, error }\n}\n\nfunction majorityVote(branches: EnsembleBranchResult[], candidates: EnsembleCandidate[]): string {\n const counts = new Map<string, number>()\n const weightById = new Map(candidates.map(c => [c.id, c.weight ?? 1]))\n for (const b of branches) {\n if (b.error) continue\n counts.set(b.text, (counts.get(b.text) ?? 0) + (weightById.get(b.id) ?? 1))\n }\n let best = ''\n let bestScore = -1\n for (const [text, score] of counts) {\n if (score > bestScore) {\n bestScore = score\n best = text\n }\n }\n return best\n}\n\n/**\n * Build an AdapterFactory that runs the same request against N\n * candidates in parallel, then aggregates the results into a single\n * text output. Unlike `speculate` (which picks a winner), `ensemble`\n * combines — majority vote, concatenation, longest, or a custom fn.\n *\n * The returned source emits a single `{ type: 'text' }` chunk with\n * the aggregated output followed by `{ type: 'done' }`, so it plugs\n * into any runtime that expects a regular streaming adapter.\n */\nexport function createEnsembleAdapter(options: EnsembleOptions): AdapterFactory {\n if (options.candidates.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'createEnsembleAdapter requires at least one candidate',\n hint: 'Pass at least one candidate, e.g. createEnsembleAdapter({ candidates: [{ id, adapter }] }).',\n })\n }\n const aggregate = options.aggregate ?? 'majority-vote'\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let aborted = false\n const sources: StreamSource[] = []\n\n const run = async (): Promise<EnsembleBranchResult[]> => {\n const tasks = options.candidates.map(async (c, i): Promise<EnsembleBranchResult> => {\n try {\n const source = c.adapter.createSource(request)\n sources[i] = source\n if (aborted) {\n source.abort()\n return { id: c.id, chunks: [], text: '', error: new Error('aborted') }\n }\n const { chunks, text, error } = await drain(source, options.timeoutMs)\n return { id: c.id, chunks, text, error }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n return { id: c.id, chunks: [], text: '', error }\n }\n })\n return Promise.all(tasks)\n }\n\n const finalText = async (branches: EnsembleBranchResult[]): Promise<string> => {\n if (typeof aggregate === 'function') return aggregate(branches)\n if (aggregate === 'concat') {\n return branches\n .filter(b => !b.error)\n .map(b => b.text)\n .join('\\n---\\n')\n }\n if (aggregate === 'longest') {\n return branches\n .filter(b => !b.error)\n .reduce(\n (best, b) => (b.text.length > best.length ? b.text : best),\n '',\n )\n }\n return majorityVote(branches, options.candidates)\n }\n\n return {\n abort: () => {\n aborted = true\n for (const s of sources) s?.abort()\n },\n stream: async function* () {\n if (aborted) return\n const branches = await run()\n options.onBranches?.(branches)\n if (aborted) {\n for (const s of sources) s?.abort()\n return\n }\n try {\n const text = await finalText(branches)\n if (!text && branches.every(b => b.error)) {\n const summary = branches\n .map(b => `${b.id}: ${b.error?.message ?? 'unknown'}`)\n .join('; ')\n const err = new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `all ensemble branches failed (${summary})`,\n hint: 'Inspect each branch error via options.onBranches or the err.branchErrors field.',\n })\n ;(err as AdapterError & { branchErrors: Array<{ id: string; error: Error | undefined }> }).branchErrors =\n branches.map(b => ({ id: b.id, error: b.error }))\n yield {\n type: 'error',\n content: err.message,\n metadata: { error: err },\n } as StreamChunk\n return\n }\n yield {\n type: 'text',\n content: text,\n metadata: {\n ensemble: branches.map(b => ({\n id: b.id,\n bytes: b.text.length,\n error: b.error?.message,\n })),\n },\n } as StreamChunk\n yield { type: 'done' } as StreamChunk\n } catch (err) {\n if (aborted || isAbortError(err)) return\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n }\n },\n }\n },\n }\n}\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { isAbortError } from './stream-errors'\n\nexport interface FallbackOptions {\n /**\n * Predicate deciding whether an error from a given adapter should\n * trigger fall-through to the next. Default: always retry the next.\n */\n shouldRetry?: (error: Error, index: number) => boolean\n /** Observability hook — fires when one adapter fails and the chain advances. */\n onFallback?: (from: { id: string; index: number; error: Error }) => void\n}\n\nexport interface FallbackCandidate {\n id: string\n adapter: AdapterFactory\n}\n\n/**\n * Try adapters in order. If the first fails (throws while opening, or\n * errors mid-stream before emitting any non-done chunk), fall through\n * to the next. As soon as a candidate produces its first real chunk,\n * that's the committed one — we don't retroactively retry mid-stream.\n *\n * Errors that happen *after* committing are propagated; the caller\n * sees a normal streaming failure, not a mysterious cross-candidate\n * retry that could duplicate tool calls.\n */\nexport function createFallbackAdapter(\n candidates: FallbackCandidate[],\n options: FallbackOptions = {},\n): AdapterFactory {\n if (candidates.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'createFallbackAdapter requires at least one candidate',\n hint: 'Pass at least one candidate, e.g. createFallbackAdapter([{ id: \"primary\", adapter }]).',\n })\n }\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let active: StreamSource | undefined\n let aborted = false\n\n return {\n abort: () => {\n aborted = true\n active?.abort()\n },\n stream: async function* () {\n const errors: Array<{ id: string; error: Error }> = []\n for (let i = 0; i < candidates.length; i++) {\n if (aborted) return\n const candidate = candidates[i]!\n let source: StreamSource\n try {\n source = candidate.adapter.createSource(request)\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n errors.push({ id: candidate.id, error })\n options.onFallback?.({ id: candidate.id, index: i, error })\n if (options.shouldRetry && !options.shouldRetry(error, i)) {\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n continue\n }\n active = source\n\n // Pull until the first *committing* chunk. A throw, zero chunks, or\n // a leading `error` chunk (e.g. a 404 stale-model / 429 rate-limit\n // that the provider adapter surfaces as a chunk instead of throwing)\n // marks this candidate failed → advance to the next. Once a real\n // content chunk commits, mid-stream errors propagate (no retry).\n const iter = source.stream()[Symbol.asyncIterator]()\n let firstReal: StreamChunk | undefined\n let branchError: Error | undefined\n const leadingUsage: StreamChunk[] = []\n try {\n while (true) {\n if (aborted) {\n source.abort()\n return\n }\n const r = await iter.next()\n if (r.done) {\n branchError = new Error(`candidate ${candidate.id} emitted no chunks`)\n break\n }\n if (r.value.type === 'error') {\n const metaErr = r.value.metadata?.error\n branchError =\n metaErr instanceof Error\n ? metaErr\n : new Error(\n `candidate ${candidate.id}: ${r.value.content ?? 'stream error'}`,\n )\n break\n }\n if (r.value.type === 'usage') {\n leadingUsage.push(r.value)\n continue\n }\n firstReal = r.value\n break\n }\n } catch (err) {\n if (isAbortError(err) || aborted) {\n source.abort()\n return\n }\n branchError = err instanceof Error ? err : new Error(String(err))\n }\n\n if (branchError || !firstReal) {\n const error = branchError ?? new Error(`candidate ${candidate.id} emitted no chunks`)\n errors.push({ id: candidate.id, error })\n options.onFallback?.({ id: candidate.id, index: i, error })\n try {\n source.abort()\n } catch {\n // ignore\n }\n if (typeof iter.return === 'function') {\n try {\n await iter.return(undefined)\n } catch {\n // ignore\n }\n }\n if (options.shouldRetry && !options.shouldRetry(error, i)) {\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n active = undefined\n continue\n }\n\n for (const chunk of leadingUsage) yield chunk\n yield firstReal\n while (true) {\n if (aborted) {\n source.abort()\n return\n }\n try {\n const next = await iter.next()\n if (next.done) return\n yield next.value\n } catch (err) {\n if (isAbortError(err) || aborted) {\n source.abort()\n return\n }\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n }\n }\n const summary = errors.map(e => `${e.id}: ${e.error.message}`).join('; ')\n const err = new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `all fallback candidates failed (${summary})`,\n hint: 'Check each candidate adapter\\'s configuration and provider keys.',\n })\n yield {\n type: 'error',\n content: err.message,\n metadata: { error: err },\n } as StreamChunk\n },\n }\n },\n }\n}\n","import { ConfigError, ErrorCodes } from '@agentskit/core'\nimport type {\n AdapterFactory,\n AdapterRequest,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\nimport { abortableSleep, adapterErrorChunk, isAbortError } from './stream-errors'\n\nexport type MockResponse = StreamChunk[] | ((request: AdapterRequest) => StreamChunk[])\n\nexport interface MockAdapterOptions {\n /**\n * Static chunks, a request-aware function, or a sequence of responses\n * (the i-th call returns the i-th item, looping when exhausted).\n */\n response: MockResponse | MockResponse[]\n /** ms between yielded chunks. Default 0 (synchronous). */\n delayMs?: number\n /** Track every request the adapter received. Useful for assertions. */\n history?: AdapterRequest[]\n}\n\n/**\n * A deterministic adapter for tests, demos, and dry-run experiments.\n *\n * Conforms to ADR 0001 — Adapter contract:\n * - createSource is pure (A1) — no work until stream() runs\n * - Always emits a terminal chunk (A3)\n * - abort() is safe (A6)\n * - Does not mutate input messages (A7)\n *\n * Examples:\n *\n * // Static\n * const adapter = mockAdapter({\n * response: [\n * { type: 'text', content: 'Hello!' },\n * { type: 'done' },\n * ],\n * })\n *\n * // Request-aware\n * const adapter = mockAdapter({\n * response: req => {\n * const last = req.messages[req.messages.length - 1]?.content ?? ''\n * return [\n * { type: 'text', content: 'Echo: ' + last },\n * { type: 'done' },\n * ]\n * },\n * })\n *\n * // Sequenced — different output each call\n * const adapter = mockAdapter({\n * response: [\n * [{ type: 'text', content: 'first' }, { type: 'done' }],\n * [{ type: 'text', content: 'second' }, { type: 'done' }],\n * ],\n * })\n */\nexport function mockAdapter(options: MockAdapterOptions): AdapterFactory {\n const { response, delayMs = 0, history } = options\n let callIndex = 0\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let myCall: number | undefined\n let cancelled = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (cancelled || controller.signal.aborted) return\n try {\n if (myCall === undefined) {\n myCall = callIndex++\n history?.push(request)\n }\n const chunks = resolve(response, myCall, request)\n\n for (const chunk of chunks) {\n if (cancelled || controller.signal.aborted) return\n if (delayMs > 0) {\n await abortableSleep(delayMs, controller.signal, ms => new Promise(resolveTimer => setTimeout(resolveTimer, ms)))\n }\n if (cancelled || controller.signal.aborted) return\n if (chunk.type === 'error' && !(chunk.metadata?.error instanceof Error)) {\n const normalized = adapterErrorChunk(\n chunk.content ?? 'Mock adapter error',\n { cause: chunk.metadata?.error },\n )\n yield {\n ...chunk,\n metadata: { ...chunk.metadata, ...normalized.metadata },\n }\n return\n }\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') return\n }\n\n yield { type: 'done' }\n } catch (error) {\n if (cancelled || controller.signal.aborted || isAbortError(error)) return\n const message = error instanceof Error ? error.message : String(error)\n yield adapterErrorChunk(message, { cause: error })\n }\n },\n abort: () => {\n cancelled = true\n controller.abort()\n },\n }\n },\n }\n}\n\nfunction resolve(\n response: MockResponse | MockResponse[],\n callIndex: number,\n request: AdapterRequest,\n): StreamChunk[] {\n if (Array.isArray(response) && response.length > 0 && Array.isArray(response[0])) {\n // Sequenced responses\n const sequence = response as StreamChunk[][]\n const item = sequence[callIndex % sequence.length]\n return item\n }\n if (Array.isArray(response) && response.length > 0 && typeof response[0] === 'function') {\n // Sequenced functions\n const sequence = response as Array<(req: AdapterRequest) => StreamChunk[]>\n return sequence[callIndex % sequence.length](request)\n }\n if (typeof response === 'function') {\n return response(request)\n }\n return response as StreamChunk[]\n}\n\n// ============================================================================\n// Recording / replay\n// ============================================================================\n\nexport interface RecordedTurn {\n /** ISO timestamp when this turn was recorded. */\n recordedAt: string\n /** The request that produced this turn. */\n request: AdapterRequest\n /** Every chunk yielded by the wrapped adapter. */\n chunks: StreamChunk[]\n}\n\nexport type RecordingFixture = RecordedTurn[]\n\nexport interface RecordingSink {\n push(turn: RecordedTurn): void | Promise<void>\n}\n\n/**\n * Wrap a real adapter so every turn is captured to a sink. Use this in\n * dev to build up a fixture, then replay with replayAdapter() in tests.\n */\nexport function recordingAdapter(\n inner: AdapterFactory,\n sink: RecordingSink,\n): AdapterFactory {\n return {\n capabilities: inner.capabilities,\n createSource: (request: AdapterRequest): StreamSource => {\n let innerSource: StreamSource | undefined\n const captured: StreamChunk[] = []\n let aborted = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted) return\n const recordedAt = new Date().toISOString()\n try {\n innerSource = inner.createSource(request)\n for await (const chunk of innerSource.stream()) {\n if (aborted) return\n captured.push(chunk)\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') return\n }\n const errorChunk = adapterErrorChunk('Recorded adapter ended without a terminal chunk')\n captured.push(errorChunk)\n yield errorChunk\n } catch (error) {\n if (aborted || isAbortError(error)) return\n const message = error instanceof Error ? error.message : String(error)\n const errorChunk = adapterErrorChunk(message, { cause: error })\n captured.push(errorChunk)\n yield errorChunk\n } finally {\n try {\n await sink.push({ recordedAt, request, chunks: captured })\n } catch {\n // Recording must not corrupt the wrapped adapter stream.\n }\n }\n },\n abort: () => {\n aborted = true\n innerSource?.abort()\n },\n }\n },\n }\n}\n\n/**\n * In-memory recording sink — useful for tests and ephemeral capture.\n */\nexport function inMemorySink(): RecordingSink & { fixture: RecordingFixture } {\n const fixture: RecordingFixture = []\n return {\n fixture,\n push(turn) {\n fixture.push(turn)\n },\n }\n}\n\n/**\n * Replay an adapter from a recorded fixture. Each turn maps 1:1 to a\n * recorded entry by index — call N replays fixture[N % fixture.length].\n */\nexport function replayAdapter(fixture: RecordingFixture): AdapterFactory {\n if (fixture.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'replayAdapter: fixture is empty',\n hint: 'Pass a non-empty fixture; record one with recordingAdapter() first.',\n })\n }\n return mockAdapter({\n response: fixture.map(turn => turn.chunks),\n })\n}\n","/**\n * Shared helpers for embedder adapters.\n */\n\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\n\nexport async function throwIfNotOk(\n response: Response,\n label: string,\n _url: string,\n): Promise<void> {\n if (response.ok) return\n void response.body?.cancel().catch(() => {})\n throw embeddingError(label, `HTTP ${response.status}`)\n}\n\nexport function embeddingError(\n label: string,\n detail: string,\n cause?: unknown,\n): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${label} embedding failed: ${detail}`,\n cause,\n })\n}\n\n/**\n * Validate a 2xx embedding payload: finite non-empty number[].\n * Throws AdapterError (AgentsKitError) — never returns undefined.\n */\nexport function requireEmbeddingVector(\n value: unknown,\n label: string,\n): number[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${label} returned an empty or missing embedding vector`,\n hint: 'The provider responded 2xx but the embedding payload was empty or malformed.',\n })\n }\n const vector: number[] = []\n for (let i = 0; i < value.length; i++) {\n const n = value[i]\n if (typeof n !== 'number' || !Number.isFinite(n)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${label} returned a non-finite embedding value at index ${i}`,\n hint: 'Embedding vectors must be finite numbers only.',\n })\n }\n vector.push(n)\n }\n return vector\n}\n","import type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface OpenAIEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const url = `${baseUrl}/v1/models`\n const response = await fetch(url, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n await throwIfNotOk(response, 'openai', url)\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError('OpenAI', `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError('OpenAI', `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function openaiEmbedder(config: OpenAIEmbedderConfig): EmbedFn {\n const { apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data?: Array<{ embedding?: unknown }> }\n const embedding = data.data?.[0]?.embedding\n return requireEmbeddingVector(embedding, 'OpenAI')\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface GeminiEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const url = `${baseUrl}/v1beta/models`\n const response = await fetch(url, {\n headers: { 'x-goog-api-key': apiKey },\n })\n await throwIfNotOk(response, 'gemini', url)\n const data = (await response.json()) as {\n models: Array<{ name: string; supportedGenerationMethods: string[] }>\n }\n return data.models\n .filter(m => m.supportedGenerationMethods.includes('embedContent'))\n .map(m => m.name.replace('models/', ''))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError('Gemini', `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError('Gemini', `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function geminiEmbedder(config: GeminiEmbedderConfig): EmbedFn {\n const {\n apiKey,\n model = 'text-embedding-004',\n baseUrl = 'https://generativelanguage.googleapis.com',\n } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(\n `${baseUrl}/v1beta/models/${model}:embedContent`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-goog-api-key': apiKey,\n },\n body: JSON.stringify({\n model: `models/${model}`,\n content: { parts: [{ text }] },\n }),\n },\n )\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { embedding?: { values?: unknown } }\n return requireEmbeddingVector(data.embedding?.values, 'Gemini')\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface OllamaEmbedderConfig {\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string): Promise<string[]> {\n const url = `${baseUrl}/api/tags`\n const response = await fetch(url)\n await throwIfNotOk(response, 'ollama', url)\n const data = (await response.json()) as { models: Array<{ name: string }> }\n return data.models\n .map(m => m.name)\n .filter(name => name.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError('Ollama', `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError('Ollama', `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function ollamaEmbedder(config: OllamaEmbedderConfig): EmbedFn {\n const { model = 'nomic-embed-text', baseUrl = 'http://localhost:11434' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/api/embed`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(baseUrl, message)\n }\n\n const data = (await response.json()) as { embeddings?: unknown[] }\n const first = Array.isArray(data.embeddings) ? data.embeddings[0] : undefined\n return requireEmbeddingVector(first, 'Ollama')\n }\n}\n","import { ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface OpenAICompatibleEmbedderConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(provider: string, baseUrl: string, apiKey: string): Promise<string[]> {\n const url = `${baseUrl}/v1/models`\n const response = await fetch(url, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n await throwIfNotOk(response, provider, url)\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n provider: string,\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(provider, baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError(provider, `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError(provider, `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function createOpenAICompatibleEmbedder(provider: string, defaultBaseUrl: string) {\n return function embedder(config: OpenAICompatibleEmbedderConfig): EmbedFn {\n if (!config.model) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `Model is required for ${provider}. Pass { model: \"<model-name>\" }.`,\n hint: `${provider} does not infer a default; pick a recent embedding model and pass it explicitly.`,\n })\n }\n const { apiKey, model, baseUrl = defaultBaseUrl } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(provider, baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data?: Array<{ embedding?: unknown }> }\n const embedding = data.data?.[0]?.embedding\n return requireEmbeddingVector(embedding, provider)\n }\n }\n}\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface DeepSeekEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const deepseekEmbedder = createOpenAICompatibleEmbedder('DeepSeek', 'https://api.deepseek.com')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface GrokEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const grokEmbedder = createOpenAICompatibleEmbedder('Grok', 'https://api.x.ai')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface KimiEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const kimiEmbedder = createOpenAICompatibleEmbedder('Kimi', 'https://api.moonshot.ai')\n","import { ConfigError, ErrorCodes, type AdapterFactory } from '@agentskit/core'\n\n/**\n * Provider model deprecation policy. When a provider deprecates a\n * model, today the adapter silently 404s in production. This module\n * lets you ship a deprecation table per provider and pick a behaviour:\n *\n * - `warn` — log once at startup, keep using the model.\n * - `remap` — auto-substitute the configured successor.\n * - `fail` — throw at startup so deploys catch it.\n *\n * The deprecation table is community-updateable: the default export\n * holds known deprecations as of the AgentsKit release; consumers can\n * pass their own table to override or extend.\n *\n * Closes issue #800.\n */\n\nexport type DeprecationAction = 'warn' | 'remap' | 'fail'\n\nexport interface ModelDeprecation {\n provider: string\n model: string\n /** ISO date the provider's sunset takes effect. */\n sunsetOn?: string\n /** Suggested successor — used when `onDeprecation: 'remap'`. */\n successor?: string\n /** Optional human-readable reason / link. */\n note?: string\n}\n\nexport interface DeprecationPolicy {\n onDeprecation: DeprecationAction\n table?: ModelDeprecation[]\n /** Sink for warnings. Defaults to `console.warn`. */\n logger?: (msg: string) => void\n}\n\n/**\n * Known deprecations (current as of AgentsKit shipping). Bump on each\n * release; PRs welcome. Successor picks lean towards the same\n * provider's current default unless the entire family is gone.\n */\nexport const DEFAULT_DEPRECATION_TABLE: ModelDeprecation[] = [\n // OpenAI\n { provider: 'openai', model: 'gpt-3.5-turbo-0301', successor: 'gpt-4o-mini', sunsetOn: '2024-09-13' },\n { provider: 'openai', model: 'gpt-3.5-turbo-0613', successor: 'gpt-4o-mini', sunsetOn: '2024-09-13' },\n { provider: 'openai', model: 'gpt-4-0314', successor: 'gpt-4o', sunsetOn: '2024-06-13' },\n { provider: 'openai', model: 'gpt-4-32k', successor: 'gpt-4o', sunsetOn: '2024-06-06' },\n { provider: 'openai', model: 'text-davinci-003', successor: 'gpt-4o-mini', sunsetOn: '2024-01-04' },\n // Anthropic\n { provider: 'anthropic', model: 'claude-2.0', successor: 'claude-3-5-sonnet-latest', sunsetOn: '2025-07-21' },\n { provider: 'anthropic', model: 'claude-2.1', successor: 'claude-3-5-sonnet-latest', sunsetOn: '2025-07-21' },\n { provider: 'anthropic', model: 'claude-instant-1.2', successor: 'claude-3-5-haiku-latest', sunsetOn: '2024-07-22' },\n { provider: 'anthropic', model: 'claude-3-sonnet-20240229', successor: 'claude-3-5-sonnet-latest', sunsetOn: '2025-07-21' },\n // Google\n { provider: 'google', model: 'gemini-1.0-pro', successor: 'gemini-1.5-pro', sunsetOn: '2025-02-15' },\n { provider: 'google', model: 'gemini-pro-vision', successor: 'gemini-1.5-pro', sunsetOn: '2024-07-12' },\n]\n\nexport interface ResolveModelInput {\n provider: string\n model: string\n}\n\nexport interface ResolveModelResult {\n /** Final model id to use (may differ from input if remapped). */\n model: string\n remapped: boolean\n deprecation?: ModelDeprecation\n}\n\nexport function resolveModel(\n input: ResolveModelInput,\n policy: DeprecationPolicy,\n): ResolveModelResult {\n const table = policy.table ?? DEFAULT_DEPRECATION_TABLE\n const hit = table.find(d => d.provider === input.provider && d.model === input.model)\n\n if (!hit) return { model: input.model, remapped: false }\n\n const log = policy.logger ?? ((msg: string) => console.warn(msg))\n const sunset = hit.sunsetOn ? ` (sunset ${hit.sunsetOn})` : ''\n const successor = hit.successor ? ` Suggested successor: ${hit.successor}.` : ''\n const base = `[agentskit] Model \"${input.provider}:${input.model}\" is deprecated${sunset}.${successor}`\n\n switch (policy.onDeprecation) {\n case 'fail':\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: base,\n hint: hit.successor ? `Set model to \"${hit.successor}\".` : 'Pick a supported model from the provider.',\n })\n case 'remap': {\n if (!hit.successor) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `${base} No successor available — cannot remap.`,\n })\n }\n log(`${base} Auto-remapping to \"${hit.successor}\".`)\n return { model: hit.successor, remapped: true, deprecation: hit }\n }\n case 'warn':\n default:\n log(base)\n return { model: input.model, remapped: false, deprecation: hit }\n }\n}\n\n/**\n * Wrap an `AdapterFactory` so that any model field on its requests is\n * checked against the deprecation policy at startup. Convenience for\n * adapters that don't want to plumb the check into their own code:\n *\n * ```ts\n * const adapter = withDeprecationPolicy(openai({ apiKey, model: 'gpt-3.5-turbo-0301' }), {\n * provider: 'openai',\n * onDeprecation: 'remap',\n * })\n * ```\n *\n * For adapters with internal model state (most), prefer calling\n * `resolveModel()` inside the factory and substituting before the\n * first request — this wrapper is a fallback for opaque adapters.\n */\nexport function withDeprecationPolicy<F extends AdapterFactory>(\n factory: F,\n options: { provider: string; model: string } & DeprecationPolicy,\n): F {\n // Run once at construction so `fail` halts deploy, not first request.\n resolveModel({ provider: options.provider, model: options.model }, options)\n return factory\n}\n","/**\n * Opt-in credential rotation primitives.\n *\n * These utilities do **not** automatically wire into stock adapters. Built-in\n * factories (openai, anthropic, bedrock, vertex, …) still take a plain\n * `apiKey` / `accessToken` string (or a caller-supplied resolver) at\n * construction. Use `createRotatingCredentials` / `refreshCredentials` only\n * when you explicitly opt in — e.g. custom wrappers that call `current()` on\n * every request, or adapters you implement that expose\n * `CredentialRefreshable.refreshCredentials`.\n *\n * Without that opt-in, rotating a provider key still means reconstructing the\n * adapter (or restarting the process). The helpers stay exported so production\n * apps can build that layer without re-inventing the holder + audit event shape.\n *\n * Closes issue #799 (primitives only; adapter adoption is opt-in).\n */\n\nexport type CredentialResolver = () => string | Promise<string>\n\nexport interface RotatingCredentials {\n /** Resolve the current secret. Opt-in adapters call this on every request. */\n current: CredentialResolver\n /** Replace the in-memory secret. Returns the new value. */\n rotate: (next: string) => Promise<string>\n /** Subscribe to rotation events. Returns an unsubscribe handle. */\n onRotate: (handler: (event: CredentialRotationEvent) => void) => () => void\n}\n\nexport interface CredentialRotationEvent {\n /** ISO timestamp of the rotation. */\n rotatedAt: string\n /** Stable id (e.g. provider name) for audit-log correlation. */\n id: string\n /** Last 4 chars of the new secret — useful for \"did the rotation actually happen?\" without leaking the key. */\n fingerprint: string\n}\n\nexport interface CredentialRefreshable {\n /**\n * Opt-in adapters that support credential rotation expose this method.\n * Stock AgentsKit adapters do not implement it unless documented otherwise.\n * Calling it replaces the in-memory secret. The next request uses\n * the new value; in-flight requests are unaffected.\n */\n refreshCredentials: (next: string) => Promise<void>\n}\n\nexport function createRotatingCredentials(\n initial: string,\n options: { id: string },\n): RotatingCredentials {\n let value = initial\n const handlers = new Set<(e: CredentialRotationEvent) => void>()\n\n return {\n current: () => value,\n rotate: async next => {\n value = next\n const event: CredentialRotationEvent = {\n rotatedAt: new Date().toISOString(),\n id: options.id,\n fingerprint: next.slice(-4),\n }\n for (const h of handlers) h(event)\n return next\n },\n onRotate: handler => {\n handlers.add(handler)\n return () => handlers.delete(handler)\n },\n }\n}\n\n/**\n * Refresh credentials on any object that implements\n * `CredentialRefreshable`. A no-op (with a debug log) if the adapter\n * doesn't support rotation, so callers can run the rotation playbook\n * across a heterogeneous set of adapters without branching.\n *\n * Most stock adapters do **not** implement `refreshCredentials` — this\n * remains an opt-in primitive unless an adapter documents support.\n */\nexport async function refreshCredentials(\n adapter: unknown,\n next: string,\n options?: { id?: string; logger?: (msg: string) => void },\n): Promise<boolean> {\n const log = options?.logger ?? ((msg: string) => console.log(msg))\n if (\n adapter &&\n typeof adapter === 'object' &&\n 'refreshCredentials' in adapter &&\n typeof (adapter as CredentialRefreshable).refreshCredentials === 'function'\n ) {\n await (adapter as CredentialRefreshable).refreshCredentials(next)\n log(`[agentskit] credentials refreshed${options?.id ? ` (${options.id})` : ''}`)\n return true\n }\n log(`[agentskit] adapter does not support credential rotation; restart required${options?.id ? ` (${options.id})` : ''}`)\n return false\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/stream-errors.ts","../src/createAdapter.ts","../src/generic.ts","../src/retry.ts","../src/stream-lines.ts","../src/openai-stream.ts","../src/utils.ts","../src/stream-source.ts","../src/tool-history.ts","../src/anthropic.ts","../src/openai.ts","../src/gemini.ts","../src/openai-compatible.ts","../src/grok.ts","../src/ollama.ts","../src/deepseek.ts","../src/kimi.ts","../src/langchain.ts","../src/vercel-ai.ts","../src/mistral.ts","../src/cohere.ts","../src/together.ts","../src/groq.ts","../src/fireworks.ts","../src/openrouter.ts","../src/huggingface.ts","../src/lmstudio.ts","../src/vllm.ts","../src/llamacpp.ts","../src/cerebras.ts","../src/azure-openai.ts","../src/replicate.ts","../src/bail.ts","../src/vertex.ts","../src/bedrock.ts","../src/webllm.ts","../src/router.ts","../src/carbon.ts","../src/ensemble.ts","../src/fallback.ts","../src/mock.ts","../src/embedders/shared.ts","../src/embedders/openai.ts","../src/embedders/gemini.ts","../src/embedders/ollama.ts","../src/embedders/openai-compatible.ts","../src/embedders/deepseek.ts","../src/embedders/grok.ts","../src/embedders/kimi.ts","../src/deprecation.ts","../src/credential-rotation.ts"],"names":["AdapterError","ErrorCodes","resolve","retry","parseRetryAfter","netSleep","parseSSE","previous","DEFAULT_MODEL","baseFactory","ConfigError","cachedSdk","loadSdk","c","err","fetchAvailableModels","buildModelError"],"mappings":";;;;;;AAIO,SAAS,aAAa,GAAA,EAAuB;AAClD,EAAA,IAAI,GAAA,YAAe,YAAA,IAAgB,GAAA,CAAI,IAAA,KAAS,cAAc,OAAO,IAAA;AACrE,EAAA,IAAI,GAAA,YAAe,KAAA,IAAS,GAAA,CAAI,IAAA,KAAS,cAAc,OAAO,IAAA;AAC9D,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,iBAAA,CACd,SACA,OAAA,EACa;AACb,EAAA,MAAM,KAAA,GAAQ,IAAIA,iBAAA,CAAa;AAAA,IAC7B,IAAA,EAAM,OAAA,EAAS,IAAA,IAAQC,eAAA,CAAW,wBAAA;AAAA,IAClC,OAAA;AAAA,IACA,OAAO,OAAA,EAAS;AAAA,GACjB,CAAA;AACD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS,OAAA;AAAA,IACT,QAAA,EAAU,EAAE,KAAA;AAAM,GACpB;AACF;AAGO,SAAS,sBACd,IAAA,EAC0D;AAC1D,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,GAAO,IAAA;AACrC,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACd,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,GAAA,EAAI;AAAA,EAC/B,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,IAAID,iBAAA,CAAa;AAAA,QACtB,MAAMC,eAAA,CAAW,wBAAA;AAAA,QACjB,OAAA,EAAS,kDAAA;AAAA,QACT;AAAA,OACD;AAAA,KACH;AAAA,EACF;AACF;AAMO,SAAS,SAAA,CAAa,SAAqB,MAAA,EAAiC;AACjF,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,OAAO,QAAQ,MAAA,CAAO,IAAI,YAAA,CAAa,SAAA,EAAW,YAAY,CAAC,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,IAAI,OAAA,CAAW,CAACC,QAAAA,EAAS,MAAA,KAAW;AACzC,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAM,UAAU,MAAY;AAC1B,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,MAAA,MAAA,CAAO,IAAI,YAAA,CAAa,SAAA,EAAW,YAAY,CAAC,CAAA;AAAA,IAClD,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,KAAA,KAAS;AACP,QAAA,IAAI,OAAA,EAAS;AACb,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,QAAAA,SAAQ,KAAK,CAAA;AAAA,MACf,CAAA;AAAA,MACA,CAAA,GAAA,KAAO;AACL,QAAA,IAAI,OAAA,EAAS;AACb,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,QAAA,MAAA,CAAO,GAAG,CAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAGA,eAAsB,cAAA,CACpB,EAAA,EACA,MAAA,EACA,KAAA,EACe;AACf,EAAA,IAAI,OAAO,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,WAAW,YAAY,CAAA;AAClE,EAAA,MAAM,SAAA,CAAU,KAAA,CAAM,EAAE,CAAA,EAAG,MAAM,CAAA;AACjC,EAAA,IAAI,OAAO,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,WAAW,YAAY,CAAA;AACpE;AAEA,eAAsB,WAAW,IAAA,EAAwD;AACvF,EAAA,IAAI,CAAC,IAAA,EAAM;AACX,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,MAAA,EAAO;AAAA,EACpB,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;;;AClGO,SAAS,cAAc,MAAA,EAA6C;AACzE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,IAAI,YAAA,GAAsC,IAAA;AAC1C,MAAA,IAAI,SAAA,GAA+C,IAAA;AAEnD,MAAA,MAAM,UAAU,MAAY;AAC1B,QAAA,IAAI;AACF,UAAA,KAAK,cAAc,MAAA,EAAO;AAAA,QAC5B,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,YAAA,GAAe,IAAA;AACf,QAAA,IAAI,SAAA,IAAa,OAAO,SAAA,CAAU,MAAA,KAAW,UAAA,EAAY;AACvD,UAAA,KAAK,SAAA,CAAU,MAAA,CAAO,MAAS,CAAA,CAAE,MAAM,MAAM;AAAA,UAAC,CAAC,CAAA;AAAA,QACjD;AACA,QAAA,SAAA,GAAY,IAAA;AACZ,QAAA,IAAI;AACF,UAAA,MAAA,CAAO,KAAA,IAAQ;AAAA,QACjB,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF,CAAA;AAEA,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,SAAS,UAAA,CAAW,MAAM,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA;AACzF,YAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC7B,cAAA,IAAI,kBAAkB,QAAA,EAAU;AAC9B,gBAAA,IAAI;AACF,kBAAA,MAAM,MAAA,CAAO,MAAM,MAAA,EAAO;AAAA,gBAC5B,CAAA,CAAA,MAAQ;AAAA,gBAER;AAAA,cACF;AACA,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,MAAA,GACJ,MAAA,YAAkB,QAAA,GACd,MAAA,CAAO,IAAA,GACP,MAAA;AACN,YAAA,IAAI,CAAC,MAAA,EAAQ;AACX,cAAA,MAAM,kBAAkB,oCAAoC,CAAA;AAC5D,cAAA;AAAA,YACF;AACA,YAAA,YAAA,GAAe,MAAA;AAEf,YAAA,MAAM,QAAA,GAAW,MAAA,YAAkB,QAAA,GAAW,MAAA,GAAS,KAAA,CAAA;AACvD,YAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;AAC9C,YAAA,SAAA,GAAY,QAAA,CAAS,MAAA,CAAO,aAAa,CAAA,EAAE;AAE3C,YAAA,OAAO,IAAA,EAAM;AACX,cAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC7B,gBAAA,OAAA,EAAQ;AACR,gBAAA;AAAA,cACF;AACA,cAAA,IAAI,IAAA;AACJ,cAAA,IAAI;AACF,gBAAA,IAAA,GAAO,MAAM,SAAA,CAAU,SAAA,CAAU,IAAA,EAAK,EAAG,WAAW,MAAM,CAAA;AAAA,cAC5D,SAAS,GAAA,EAAK;AACZ,gBAAA,IAAI,YAAA,CAAa,GAAG,CAAA,IAAK,UAAA,CAAW,OAAO,OAAA,EAAS;AAClD,kBAAA,OAAA,EAAQ;AACR,kBAAA;AAAA,gBACF;AACA,gBAAA,MAAM,GAAA;AAAA,cACR;AACA,cAAA,IAAI,KAAK,IAAA,EAAM;AACf,cAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC7B,gBAAA,OAAA,EAAQ;AACR,gBAAA;AAAA,cACF;AACA,cAAA,MAAM,IAAA,CAAK,KAAA;AACX,cAAA,IAAI,KAAK,KAAA,CAAM,IAAA,KAAS,UAAU,IAAA,CAAK,KAAA,CAAM,SAAS,OAAA,EAAS;AAC7D,gBAAA,IAAI,OAAO,SAAA,CAAU,MAAA,KAAW,UAAA,EAAY;AAC1C,kBAAA,MAAM,SAAA,CAAU,MAAA,CAAO,KAAA,CAAS,CAAA,CAAE,MAAM,MAAM;AAAA,kBAAC,CAAC,CAAA;AAAA,gBAClD;AACA,gBAAA,SAAA,GAAY,IAAA;AACZ,gBAAA,YAAA,GAAe,IAAA;AACf,gBAAA;AAAA,cACF;AAAA,YACF;AACA,YAAA,MAAM,kBAAkB,+CAA+C,CAAA;AACvE,YAAA,YAAA,GAAe,IAAA;AAAA,UACjB,SAAS,GAAA,EAAK;AACZ,YAAA,IAAI,YAAA,CAAa,GAAG,CAAA,IAAK,UAAA,CAAW,OAAO,OAAA,EAAS;AAIpD,YAAA,OAAA,EAAQ;AACR,YAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,YAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,UACjD,CAAA,SAAE;AACA,YAAA,IAAI,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,OAAA,EAAQ;AAAA,UACzC;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,aAAoB,KAAA,EAAM;AACjD,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;AC1GO,SAAS,QAAQ,MAAA,EAA8C;AACpE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,IAAI,MAAA,GAAyD,IAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,UAAA,IAAI;AACF,YAAA,MAAM,SAAS,MAAM,SAAA;AAAA,cACnB,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,UAAA,CAAW,MAAM,CAAA;AAAA,cACtC,UAAA,CAAW;AAAA,aACb;AACA,YAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC7B,cAAA,IAAI;AACF,gBAAA,MAAM,OAAO,MAAA,EAAO;AAAA,cACtB,CAAA,CAAA,MAAQ;AAAA,cAER;AACA,cAAA;AAAA,YACF;AACA,YAAA,MAAA,GAAS,OAAO,SAAA,EAAU;AAE1B,YAAA,OAAO,IAAA,EAAM;AACX,cAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC7B,gBAAA,IAAI;AACF,kBAAA,MAAM,OAAO,MAAA,EAAO;AAAA,gBACtB,CAAA,CAAA,MAAQ;AAAA,gBAER;AACA,gBAAA;AAAA,cACF;AACA,cAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,UAAU,MAAA,CAAO,IAAA,EAAK,EAAG,UAAA,CAAW,MAAM,CAAA;AACxE,cAAA,IAAI,IAAA,EAAM;AACV,cAAA,MAAM,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AACnD,cAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAK;AAAA,YACtC;AAEA,YAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,YAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,UACvB,SAAS,GAAA,EAAK;AACZ,YAAA,IAAI,YAAA,CAAa,GAAG,CAAA,IAAK,UAAA,CAAW,OAAO,OAAA,EAAS;AACpD,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,OAAA;AAAA,cACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAAA,cACxD,QAAA,EAAU;AAAA,gBACR,KAAA,EAAO,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC;AAAA;AAC3D,aACF;AAAA,UACF,CAAA,SAAE;AACA,YAAA,IAAI;AACF,cAAA,MAAA,EAAQ,WAAA,EAAY;AAAA,YACtB,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,aAAoB,KAAA,EAAM;AACjD,UAAA,KAAK,MAAA,EAAQ,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,UAAC,CAAC,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AC1CA,IAAM,aAAA,GAEF;AAAA,EACF,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,GAAA;AAAA,EACb,UAAA,EAAY,GAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,UAAS,KAAM;AAChC,IAAA,IAAI,QAAA,EAAU,OAAO,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAC5E,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG,OAAO,KAAA;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM;AAAA,EACpC,WAAA,CACW,UACA,YAAA,EACT;AACA,IAAA,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAHtB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EAGX;AACF,CAAA;AAiBA,eAAsB,cAAA,CACpB,OAAA,EACA,MAAA,EACA,QAAA,GAAyB,EAAC,EACP;AACnB,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,aAAA,EAAe,GAAG,QAAA,EAAS;AAC7C,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AAC/C,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,IAAK,cAAc,CAAA,EAAG;AACpD,IAAA,MAAM,IAAIF,iBAAAA,CAAa;AAAA,MACrB,MAAMC,eAAAA,CAAW,iBAAA;AAAA,MACjB,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,OAAO,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,WAAW,YAAY,CAAA;AAElE,EAAA,IAAI;AACF,IAAA,OAAO,MAAME,SAAA,CAAM,OAAO,EAAE,SAAQ,KAAM;AACxC,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,MAAM,QAAQ,MAAM,CAAA;AAAA,MACjC,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,OAAO,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,WAAW,YAAY,CAAA;AAClE,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,IAAI,QAAA,CAAS,EAAA,IAAM,OAAA,IAAW,WAAA,IAAe,CAAC,IAAA,CAAK,OAAA,CAAQ,EAAE,QAAA,EAAU,OAAA,EAAS,CAAA,EAAG,OAAO,QAAA;AAE1F,MAAA,MAAM,aAAaC,mBAAA,CAAgB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAC,CAAA;AACtE,MAAA,MAAM,UAAA,CAAW,SAAS,IAAI,CAAA;AAC9B,MAAA,MAAM,IAAI,iBAAA;AAAA,QACR,QAAA;AAAA,QACA,eAAe,KAAA,CAAA,GAAY,KAAA,CAAA,GAAY,KAAK,GAAA,CAAI,UAAA,EAAY,KAAK,UAAU;AAAA,OAC7E;AAAA,IACF,CAAA,EAAG;AAAA,MACD,SAAS,WAAA,GAAc,CAAA;AAAA,MACvB,YAAY,IAAA,CAAK,WAAA;AAAA,MACjB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,MAC/B,WAAA,EAAa,CAAC,KAAA,EAAO,OAAA,KAAY;AAC/B,QAAA,IAAI,KAAA,YAAiB,mBAAmB,OAAO,IAAA;AAC/C,QAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG,OAAO,KAAA;AAChC,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,MACxC,CAAA;AAAA,MACA,QAAA,EAAU,CAAA,KAAA,KAAS,KAAA,YAAiB,iBAAA,GAAoB,MAAM,YAAA,GAAe,KAAA,CAAA;AAAA,MAC7E,SAAS,CAAC,EAAE,KAAA,EAAO,OAAA,EAAS,SAAQ,KAAM;AACxC,QAAA,QAAA,CAAS,OAAA,GAAU;AAAA,UACjB,OAAA;AAAA,UACA,OAAA;AAAA,UACA,QAAQ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC9D,CAAA;AAAA,MACH,CAAA;AAAA,MACA,KAAA,EAAO,QAAA,CAAS,KAAA,GACZ,CAAC,EAAA,EAAI,WAAA,KAAgB,cAAA,CAAe,EAAA,EAAI,WAAA,IAAe,MAAA,EAAQ,QAAA,CAAS,KAAM,CAAA,GAC9EC,SAAA;AAAA,MACJ;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,OAAO,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,WAAW,YAAY,CAAA;AAClE,IAAA,IAAI,KAAA,YAAiB,iBAAA,EAAmB,OAAO,KAAA,CAAM,QAAA;AACrD,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AChGA,gBAAuB,gBAAgB,MAAA,EAAuD;AAC5F,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,MAAA,IAAU,IAAA,GAAO,OAAA,CAAQ,MAAA,EAAO,GAAI,OAAA,CAAQ,OAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAC1E,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,QAAA,IAAI,SAAS,MAAM,OAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,MAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,QAAA,IAAI,SAAS,MAAM,OAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;ACrDA,IAAM,yCAAyB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,YAAA,EAAc,eAAe,CAAC,CAAA;AAE9E,gBAAuB,kBAAkB,MAAA,EAA4D;AACnG,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAwD;AACrF,EAAA,IAAI,YAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,EAAiB,KAAA,KAAiD;AACvF,IAAA,MAAM,KAAA,GAAQ,kBAAkB,OAAO,CAAA;AACvC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,UAAU,EAAE,GAAG,MAAM,QAAA,EAAU,GAAG,OAAO,YAAA;AAAa,KACxD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAiB,aAA8C;AACnE,IAAA,KAAA,MAAW,GAAG,QAAQ,CAAA,IAAK,gBAAA,EAAkB;AAC3C,MAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,QAAA,CAAS,IAAI,CAAA;AAClD,MAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,QAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA;AAAA,UACtB,QAAA,EAAU,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,YAAA;AAAa,SAChD;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM;AAAA,QACJ,IAAA,EAAM,WAAA;AAAA,QACN,QAAA,EAAU,EAAE,EAAA,EAAI,QAAA,CAAS,EAAA,EAAI,MAAM,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,IAAA;AAAK,OACtE;AAAA,IACF;AACA,IAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,WAAA,MAAiB,EAAE,IAAA,EAAK,IAAKC,YAAAA,CAAS,MAAM,CAAA,EAAG;AAC7C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,IAAI,iBAAiB,MAAA,IAAa,CAAC,sBAAA,CAAuB,GAAA,CAAI,YAAY,CAAA,EAAG;AAC3E,QAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,QAAA,MAAM,aAAA;AAAA,UACJ,uDAAuD,YAAY,CAAA,EAAA,CAAA;AAAA,UACnE,EAAE,YAAA;AAAa,SACjB;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAE,OAAO,cAAA,EAAe,CAAA,EAAI;AAChC,MAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAkB7B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,EAAG,KAAA;AAClC,MAAA,MAAM,qBAAA,GAAwB,MAAM,OAAA,EAAS,IAAA;AAAA,QAC3C,CAAA,MAAA,KAAU,OAAO,MAAA,CAAO,aAAA,KAAkB;AAAA,OAC5C,EAAG,aAAA;AACH,MAAA,IAAI,OAAO,qBAAA,KAA0B,QAAA,EAAU,YAAA,GAAe,qBAAA;AAE9D,MAAA,IAAI,OAAO,KAAA,EAAO,OAAA,KAAY,QAAA,EAAU,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,OAAA,EAAQ;AAErF,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA,EAAG;AACpC,QAAA,KAAA,MAAW,QAAA,IAAY,MAAM,UAAA,EAAY;AACvC,UAAA,MAAM,KAAA,GAAgB,SAAS,KAAA,IAAS,CAAA;AACxC,UAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAC3C,UAAA,IAAI,QAAA,EAAU,UAAU,IAAA,EAAM;AAC5B,YAAA,gBAAA,CAAiB,IAAI,KAAA,EAAO;AAAA,cAC1B,EAAA,EAAI,QAAA,CAAS,EAAA,IAAM,QAAA,EAAU,EAAA,IAAM,QAAQ,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,cAC9D,IAAA,EAAM,SAAS,QAAA,CAAS,IAAA;AAAA,cACxB,OAAO,QAAA,EAAU,IAAA,IAAQ,EAAA,KAAO,QAAA,CAAS,SAAS,SAAA,IAAa,EAAA;AAAA,aAChE,CAAA;AAAA,UACH,CAAA,MAAA,IAAW,QAAA,IAAY,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW;AACpD,YAAA,QAAA,CAAS,IAAA,IAAQ,SAAS,QAAA,CAAS,SAAA;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,aAAA,IAAiB,CAAA;AAAA,YAC3C,gBAAA,EAAkB,KAAA,CAAM,KAAA,CAAM,iBAAA,IAAqB,CAAA;AAAA,YACnD,WAAA,EAAa,KAAA,CAAM,KAAA,CAAM,YAAA,IAAgB;AAAA;AAC3C,SACF;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,IAAI,iBAAiB,MAAA,IAAa,CAAC,sBAAA,CAAuB,GAAA,CAAI,YAAY,CAAA,EAAG;AAC3E,IAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,IAAA,MAAM,aAAA;AAAA,MACJ,uDAAuD,YAAY,CAAA,EAAA,CAAA;AAAA,MACnE,EAAE,YAAA;AAAa,KACjB;AACA,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,IAAA,MAAM,cAAc,+CAA+C,CAAA;AACnE,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,EAAE,OAAO,cAAA,EAAe,CAAA,EAAI;AAChC,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;;;AC9GO,SAAS,mBAAmB,QAAA,EAAqB;AAKtD,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AACzC,EAAA,MAAM,SAAyC,EAAC;AAEhD,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,MAAM,KAAK,OAAA,CAAQ,UAAA;AAEnB,MAAA,IAAI,CAAC,EAAA,IAAM,CAAC,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,EAAG;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,MAAA;AAAA,QACN,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,YAAA,EAAc;AAAA,OACf,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,IAAe,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AACrF,MAAA,KAAA,MAAW,MAAM,OAAA,CAAQ,SAAA,EAAW,gBAAA,CAAiB,GAAA,CAAI,GAAG,EAAE,CAAA;AAC9D,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,QAC5B,UAAA,EAAY,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,CAAA,EAAA,MAAO;AAAA,UACvC,IAAI,EAAA,CAAG,EAAA;AAAA,UACP,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,SAAA,EAAW,OAAO,EAAA,CAAG,IAAA,KAAS,QAAA,GAAW,EAAA,CAAG,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,IAAA,IAAQ,EAAE;AAAA;AACjF,SACF,CAAE;AAAA,OACH,CAAA;AACD,MAAA;AAAA,IACF;AAOA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,CAAC,QAAQ,OAAA,EAAS;AAEtD,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAM,OAAA,EAAS,OAAA,CAAQ,SAAS,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,MAAA;AACT;AACA,gBAAuB,qBAAqB,MAAA,EAA4D;AACtG,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAwD;AACrF,EAAA,IAAI,cAAA,GAAiB,KAAA;AAErB,EAAA,MAAM,YAAA,GAAe,WACnB,EAAA,EACiC;AACjC,IAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,EAAA,CAAG,IAAI,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,MAAA,MAAM;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA;AAAA,QACtB,QAAA,EAAU,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA;AAAM,OAClC;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,MAAM,EAAA,CAAG,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,IAAA;AAAK,KAC1D;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,WAAA,MAAiB,EAAE,IAAA,EAAK,IAAKA,YAAAA,CAAS,MAAM,CAAA,EAAG;AAC7C,IAAA,IAAI,SAAS,QAAA,EAAU;AAEvB,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAU7B,MAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,QAAA,MAAM,MACJ,KAAA,CAAM,KAAA,EAAO,OAAA,IACb,KAAA,CAAM,OAAO,IAAA,IACb,wBAAA;AACF,QAAA,MAAM,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAC,CAAA;AACnC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,SAAS,qBAAA,IAAyB,KAAA,CAAM,OAAO,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM;AACnG,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,MAAM,IAAA,EAAK;AAAA,MAClD,WAAW,KAAA,CAAM,IAAA,KAAS,yBAAyB,KAAA,CAAM,KAAA,EAAO,SAAS,kBAAA,EAAoB;AAC3F,QAAA,MAAM,KAAA,GAAgB,MAAM,KAAA,IAAS,CAAA;AACrC,QAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAC3C,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,QAAA,CAAS,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,YAAA,IAAgB,EAAA;AAAA,QAC/C;AAAA,MACF,WAAW,KAAA,CAAM,IAAA,KAAS,yBAAyB,KAAA,CAAM,aAAA,EAAe,SAAS,UAAA,EAAY;AAC3F,QAAA,MAAM,KAAA,GAAgB,MAAM,KAAA,IAAS,CAAA;AACrC,QAAA,gBAAA,CAAiB,IAAI,KAAA,EAAO;AAAA,UAC1B,EAAA,EAAI,KAAA,CAAM,aAAA,CAAc,EAAA,IAAM,QAAQ,KAAK,CAAA,CAAA;AAAA,UAC3C,IAAA,EAAM,KAAA,CAAM,aAAA,CAAc,IAAA,IAAQ,SAAA;AAAA,UAClC,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,oBAAA,EAAsB;AAC9C,QAAA,MAAM,KAAA,GAAgB,MAAM,KAAA,IAAS,CAAA;AACrC,QAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACrC,QAAA,IAAI,EAAA,EAAI;AACN,UAAA,IAAI,EAAE,OAAO,YAAA,CAAa,EAAE,CAAA,CAAA,EAAI;AAC9B,YAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,YAAA;AAAA,UACF;AACA,UAAA,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,eAAA,IAAmB,MAAM,KAAA,EAAO;AACxD,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,YAAA,IAAgB,CAAA;AAAA,YAC1C,gBAAA,EAAkB,KAAA,CAAM,KAAA,CAAM,aAAA,IAAiB,CAAA;AAAA,YAC/C,cAAc,KAAA,CAAM,KAAA,CAAM,gBAAgB,CAAA,KAAM,KAAA,CAAM,MAAM,aAAA,IAAiB,CAAA;AAAA;AAC/E,SACF;AAAA,MACF,WAAW,KAAA,CAAM,IAAA,KAAS,eAAA,IAAmB,KAAA,CAAM,SAAS,KAAA,EAAO;AACjE,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,YAAA,IAAgB,CAAA;AAAA,YAClD,gBAAA,EAAkB,CAAA;AAAA,YAClB,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,YAAA,IAAgB;AAAA;AACnD,SACF;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,cAAA,EAAgB;AACxC,QAAA,cAAA,GAAiB,IAAA;AACjB,QAAA,KAAA,MAAW,GAAG,EAAE,CAAA,IAAK,gBAAA,EAAkB;AACrC,UAAA,IAAI,EAAE,OAAO,YAAA,CAAa,EAAE,CAAA,CAAA,EAAI;AAC9B,YAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,QAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,QAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAM,kBAAkB,4CAA4C,CAAA;AACpE,IAAA;AAAA,EACF;AACA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAEA,IAAM,qBAAA,uBAA4B,GAAA,CAAI;AAAA,EACpC,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,gBAAuB,kBAAkB,MAAA,EAA4D;AACnG,EAAA,IAAI,YAAA;AAEJ,EAAA,WAAA,MAAiB,EAAE,IAAA,EAAK,IAAKA,YAAAA,CAAS,MAAM,CAAA,EAAG;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAiB7B,MAAA,IAAI,MAAM,aAAA,EAAe;AACvB,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,KAAA,CAAM,aAAA,CAAc,gBAAA,IAAoB,CAAA;AAAA,YACtD,gBAAA,EAAkB,KAAA,CAAM,aAAA,CAAc,oBAAA,IAAwB,CAAA;AAAA,YAC9D,WAAA,EAAa,KAAA,CAAM,aAAA,CAAc,eAAA,IAAmB;AAAA;AACtD,SACF;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,GAAa,CAAC,CAAA;AACtC,MAAA,IAAI,OAAO,SAAA,EAAW,YAAA,KAAiB,QAAA,EAAU;AAC/C,QAAA,YAAA,GAAe,SAAA,CAAU,YAAA;AAAA,MAC3B;AAEA,MAAA,MAAM,KAAA,GAAQ,WAAW,OAAA,EAAS,KAAA;AAClC,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAE3B,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,KAAK,IAAA,EAAM;AAC9C,UAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAK,IAAA,EAAK;AAAA,QAC3C,CAAA,MAAA,IAAW,KAAK,YAAA,EAAc;AAC5B,UAAA,MAAM,KAAK,IAAA,CAAK,YAAA;AAChB,UAAA,MAAM,IAAA,GACJ,OAAO,EAAA,CAAG,IAAA,KAAS,QAAA,GAAW,EAAA,CAAG,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,IAAA,IAAQ,EAAE,CAAA;AACtE,UAAA,MAAM,MAAA,GAAS,sBAAsB,IAAI,CAAA;AACzC,UAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,OAAA;AAAA,cACN,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA;AAAA,cACtB,QAAA,EAAU,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA;AAAM,aAClC;AACA,YAAA;AAAA,UACF;AACA,UAAA,MAAM;AAAA,YACJ,IAAA,EAAM,WAAA;AAAA,YACN,QAAA,EAAU;AAAA,cACR,EAAA,EAAI,GAAG,EAAA,IAAM,CAAA,EAAG,GAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,cACrC,IAAA,EAAM,GAAG,IAAA,IAAQ,SAAA;AAAA,cACjB,MAAM,MAAA,CAAO;AAAA;AACf,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,qBAAA,CAAsB,GAAA,CAAI,YAAY,CAAA,EAAG;AAC7D,IAAA,IAAI,YAAA,IAAgB,CAAC,qBAAA,CAAsB,GAAA,CAAI,YAAY,CAAA,EAAG;AAC5D,MAAA,MAAM,iBAAA;AAAA,QACJ,uDAAuD,YAAY,CAAA,CAAA;AAAA,OACrE;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,kBAAkB,uDAAuD,CAAA;AAC/E,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAEA,gBAAuB,kBAAkB,MAAA,EAA4D;AACnG,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,WAAA,MAAiB,IAAA,IAAQ,eAAA,CAAgB,MAAM,CAAA,EAAG;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAY7B,MAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,QAAQ,OAAA,EAAQ;AAAA,MACvD;AACA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,UAAU,CAAA,EAAG;AAC5C,QAAA,KAAA,MAAW,EAAA,IAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AACzC,UAAA,IAAI,EAAA,EAAI,UAAU,IAAA,EAAM;AACtB,YAAA,MAAM,IAAA,GACJ,OAAO,EAAA,CAAG,QAAA,CAAS,cAAc,QAAA,GAC7B,EAAA,CAAG,QAAA,CAAS,SAAA,GACZ,KAAK,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,SAAA,IAAa,EAAE,CAAA;AAChD,YAAA,MAAM,MAAA,GAAS,sBAAsB,IAAI,CAAA;AACzC,YAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,cAAA,MAAM;AAAA,gBACJ,IAAA,EAAM,OAAA;AAAA,gBACN,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA;AAAA,gBACtB,QAAA,EAAU,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA;AAAM,eAClC;AACA,cAAA;AAAA,YACF;AACA,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,WAAA;AAAA,cACN,QAAA,EAAU;AAAA,gBACR,EAAA,EAAI,EAAA,CAAG,EAAA,IAAM,CAAA,EAAG,EAAA,CAAG,SAAS,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,gBAC9C,IAAA,EAAM,GAAG,QAAA,CAAS,IAAA;AAAA,gBAClB,MAAM,MAAA,CAAO;AAAA;AACf,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,IAAI,OAAO,KAAA,CAAM,iBAAA,KAAsB,YAAY,OAAO,KAAA,CAAM,eAAe,QAAA,EAAU;AACvF,UAAA,MAAM,YAAA,GAAe,MAAM,iBAAA,IAAqB,CAAA;AAChD,UAAA,MAAM,gBAAA,GAAmB,MAAM,UAAA,IAAc,CAAA;AAC7C,UAAA,MAAM;AAAA,YACJ,IAAA,EAAM,OAAA;AAAA,YACN,KAAA,EAAO;AAAA,cACL,YAAA;AAAA,cACA,gBAAA;AAAA,cACA,aAAa,YAAA,GAAe;AAAA;AAC9B,WACF;AAAA,QACF;AACA,QAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,QAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,kBAAkB,uCAAuC,CAAA;AAC/D,IAAA;AAAA,EACF;AACA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAUO,SAAS,SAAA,CAAU,IAAA,EAAc,UAAA,GAAa,EAAA,EAAc;AACjE,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,UAAA,EAAY,OAAO,CAAC,IAAI,CAAA;AAC3C,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,IAAI,UAAU,CAAA;AAE9C,IAAA,IAAI,GAAA,GAAM,KAAK,MAAA,EAAQ;AACrB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AACvC,MAAA,IAAI,cAAc,EAAA,IAAM,SAAA,GAAY,GAAA,IAAO,CAAA,QAAS,SAAA,GAAY,CAAA;AAAA,IAClE;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAC3B,IAAA,CAAA,GAAI,GAAA;AAAA,EACN;AACA,EAAA,OAAO,GAAA;AACT;AAYO,SAAS,eACd,OAAA,EACA,WAAA,EACA,UAAA,EACA,OAAA,GAA0E,EAAC,EAC7D;AACd,EAAA,MAAM,EAAE,SAAA,GAAY,EAAA,EAAI,UAAU,CAAA,EAAG,KAAA,EAAAH,QAAM,GAAI,OAAA;AAC/C,EAAA,IAAI,eAAA,GAA0C,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAQ,mBAAuD;AAC7D,MAAA,MAAM,UAAA,GAAa,eAAA;AACnB,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,OAAA,EAAS,WAAW,MAAA,EAAQA,MAAAA,IAAS,EAAE,CAAA;AAE7E,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAA,MAAM,UAAA,CAAW,SAAS,IAAI,CAAA;AAC9B,UAAA,MAAM,kBAAkB,CAAA,EAAG,UAAU,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACjE,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,IAAA;AACJ,QAAA,IAAI;AACF,UAAA,IAAA,GAAO,MAAM,YAAY,QAAQ,CAAA;AAAA,QACnC,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,UAAA,CAAW,SAAS,IAAI,CAAA;AAC9B,UAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG;AACvB,UAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,UAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAC/C,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,EAAM,SAAS,CAAA;AACxC,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,IAAI,eAAA,KAAoB,IAAA,IAAQ,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC3D,UAAA,IAAI,UAAU,CAAA,EAAG;AACf,YAAA,MAAM,cAAA,CAAe,OAAA,EAAS,UAAA,CAAW,MAAA,EAAQE,SAAQ,CAAA;AAAA,UAC3D;AACA,UAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,QACvC;AACA,QAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,MACvB,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG;AACvB,QAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,QAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,MACjD;AAAA,IACF,CAAA;AAAA,IACA,OAAO,MAAM;AACX,MAAA,eAAA,EAAiB,KAAA,EAAM;AACvB,MAAA,eAAA,GAAkB,IAAA;AAAA,IACpB;AAAA,GACF;AACF;;;ACjbO,SAAS,kBAAA,CACd,OAAA,EACA,KAAA,EACA,UAAA,EACAF,MAAAA,EACc;AACd,EAAA,IAAI,eAAA,GAA0C,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAQ,mBAAuD;AAC7D,MAAA,MAAM,UAAA,GAAa,eAAA;AACnB,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,OAAA,EAAS,WAAW,MAAA,EAAQA,MAAAA,IAAS,EAAE,CAAA;AAE7E,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAA,MAAM,UAAA,CAAW,SAAS,IAAI,CAAA;AAC9B,UAAA,MAAM,kBAAkB,CAAA,EAAG,UAAU,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACjE,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,UAAA,MAAM,iBAAA,CAAkB,CAAA,EAAG,UAAU,CAAA,2BAAA,CAA6B,CAAA;AAClE,UAAA;AAAA,QACF;AAEA,QAAA,WAAA,MAAiB,KAAA,IAAS,KAAA,CAAM,QAAA,CAAS,IAAA,EAAM,QAAQ,CAAA,EAAG;AACxD,UAAA,IAAI,UAAA,CAAW,MAAA,CAAO,OAAA,IAAW,eAAA,KAAoB,IAAA,EAAM;AAC3D,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,aAAa,GAAG,CAAA,IAAK,WAAW,MAAA,CAAO,OAAA,IAAW,oBAAoB,IAAA,EAAM;AAChF,QAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,QAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,MACjD;AAAA,IACF,CAAA;AAAA,IACA,OAAO,MAAM;AACX,MAAA,eAAA,EAAiB,KAAA,EAAM;AACvB,MAAA,eAAA,GAAkB,IAAA;AAAA,IACpB;AAAA,GACF;AACF;;;AC3CA,SAAS,UAAU,IAAA,EAAwC;AACzD,EAAA,IAAI,IAAA,IAAQ,IAAA,EAAM,OAAO,EAAC;AAC1B,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACvC,MAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,OAAO,EAAE,OAAO,MAAA,EAAO;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACpD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAEA,SAAS,oBAAoB,OAAA,EAA0C;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC1C,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,EAC3B;AACF;AAOO,SAAS,oBACd,QAAA,EAC2C;AAC3C,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;AAC3C,EAAA,MAAM,SAAoD,EAAC;AAE3D,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAE/B,IAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,IAAe,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AACrF,MAAA,KAAA,MAAW,EAAA,IAAM,QAAQ,SAAA,EAAW,UAAA,CAAW,IAAI,EAAA,CAAG,EAAA,EAAI,GAAG,IAAI,CAAA;AACjE,MAAA,MAAM,SAAyC,EAAC;AAChD,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,CAAQ,SAAS,CAAA;AAAA,MACrD;AACA,MAAA,KAAA,MAAW,EAAA,IAAM,QAAQ,SAAA,EAAW;AAClC,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,UAAA;AAAA,UACN,IAAI,EAAA,CAAG,EAAA;AAAA,UACP,MAAM,EAAA,CAAG,IAAA;AAAA,UACT,KAAA,EAAO,SAAA,CAAU,EAAA,CAAG,IAAI;AAAA,SACzB,CAAA;AAAA,MACH;AACA,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,QAAQ,CAAA;AAClD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,MAAM,KAAK,OAAA,CAAQ,UAAA;AACnB,MAAA,IAAI,CAAC,EAAA,IAAM,CAAC,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA,EAAG;AAChC,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,IAAA,EAAM,aAAA;AAAA,QACN,WAAA,EAAa,EAAA;AAAA,QACb,SAAS,OAAA,CAAQ;AAAA,OACnB;AACA,MAAA,MAAMI,SAAAA,GAAW,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACzC,MAAA,IACEA,WAAU,IAAA,KAAS,MAAA,IACnB,MAAM,OAAA,CAAQA,SAAAA,CAAS,OAAO,CAAA,IAC9BA,SAAAA,CAAS,QAAQ,KAAA,CAAM,CAAA,IAAA,KACrB,QAAQ,OAAO,IAAA,KAAS,YAAa,IAAA,CAA4B,IAAA,KAAS,aAC3E,CAAA,EACD;AACA,QAAAA,SAAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAC,KAAK,GAAG,CAAA;AAAA,MAChD;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,CAAC,QAAQ,OAAA,EAAS;AAEtD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU,QAAA,EAAU,SAAS,MAAA,EAAQ;AACxD,MAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,GACjD,QAAA,CAAS,OAAA,GACT,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAA,CAAS,SAAS,CAAA;AAC7C,MAAA,QAAA,CAAS,OAAA,GAAU,CAAC,GAAG,cAAA,EAAgB,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,CAAQ,OAAA,EAAS,CAAA;AAAA,IAChF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAM,OAAA,EAAS,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC9D;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,iBACd,QAAA,EACgE;AAChE,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;AAC3C,EAAA,MAAM,SAAyE,EAAC;AAEhF,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAE/B,IAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,IAAe,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AACrF,MAAA,KAAA,MAAW,EAAA,IAAM,QAAQ,SAAA,EAAW,UAAA,CAAW,IAAI,EAAA,CAAG,EAAA,EAAI,GAAG,IAAI,CAAA;AACjE,MAAA,MAAM,QAAwC,EAAC;AAC/C,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,CAAQ,SAAS,CAAA;AAAA,MACtC;AACA,MAAA,KAAA,MAAW,EAAA,IAAM,QAAQ,SAAA,EAAW;AAClC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,YAAA,EAAc;AAAA,YACZ,IAAI,EAAA,CAAG,EAAA;AAAA,YACP,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,IAAA,EAAM,SAAA,CAAU,EAAA,CAAG,IAAI;AAAA;AACzB,SACD,CAAA;AAAA,MACH;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,MAAM,KAAK,OAAA,CAAQ,UAAA;AACnB,MAAA,MAAM,IAAA,GAAO,EAAA,GAAK,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA,GAAI,MAAA;AACvC,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,gBAAA,EAAkB;AAAA,UAChB,EAAA;AAAA,UACA,IAAA;AAAA,UACA,QAAA,EAAU,mBAAA,CAAoB,OAAA,CAAQ,OAAO;AAAA;AAC/C,OACF;AACA,MAAA,MAAMA,SAAAA,GAAW,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACzC,MAAA,IACEA,SAAAA,EAAU,IAAA,KAAS,MAAA,IACnBA,SAAAA,CAAS,KAAA,CAAM,MAAM,CAAA,IAAA,KAAQ,IAAA,CAAK,gBAAA,KAAqB,MAAS,CAAA,EAChE;AACA,QAAAA,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAC,IAAI,GAAG,CAAA;AAAA,MAC7C;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,CAAC,QAAQ,OAAA,EAAS;AAEtD,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,KAAS,WAAA,GAAc,OAAA,GAAU,MAAA;AACtD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACzC,IAAA,IAAI,QAAA,EAAU,SAAS,IAAA,EAAM;AAC3B,MAAA,QAAA,CAAS,MAAM,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC/C,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAG,CAAA;AAAA,IAC1D;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;AChKO,SAAS,UAAU,MAAA,EAAyC;AACjE,EAAA,MAAM,EAAE,QAAQ,KAAA,EAAO,OAAA,GAAU,6BAA6B,SAAA,GAAY,IAAA,EAAM,KAAA,EAAAJ,MAAAA,EAAM,GAAI,MAAA;AAE1F,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,WAAW,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA,MAC5D,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,KAAA;AAAA,QACA,UAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,SAAA,IAAa,SAAA;AAAA,QAC1C,QAAA,EAAU,mBAAA,CAAoB,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC9C,MAAA,EAAQ,QAAQ,QAAA,CAAS,IAAA,CAAK,aAAW,OAAA,CAAQ,IAAA,KAAS,QAAQ,CAAA,EAAG,OAAA;AAAA,QACrE,KAAA,EAAO,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA,IAAA,MAAS;AAAA,UAC1C,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,cAAc,IAAA,CAAK;AAAA,SACrB,CAAE,CAAA;AAAA,QACF,MAAA,EAAQ;AAAA,OACV;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,YAAA,CAAA,EAAgB;AAAA,UAC1C,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,WAAA,EAAa,MAAA;AAAA,YACb,mBAAA,EAAqB;AAAA,WACvB;AAAA,UACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,oBAAA;AAAA,QACA,eAAA;AAAA,QACAA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;AClCO,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAU,wBAAA,EAA0B,KAAA,EAAAA,QAAM,GAAI,MAAA;AAKrE,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAK9C,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,IAAI;AACF,MAAA,OAAO,IAAI,GAAA,CAAI,OAAO,CAAA,CAAE,IAAA,KAAS,gBAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,GAAG;AACH,EAAA,MAAM,YAAA,GAAe,OAAO,YAAA,IAAgB,iBAAA;AAE5C,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,MAAA,CAAO,YAAA,EAAc,KAAA,IAAS,IAAA;AAAA;AAAA;AAAA,MAGrC,SAAA,EAAW,MAAA,CAAO,YAAA,EAAc,SAAA,KAAc,KAAA,CAAM,WAAW,IAAI,CAAA,IAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,MAC7F,UAAA,EAAY,MAAA,CAAO,YAAA,EAAc,UAAA,KAAe,KAAA,CAAM,WAAW,OAAO,CAAA,IAAK,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,CAAA;AAAA,MACjG,KAAA,EAAO,IAAA;AAAA,MACP,GAAG,MAAA,CAAO;AAAA,KACZ;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAgC;AAAA,QACpC,KAAA;AAAA,QACA,QAAA,EAAU,kBAAA,CAAmB,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC7C,KAAA,EAAO,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA,IAAA,MAAS;AAAA,UAC1C,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,YAAY,IAAA,CAAK;AAAA;AACnB,SACF,CAAE,CAAA;AAAA,QACF,WAAA,EAAa,QAAQ,OAAA,EAAS,WAAA;AAAA,QAC9B,UAAA,EAAY,QAAQ,OAAA,EAAS,SAAA;AAAA,QAC7B,MAAA,EAAQ;AAAA,OACV;AACA,MAAA,IAAI,YAAA,EAAc,IAAA,CAAK,cAAA,GAAiB,EAAE,eAAe,IAAA,EAAK;AAE9D,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,oBAAA,CAAA,EAAwB;AAAA,UAClD,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,WACnC;AAAA,UACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,iBAAA;AAAA,QACA,YAAA;AAAA,QACAA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;AC1EO,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAU,2CAAA,EAA6C,KAAA,EAAAA,QAAM,GAAI,MAAA;AAExF,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,gBAAgB,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAChF,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,QAAA,EAAU,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC3C,iBAAA,EAAmB,aAAA,GACf,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,aAAA,CAAc,OAAA,EAAS,GAAE,GAC3D,MAAA;AAAA,QACJ,KAAA,EAAO,QAAQ,OAAA,EAAS,KAAA,IAAS,QAAQ,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,GAC5D,CAAC;AAAA,UACC,oBAAA,EAAsB,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAA,MAAS;AAAA,YACvD,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,YAAY,IAAA,CAAK;AAAA,WACnB,CAAE;AAAA,SACH,CAAA,GACD;AAAA,OACN;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA;AAAA,UACV,CAAA,EAAG,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,8BAAA,CAAA;AAAA,UACjC;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,cAAA,EAAgB,kBAAA;AAAA,cAChB,gBAAA,EAAkB;AAAA,aACpB;AAAA,YACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,YACzB;AAAA;AACF,SACF;AAAA,QACA,iBAAA;AAAA,QACA,YAAA;AAAA,QACAA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;ACtDO,SAAS,8BAA8B,cAAA,EAAwB;AACpE,EAAA,OAAO,SAAS,wBAAwB,MAAA,EAAgD;AACtF,IAAA,OAAO,MAAA,CAAO;AAAA,MACZ,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,OAAO,OAAA,IAAW;AAAA,KAC5B,CAAA;AAAA,EACH,CAAA;AACF;;;ACRO,IAAM,IAAA,GAAO,8BAA8B,kBAAkB;;;ACM7D,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,GAAU,wBAAA,EAA0B,KAAA,EAAAA,QAAM,GAAI,MAAA;AAE7D,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,KAAA;AAAA;AAAA,MACP,YAAY,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,KAAA,CAAM,SAAS,QAAQ;AAAA,KAChE;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,KAAA;AAAA,QACA,MAAA,EAAQ,IAAA;AAAA,QACR,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,MAAY;AAAA,UACzC,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,SAAS,OAAA,CAAQ;AAAA,SACnB,CAAE;AAAA,OACJ;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,SAAA,CAAA,EAAa;AAAA,UACvC,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,UAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,iBAAA;AAAA,QACA,YAAA;AAAA,QACAA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;ACtCO,IAAM,QAAA,GAAW,8BAA8B,0BAA0B;;;ACAzE,IAAM,IAAA,GAAO,8BAA8B,yBAAyB;;;ACS3E,SAAS,OAAO,KAAA,EAAwB;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,aAAa,KAAA,EAAO;AAC5D,IAAA,MAAM,UAAW,KAAA,CAAgC,OAAA;AACjD,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AAAA,EAC1C;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,iBAAiB,SAAA,EAA4B;AACpD,EAAA,OAAO,SAAA,KAAc,eAAA,IAAmB,SAAA,CAAU,QAAA,CAAS,aAAa,CAAA;AAC1E;AAEO,SAAS,UAAU,MAAA,EAAyC;AACjE,EAAA,MAAM,EAAE,QAAA,EAAU,IAAA,GAAO,QAAA,EAAS,GAAI,MAAA;AAEtC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AAEvC,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,UAAA,IAAI;AACF,YAAA,MAAM,cAAA,GAA0C;AAAA,cAC9C,OAAA,EAAS,IAAA;AAAA,cACT,QAAQ,UAAA,CAAW;AAAA,aACrB;AAEA,YAAA,IAAI,IAAA,KAAS,QAAA,IAAY,QAAA,CAAS,YAAA,EAAc;AAC9C,cAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,YAAA;AAAA,gBAC5B,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,gBAC7B;AAAA,eACF;AAEA,cAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,gBAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,gBAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAC1C,gBAAA,IAAI,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,EAAG;AACjC,kBAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,kBAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,gBAClD,CAAA,MAAA,IAAW,gBAAA,CAAiB,SAAS,CAAA,IAAK,MAAM,IAAA,EAAM;AAEpD,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,WAAA;AAAA,oBACN,QAAA,EAAU;AAAA,sBACR,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,MAAA,IAAU,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,CAAA;AAAA,sBACxD,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAAA,sBACvB,MAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,IAAQ,EAAE;AAAA;AACvC,mBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAC1B,cAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,MAAA;AAAA,gBAC5B,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,gBAC7B;AAAA,eACF;AACA,cAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,gBAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,gBAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,gBAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,cAClD;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAM,kBAAkB,wDAAwD,CAAA;AAChF,cAAA;AAAA,YACF;AAEA,YAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,YAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,UACvB,SAAS,KAAA,EAAO;AAEd,YAAA,IAAI,YAAA,CAAa,KAAK,CAAA,IAAK,UAAA,CAAW,OAAO,OAAA,EAAS;AACtD,YAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,YAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,UACnD;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAMO,SAAS,UAAU,MAAA,EAAyC;AACjE,EAAA,OAAO,SAAA,CAAU;AAAA,IACf,UAAU,MAAA,CAAO,KAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACP,CAAA;AACH;AC/FA,IAAM,gBAAA,GAAmB,+BAAA;AAMzB,gBAAgB,sBAAsB,MAAA,EAA4D;AAChG,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,MAAM,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AACnD,MAAA,IAAI,MAAM,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA,EAAK;AAAA,IAChD;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AAEA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAOA,gBAAgB,6BACd,MAAA,EACoC;AACpC,EAAA,WAAA,MAAiB,EAAE,IAAA,EAAK,IAAKG,YAAAA,CAAS,MAAM,CAAA,EAAG;AAC7C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAQ5B,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,SAAA;AACjC,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,EAAO;AACtC,UAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,QACvC;AAAA,MACF,CAAA,MAAA,IAAW,SAAS,iBAAA,EAAmB;AACrC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,SAAA;AACjC,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,EAAO;AACtC,UAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,KAAA,EAAM;AAAA,QAC5C;AAAA,MACF,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,OAAA,IAAW,2BAAA;AAClD,QAAA,MAAM,iBAAA,CAAkB,MAAA,CAAO,OAAO,CAAC,CAAA;AACvC,QAAA;AAAA,MACF,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,MAAM,iBAAA,CAAkB,IAAA,CAAK,MAAA,IAAU,yCAAyC,CAAA;AAChF,QAAA;AAAA,MACF,CAAA,MAAA,IAAW,SAAS,QAAA,EAAU;AAE5B,QAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,MAAM,kBAAkB,6CAA6C,CAAA;AACvE;AAMA,gBAAuB,iBAAA,CACrB,QACA,QAAA,EACoC;AACpC,EAAA,MAAM,MAAA,GACJ,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA,IACtC,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,gBAAA,CAAiB,WAAA,EAAa,CAAA;AACtD,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,OAAO,6BAA6B,MAAM,CAAA;AAC1C,IAAA;AAAA,EACF;AACA,EAAA,OAAO,sBAAsB,MAAM,CAAA;AACrC;AAEO,SAAS,SAAS,MAAA,EAAwC;AAC/D,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,GAAU,EAAC,EAAG,KAAA,EAAAH,QAAM,GAAI,MAAA;AAErC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA;AAAA;AAAA,KAGd;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,MAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,CAAE,CAAA;AAAA,QAC5F,KAAA,EAAO,QAAQ,OAAA,EAAS,KAAA;AAAA,QACxB,YAAA,EAAc,QAAQ,OAAA,EAAS;AAAA,OACjC;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,GAAA,EAAK;AAAA,UACrB,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAoB,GAAG,OAAA,EAAQ;AAAA,UAC1D,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,iBAAA;AAAA,QACA,KAAA;AAAA,QACAA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;AC9HO,IAAM,OAAA,GAAU,8BAA8B,2BAA2B;;;ACJhF,IAAM,eAAA,GAAkB,yCAAA;AACxB,IAAM,aAAA,GAAgB,gBAAA;AAEtB,IAAM,WAAA,GAAc,8BAA8B,eAAe,CAAA;AAc1D,SAAS,OAAO,MAAA,EAAoE;AACzF,EAAA,MAAM,UAAU,WAAA,CAAY;AAAA,IAC1B,KAAA,EAAO,aAAA;AAAA,IACP,GAAG;AAAA,GACY,CAAA;AACjB,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA;AACT,GACF;AACF;AAGO,IAAM,aAAA,GAAgB;;;AC9BtB,IAAM,QAAA,GAAW,8BAA8B,6BAA6B;;;ACHnF,IAAM,aAAA,GAAgB,gCAAA;AACtB,IAAMK,cAAAA,GAAgB,qBAAA;AAEtB,IAAMC,YAAAA,GAAc,8BAA8B,aAAa,CAAA;AAQxD,SAAS,KAAK,MAAA,EAAkE;AACrF,EAAA,MAAM,UAAUA,YAAAA,CAAY;AAAA,IAC1B,KAAA,EAAOD,cAAAA;AAAA,IACP,GAAG;AAAA,GACU,CAAA;AACf,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA;AACT,GACF;AACF;AAGO,IAAM,WAAA,GAAc;;;ACxBpB,IAAM,SAAA,GAAY,8BAA8B,uCAAuC;;;ACCvF,IAAM,UAAA,GAAa,8BAA8B,8BAA8B;;;ACC/E,IAAM,WAAA,GAAc,8BAA8B,kCAAkC;;;ACDpF,IAAM,QAAA,GAAW,8BAA8B,0BAA0B;;;ACDzE,IAAM,IAAA,GAAO,8BAA8B,0BAA0B;;;ACArE,IAAM,QAAA,GAAW,8BAA8B,0BAA0B;;;ACHhF,IAAM,iBAAA,GAAoB,4BAAA;AAC1B,IAAMA,cAAAA,GAAgB,eAAA;AAEtB,IAAMC,YAAAA,GAAc,8BAA8B,iBAAiB,CAAA;AAQ5D,SAAS,SAAS,MAAA,EAAsE;AAC7F,EAAA,MAAM,UAAUA,YAAAA,CAAY;AAAA,IAC1B,KAAA,EAAOD,cAAAA;AAAA,IACP,GAAG;AAAA,GACc,CAAA;AACnB,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA;AACT,GACF;AACF;AAEO,IAAM,eAAA,GAAkB;;;ACd/B,IAAM,mBAAA,GAAsB,YAAA;AAErB,SAAS,YAAY,MAAA,EAA2C;AACrE,EAAA,MAAM,EAAE,QAAQ,QAAA,EAAU,UAAA,EAAY,aAAa,mBAAA,EAAqB,KAAA,EAAAL,QAAM,GAAI,MAAA;AAClF,EAAA,MAAM,YAAA,GAAe,OAAO,YAAA,IAAgB,IAAA;AAC5C,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,QAAA,CAAS,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,UAAU,CAAC,CAAA,8BAAA,EAAiC,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAE9J,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAgC;AAAA,QACpC,QAAA,EAAU,kBAAA,CAAmB,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC7C,KAAA,EAAO,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA,IAAA,MAAS;AAAA,UAC1C,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,YAAY,IAAA,CAAK;AAAA;AACnB,SACF,CAAE,CAAA;AAAA,QACF,WAAA,EAAa,QAAQ,OAAA,EAAS,WAAA;AAAA,QAC9B,UAAA,EAAY,QAAQ,OAAA,EAAS,SAAA;AAAA,QAC7B,MAAA,EAAQ;AAAA,OACV;AACA,MAAA,IAAI,YAAA,EAAc,IAAA,CAAK,cAAA,GAAiB,EAAE,eAAe,IAAA,EAAK;AAE9D,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,GAAA,EAAK;AAAA,UACrB,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,SAAA,EAAW;AAAA,WACb;AAAA,UACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,iBAAA;AAAA,QACA,kBAAA;AAAA,QACAA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEO,IAAM,kBAAA,GAAqB;;;AClDlC,IAAM,gBAAA,GAAmB,2BAAA;AAEzB,SAAS,cAAc,OAAA,EAAiC;AACtD,EAAA,OAAO,OAAA,CAAQ,QAAA,CACZ,GAAA,CAAI,CAAA,CAAA,KAAK;AACR,IAAA,IAAI,EAAE,IAAA,KAAS,QAAA,EAAU,OAAO,CAAA,SAAA,EAAY,EAAE,OAAO,CAAA,CAAA;AACrD,IAAA,IAAI,EAAE,IAAA,KAAS,WAAA,EAAa,OAAO,CAAA,YAAA,EAAe,EAAE,OAAO,CAAA,CAAA;AAC3D,IAAA,OAAO,CAAA,OAAA,EAAU,EAAE,OAAO,CAAA,CAAA;AAAA,EAC5B,CAAC,CAAA,CACA,IAAA,CAAK,MAAM,CAAA,GAAI,kBAAA;AACpB;AAQA,gBAAgB,qBAAqB,MAAA,EAA4D;AAC/F,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,YAAA,GAAe,EAAA;AACnB,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,MAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AACxB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AAC9B,UAAA,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAClC,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAChC,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACzB,QAAA,IAAI,YAAA,KAAiB,YAAY,IAAA,EAAM;AACrC,UAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAK;AAAA,QACtC,CAAA,MAAA,IAAW,iBAAiB,MAAA,EAAQ;AAClC,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,UAAA;AAAA,QACF,CAAA,MAAA,IAAW,iBAAiB,OAAA,EAAS;AACnC,UAAA,MAAM,iBAAA,CAAkB,QAAQ,wBAAwB,CAAA;AACxD,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,kBAAkB,2CAA2C,CAAA;AACnE,IAAA;AAAA,EACF;AACA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAEO,SAAS,UAAU,MAAA,EAAyC;AACjE,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,UAAU,gBAAA,EAAkB,OAAA,GAAU,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,CAAC,CAAA,KAAK,GAAI,MAAA;AAEhH,EAAA,MAAM,aAAA,GAAgB,UAClB,CAAA,EAAG,OAAO,oBACV,CAAA,EAAG,OAAO,cAAc,KAAK,CAAA,YAAA,CAAA;AAEjC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,OAAA,EAAS;AACb,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,GAAgC;AAAA,cACpC,KAAA,EAAO,QAAQ,OAAO,CAAA;AAAA,cACtB,MAAA,EAAQ;AAAA,aACV;AACA,YAAA,IAAI,OAAA,OAAc,OAAA,GAAU,OAAA;AAE5B,YAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,aAAA,EAAe;AAAA,cAC1C,MAAA,EAAQ,MAAA;AAAA,cACR,OAAA,EAAS;AAAA,gBACP,cAAA,EAAgB,kBAAA;AAAA,gBAChB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,eACnC;AAAA,cACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,cACzB,QAAQ,UAAA,CAAW;AAAA,aACpB,CAAA;AAED,YAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,cAAA,MAAM,iBAAA,CAAkB,CAAA,qBAAA,EAAwB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACjE,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AACvC,YAAA,IAAI,WAAW,KAAA,EAAO;AACpB,cAAA,MAAM,iBAAA,CAAkB,WAAW,KAAK,CAAA;AACxC,cAAA;AAAA,YACF;AACA,YAAA,MAAM,SAAA,GAAY,WAAW,IAAA,EAAM,MAAA;AACnC,YAAA,IAAI,CAAC,SAAA,EAAW;AACd,cAAA,MAAM,kBAAkB,wCAAwC,CAAA;AAChE,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,cAAA,GAAiB,MAAM,KAAA,CAAM,SAAA,EAAW;AAAA,cAC5C,MAAA,EAAQ,KAAA;AAAA,cACR,OAAA,EAAS,EAAE,MAAA,EAAQ,mBAAA,EAAoB;AAAA,cACvC,QAAQ,UAAA,CAAW;AAAA,aACpB,CAAA;AACD,YAAA,IAAI,CAAC,cAAA,CAAe,EAAA,IAAM,CAAC,eAAe,IAAA,EAAM;AAC9C,cAAA,MAAM,iBAAA,CAAkB,CAAA,wBAAA,EAA2B,cAAA,CAAe,MAAM,CAAA,CAAE,CAAA;AAC1E,cAAA;AAAA,YACF;AAEA,YAAA,WAAA,MAAiB,KAAA,IAAS,oBAAA,CAAqB,cAAA,CAAe,IAAI,CAAA,EAAG;AACnE,cAAA,IAAI,OAAA,EAAS;AACb,cAAA,MAAM,KAAA;AAAA,YACR;AAAA,UACF,SAAS,GAAA,EAAK;AACZ,YAAA,IAAI,YAAA,CAAa,GAAG,CAAA,IAAK,OAAA,EAAS;AAClC,YAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,YAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,UACjD;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEO,IAAM,gBAAA,GAAmB;;;ACxJhC,IAAM,aAAA,GAAgB,mDAAA;AACtB,IAAMK,cAAAA,GAAgB,UAAA;AAEtB,IAAMC,YAAAA,GAAc,8BAA8B,aAAa,CAAA;AAUxD,SAAS,KAAK,MAAA,EAAkE;AACrF,EAAA,MAAM,UAAUA,YAAAA,CAAY;AAAA,IAC1B,KAAA,EAAOD,cAAAA;AAAA,IACP,GAAG;AAAA,GACU,CAAA;AACf,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA;AACT,GACF;AACF;AAEO,IAAM,WAAA,GAAc;AAEpB,IAAM,IAAA,GAAO;;;ACZb,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,SAAS,MAAA,EAAQ,KAAA,EAAO,aAAa,SAAA,GAAY,QAAA,EAAU,KAAA,EAAAL,MAAAA,EAAM,GAAI,MAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,CAAA,QAAA,EAAW,MAAM,CAAA,uCAAA,EAA0C,OAAO,cAAc,MAAM,CAAA,YAAA,EAAe,SAAS,CAAA,QAAA,EAAW,KAAK,CAAA,8BAAA,CAAA;AAE1I,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO,IAAA;AAAA,MACP,SAAA,EAAW,KAAA,CAAM,QAAA,CAAS,KAAK;AAAA,KACjC;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,gBAAgB,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAChF,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,QAAA,EAAU,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC3C,iBAAA,EAAmB,aAAA,GACf,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,aAAA,CAAc,OAAA,EAAS,GAAE,GAC3D,MAAA;AAAA,QACJ,KAAA,EAAO,QAAQ,OAAA,EAAS,KAAA,IAAS,QAAQ,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,GAC5D,CAAC;AAAA,UACC,oBAAA,EAAsB,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAA,MAAS;AAAA,YACvD,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,YAAY,IAAA,CAAK;AAAA,WACnB,CAAE;AAAA,SACH,CAAA,GACD;AAAA,OACN;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,OAAO,MAAA,KAAW;AAChB,UAAA,MAAM,QAAQ,OAAO,WAAA,KAAgB,QAAA,GAAW,WAAA,GAAc,MAAM,WAAA,EAAY;AAChF,UAAA,OAAO,MAAM,GAAA,EAAK;AAAA,YAChB,MAAA,EAAQ,MAAA;AAAA,YACR,OAAA,EAAS;AAAA,cACP,cAAA,EAAgB,kBAAA;AAAA,cAChB,eAAA,EAAiB,UAAU,KAAK,CAAA;AAAA,aAClC;AAAA,YACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,YACzB;AAAA,WACD,CAAA;AAAA,QACH,CAAA;AAAA,QACA,iBAAA;AAAA,QACA,WAAA;AAAA,QACAA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEO,IAAM,aAAA,GAAgB;ACzB7B,IAAI,SAAA,GAAuC,IAAA;AAC3C,eAAe,OAAA,GAA8B;AAC3C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,SAAA,GAAA,CAAa,YAAY;AACvB,MAAA,IAAI;AAEF,QAAA,MAAM,QAAA,GAAW,iCAAA;AACjB,QAAA,OAAQ,MAAM;AAAA;AAAA,UAA0B;AAAA,SAAA;AAAA,MAC1C,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAIH,iBAAAA,CAAa;AAAA,UACrB,MAAMC,eAAAA,CAAW,kBAAA;AAAA,UACjB,OAAA,EACE,iHAAA;AAAA,UACF,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAAA,IACF,CAAA,GAAG;AAAA,EACL;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,iBAAiB,KAAA,EAAwB;AAChD,EAAA,OAAO,KAAA,CAAM,WAAW,YAAY,CAAA;AACtC;AAEA,SAAS,kBAAA,CAAmB,SAAyB,SAAA,EAA2B;AAC9E,EAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,OAAA,CAAQ,QAAQ,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,QAAQ,QAAA,CAAS,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA,EAAG,OAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA,IAAA,MAAS;AAAA,IACjD,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,cAAc,IAAA,CAAK;AAAA,GACrB,CAAE,CAAA;AACF,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,iBAAA,EAAmB,oBAAA;AAAA,IACnB,UAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,SAAA,IAAa,SAAA;AAAA,IAC1C;AAAA,GACF;AACA,EAAA,IAAI,MAAA,OAAa,MAAA,GAAS,MAAA;AAC1B,EAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,CAAA,OAAQ,KAAA,GAAQ,KAAA;AAC5C,EAAA,OAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAC5B;AAEA,gBAAgB,4BACd,MAAA,EACoC;AACpC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAwD;AAErF,EAAA,MAAM,QAAA,GAAW,WACf,EAAA,EACiC;AACjC,IAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,EAAA,CAAG,IAAI,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,MAAA,MAAM;AAAA,QACJ,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA;AAAA,QACtB,QAAA,EAAU,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA;AAAM,OAClC;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,MAAK,EAAE;AACrF,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,WAAA,MAAiB,QAAQ,MAAA,EAAQ;AAC/B,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAO,KAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,IAAA,IAAI,SAAS,qBAAA,EAAuB;AAClC,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,IAAI,KAAA,EAAO,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,IAAA,EAAM;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,IAAA,EAAK;AAAA,MAC5C,CAAA,MAAA,IAAW,KAAA,EAAO,IAAA,KAAS,kBAAA,EAAoB;AAC7C,QAAA,MAAM,KAAA,GAAS,MAAM,KAAA,IAAgC,CAAA;AACrD,QAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAC3C,QAAA,IAAI,QAAA,EAAU,QAAA,CAAS,IAAA,IAAQ,KAAA,CAAM,YAAA,IAAgB,EAAA;AAAA,MACvD;AAAA,IACF,CAAA,MAAA,IAAW,SAAS,qBAAA,EAAuB;AACzC,MAAA,MAAM,KAAA,GAAS,MAAM,KAAA,IAAgC,CAAA;AACrD,MAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,MAAA,IAAI,OAAO,IAAA,KAAS,UAAA,IAAc,KAAA,CAAM,EAAA,IAAM,MAAM,IAAA,EAAM;AACxD,QAAA,gBAAA,CAAiB,GAAA,CAAI,KAAA,EAAO,EAAE,EAAA,EAAI,KAAA,CAAM,EAAA,EAAI,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,MAC1E;AAAA,IACF,CAAA,MAAA,IAAW,SAAS,oBAAA,EAAsB;AACxC,MAAA,MAAM,KAAA,GAAS,MAAM,KAAA,IAAgC,CAAA;AACrD,MAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACrC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,IAAI,EAAE,OAAO,QAAA,CAAS,EAAE,CAAA,CAAA,EAAI;AAC1B,UAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,UAAA;AAAA,QACF;AACA,QAAA,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA,MAAA,IAAW,SAAS,eAAA,EAAiB;AACnC,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,YAAA,GAAe,MAAM,YAAA,IAAgB,CAAA;AAC3C,QAAA,MAAM,gBAAA,GAAmB,MAAM,aAAA,IAAiB,CAAA;AAChD,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,OAAO,EAAE,YAAA,EAAc,gBAAA,EAAkB,WAAA,EAAa,eAAe,gBAAA;AAAiB,SACxF;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,SAAS,eAAA,EAAiB;AACnC,MAAA,MAAM,KAAA,GAAS,MAAM,OAAA,EAA+D,KAAA;AACpF,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,MAAM,YAAA,IAAgB,CAAA;AAAA,YACpC,gBAAA,EAAkB,CAAA;AAAA,YAClB,WAAA,EAAa,MAAM,YAAA,IAAgB;AAAA;AACrC,SACF;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,SAAS,cAAA,EAAgB;AAClC,MAAA,KAAA,MAAW,GAAG,EAAE,CAAA,IAAK,gBAAA,EAAkB;AACrC,QAAA,IAAI,EAAE,OAAO,QAAA,CAAS,EAAE,CAAA,CAAA,EAAI;AAC1B,UAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,MAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,EAAA,MAAM,kBAAkB,0CAA0C,CAAA;AACpE;AAEO,SAAS,QAAQ,MAAA,EAAuC;AAC7D,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAA,GAAY,MAAK,GAAI,MAAA;AAE5C,EAAA,IAAI,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAIS,gBAAA,CAAY;AAAA,MACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,MACjB,OAAA,EAAS,mBAAmB,KAAK,CAAA,0GAAA,CAAA;AAAA,MACjC,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,aAAA,GAA0D,IAAA;AAC9D,EAAA,MAAM,YAAY,YAA+C;AAC/D,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AACjC,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,aAAA,GAAA,CAAiB,YAAY;AAC3B,QAAA,MAAM,GAAA,GAAM,MAAM,OAAA,EAAQ;AAC1B,QAAA,OAAO,IAAI,GAAA,CAAI,oBAAA,CAAqB,EAAE,QAAQ,CAAA;AAAA,MAChD,CAAA,GAAG;AAAA,IACL;AACA,IAAA,OAAO,aAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,WAAW,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA,MAC5D,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC1C,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAC/B,YAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC1C,YAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,GAAS,IAAA,GAAO,MAAM,OAAA,EAAQ;AACjD,YAAA,MAAM,KAAA,GAA4B;AAAA,cAChC,OAAA,EAAS,KAAA;AAAA,cACT,WAAA,EAAa,kBAAA;AAAA,cACb,MAAA,EAAQ,kBAAA;AAAA,cACR,IAAA,EAAM,kBAAA,CAAmB,OAAA,EAAS,SAAS;AAAA,aAC7C;AACA,YAAA,MAAM,OAAA,GAAU,MACZ,IAAI,GAAA,CAAI,qCAAqC,KAAK,CAAA,GAClD,EAAE,KAAA,EAAM;AACZ,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,IAAA,CAAK,SAAS,EAAE,WAAA,EAAa,UAAA,CAAW,MAAA,EAAQ,CAAA;AAC9E,YAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,cAAA,MAAM,kBAAkB,8BAA8B,CAAA;AACtD,cAAA;AAAA,YACF;AACA,YAAA,WAAA,MAAiB,KAAA,IAAS,2BAAA,CAA4B,QAAA,CAAS,IAAI,CAAA,EAAG;AACpE,cAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC1C,cAAA,MAAM,KAAA;AAAA,YACR;AAAA,UACF,SAAS,GAAA,EAAK;AACZ,YAAA,IAAI,YAAA,CAAa,GAAG,CAAA,IAAK,OAAA,EAAS;AAClC,YAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,YAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,UACjD;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEO,IAAM,cAAA,GAAiB;AC9N9B,IAAIU,UAAAA,GAA0C,IAAA;AAC9C,eAAeC,QAAAA,GAAiC;AAC9C,EAAA,IAAI,CAACD,UAAAA,EAAW;AACd,IAAAA,cAAa,YAAY;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,iBAAA;AACjB,QAAA,OAAQ,MAAM;AAAA;AAAA,UAA0B;AAAA,SAAA;AAAA,MAC1C,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAIX,iBAAAA,CAAa;AAAA,UACrB,MAAMC,eAAAA,CAAW,kBAAA;AAAA,UACjB,OAAA,EAAS,gFAAA;AAAA,UACT,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAAA,IACF,CAAA,GAAG;AAAA,EACL;AACA,EAAA,OAAOU,UAAAA;AACT;AAEO,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,IAAI,aAAA,GAAkD,IAAA;AACtD,EAAA,MAAM,YAAY,MAAiC;AACjD,IAAA,IAAI,OAAO,MAAA,EAAQ,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,MAAM,CAAA;AACvD,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,aAAA,GAAA,CAAiB,YAAY;AAC3B,QAAA,MAAM,GAAA,GAAM,MAAMC,QAAAA,EAAQ;AAC1B,QAAA,OAAO,GAAA,CAAI,gBAAgB,MAAA,CAAO,KAAA,EAAO,EAAE,oBAAA,EAAsB,MAAA,CAAO,YAAY,CAAA;AAAA,MACtF,CAAA,GAAG;AAAA,IACL;AACA,IAAA,OAAO,aAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,IAAI,UAAA,GAAyF,IAAA;AAE7F,MAAA,MAAM,YAAY,MAAY;AAC5B,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,aAAoB,KAAA,EAAM;AACjD,QAAA,IAAI,UAAA,IAAc,OAAO,UAAA,CAAW,MAAA,KAAW,UAAA,EAAY;AACzD,UAAA,KAAK,UAAA,CAAW,MAAA,CAAO,MAAS,CAAA,CAAE,MAAM,MAAM;AAAA,UAAC,CAAC,CAAA;AAAA,QAClD;AAAA,MACF,CAAA;AAEA,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC1C,UAAA,IAAI;AACF,YAAA,MAAM,SAAS,MAAM,SAAA,CAAU,SAAA,EAAU,EAAG,WAAW,MAAM,CAAA;AAC7D,YAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAE1C,YAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,CAAA;AACjF,YAAA,MAAM,aAAa,MAAM,SAAA;AAAA,cACvB,OAAA,CAAQ,OAAA;AAAA,gBACN,MAAA,CAAO,KAAK,WAAA,CAAY,MAAA,CAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,MAAM;AAAA,eAC3D;AAAA,cACA,UAAA,CAAW;AAAA,aACb;AACA,YAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAE1C,YAAA,UAAA,GAAa,UAAA,CAAW,MAAA,CAAO,aAAa,CAAA,EAAE;AAC9C,YAAA,OAAO,IAAA,EAAM;AACX,cAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AACxC,gBAAA,IAAI,OAAO,UAAA,CAAW,MAAA,KAAW,UAAA,EAAY;AAC3C,kBAAA,MAAM,UAAA,CAAW,MAAA,CAAO,KAAA,CAAS,CAAA,CAAE,MAAM,MAAM;AAAA,kBAAC,CAAC,CAAA;AAAA,gBACnD;AACA,gBAAA;AAAA,cACF;AACA,cAAA,MAAM,OAAO,MAAM,SAAA,CAAU,WAAW,IAAA,EAAK,EAAG,WAAW,MAAM,CAAA;AACjE,cAAA,IAAI,KAAK,IAAA,EAAM;AACf,cAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AACxC,gBAAA,IAAI,OAAO,UAAA,CAAW,MAAA,KAAW,UAAA,EAAY;AAC3C,kBAAA,MAAM,UAAA,CAAW,MAAA,CAAO,KAAA,CAAS,CAAA,CAAE,MAAM,MAAM;AAAA,kBAAC,CAAC,CAAA;AAAA,gBACnD;AACA,gBAAA;AAAA,cACF;AACA,cAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,GAAG,KAAA,EAAO,OAAA;AAC5C,cAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,YAClD;AACA,YAAA,IAAI,OAAA,IAAW,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC1C,YAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,UACvB,SAAS,GAAA,EAAK;AACZ,YAAA,IAAI,aAAa,GAAG,CAAA,IAAK,OAAA,IAAW,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/D,YAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,YAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,UACjD;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,SAAA,EAAU;AAAA,QACZ;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEO,IAAM,aAAA,GAAgB;AC9E7B,SAAS,oBAAoB,OAAA,EAA8C;AACzE,EAAA,MAAM,QAA6B,EAAC;AACpC,EAAA,IAAI,OAAA,CAAQ,SAAS,KAAA,IAAS,OAAA,CAAQ,QAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAA,GAAQ,IAAA;AAC9E,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBAAA,CAAoB,MAA2B,IAAA,EAAgD;AACtG,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAuC;AACvE,IAAA,IAAI,QAAQ,YAAA,EAAc;AAC1B,IAAA,IAAI,KAAK,GAAG,CAAA,IAAK,KAAK,GAAG,CAAA,KAAM,OAAO,OAAO,KAAA;AAAA,EAC/C;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAA,CACP,MACA,MAAA,EACwC;AACxC,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,EAAM,OAAQ,CAAA,CAAE,IAAA,IAAQ,QAAA,KAAa,IAAA,CAAK,QAAQ,QAAA,CAAA,GAAY,CAAA,GAAI,IAAA,EAAO,IAAA,CAAK,CAAC,CAAE,CAAA;AACxG,IAAA,OAAO,EAAE,CAAA,EAAG,MAAA,EAAQ,UAAA,EAAW;AAAA,EACjC;AACA,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,EAAM,OAAQ,CAAA,CAAE,SAAA,IAAa,QAAA,KAAa,IAAA,CAAK,aAAa,QAAA,CAAA,GAAY,CAAA,GAAI,IAAA,EAAO,IAAA,CAAK,CAAC,CAAE,CAAA;AAClH,IAAA,OAAO,EAAE,CAAA,EAAG,MAAA,EAAQ,SAAA,EAAU;AAAA,EAChC;AACA,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,EAAM,OAAQ,CAAA,CAAE,WAAA,IAAe,QAAA,KAAa,IAAA,CAAK,eAAe,QAAA,CAAA,GAAY,CAAA,GAAI,IAAA,EAAO,IAAA,CAAK,CAAC,CAAE,CAAA;AACtH,IAAA,OAAO,EAAE,CAAA,EAAG,MAAA,EAAQ,UAAA,EAAW;AAAA,EACjC;AACA,EAAA,IAAI,WAAW,YAAA,EAAc;AAG3B,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,IAAK,IAAI,CAAA;AACtF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,IAAK,IAAI,CAAA;AAC7E,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,YAAY,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,UAAU,CAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAA+B;AAC5C,MAAA,MAAM,MAAA,GAAA,CAAU,CAAA,CAAE,WAAA,IAAe,IAAA,GAAO,CAAA,IAAK,IAAA;AAC7C,MAAA,MAAM,IAAA,GAAA,CAAQ,CAAA,CAAE,IAAA,IAAQ,OAAA,GAAU,CAAA,IAAK,OAAA;AACvC,MAAA,OAAO,MAAA,GAAS,IAAA;AAAA,IAClB,CAAA;AACA,IAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,EAAM,MAAO,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,IAAI,CAAA,GAAI,CAAA,GAAI,IAAA,EAAO,IAAA,CAAK,CAAC,CAAE,CAAA;AAChF,IAAA,OAAO,EAAE,CAAA,EAAG,MAAA,EAAQ,YAAA,EAAa;AAAA,EACnC;AACA,EAAA,OAAO,EAAE,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAI,QAAQ,kBAAA,EAAmB;AACnD;AAEA,SAAS,aAAA,CAAc,WAA4B,MAAA,EAAyC;AAC1F,EAAA,OAAO,MAAA,KAAW,MAAA,IAAa,SAAA,CAAU,MAAA,KAAW,MAAA;AACtD;AAUO,SAAS,aAAa,OAAA,EAAwC;AACnE,EAAA,MAAM,EAAE,YAAW,GAAI,OAAA;AACvB,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAIF,gBAAAA,CAAY;AAAA,MACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,MACjB,OAAA,EAAS,8CAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,UAAA;AAEjC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO,oBAAoB,OAAO,CAAA;AACxC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,GAAW,OAAO,KAAK,OAAA,CAAQ,MAAA;AACtD,MAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,CAAAY,EAAAA,KAAK,mBAAA,CAAoB,IAAA,EAAMA,EAAAA,CAAE,YAAA,IAAgBA,EAAAA,CAAE,OAAA,CAAQ,YAAY,CAAC,CAAA;AAC1G,MAAA,MAAM,QAAA,GAAW,QAAQ,MAAA,CAAO,CAAAA,OAAK,aAAA,CAAcA,EAAAA,EAAG,MAAM,CAAC,CAAA;AAE7D,MAAA,IAAI,QAAQ,MAAA,GAAS,CAAA,IAAK,SAAS,MAAA,KAAW,CAAA,IAAK,WAAW,MAAA,EAAW;AAEvE,QAAA,MAAM,IAAIH,gBAAAA,CAAY;AAAA,UACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,UACjB,OAAA,EAAS,2CAA2C,MAAM,CAAA,CAAA;AAAA,UAC1D,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,GAAW,OAAO,CAAA;AAC7C,MAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,QAAA,MAAMY,KAAI,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,UAAU,CAAA;AAChD,QAAA,IAAIA,EAAAA,EAAG;AACL,UAAA,OAAA,CAAQ,OAAA,GAAU,EAAE,EAAA,EAAIA,EAAAA,CAAE,EAAA,EAAI,MAAA,EAAQ,MAAA,GAAS,CAAA,YAAA,EAAe,MAAM,CAAA,CAAA,GAAK,aAAA,EAAe,OAAA,EAAS,CAAA;AACjG,UAAA,OAAOA,EAAAA,CAAE,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA;AAAA,QACvC;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,GAAO,QAAA;AACX,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,MAAM,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AACtD,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,CAAAA,OAAKA,EAAAA,CAAE,IAAA,IAAQ,UAAA,CAAW,KAAA,CAAM,OAAKA,EAAAA,CAAE,IAAA,CAAM,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAC1F,QAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,UAAA,IAAA,GAAO,QAAA;AACP,UAAA,QAAA,GAAW,MAAA,GAAS,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,GAAK,eAAA;AAAA,QAClD;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AAErB,QAAA,MAAM,IAAIb,iBAAAA,CAAa;AAAA,UACrB,MAAMC,eAAAA,CAAW,wBAAA;AAAA,UACjB,OAAA,EAAS,oCAAA;AAAA,UACT,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAChC,QAAA,MAAM,QAAQ,MAAA,CAAO,EAAE,OAAA,EAAS,UAAA,EAAY,MAAM,CAAA;AAClD,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE7B,UAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,UAAA,IAAI,KAAA;AACJ,UAAA,OAAO;AAAA,YACL,OAAO,MAAM;AACX,cAAA,UAAA,CAAW,KAAA,EAAM;AACjB,cAAA,KAAA,EAAO,KAAA,EAAM;AAAA,YACf,CAAA;AAAA,YACA,QAAQ,mBAAmB;AACzB,cAAA,IAAI,EAAA;AACJ,cAAA,IAAI;AACF,gBAAA,EAAA,GAAK,MAAM,SAAA,CAAU,KAAA,EAAO,UAAA,CAAW,MAAM,CAAA;AAAA,cAC/C,SAAS,GAAA,EAAK;AACZ,gBAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG;AACvB,gBAAA,MAAM,KAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAChE,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,OAAA;AAAA,kBACN,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,QAAA,EAAU,EAAE,KAAA;AAAM,iBACpB;AACA,gBAAA;AAAA,cACF;AACA,cAAA,MAAMY,KAAI,IAAA,CAAK,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,EAAE,CAAA;AACpC,cAAA,IAAI,CAACA,EAAAA,EAAG;AACN,gBAAA,MAAM,KAAA,GAAQ,IAAIH,gBAAAA,CAAY;AAAA,kBAC5B,MAAMT,eAAAA,CAAW,iBAAA;AAAA,kBACjB,OAAA,EAAS,+BAA+B,EAAE,CAAA,CAAA;AAAA,kBAC1C,IAAA,EAAM;AAAA,iBACP,CAAA;AACD,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,OAAA;AAAA,kBACN,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,QAAA,EAAU,EAAE,KAAA;AAAM,iBACpB;AACA,gBAAA;AAAA,cACF;AACA,cAAA,IAAI;AACF,gBAAA,OAAA,CAAQ,OAAA,GAAU,EAAE,EAAA,EAAIY,EAAAA,CAAE,IAAI,MAAA,EAAQ,QAAA,IAAY,eAAA,EAAiB,OAAA,EAAS,CAAA;AAC5E,gBAAA,KAAA,GAAQA,EAAAA,CAAE,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA;AACtC,gBAAA,WAAA,MAAiB,KAAA,IAAS,KAAA,CAAM,MAAA,EAAO,EAAG;AACxC,kBAAA,MAAM,KAAA;AAAA,gBACR;AAAA,cACF,SAAS,GAAA,EAAK;AACZ,gBAAA,IAAI,UAAA,CAAW,MAAA,CAAO,OAAA,IAAW,YAAA,CAAa,GAAG,CAAA,EAAG;AACpD,gBAAA,MAAM,KAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAChE,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,OAAA;AAAA,kBACN,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,QAAA,EAAU,EAAE,KAAA;AAAM,iBACpB;AAAA,cACF;AAAA,YACF;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAMA,KAAI,IAAA,CAAK,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AACvC,QAAA,IAAI,CAACA,EAAAA,EAAG;AAEN,UAAA,MAAM,IAAIH,gBAAAA,CAAY;AAAA,YACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,YACjB,OAAA,EAAS,+BAA+B,KAAK,CAAA,CAAA;AAAA,YAC7C,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA,OAAA,CAAQ,OAAA,GAAU,EAAE,EAAA,EAAIY,EAAAA,CAAE,IAAI,MAAA,EAAQ,QAAA,IAAY,eAAA,EAAiB,OAAA,EAAS,CAAA;AAC5E,QAAA,OAAOA,EAAAA,CAAE,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA;AAAA,MACvC;AAEA,MAAA,MAAM,EAAE,CAAA,EAAG,MAAA,EAAO,GAAI,cAAA,CAAe,MAAM,MAAM,CAAA;AACjD,MAAA,OAAA,CAAQ,OAAA,GAAU,EAAE,EAAA,EAAI,CAAA,CAAE,IAAI,MAAA,EAAQ,QAAA,IAAY,MAAA,EAAQ,OAAA,EAAS,CAAA;AACnE,MAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA;AAAA,IACvC;AAAA,GACF;AACF;;;AClOO,IAAM,oBAAA,GAAoC;AAAA;AAAA,EAE/C,qBAAA,EAAuB,IAAA;AAAA,EACvB,qBAAA,EAAuB,IAAA;AAAA,EACvB,wBAAA,EAA0B,IAAA;AAAA,EAC1B,qBAAA,EAAuB,IAAA;AAAA;AAAA,EAGvB,eAAA,EAAiB,GAAA;AAAA,EACjB,gBAAA,EAAkB,IAAA;AAAA,EAClB,sBAAA,EAAwB,IAAA;AAAA,EACxB,mBAAA,EAAqB,IAAA;AAAA;AAAA,EAGrB,oBAAA,EAAsB,IAAA;AAAA,EACtB,iBAAA,EAAmB,IAAA;AAAA,EACnB,qBAAA,EAAuB,IAAA;AAAA,EACvB,sBAAA,EAAwB,IAAA;AAAA;AAAA,EAGxB,eAAA,EAAiB,IAAA;AAAA,EACjB,eAAA,EAAiB,IAAA;AAAA,EACjB,eAAA,EAAiB,IAAA;AAAA;AAAA,EAGjB,cAAA,EAAgB,GAAA;AAAA,EAChB,gBAAA,EAAkB,GAAA;AAAA,EAClB,gBAAA,EAAkB,GAAA;AAAA;AAAA,EAGlB,gBAAA,EAAkB,GAAA;AAAA,EAClB,qBAAA,EAAuB,IAAA;AAAA,EACvB,oBAAA,EAAsB,IAAA;AAAA,EACtB,oBAAA,EAAsB;AACxB;AAeA,SAAS,WAAW,SAAA,EAA2D;AAC7E,EAAA,IAAI,CAAC,SAAA,CAAU,MAAA,EAAQ,OAAO,MAAA;AAC9B,EAAA,MAAM,WAAW,SAAA,CAAU,EAAA,CAAG,KAAA,CAAM,MAAM,EAAE,CAAC,CAAA;AAC7C,EAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,CAAA;AACxC;AAeO,SAAS,gBAAA,CACd,UAAA,EACA,OAAA,GAA8B,EAAC,EACZ;AACnB,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,oBAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,UAAA;AACjC,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,CAAA,KAAK;AACzB,IAAA,IAAI,CAAA,CAAE,WAAA,IAAe,IAAA,EAAM,OAAO,CAAA;AAClC,IAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,KAAA,CAAM,GAAG,CAAA,GAAI,MAAA;AACjC,IAAA,OAAO,EAAE,GAAG,CAAA,EAAG,WAAA,EAAa,KAAA,IAAS,QAAQ,QAAA,EAAS;AAAA,EACxD,CAAC,CAAA;AACH;AAQO,SAAS,gBAAA,CAAiB,aAAiC,MAAA,EAAwB;AACxF,EAAA,IAAI,WAAA,IAAe,MAAM,OAAO,CAAA;AAChC,EAAA,OAAQ,SAAS,GAAA,GAAQ,WAAA;AAC3B;ACvFA,eAAe,KAAA,CAAM,QAAsB,SAAA,EAAqF;AAC9H,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf,GAAG,SAAS,CAAA;AAAA,EACd;AACA,EAAA,IAAI;AACF,IAAA,WAAA,MAAiB,KAAA,IAAS,MAAA,CAAO,MAAA,EAAO,EAAG;AACzC,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,IAAU,OAAO,MAAM,OAAA,KAAY,QAAA,UAAkB,KAAA,CAAM,OAAA;AAC9E,MAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,EAAU,KAAA;AAChC,QAAA,KAAA,GAAQ,mBAAmB,KAAA,GACvB,OAAA,GACA,IAAI,KAAA,CAAM,KAAA,CAAM,WAAW,cAAc,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,CAAC,YAAA,CAAa,GAAG,CAAA,EAAG;AACtB,MAAA,KAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAA,IAAW,CAAC,QAAA,EAAU;AACpB,MAAA,KAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAC5D;AAAA,EACF,CAAA,SAAE;AACA,IAAA,IAAI,KAAA,eAAoB,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,UAAU,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,SAAS,CAAA,EAAA,CAAI,CAAA;AAC9D,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAM;AAC/B;AAEA,SAAS,YAAA,CAAa,UAAkC,UAAA,EAAyC;AAC/F,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,MAAA,IAAU,CAAC,CAAC,CAAC,CAAA;AACrE,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,EAAE,KAAA,EAAO;AACb,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAA,EAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAAE,IAAI,CAAA,IAAK,CAAA,KAAM,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,EAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EAC5E;AACA,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,MAAA,EAAQ;AAClC,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,SAAA,GAAY,KAAA;AACZ,MAAA,IAAA,GAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAYO,SAAS,sBAAsB,OAAA,EAA0C;AAC9E,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AACnC,IAAA,MAAM,IAAIH,gBAAAA,CAAY;AAAA,MACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,MACjB,OAAA,EAAS,uDAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,eAAA;AAEvC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,MAAM,UAA0B,EAAC;AAEjC,MAAA,MAAM,MAAM,YAA6C;AACvD,QAAA,MAAM,QAAQ,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,OAAO,GAAG,CAAA,KAAqC;AAClF,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA;AAC7C,YAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AACb,YAAA,IAAI,OAAA,EAAS;AACX,cAAA,MAAA,CAAO,KAAA,EAAM;AACb,cAAA,OAAO,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAA,EAAQ,EAAC,EAAG,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,IAAI,KAAA,CAAM,SAAS,CAAA,EAAE;AAAA,YACvE;AACA,YAAA,MAAM,EAAE,QAAQ,IAAA,EAAM,KAAA,KAAU,MAAM,KAAA,CAAM,MAAA,EAAQ,OAAA,CAAQ,SAAS,CAAA;AACrE,YAAA,OAAO,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAA,EAAQ,MAAM,KAAA,EAAM;AAAA,UACzC,SAAS,GAAA,EAAK;AACZ,YAAA,MAAM,KAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAChE,YAAA,OAAO,EAAE,IAAI,CAAA,CAAE,EAAA,EAAI,QAAQ,EAAC,EAAG,IAAA,EAAM,EAAA,EAAI,KAAA,EAAM;AAAA,UACjD;AAAA,QACF,CAAC,CAAA;AACD,QAAA,OAAO,OAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,MAC1B,CAAA;AAEA,MAAA,MAAM,SAAA,GAAY,OAAO,QAAA,KAAsD;AAC7E,QAAA,IAAI,OAAO,SAAA,KAAc,UAAA,EAAY,OAAO,UAAU,QAAQ,CAAA;AAC9D,QAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,UAAA,OAAO,QAAA,CACJ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,KAAK,CAAA,CACpB,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAA,CACf,KAAK,SAAS,CAAA;AAAA,QACnB;AACA,QAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,UAAA,OAAO,SACJ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,KAAK,CAAA,CACpB,MAAA;AAAA,YACC,CAAC,MAAM,CAAA,KAAO,CAAA,CAAE,KAAK,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,CAAA,CAAE,IAAA,GAAO,IAAA;AAAA,YACrD;AAAA,WACF;AAAA,QACJ;AACA,QAAA,OAAO,YAAA,CAAa,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA;AAAA,MAClD,CAAA;AAEA,MAAA,OAAO;AAAA,QACL,OAAO,MAAM;AACX,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,CAAA,EAAG,KAAA,EAAM;AAAA,QACpC,CAAA;AAAA,QACA,QAAQ,mBAAmB;AACzB,UAAA,IAAI,OAAA,EAAS;AACb,UAAA,MAAM,QAAA,GAAW,MAAM,GAAA,EAAI;AAC3B,UAAA,OAAA,CAAQ,aAAa,QAAQ,CAAA;AAC7B,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,CAAA,EAAG,KAAA,EAAM;AAClC,YAAA;AAAA,UACF;AACA,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,QAAQ,CAAA;AACrC,YAAA,IAAI,CAAC,IAAA,IAAQ,QAAA,CAAS,MAAM,CAAA,CAAA,KAAK,CAAA,CAAE,KAAK,CAAA,EAAG;AACzC,cAAA,MAAM,OAAA,GAAU,QAAA,CACb,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,EAAE,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,OAAA,IAAW,SAAS,CAAA,CAAE,CAAA,CACpD,KAAK,IAAI,CAAA;AACZ,cAAA,MAAM,GAAA,GAAM,IAAID,iBAAAA,CAAa;AAAA,gBAC3B,MAAMC,eAAAA,CAAW,wBAAA;AAAA,gBACjB,OAAA,EAAS,iCAAiC,OAAO,CAAA,CAAA,CAAA;AAAA,gBACjD,IAAA,EAAM;AAAA,eACP,CAAA;AACA,cAAC,GAAA,CAAyF,YAAA,GACzF,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,CAAE,CAAA;AAClD,cAAA,MAAM;AAAA,gBACJ,IAAA,EAAM,OAAA;AAAA,gBACN,SAAS,GAAA,CAAI,OAAA;AAAA,gBACb,QAAA,EAAU,EAAE,KAAA,EAAO,GAAA;AAAI,eACzB;AACA,cAAA;AAAA,YACF;AACA,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,MAAA;AAAA,cACN,OAAA,EAAS,IAAA;AAAA,cACT,QAAA,EAAU;AAAA,gBACR,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,kBAC3B,IAAI,CAAA,CAAE,EAAA;AAAA,kBACN,KAAA,EAAO,EAAE,IAAA,CAAK,MAAA;AAAA,kBACd,KAAA,EAAO,EAAE,KAAA,EAAO;AAAA,iBAClB,CAAE;AAAA;AACJ,aACF;AACA,YAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,UACvB,SAAS,GAAA,EAAK;AACZ,YAAA,IAAI,OAAA,IAAW,YAAA,CAAa,GAAG,CAAA,EAAG;AAClC,YAAA,MAAM,KAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAChE,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,OAAA;AAAA,cACN,SAAS,KAAA,CAAM,OAAA;AAAA,cACf,QAAA,EAAU,EAAE,KAAA;AAAM,aACpB;AAAA,UACF;AAAA,QACF;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;ACpLO,SAAS,qBAAA,CACd,UAAA,EACA,OAAA,GAA2B,EAAC,EACZ;AAChB,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAIS,gBAAAA,CAAY;AAAA,MACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,MACjB,OAAA,EAAS,uDAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,OAAO;AAAA,QACL,OAAO,MAAM;AACX,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,MAAA,EAAQ,KAAA,EAAM;AAAA,QAChB,CAAA;AAAA,QACA,QAAQ,mBAAmB;AACzB,UAAA,MAAM,SAA8C,EAAC;AACrD,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,YAAA,IAAI,OAAA,EAAS;AACb,YAAA,MAAM,SAAA,GAAY,WAAW,CAAC,CAAA;AAC9B,YAAA,IAAI,MAAA;AACJ,YAAA,IAAI;AACF,cAAA,MAAA,GAAS,SAAA,CAAU,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA;AAAA,YACjD,SAASa,IAAAA,EAAK;AACZ,cAAA,MAAM,KAAA,GAAQA,gBAAe,KAAA,GAAQA,IAAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,IAAG,CAAC,CAAA;AAChE,cAAA,MAAA,CAAO,KAAK,EAAE,EAAA,EAAI,SAAA,CAAU,EAAA,EAAI,OAAO,CAAA;AACvC,cAAA,OAAA,CAAQ,UAAA,GAAa,EAAE,EAAA,EAAI,SAAA,CAAU,IAAI,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AAC1D,cAAA,IAAI,QAAQ,WAAA,IAAe,CAAC,QAAQ,WAAA,CAAY,KAAA,EAAO,CAAC,CAAA,EAAG;AACzD,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,OAAA;AAAA,kBACN,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,QAAA,EAAU,EAAE,KAAA;AAAM,iBACpB;AACA,gBAAA;AAAA,cACF;AACA,cAAA;AAAA,YACF;AACA,YAAA,MAAA,GAAS,MAAA;AAOT,YAAA,MAAM,OAAO,MAAA,CAAO,MAAA,EAAO,CAAE,MAAA,CAAO,aAAa,CAAA,EAAE;AACnD,YAAA,IAAI,SAAA;AACJ,YAAA,IAAI,WAAA;AACJ,YAAA,MAAM,eAA8B,EAAC;AACrC,YAAA,IAAI;AACF,cAAA,OAAO,IAAA,EAAM;AACX,gBAAA,IAAI,OAAA,EAAS;AACX,kBAAA,MAAA,CAAO,KAAA,EAAM;AACb,kBAAA;AAAA,gBACF;AACA,gBAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,IAAA,EAAK;AAC1B,gBAAA,IAAI,EAAE,IAAA,EAAM;AACV,kBAAA,WAAA,GAAc,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,SAAA,CAAU,EAAE,CAAA,kBAAA,CAAoB,CAAA;AACrE,kBAAA;AAAA,gBACF;AACA,gBAAA,IAAI,CAAA,CAAE,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AAC5B,kBAAA,MAAM,OAAA,GAAU,CAAA,CAAE,KAAA,CAAM,QAAA,EAAU,KAAA;AAClC,kBAAA,WAAA,GACE,OAAA,YAAmB,KAAA,GACf,OAAA,GACA,IAAI,KAAA;AAAA,oBACF,aAAa,SAAA,CAAU,EAAE,KAAK,CAAA,CAAE,KAAA,CAAM,WAAW,cAAc,CAAA;AAAA,mBACjE;AACN,kBAAA;AAAA,gBACF;AACA,gBAAA,IAAI,CAAA,CAAE,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AAC5B,kBAAA,YAAA,CAAa,IAAA,CAAK,EAAE,KAAK,CAAA;AACzB,kBAAA;AAAA,gBACF;AACA,gBAAA,SAAA,GAAY,CAAA,CAAE,KAAA;AACd,gBAAA;AAAA,cACF;AAAA,YACF,SAASA,IAAAA,EAAK;AACZ,cAAA,IAAI,YAAA,CAAaA,IAAG,CAAA,IAAK,OAAA,EAAS;AAChC,gBAAA,MAAA,CAAO,KAAA,EAAM;AACb,gBAAA;AAAA,cACF;AACA,cAAA,WAAA,GAAcA,gBAAe,KAAA,GAAQA,IAAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,IAAG,CAAC,CAAA;AAAA,YAClE;AAEA,YAAA,IAAI,WAAA,IAAe,CAAC,SAAA,EAAW;AAC7B,cAAA,MAAM,QAAQ,WAAA,IAAe,IAAI,MAAM,CAAA,UAAA,EAAa,SAAA,CAAU,EAAE,CAAA,kBAAA,CAAoB,CAAA;AACpF,cAAA,MAAA,CAAO,KAAK,EAAE,EAAA,EAAI,SAAA,CAAU,EAAA,EAAI,OAAO,CAAA;AACvC,cAAA,OAAA,CAAQ,UAAA,GAAa,EAAE,EAAA,EAAI,SAAA,CAAU,IAAI,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AAC1D,cAAA,IAAI;AACF,gBAAA,MAAA,CAAO,KAAA,EAAM;AAAA,cACf,CAAA,CAAA,MAAQ;AAAA,cAER;AACA,cAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,UAAA,EAAY;AACrC,gBAAA,IAAI;AACF,kBAAA,MAAM,IAAA,CAAK,OAAO,KAAA,CAAS,CAAA;AAAA,gBAC7B,CAAA,CAAA,MAAQ;AAAA,gBAER;AAAA,cACF;AACA,cAAA,IAAI,QAAQ,WAAA,IAAe,CAAC,QAAQ,WAAA,CAAY,KAAA,EAAO,CAAC,CAAA,EAAG;AACzD,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,OAAA;AAAA,kBACN,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,QAAA,EAAU,EAAE,KAAA;AAAM,iBACpB;AACA,gBAAA;AAAA,cACF;AACA,cAAA,MAAA,GAAS,MAAA;AACT,cAAA;AAAA,YACF;AAEA,YAAA,KAAA,MAAW,KAAA,IAAS,cAAc,MAAM,KAAA;AACxC,YAAA,MAAM,SAAA;AACN,YAAA,OAAO,IAAA,EAAM;AACX,cAAA,IAAI,OAAA,EAAS;AACX,gBAAA,MAAA,CAAO,KAAA,EAAM;AACb,gBAAA;AAAA,cACF;AACA,cAAA,IAAI;AACF,gBAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,EAAK;AAC7B,gBAAA,IAAI,KAAK,IAAA,EAAM;AACf,gBAAA,MAAM,IAAA,CAAK,KAAA;AAAA,cACb,SAASA,IAAAA,EAAK;AACZ,gBAAA,IAAI,YAAA,CAAaA,IAAG,CAAA,IAAK,OAAA,EAAS;AAChC,kBAAA,MAAA,CAAO,KAAA,EAAM;AACb,kBAAA;AAAA,gBACF;AACA,gBAAA,MAAM,KAAA,GAAQA,gBAAe,KAAA,GAAQA,IAAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,IAAG,CAAC,CAAA;AAChE,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,OAAA;AAAA,kBACN,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,QAAA,EAAU,EAAE,KAAA;AAAM,iBACpB;AACA,gBAAA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,UAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,EAAE,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACxE,UAAA,MAAM,GAAA,GAAM,IAAId,iBAAAA,CAAa;AAAA,YAC3B,MAAMC,eAAAA,CAAW,wBAAA;AAAA,YACjB,OAAA,EAAS,mCAAmC,OAAO,CAAA,CAAA,CAAA;AAAA,YACnD,IAAA,EAAM;AAAA,WACP,CAAA;AACD,UAAA,MAAM;AAAA,YACJ,IAAA,EAAM,OAAA;AAAA,YACN,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,QAAA,EAAU,EAAE,KAAA,EAAO,GAAA;AAAI,WACzB;AAAA,QACF;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AChIO,SAAS,YAAY,OAAA,EAA6C;AACvE,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,GAAU,CAAA,EAAG,SAAQ,GAAI,OAAA;AAC3C,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,SAAA,IAAa,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC5C,UAAA,IAAI;AACF,YAAA,IAAI,WAAW,KAAA,CAAA,EAAW;AACxB,cAAA,MAAA,GAAS,SAAA,EAAA;AACT,cAAA,OAAA,EAAS,KAAK,OAAO,CAAA;AAAA,YACvB;AACA,YAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAEhD,YAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,cAAA,IAAI,SAAA,IAAa,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC5C,cAAA,IAAI,UAAU,CAAA,EAAG;AACf,gBAAA,MAAM,cAAA,CAAe,OAAA,EAAS,UAAA,CAAW,MAAA,EAAQ,CAAA,EAAA,KAAM,IAAI,OAAA,CAAQ,CAAA,YAAA,KAAgB,UAAA,CAAW,YAAA,EAAc,EAAE,CAAC,CAAC,CAAA;AAAA,cAClH;AACA,cAAA,IAAI,SAAA,IAAa,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS;AAC5C,cAAA,IAAI,MAAM,IAAA,KAAS,OAAA,IAAW,EAAE,KAAA,CAAM,QAAA,EAAU,iBAAiB,KAAA,CAAA,EAAQ;AACvE,gBAAA,MAAM,UAAA,GAAa,iBAAA;AAAA,kBACjB,MAAM,OAAA,IAAW,oBAAA;AAAA,kBACjB,EAAE,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,KAAA;AAAM,iBACjC;AACA,gBAAA,MAAM;AAAA,kBACJ,GAAG,KAAA;AAAA,kBACH,UAAU,EAAE,GAAG,MAAM,QAAA,EAAU,GAAG,WAAW,QAAA;AAAS,iBACxD;AACA,gBAAA;AAAA,cACF;AACA,cAAA,MAAM,KAAA;AACN,cAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,SAAS,OAAA,EAAS;AAAA,YACvD;AAEA,YAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,UACvB,SAAS,KAAA,EAAO;AACd,YAAA,IAAI,aAAa,UAAA,CAAW,MAAA,CAAO,OAAA,IAAW,YAAA,CAAa,KAAK,CAAA,EAAG;AACnE,YAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,YAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,UACnD;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,SAAA,GAAY,IAAA;AACZ,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEA,SAAS,OAAA,CACP,QAAA,EACA,SAAA,EACA,OAAA,EACe;AACf,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAEhF,IAAA,MAAM,QAAA,GAAW,QAAA;AACjB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,SAAA,GAAY,QAAA,CAAS,MAAM,CAAA;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,OAAO,QAAA,CAAS,CAAC,CAAA,KAAM,UAAA,EAAY;AAEvF,IAAA,MAAM,QAAA,GAAW,QAAA;AACjB,IAAA,OAAO,QAAA,CAAS,SAAA,GAAY,QAAA,CAAS,MAAM,EAAE,OAAO,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,IAAA,OAAO,SAAS,OAAO,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,QAAA;AACT;AAyBO,SAAS,gBAAA,CACd,OACA,IAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,IAAI,WAAA;AACJ,MAAA,MAAM,WAA0B,EAAC;AACjC,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI,OAAA,EAAS;AACb,UAAA,MAAM,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC1C,UAAA,IAAI;AACF,YAAA,WAAA,GAAc,KAAA,CAAM,aAAa,OAAO,CAAA;AACxC,YAAA,WAAA,MAAiB,KAAA,IAAS,WAAA,CAAY,MAAA,EAAO,EAAG;AAC9C,cAAA,IAAI,OAAA,EAAS;AACb,cAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,cAAA,MAAM,KAAA;AACN,cAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,SAAS,OAAA,EAAS;AAAA,YACvD;AACA,YAAA,MAAM,UAAA,GAAa,kBAAkB,iDAAiD,CAAA;AACtF,YAAA,QAAA,CAAS,KAAK,UAAU,CAAA;AACxB,YAAA,MAAM,UAAA;AAAA,UACR,SAAS,KAAA,EAAO;AACd,YAAA,IAAI,OAAA,IAAW,YAAA,CAAa,KAAK,CAAA,EAAG;AACpC,YAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,YAAA,MAAM,aAAa,iBAAA,CAAkB,OAAA,EAAS,EAAE,KAAA,EAAO,OAAO,CAAA;AAC9D,YAAA,QAAA,CAAS,KAAK,UAAU,CAAA;AACxB,YAAA,MAAM,UAAA;AAAA,UACR,CAAA,SAAE;AACA,YAAA,IAAI;AACF,cAAA,MAAM,KAAK,IAAA,CAAK,EAAE,YAAY,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AAAA,YAC3D,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,WAAA,EAAa,KAAA,EAAM;AAAA,QACrB;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,YAAA,GAA8D;AAC5E,EAAA,MAAM,UAA4B,EAAC;AACnC,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACnB;AAAA,GACF;AACF;AAMO,SAAS,cAAc,OAAA,EAA2C;AACvE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAIS,gBAAAA,CAAY;AAAA,MACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,MACjB,OAAA,EAAS,iCAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,KAAQ,KAAK,MAAM;AAAA,GAC1C,CAAA;AACH;ACjPA,eAAsB,YAAA,CACpB,QAAA,EACA,KAAA,EACA,IAAA,EACe;AACf,EAAA,IAAI,SAAS,EAAA,EAAI;AACjB,EAAA,KAAK,QAAA,CAAS,IAAA,EAAM,MAAA,EAAO,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAC3C,EAAA,MAAM,cAAA,CAAe,KAAA,EAAO,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACvD;AAEO,SAAS,cAAA,CACd,KAAA,EACA,MAAA,EACA,KAAA,EACc;AACd,EAAA,OAAO,IAAID,iBAAAA,CAAa;AAAA,IACtB,MAAMC,eAAAA,CAAW,wBAAA;AAAA,IACjB,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,mBAAA,EAAsB,MAAM,CAAA,CAAA;AAAA,IAC7C;AAAA,GACD,CAAA;AACH;AAMO,SAAS,sBAAA,CACd,OACA,KAAA,EACU;AACV,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAID,iBAAAA,CAAa;AAAA,MACrB,MAAMC,eAAAA,CAAW,wBAAA;AAAA,MACjB,OAAA,EAAS,GAAG,KAAK,CAAA,8CAAA,CAAA;AAAA,MACjB,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG;AAChD,MAAA,MAAM,IAAID,iBAAAA,CAAa;AAAA,QACrB,MAAMC,eAAAA,CAAW,wBAAA;AAAA,QACjB,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,gDAAA,EAAmD,CAAC,CAAA,CAAA;AAAA,QACrE,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AACA,IAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACf;AACA,EAAA,OAAO,MAAA;AACT;;;AC/CA,eAAe,oBAAA,CAAqB,SAAiB,MAAA,EAAmC;AACtF,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,UAAA,CAAA;AACtB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,IAChC,OAAA,EAAS,EAAE,eAAA,EAAiB,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA;AAAG,GAChD,CAAA;AACD,EAAA,MAAM,YAAA,CAAa,QAAA,EAAU,QAAa,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,EAAA,OAAO,IAAA,CAAK,IAAA,CACT,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,EAAE,CAAA,CACb,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,CAAG,QAAA,CAAS,OAAO,CAAC,EACjC,IAAA,EAAK;AACV;AAEA,eAAe,eAAA,CACb,OAAA,EACA,MAAA,EACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB,OAAA,EAAS,MAAM,CAAA;AACzD,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,eAAe,QAAA,EAAU,CAAA,EAAG,aAAa,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAAA,EACzF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,cAAA,CAAe,QAAA,EAAU,CAAA,EAAG,aAAa,sCAAsC,UAAU,CAAA;AAAA,EAClG;AACF;AAEO,SAAS,eAAe,MAAA,EAAuC;AACpE,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,GAAQ,wBAAA,EAA0B,OAAA,GAAU,0BAAyB,GAAI,MAAA;AAEzF,EAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,MACvD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,OACnC;AAAA,MACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM;AAAA,KAC5C,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,KAAK,QAAA,CAAS,IAAA,EAAM,MAAA,EAAO,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAC3C,MAAA,MAAM,OAAA,GAAU,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA;AACvC,MAAA,MAAM,MAAM,eAAA,CAAgB,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,EAAG,SAAA;AAClC,IAAA,OAAO,sBAAA,CAAuB,WAAW,QAAQ,CAAA;AAAA,EACnD,CAAA;AACF;;;AClDA,eAAec,qBAAAA,CAAqB,SAAiB,MAAA,EAAmC;AACtF,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,cAAA,CAAA;AACtB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,IAChC,OAAA,EAAS,EAAE,gBAAA,EAAkB,MAAA;AAAO,GACrC,CAAA;AACD,EAAA,MAAM,YAAA,CAAa,QAAA,EAAU,QAAa,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAGlC,EAAA,OAAO,KAAK,MAAA,CACT,MAAA,CAAO,OAAK,CAAA,CAAE,0BAAA,CAA2B,SAAS,cAAc,CAAC,EACjE,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAA,CAAK,OAAA,CAAQ,WAAW,EAAE,CAAC,EACtC,IAAA,EAAK;AACV;AAEA,eAAeC,gBAAAA,CACb,OAAA,EACA,MAAA,EACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAMD,qBAAAA,CAAqB,OAAA,EAAS,MAAM,CAAA;AACzD,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,eAAe,QAAA,EAAU,CAAA,EAAG,aAAa,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAAA,EACzF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,cAAA,CAAe,QAAA,EAAU,CAAA,EAAG,aAAa,sCAAsC,UAAU,CAAA;AAAA,EAClG;AACF;AAEO,SAAS,eAAe,MAAA,EAAuC;AACpE,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,KAAA,GAAQ,oBAAA;AAAA,IACR,OAAA,GAAU;AAAA,GACZ,GAAI,MAAA;AAEJ,EAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,CAAA,EAAG,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,aAAA,CAAA;AAAA,MACjC;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,gBAAA,EAAkB;AAAA,SACpB;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,UAAU,KAAK,CAAA,CAAA;AAAA,UACtB,SAAS,EAAE,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,CAAA;AAAE,SAC9B;AAAA;AACH,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,KAAK,QAAA,CAAS,IAAA,EAAM,MAAA,EAAO,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAC3C,MAAA,MAAM,OAAA,GAAU,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA;AACvC,MAAA,MAAM,MAAMC,gBAAAA,CAAgB,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,OAAO,sBAAA,CAAuB,IAAA,CAAK,SAAA,EAAW,MAAA,EAAQ,QAAQ,CAAA;AAAA,EAChE,CAAA;AACF;;;AC9DA,eAAeD,sBAAqB,OAAA,EAAoC;AACtE,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,SAAA,CAAA;AACtB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,MAAM,YAAA,CAAa,QAAA,EAAU,QAAa,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,EAAA,OAAO,IAAA,CAAK,MAAA,CACT,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA,CACf,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,EACrC,IAAA,EAAK;AACV;AAEA,eAAeC,gBAAAA,CACb,SACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAMD,qBAAAA,CAAqB,OAAO,CAAA;AACjD,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,eAAe,QAAA,EAAU,CAAA,EAAG,aAAa,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAAA,EACzF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,cAAA,CAAe,QAAA,EAAU,CAAA,EAAG,aAAa,sCAAsC,UAAU,CAAA;AAAA,EAClG;AACF;AAEO,SAAS,eAAe,MAAA,EAAuC;AACpE,EAAA,MAAM,EAAE,KAAA,GAAQ,kBAAA,EAAoB,OAAA,GAAU,0BAAyB,GAAI,MAAA;AAE3E,EAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,UAAA,CAAA,EAAc;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM;AAAA,KAC5C,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,KAAK,QAAA,CAAS,IAAA,EAAM,MAAA,EAAO,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAC3C,MAAA,MAAM,OAAA,GAAU,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA;AACvC,MAAA,MAAM,MAAMC,gBAAAA,CAAgB,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,GAAI,MAAA;AACpE,IAAA,OAAO,sBAAA,CAAuB,OAAO,QAAQ,CAAA;AAAA,EAC/C,CAAA;AACF;AC1CA,eAAeD,qBAAAA,CAAqB,QAAA,EAAkB,OAAA,EAAiB,MAAA,EAAmC;AACxG,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,UAAA,CAAA;AACtB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,IAChC,OAAA,EAAS,EAAE,eAAA,EAAiB,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA;AAAG,GAChD,CAAA;AACD,EAAA,MAAM,YAAA,CAAa,QAAA,EAAU,QAAa,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,EAAA,OAAO,IAAA,CAAK,IAAA,CACT,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,EAAE,CAAA,CACb,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,CAAG,QAAA,CAAS,OAAO,CAAC,EACjC,IAAA,EAAK;AACV;AAEA,eAAeC,gBAAAA,CACb,QAAA,EACA,OAAA,EACA,MAAA,EACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAMD,qBAAAA,CAAqB,QAAA,EAAU,SAAS,MAAM,CAAA;AACnE,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,eAAe,QAAA,EAAU,CAAA,EAAG,aAAa,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAAA,EACzF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,cAAA,CAAe,QAAA,EAAU,CAAA,EAAG,aAAa,sCAAsC,UAAU,CAAA;AAAA,EAClG;AACF;AAEO,SAAS,8BAAA,CAA+B,UAAkB,cAAA,EAAwB;AACvF,EAAA,OAAO,SAAS,SAAS,MAAA,EAAiD;AACxE,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAM,IAAIL,gBAAAA,CAAY;AAAA,QACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,QACjB,OAAA,EAAS,yBAAyB,QAAQ,CAAA,iCAAA,CAAA;AAAA,QAC1C,IAAA,EAAM,GAAG,QAAQ,CAAA,gFAAA;AAAA,OAClB,CAAA;AAAA,IACH;AACA,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,gBAAe,GAAI,MAAA;AAEpD,IAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,QACvD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,SACnC;AAAA,QACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM;AAAA,OAC5C,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,KAAK,QAAA,CAAS,IAAA,EAAM,MAAA,EAAO,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAC3C,QAAA,MAAM,OAAA,GAAU,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA;AACvC,QAAA,MAAM,MAAMe,gBAAAA,CAAgB,QAAA,EAAU,OAAA,EAAS,QAAQ,OAAO,CAAA;AAAA,MAChE;AAEA,MAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,EAAG,SAAA;AAClC,MAAA,OAAO,sBAAA,CAAuB,WAAW,QAAQ,CAAA;AAAA,IACnD,CAAA;AAAA,EACF,CAAA;AACF;;;AClEO,IAAM,gBAAA,GAAmB,8BAAA,CAA+B,UAAA,EAAY,0BAA0B;;;ACA9F,IAAM,YAAA,GAAe,8BAAA,CAA+B,MAAA,EAAQ,kBAAkB;;;ACA9E,IAAM,YAAA,GAAe,8BAAA,CAA+B,MAAA,EAAQ,yBAAyB;ACuCrF,IAAM,yBAAA,GAAgD;AAAA;AAAA,EAE3D,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,sBAAsB,SAAA,EAAW,aAAA,EAAe,UAAU,YAAA,EAAa;AAAA,EACpG,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,sBAAsB,SAAA,EAAW,aAAA,EAAe,UAAU,YAAA,EAAa;AAAA,EACpG,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,cAAc,SAAA,EAAW,QAAA,EAAU,UAAU,YAAA,EAAa;AAAA,EACvF,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,aAAa,SAAA,EAAW,QAAA,EAAU,UAAU,YAAA,EAAa;AAAA,EACtF,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,oBAAoB,SAAA,EAAW,aAAA,EAAe,UAAU,YAAA,EAAa;AAAA;AAAA,EAElG,EAAE,UAAU,WAAA,EAAa,KAAA,EAAO,cAAc,SAAA,EAAW,0BAAA,EAA4B,UAAU,YAAA,EAAa;AAAA,EAC5G,EAAE,UAAU,WAAA,EAAa,KAAA,EAAO,cAAc,SAAA,EAAW,0BAAA,EAA4B,UAAU,YAAA,EAAa;AAAA,EAC5G,EAAE,UAAU,WAAA,EAAa,KAAA,EAAO,sBAAsB,SAAA,EAAW,yBAAA,EAA2B,UAAU,YAAA,EAAa;AAAA,EACnH,EAAE,UAAU,WAAA,EAAa,KAAA,EAAO,4BAA4B,SAAA,EAAW,0BAAA,EAA4B,UAAU,YAAA,EAAa;AAAA;AAAA,EAE1H,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,kBAAkB,SAAA,EAAW,gBAAA,EAAkB,UAAU,YAAA,EAAa;AAAA,EACnG,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,qBAAqB,SAAA,EAAW,gBAAA,EAAkB,UAAU,YAAA;AAC3F;AAcO,SAAS,YAAA,CACd,OACA,MAAA,EACoB;AACpB,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,yBAAA;AAC9B,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,KAAa,KAAA,CAAM,QAAA,IAAY,CAAA,CAAE,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA;AAEpF,EAAA,IAAI,CAAC,KAAK,OAAO,EAAE,OAAO,KAAA,CAAM,KAAA,EAAO,UAAU,KAAA,EAAM;AAEvD,EAAA,MAAM,MAAM,MAAA,CAAO,MAAA,KAAW,CAAC,GAAA,KAAgB,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAA;AAC/D,EAAA,MAAM,SAAS,GAAA,CAAI,QAAA,GAAW,CAAA,SAAA,EAAY,GAAA,CAAI,QAAQ,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5D,EAAA,MAAM,YAAY,GAAA,CAAI,SAAA,GAAY,CAAA,sBAAA,EAAyB,GAAA,CAAI,SAAS,CAAA,CAAA,CAAA,GAAM,EAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,CAAA,mBAAA,EAAsB,KAAA,CAAM,QAAQ,CAAA,CAAA,EAAI,MAAM,KAAK,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAErG,EAAA,QAAQ,OAAO,aAAA;AAAe,IAC5B,KAAK,MAAA;AACH,MAAA,MAAM,IAAIN,gBAAAA,CAAY;AAAA,QACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,QACjB,OAAA,EAAS,IAAA;AAAA,QACT,MAAM,GAAA,CAAI,SAAA,GAAY,CAAA,cAAA,EAAiB,GAAA,CAAI,SAAS,CAAA,EAAA,CAAA,GAAO;AAAA,OAC5D,CAAA;AAAA,IACH,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,CAAC,IAAI,SAAA,EAAW;AAClB,QAAA,MAAM,IAAIS,gBAAAA,CAAY;AAAA,UACpB,MAAMT,eAAAA,CAAW,iBAAA;AAAA,UACjB,OAAA,EAAS,GAAG,IAAI,CAAA,4CAAA;AAAA,SACjB,CAAA;AAAA,MACH;AACA,MAAA,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,oBAAA,EAAuB,GAAA,CAAI,SAAS,CAAA,EAAA,CAAI,CAAA;AACnD,MAAA,OAAO,EAAE,KAAA,EAAO,GAAA,CAAI,WAAW,QAAA,EAAU,IAAA,EAAM,aAAa,GAAA,EAAI;AAAA,IAClE;AAAA,IACA,KAAK,MAAA;AAAA,IACL;AACE,MAAA,GAAA,CAAI,IAAI,CAAA;AACR,MAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,OAAO,QAAA,EAAU,KAAA,EAAO,aAAa,GAAA,EAAI;AAAA;AAErE;AAkBO,SAAS,qBAAA,CACd,SACA,OAAA,EACG;AAEH,EAAA,YAAA,CAAa,EAAE,UAAU,OAAA,CAAQ,QAAA,EAAU,OAAO,OAAA,CAAQ,KAAA,IAAS,OAAO,CAAA;AAC1E,EAAA,OAAO,OAAA;AACT;;;ACrFO,SAAS,yBAAA,CACd,SACA,OAAA,EACqB;AACrB,EAAA,IAAI,KAAA,GAAQ,OAAA;AACZ,EAAA,MAAM,QAAA,uBAAe,GAAA,EAA0C;AAE/D,EAAA,OAAO;AAAA,IACL,SAAS,MAAM,KAAA;AAAA,IACf,MAAA,EAAQ,OAAM,IAAA,KAAQ;AACpB,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,MAAM,KAAA,GAAiC;AAAA,QACrC,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,IAAI,OAAA,CAAQ,EAAA;AAAA,QACZ,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,EAAE;AAAA,OAC5B;AACA,MAAA,KAAA,MAAW,CAAA,IAAK,QAAA,EAAU,CAAA,CAAE,KAAK,CAAA;AACjC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,UAAU,CAAA,OAAA,KAAW;AACnB,MAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACpB,MAAA,OAAO,MAAM,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA;AAAA,IACtC;AAAA,GACF;AACF;AAWA,eAAsB,kBAAA,CACpB,OAAA,EACA,IAAA,EACA,OAAA,EACkB;AAClB,EAAA,MAAM,MAAM,OAAA,EAAS,MAAA,KAAW,CAAC,GAAA,KAAgB,OAAA,CAAQ,IAAI,GAAG,CAAA,CAAA;AAChE,EAAA,IACE,OAAA,IACA,OAAO,OAAA,KAAY,QAAA,IACnB,wBAAwB,OAAA,IACxB,OAAQ,OAAA,CAAkC,kBAAA,KAAuB,UAAA,EACjE;AACA,IAAA,MAAO,OAAA,CAAkC,mBAAmB,IAAI,CAAA;AAChE,IAAA,GAAA,CAAI,CAAA,iCAAA,EAAoC,SAAS,EAAA,GAAK,CAAA,EAAA,EAAK,QAAQ,EAAE,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AAC/E,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,GAAA,CAAI,CAAA,0EAAA,EAA6E,SAAS,EAAA,GAAK,CAAA,EAAA,EAAK,QAAQ,EAAE,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AACxH,EAAA,OAAO,KAAA;AACT","file":"index.cjs","sourcesContent":["import { AdapterError, ErrorCodes } from '@agentskit/core'\nimport type { StreamChunk } from '@agentskit/core'\n\n/** True when the error is a caller-initiated abort. */\nexport function isAbortError(err: unknown): boolean {\n if (err instanceof DOMException && err.name === 'AbortError') return true\n if (err instanceof Error && err.name === 'AbortError') return true\n return false\n}\n\n/**\n * Terminal adapter failure as a stream chunk (ADR 0001 A3/A9).\n * Always attaches `metadata.error` as an Error — prefer AdapterError.\n */\nexport function adapterErrorChunk(\n message: string,\n options?: { cause?: unknown; code?: string },\n): StreamChunk {\n const error = new AdapterError({\n code: options?.code ?? ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message,\n cause: options?.cause,\n })\n return {\n type: 'error',\n content: message,\n metadata: { error },\n }\n}\n\n/** Validate complete tool-call args JSON before emitting A5 tool_call. */\nexport function parseCompleteToolArgs(\n args: string,\n): { ok: true; args: string } | { ok: false; error: Error } {\n const raw = args.length > 0 ? args : '{}'\n try {\n JSON.parse(raw)\n return { ok: true, args: raw }\n } catch (cause) {\n return {\n ok: false,\n error: new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'Incomplete or malformed tool-call arguments JSON',\n cause,\n }),\n }\n }\n}\n\n/**\n * Race a promise against abort. Rejects promptly with AbortError when the\n * signal fires; cleans up the abort listener either way.\n */\nexport function raceAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) {\n return Promise.reject(new DOMException('Aborted', 'AbortError'))\n }\n return new Promise<T>((resolve, reject) => {\n let settled = false\n const onAbort = (): void => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(new DOMException('Aborted', 'AbortError'))\n }\n signal.addEventListener('abort', onAbort)\n promise.then(\n value => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n resolve(value)\n },\n err => {\n if (settled) return\n settled = true\n signal.removeEventListener('abort', onAbort)\n reject(err)\n },\n )\n })\n}\n\n/** Abort-aware delay used by retry backoff. */\nexport async function abortableSleep(\n ms: number,\n signal: AbortSignal,\n sleep: (ms: number) => Promise<void>,\n): Promise<void> {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n await raceAbort(sleep(ms), signal)\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n}\n\nexport async function cancelBody(body: ReadableStream | null | undefined): Promise<void> {\n if (!body) return\n try {\n await body.cancel()\n } catch {\n // ignore\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { CreateAdapterConfig } from './types'\nimport { adapterErrorChunk, isAbortError, raceAbort } from './stream-errors'\n\nexport function createAdapter(config: CreateAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let activeStream: ReadableStream | null = null\n let parseIter: AsyncIterator<StreamChunk> | null = null\n\n const cleanup = (): void => {\n try {\n void activeStream?.cancel()\n } catch {\n // ignore\n }\n activeStream = null\n if (parseIter && typeof parseIter.return === 'function') {\n void parseIter.return(undefined).catch(() => {})\n }\n parseIter = null\n try {\n config.abort?.()\n } catch {\n // ignore\n }\n }\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n const result = await raceAbort(config.send(request, controller.signal), controller.signal)\n if (controller.signal.aborted) {\n if (result instanceof Response) {\n try {\n await result.body?.cancel()\n } catch {\n // ignore\n }\n }\n return\n }\n\n const stream =\n result instanceof Response\n ? result.body\n : result\n if (!stream) {\n yield adapterErrorChunk('Adapter send() returned empty body')\n return\n }\n activeStream = stream\n\n const response = result instanceof Response ? result : undefined\n const iterable = config.parse(stream, response)\n parseIter = iterable[Symbol.asyncIterator]()\n\n while (true) {\n if (controller.signal.aborted) {\n cleanup()\n return\n }\n let next: IteratorResult<StreamChunk>\n try {\n next = await raceAbort(parseIter.next(), controller.signal)\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted) {\n cleanup()\n return\n }\n throw err\n }\n if (next.done) break\n if (controller.signal.aborted) {\n cleanup()\n return\n }\n yield next.value\n if (next.value.type === 'done' || next.value.type === 'error') {\n if (typeof parseIter.return === 'function') {\n await parseIter.return(undefined).catch(() => {})\n }\n parseIter = null\n activeStream = null\n return\n }\n }\n yield adapterErrorChunk('Adapter parser ended without a terminal chunk')\n activeStream = null\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted) return\n // Parser failures must release the response and iterator before the\n // terminal error is exposed; otherwise a failed stream can retain\n // a socket/body until the provider times out.\n cleanup()\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n } finally {\n if (controller.signal.aborted) cleanup()\n }\n },\n abort: () => {\n if (!controller.signal.aborted) controller.abort()\n cleanup()\n },\n }\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { GenericAdapterConfig } from './types'\nimport { isAbortError, raceAbort } from './stream-errors'\n\nexport function generic(config: GenericAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n const decoder = new TextDecoder()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n const stream = await raceAbort(\n config.send(request, controller.signal),\n controller.signal,\n )\n if (controller.signal.aborted) {\n try {\n await stream.cancel()\n } catch {\n // ignore\n }\n return\n }\n reader = stream.getReader()\n\n while (true) {\n if (controller.signal.aborted) {\n try {\n await reader.cancel()\n } catch {\n // ignore\n }\n return\n }\n const { done, value } = await raceAbort(reader.read(), controller.signal)\n if (done) break\n const text = decoder.decode(value, { stream: true })\n yield { type: 'text', content: text }\n }\n\n if (controller.signal.aborted) return\n yield { type: 'done' }\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted) return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n metadata: {\n error: err instanceof Error ? err : new Error(String(err)),\n },\n }\n } finally {\n try {\n reader?.releaseLock()\n } catch {\n // ignore\n }\n }\n },\n abort: () => {\n if (!controller.signal.aborted) controller.abort()\n void reader?.cancel().catch(() => {})\n },\n }\n },\n }\n}\n","import { AdapterError, ErrorCodes } from '@agentskit/core'\nimport { parseRetryAfter, retry, sleep as netSleep } from '@agentskit/net'\nimport { abortableSleep, cancelBody, isAbortError } from './stream-errors'\n\n/**\n * Retry policy for adapter fetches only: 3 total attempts, 500 ms base, 8000 ms\n * cap, full jitter, statuses 408/429/500/502/503/504, and non-abort transport\n * errors. Positive fractional attempts floor; invalid values reject with\n * `AK_CONFIG_INVALID` without making a request.\n * @example `const retry: RetryOptions = { maxAttempts: 4, retryOn: ({ response }) => response?.status === 429 }`\n */\nexport interface RetryOptions {\n /** Total fetch attempts, including the first. Default 3. */\n maxAttempts?: number\n /** First retry delay before jitter. Default 500 ms. */\n baseDelayMs?: number\n /** Maximum backoff and Retry-After delay. Default 8000 ms. */\n maxDelayMs?: number\n /** Enable full jitter. Default true. */\n jitter?: boolean\n /** Select failed responses or errors to retry. */\n retryOn?: (info: { error?: unknown; response?: Response; attempt: number }) => boolean\n /** Called immediately before a retry wait; thrown errors fail the retry operation. */\n onRetry?: (info: { attempt: number; delayMs: number; reason: string }) => void\n /** One-argument wait override. Default uses `@agentskit/net`'s abortable sleep. */\n sleep?: (ms: number) => Promise<void>\n}\n\nconst DEFAULT_RETRY: Required<Omit<RetryOptions, 'onRetry' | 'sleep' | 'retryOn'>> & {\n retryOn: NonNullable<RetryOptions['retryOn']>\n} = {\n maxAttempts: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n jitter: true,\n retryOn: ({ error, response }) => {\n if (response) return [408, 429, 500, 502, 503, 504].includes(response.status)\n if (isAbortError(error)) return false\n return true\n },\n}\n\nclass RetryableResponse extends Error {\n constructor(\n readonly response: Response,\n readonly retryAfterMs?: number,\n ) {\n super(`HTTP ${response.status}`)\n }\n}\n\n/**\n * Run `doFetch` with retries; return the final response on status exhaustion\n * and propagate the final transport error. Only the initial fetch retries;\n * errors from `onRetry` or custom `sleep` stop the operation.\n * @deprecated Use `retry` from `@agentskit/net`; keep this wrapper through at\n * least adapters 0.20.0 or 90 days after deprecation, whichever is later.\n * @param doFetch Called once per attempt with the caller's abort signal.\n * @param signal Caller-owned; abort rejects with `AbortError`.\n * @param retryOpt Defaults to 3 attempts, 500/8000 ms, full jitter, and\n * statuses 408/429/500/502/503/504.\n * @returns The successful or final response.\n * @throws {Error} The final transport error or `AbortError`.\n * @throws {AdapterError} `AK_CONFIG_INVALID` for invalid `maxAttempts`.\n * @example `const response = await fetchWithRetry(signal => fetch(url, { signal }), controller.signal)`\n */\nexport async function fetchWithRetry(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n signal: AbortSignal,\n retryOpt: RetryOptions = {},\n): Promise<Response> {\n const opts = { ...DEFAULT_RETRY, ...retryOpt }\n const maxAttempts = Math.floor(opts.maxAttempts)\n if (!Number.isFinite(maxAttempts) || maxAttempts < 1) {\n throw new AdapterError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'Retry maxAttempts must be finite and at least 1 after flooring',\n })\n }\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n\n try {\n return await retry(async ({ attempt }) => {\n let response: Response\n try {\n response = await doFetch(signal)\n } catch (error) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n throw error\n }\n\n if (response.ok || attempt >= maxAttempts || !opts.retryOn({ response, attempt })) return response\n\n const retryAfter = parseRetryAfter(response.headers.get('retry-after'))\n await cancelBody(response.body)\n throw new RetryableResponse(\n response,\n retryAfter === undefined ? undefined : Math.min(retryAfter, opts.maxDelayMs),\n )\n }, {\n retries: maxAttempts - 1,\n minDelayMs: opts.baseDelayMs,\n maxDelayMs: opts.maxDelayMs,\n jitter: opts.jitter ? 'full' : 'none',\n shouldRetry: (error, attempt) => {\n if (error instanceof RetryableResponse) return true\n if (isAbortError(error)) return false\n return opts.retryOn({ error, attempt })\n },\n delayFor: error => error instanceof RetryableResponse ? error.retryAfterMs : undefined,\n onRetry: ({ error, attempt, delayMs }) => {\n retryOpt.onRetry?.({\n attempt,\n delayMs,\n reason: error instanceof Error ? error.message : String(error),\n })\n },\n sleep: retryOpt.sleep\n ? (ms, retrySignal) => abortableSleep(ms, retrySignal ?? signal, retryOpt.sleep!)\n : netSleep,\n signal,\n })\n } catch (error) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n if (error instanceof RetryableResponse) return error.response\n throw error\n }\n}\n","import { parseSSE } from '@agentskit/net'\n\n/** Read data strings from Server-Sent Events through the shared network parser.\n *\n * @deprecated Use `parseSSE` from `@agentskit/net` and read each event's\n * `data` field. Removal is no earlier than adapters 0.20.0 and 90 days after\n * this deprecation, whichever is later.\n *\n * @param stream Byte stream containing Server-Sent Events.\n * @returns Event data strings; multiline data fields are joined with `\\n`.\n * @throws {NetError} With code AK_NET_SSE_PARSE_FAILED when the shared parser rejects an event.\n * @example\n * ```ts\n * for await (const data of readSSELines(response.body!)) console.log(data)\n * ```\n */\nexport async function* readSSELines(stream: ReadableStream): AsyncIterableIterator<string> {\n for await (const event of parseSSE(stream)) yield event.data\n}\n\n/**\n * Read non-empty, trimmed NDJSON lines from a UTF-8 byte stream. Flushes any\n * buffered UTF-8 bytes and yields a final line even when it has no newline.\n *\n * @param stream Byte stream containing one JSON value per line.\n * @returns Non-empty trimmed JSON line strings.\n * @example\n * ```ts\n * for await (const line of readNDJSONLines(response.body!)) console.log(JSON.parse(line))\n * ```\n */\nexport async function* readNDJSONLines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n buffer += done ? decoder.decode() : decoder.decode(value, { stream: true })\n if (done) {\n const trimmed = buffer.trim()\n if (trimmed) yield trimmed\n break\n }\n\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed) yield trimmed\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n","import type { StreamChunk } from '@agentskit/core'\nimport { parseSSE } from '@agentskit/net'\nimport { adapterErrorChunk, parseCompleteToolArgs } from './stream-errors'\n\nconst SUCCESS_FINISH_REASONS = new Set(['stop', 'tool_calls', 'function_call'])\n\nexport async function* parseOpenAIStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n let finishReason: string | undefined\n\n const terminalError = (message: string, extra?: Record<string, unknown>): StreamChunk => {\n const chunk = adapterErrorChunk(message)\n return {\n ...chunk,\n metadata: { ...chunk.metadata, ...extra, finishReason },\n }\n }\n\n const flushToolCalls = function* (): Generator<StreamChunk, boolean> {\n for (const [, toolCall] of pendingToolCalls) {\n const parsed = parseCompleteToolArgs(toolCall.args)\n if (!parsed.ok) {\n pendingToolCalls.clear()\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error, finishReason },\n }\n return false\n }\n yield {\n type: 'tool_call',\n toolCall: { id: toolCall.id, name: toolCall.name, args: parsed.args },\n }\n }\n pendingToolCalls.clear()\n return true\n }\n\n for await (const { data } of parseSSE(stream)) {\n if (data === '[DONE]') {\n if (finishReason !== undefined && !SUCCESS_FINISH_REASONS.has(finishReason)) {\n pendingToolCalls.clear()\n yield terminalError(\n `OpenAI stream ended with non-success finish reason \"${finishReason}\".`,\n { finishReason },\n )\n return\n }\n if (!(yield* flushToolCalls())) return\n yield { type: 'done' }\n return\n }\n\n try {\n const event = JSON.parse(data) as {\n choices?: Array<{\n delta?: {\n content?: string\n tool_calls?: Array<{\n index?: number\n id?: string\n function?: { name?: string; arguments?: string }\n }>\n }\n finish_reason?: string\n }>\n usage?: {\n prompt_tokens?: number\n completion_tokens?: number\n total_tokens?: number\n }\n }\n const delta = event.choices?.[0]?.delta\n const candidateFinishReason = event.choices?.find(\n choice => typeof choice.finish_reason === 'string',\n )?.finish_reason\n if (typeof candidateFinishReason === 'string') finishReason = candidateFinishReason\n\n if (typeof delta?.content === 'string') yield { type: 'text', content: delta.content }\n\n if (Array.isArray(delta?.tool_calls)) {\n for (const toolCall of delta.tool_calls) {\n const index: number = toolCall.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (toolCall?.function?.name) {\n pendingToolCalls.set(index, {\n id: toolCall.id ?? existing?.id ?? `tool-${index}-${Date.now()}`,\n name: toolCall.function.name,\n args: (existing?.args ?? '') + (toolCall.function.arguments ?? ''),\n })\n } else if (existing && toolCall?.function?.arguments) {\n existing.args += toolCall.function.arguments\n }\n }\n }\n\n if (event.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.prompt_tokens ?? 0,\n completionTokens: event.usage.completion_tokens ?? 0,\n totalTokens: event.usage.total_tokens ?? 0,\n },\n } as StreamChunk\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n if (finishReason !== undefined && !SUCCESS_FINISH_REASONS.has(finishReason)) {\n pendingToolCalls.clear()\n yield terminalError(\n `OpenAI stream ended with non-success finish reason \"${finishReason}\".`,\n { finishReason },\n )\n return\n }\n if (!finishReason) {\n pendingToolCalls.clear()\n yield terminalError('OpenAI stream ended before a terminal marker.')\n return\n }\n\n if (!(yield* flushToolCalls())) return\n yield { type: 'done' }\n}\n","import { type Message, type StreamChunk, type StreamSource } from '@agentskit/core'\nimport { parseSSE, sleep as netSleep } from '@agentskit/net'\nimport { fetchWithRetry, type RetryOptions } from './retry'\nimport { readNDJSONLines } from './stream-lines'\nimport {\n abortableSleep,\n adapterErrorChunk,\n cancelBody,\n isAbortError,\n parseCompleteToolArgs,\n} from './stream-errors'\n\nexport { fetchWithRetry }\nexport type { RetryOptions }\nexport { parseOpenAIStream } from './openai-stream'\nexport { readNDJSONLines, readSSELines } from './stream-lines'\nexport type { StreamParser } from './stream-types'\n\nexport function toProviderMessages(messages: Message[]) {\n // Track which tool_call ids were declared by preceding assistant turns so\n // we can drop orphan tool messages — the OpenAI Chat Completions API\n // rejects a tool message whose tool_call_id isn't bound to a previous\n // assistant message.\n const knownToolCallIds = new Set<string>()\n const output: Array<Record<string, unknown>> = []\n\n for (const message of messages) {\n if (message.role === 'tool') {\n const id = message.toolCallId\n // Orphan (no id, or id not declared) — skip; it would 400 the API.\n if (!id || !knownToolCallIds.has(id)) continue\n output.push({\n role: 'tool' as const,\n content: message.content,\n tool_call_id: id,\n })\n continue\n }\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownToolCallIds.add(tc.id)\n output.push({\n role: 'assistant' as const,\n content: message.content || null,\n tool_calls: message.toolCalls.map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: {\n name: tc.name,\n arguments: typeof tc.args === 'string' ? tc.args : JSON.stringify(tc.args ?? {}),\n },\n })),\n })\n continue\n }\n\n // Skip assistant messages with no content AND no tool calls. These\n // happen when a turn was interrupted (Ctrl+C, crashed adapter, etc.)\n // and the placeholder assistant message never received content —\n // sending `{role:'assistant', content:''}` back to the provider either\n // 400s or confuses the model into silence on the next turn.\n if (message.role === 'assistant' && !message.content) continue\n\n output.push({ role: message.role, content: message.content })\n }\n\n return output\n}\nexport async function* parseAnthropicStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n let sawMessageStop = false\n\n const emitToolCall = function* (\n tc: { id: string; name: string; args: string },\n ): Generator<StreamChunk, boolean> {\n const parsed = parseCompleteToolArgs(tc.args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return false\n }\n yield {\n type: 'tool_call',\n toolCall: { id: tc.id, name: tc.name, args: parsed.args },\n }\n return true\n }\n\n for await (const { data } of parseSSE(stream)) {\n if (data === '[DONE]') continue\n\n try {\n const event = JSON.parse(data) as {\n type?: string\n index?: number\n delta?: { type?: string; text?: string; partial_json?: string }\n content_block?: { type?: string; id?: string; name?: string }\n usage?: { input_tokens?: number; output_tokens?: number }\n message?: { usage?: { input_tokens?: number } }\n error?: { type?: string; message?: string }\n }\n\n if (event.type === 'error') {\n const msg =\n event.error?.message ??\n event.error?.type ??\n 'Anthropic stream error'\n yield adapterErrorChunk(String(msg))\n return\n }\n\n if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta?.text) {\n yield { type: 'text', content: event.delta.text }\n } else if (event.type === 'content_block_delta' && event.delta?.type === 'input_json_delta') {\n const index: number = event.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) {\n existing.args += event.delta.partial_json ?? ''\n }\n } else if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {\n const index: number = event.index ?? 0\n pendingToolCalls.set(index, {\n id: event.content_block.id ?? `tool-${index}`,\n name: event.content_block.name ?? 'unknown',\n args: '',\n })\n } else if (event.type === 'content_block_stop') {\n const index: number = event.index ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n if (!(yield* emitToolCall(tc))) {\n pendingToolCalls.clear()\n return\n }\n pendingToolCalls.delete(index)\n }\n } else if (event.type === 'message_delta' && event.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.input_tokens ?? 0,\n completionTokens: event.usage.output_tokens ?? 0,\n totalTokens: (event.usage.input_tokens ?? 0) + (event.usage.output_tokens ?? 0),\n },\n } as StreamChunk\n } else if (event.type === 'message_start' && event.message?.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.message.usage.input_tokens ?? 0,\n completionTokens: 0,\n totalTokens: event.message.usage.input_tokens ?? 0,\n },\n } as StreamChunk\n } else if (event.type === 'message_stop') {\n sawMessageStop = true\n for (const [, tc] of pendingToolCalls) {\n if (!(yield* emitToolCall(tc))) {\n pendingToolCalls.clear()\n return\n }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n pendingToolCalls.clear()\n if (!sawMessageStop) {\n yield adapterErrorChunk('Anthropic stream ended before message_stop')\n return\n }\n yield { type: 'done' }\n}\n\nconst GEMINI_SUCCESS_FINISH = new Set([\n 'STOP',\n 'stop',\n 'FINISH_REASON_STOP',\n])\n\nexport async function* parseGeminiStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n let finishReason: string | undefined\n\n for await (const { data } of parseSSE(stream)) {\n try {\n const event = JSON.parse(data) as {\n usageMetadata?: {\n promptTokenCount?: number\n candidatesTokenCount?: number\n totalTokenCount?: number\n }\n candidates?: Array<{\n finishReason?: string\n content?: {\n parts?: Array<{\n text?: string\n functionCall?: { id?: string; name?: string; args?: unknown }\n }>\n }\n }>\n }\n\n if (event.usageMetadata) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usageMetadata.promptTokenCount ?? 0,\n completionTokens: event.usageMetadata.candidatesTokenCount ?? 0,\n totalTokens: event.usageMetadata.totalTokenCount ?? 0,\n },\n } as StreamChunk\n }\n\n const candidate = event.candidates?.[0]\n if (typeof candidate?.finishReason === 'string') {\n finishReason = candidate.finishReason\n }\n\n const parts = candidate?.content?.parts\n if (!Array.isArray(parts)) continue\n\n for (const part of parts) {\n if (typeof part.text === 'string' && part.text) {\n yield { type: 'text', content: part.text }\n } else if (part.functionCall) {\n const fc = part.functionCall\n const args =\n typeof fc.args === 'string' ? fc.args : JSON.stringify(fc.args ?? {})\n const parsed = parseCompleteToolArgs(args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return\n }\n yield {\n type: 'tool_call',\n toolCall: {\n id: fc.id ?? `${fc.name}-${Date.now()}`,\n name: fc.name ?? 'unknown',\n args: parsed.args,\n },\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n if (!finishReason || !GEMINI_SUCCESS_FINISH.has(finishReason)) {\n if (finishReason && !GEMINI_SUCCESS_FINISH.has(finishReason)) {\n yield adapterErrorChunk(\n `Gemini stream ended with non-success finish reason \"${finishReason}\"`,\n )\n return\n }\n yield adapterErrorChunk('Gemini stream ended without a successful finishReason')\n return\n }\n\n yield { type: 'done' }\n}\n\nexport async function* parseOllamaStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n let sawDone = false\n\n for await (const data of readNDJSONLines(stream)) {\n try {\n const event = JSON.parse(data) as {\n message?: {\n content?: string\n tool_calls?: Array<{\n id?: string\n function?: { name?: string; arguments?: unknown }\n }>\n }\n done?: boolean\n prompt_eval_count?: number\n eval_count?: number\n }\n if (event.message?.content) {\n yield { type: 'text', content: event.message.content }\n }\n if (Array.isArray(event.message?.tool_calls)) {\n for (const tc of event.message.tool_calls) {\n if (tc?.function?.name) {\n const args =\n typeof tc.function.arguments === 'string'\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments ?? {})\n const parsed = parseCompleteToolArgs(args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return\n }\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id ?? `${tc.function.name}-${Date.now()}`,\n name: tc.function.name,\n args: parsed.args,\n },\n }\n }\n }\n }\n if (event.done) {\n sawDone = true\n if (typeof event.prompt_eval_count === 'number' || typeof event.eval_count === 'number') {\n const promptTokens = event.prompt_eval_count ?? 0\n const completionTokens = event.eval_count ?? 0\n yield {\n type: 'usage',\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n },\n } as StreamChunk\n }\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n if (!sawDone) {\n yield adapterErrorChunk('Ollama stream ended without done:true')\n return\n }\n yield { type: 'done' }\n}\n\n/**\n * Chunk-splitter that turns one large string into N streamable text chunks.\n * Useful when a provider returns the full response in one shot and you\n * want to feed it to a UI that expects streaming.\n *\n * Default splits by whitespace boundaries with a target chunk size of ~32\n * characters.\n */\nexport function chunkText(text: string, targetSize = 32): string[] {\n if (text.length <= targetSize) return [text]\n const out: string[] = []\n let i = 0\n while (i < text.length) {\n let end = Math.min(text.length, i + targetSize)\n // Prefer to cut on whitespace within the next few chars\n if (end < text.length) {\n const nextSpace = text.indexOf(' ', end)\n if (nextSpace !== -1 && nextSpace - end <= 8) end = nextSpace + 1\n }\n out.push(text.slice(i, end))\n i = end\n }\n return out\n}\n\n/**\n * Build a StreamSource from a non-streaming fetch. The adapter is\n * auto-completing: it fetches once, then yields the text as a sequence\n * of chunks so UIs see the same streaming shape they'd see from a\n * native streaming provider.\n *\n * Use this when you're wiring a provider that only has a non-streaming\n * endpoint but you want consumers (useChat, the runtime) to get\n * identical ergonomics.\n */\nexport function simulateStream(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n extractText: (response: Response) => Promise<string>,\n errorLabel: string,\n options: { chunkSize?: number; delayMs?: number; retry?: RetryOptions } = {},\n): StreamSource {\n const { chunkSize = 32, delayMs = 8, retry } = options\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const controller = abortController\n if (!controller) return\n try {\n const response = await fetchWithRetry(doFetch, controller.signal, retry ?? {})\n\n if (!response.ok) {\n await cancelBody(response.body)\n yield adapterErrorChunk(`${errorLabel} error: ${response.status}`)\n return\n }\n\n let text: string\n try {\n text = await extractText(response)\n } catch (err) {\n await cancelBody(response.body)\n if (isAbortError(err)) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n return\n }\n\n const chunks = chunkText(text, chunkSize)\n for (const chunk of chunks) {\n if (abortController === null || controller.signal.aborted) return\n if (delayMs > 0) {\n await abortableSleep(delayMs, controller.signal, netSleep)\n }\n yield { type: 'text', content: chunk }\n }\n yield { type: 'done' }\n } catch (err) {\n if (isAbortError(err)) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, cancelBody, isAbortError } from './stream-errors'\nimport type { StreamParser } from './stream-types'\nimport { fetchWithRetry, type RetryOptions } from './utils'\n\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: StreamParser,\n errorLabel: string,\n retry?: RetryOptions,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const controller = abortController\n if (!controller) return\n try {\n const response = await fetchWithRetry(doFetch, controller.signal, retry ?? {})\n\n if (!response.ok) {\n await cancelBody(response.body)\n yield adapterErrorChunk(`${errorLabel} error: ${response.status}`)\n return\n }\n\n if (!response.body) {\n yield adapterErrorChunk(`${errorLabel} error: empty response body`)\n return\n }\n\n for await (const chunk of parse(response.body, response)) {\n if (controller.signal.aborted || abortController === null) return\n yield chunk\n }\n } catch (err) {\n if (isAbortError(err) || controller.signal.aborted || abortController === null) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { Message } from '@agentskit/core'\n\n/** Normalize tool-call args for provider wire formats. */\nfunction toolInput(args: unknown): Record<string, unknown> {\n if (args == null) return {}\n if (typeof args === 'string') {\n try {\n const parsed: unknown = JSON.parse(args)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>\n }\n return { value: parsed }\n } catch {\n return {}\n }\n }\n if (typeof args === 'object' && !Array.isArray(args)) {\n return args as Record<string, unknown>\n }\n return { value: args }\n}\n\nfunction toolResponsePayload(content: string): Record<string, unknown> {\n try {\n const parsed: unknown = JSON.parse(content)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>\n }\n return { result: parsed }\n } catch {\n return { result: content }\n }\n}\n\n/**\n * Anthropic Messages API multi-turn tool history.\n * Assistant tool calls → `tool_use` blocks; tool results → user `tool_result` blocks.\n * Shared by Anthropic direct and Bedrock Anthropic models.\n */\nexport function toAnthropicMessages(\n messages: Message[],\n): Array<{ role: string; content: unknown }> {\n const knownNames = new Map<string, string>()\n const output: Array<{ role: string; content: unknown }> = []\n\n for (const message of messages) {\n if (message.role === 'system') continue\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownNames.set(tc.id, tc.name)\n const blocks: Array<Record<string, unknown>> = []\n if (message.content) {\n blocks.push({ type: 'text', text: message.content })\n }\n for (const tc of message.toolCalls) {\n blocks.push({\n type: 'tool_use',\n id: tc.id,\n name: tc.name,\n input: toolInput(tc.args),\n })\n }\n output.push({ role: 'assistant', content: blocks })\n continue\n }\n\n if (message.role === 'tool') {\n const id = message.toolCallId\n if (!id || !knownNames.has(id)) continue\n const block = {\n type: 'tool_result',\n tool_use_id: id,\n content: message.content,\n }\n const previous = output[output.length - 1]\n if (\n previous?.role === 'user' &&\n Array.isArray(previous.content) &&\n previous.content.every(item => (\n item && typeof item === 'object' && (item as { type?: unknown }).type === 'tool_result'\n ))\n ) {\n previous.content.push(block)\n } else {\n output.push({ role: 'user', content: [block] })\n }\n continue\n }\n\n if (message.role === 'assistant' && !message.content) continue\n\n const previous = output[output.length - 1]\n if (message.role === 'user' && previous?.role === 'user') {\n const previousBlocks = Array.isArray(previous.content)\n ? previous.content\n : [{ type: 'text', text: previous.content }]\n previous.content = [...previousBlocks, { type: 'text', text: message.content }]\n } else {\n output.push({ role: message.role, content: message.content })\n }\n }\n\n return output\n}\n\n/**\n * Gemini / Vertex multi-turn tool history.\n * Assistant tool calls → model `functionCall` parts;\n * tool results → user `functionResponse` parts (name correlated via toolCallId).\n */\nexport function toGeminiContents(\n messages: Message[],\n): Array<{ role: string; parts: Array<Record<string, unknown>> }> {\n const knownNames = new Map<string, string>()\n const output: Array<{ role: string; parts: Array<Record<string, unknown>> }> = []\n\n for (const message of messages) {\n if (message.role === 'system') continue\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownNames.set(tc.id, tc.name)\n const parts: Array<Record<string, unknown>> = []\n if (message.content) {\n parts.push({ text: message.content })\n }\n for (const tc of message.toolCalls) {\n parts.push({\n functionCall: {\n id: tc.id,\n name: tc.name,\n args: toolInput(tc.args),\n },\n })\n }\n output.push({ role: 'model', parts })\n continue\n }\n\n if (message.role === 'tool') {\n const id = message.toolCallId\n const name = id ? knownNames.get(id) : undefined\n if (!name) continue\n const part = {\n functionResponse: {\n id,\n name,\n response: toolResponsePayload(message.content),\n },\n }\n const previous = output[output.length - 1]\n if (\n previous?.role === 'user' &&\n previous.parts.every(item => item.functionResponse !== undefined)\n ) {\n previous.parts.push(part)\n } else {\n output.push({ role: 'user', parts: [part] })\n }\n continue\n }\n\n if (message.role === 'assistant' && !message.content) continue\n\n const role = message.role === 'assistant' ? 'model' : 'user'\n const previous = output[output.length - 1]\n if (previous?.role === role) {\n previous.parts.push({ text: message.content })\n } else {\n output.push({ role, parts: [{ text: message.content }] })\n }\n }\n\n return output\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseAnthropicStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { toAnthropicMessages } from './tool-history'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n retry?: RetryOptions\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096, retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages: toAnthropicMessages(request.messages),\n system: request.messages.find(message => message.role === 'system')?.content,\n tools: request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n })),\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseAnthropicStream,\n 'Anthropic API',\n retry,\n )\n },\n }\n}\n","import type { AdapterCapabilities, AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n /**\n * Ask the provider to include token usage in the final stream chunk via\n * `stream_options: { include_usage: true }`. Off by default because some\n * OpenAI-compatible providers (OpenRouter proxies to a long tail of\n * backends) reject unknown params with a 4xx and break the whole stream.\n * Turn this on for vanilla `api.openai.com`.\n */\n includeUsage?: boolean\n /** Explicit capability facts for OpenAI-compatible providers with custom models. */\n capabilities?: Partial<AdapterCapabilities>\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com', retry } = config\n // Normalize: many compatible endpoints are declared WITH a trailing `/v1`\n // (together, mistral, fireworks, openrouter `/api/v1`, …) while others are\n // declared without it. We always append `/v1/chat/completions`, so strip a\n // trailing `/v1` first to avoid a double `/v1/v1/...` (→ 404).\n const apiRoot = baseUrl.replace(/\\/v1\\/?$/, '')\n // Auto: on for canonical OpenAI, off for every other compatible endpoint\n // where the param is a known source of 4xx surprises.\n // Match the canonical OpenAI host exactly — a substring/prefix check\n // would also accept `https://api.openai.com.evil.test`.\n const isCanonicalOpenAI = (() => {\n try {\n return new URL(baseUrl).host === 'api.openai.com'\n } catch {\n return false\n }\n })()\n const includeUsage = config.includeUsage ?? isCanonicalOpenAI\n\n return {\n capabilities: {\n streaming: true,\n tools: config.capabilities?.tools ?? true,\n // o1 / o3 models emit reasoning; older models don't. Accurate per-model\n // detection would need a model registry; 'true' is the safer default here.\n reasoning: config.capabilities?.reasoning ?? (model.startsWith('o1') || model.startsWith('o3')),\n multiModal: config.capabilities?.multiModal ?? (model.startsWith('gpt-4') || model.startsWith('o')),\n usage: true,\n ...config.capabilities,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body: Record<string, unknown> = {\n model,\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n if (includeUsage) body.stream_options = { include_usage: true }\n\n return createStreamSource(\n (signal) => fetch(`${apiRoot}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'OpenAI API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseGeminiStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { toGeminiContents } from './tool-history'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const systemMessage = request.messages.find(message => message.role === 'system')\n const body = {\n contents: toGeminiContents(request.messages),\n systemInstruction: systemMessage\n ? { role: 'system', parts: [{ text: systemMessage.content }] }\n : undefined,\n tools: request.context?.tools && request.context.tools.length > 0\n ? [{\n functionDeclarations: request.context.tools.map(tool => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n })),\n }]\n : undefined,\n }\n\n return createStreamSource(\n (signal) => fetch(\n `${baseUrl}/v1beta/models/${model}:streamGenerateContent?alt=sse`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-goog-api-key': apiKey,\n },\n body: JSON.stringify(body),\n signal,\n },\n ),\n parseGeminiStream,\n 'Gemini API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory } from '@agentskit/core'\nimport { openai, type OpenAIConfig } from './openai'\n\nexport interface OpenAICompatibleConfig extends OpenAIConfig {}\n\nexport function createOpenAICompatibleAdapter(defaultBaseUrl: string) {\n return function openAICompatibleAdapter(config: OpenAICompatibleConfig): AdapterFactory {\n return openai({\n ...config,\n baseUrl: config.baseUrl ?? defaultBaseUrl,\n })\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GrokConfig extends OpenAICompatibleConfig {}\n\nexport const grok = createOpenAICompatibleAdapter('https://api.x.ai')\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseOllamaStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: false, // varies by model; default 'false' — enable via capabilities.extensions if your model supports it\n multiModal: model.includes('llava') || model.includes('vision'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n stream: true,\n messages: request.messages.map(message => ({\n role: message.role,\n content: message.content,\n })),\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n }),\n parseOllamaStream,\n 'Ollama API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface DeepSeekConfig extends OpenAICompatibleConfig {}\n\nexport const deepseek = createOpenAICompatibleAdapter('https://api.deepseek.com')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface KimiConfig extends OpenAICompatibleConfig {}\n\nexport const kimi = createOpenAICompatibleAdapter('https://api.moonshot.ai')\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from './stream-errors'\n\ntype LangChainRunnable = {\n stream?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>\n streamEvents?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<Record<string, unknown>> | Promise<AsyncIterable<Record<string, unknown>>>\n}\n\nexport interface LangChainConfig {\n runnable: LangChainRunnable\n mode?: 'stream' | 'events'\n}\n\nfunction asText(value: unknown): string {\n if (typeof value === 'string') return value\n if (value && typeof value === 'object' && 'content' in value) {\n const content = (value as { content?: unknown }).content\n if (typeof content === 'string') return content\n }\n return ''\n}\n\nfunction isToolStartEvent(eventName: string): boolean {\n return eventName === 'on_tool_start' || eventName.endsWith('_tool_start')\n}\n\nexport function langchain(config: LangChainConfig): AdapterFactory {\n const { runnable, mode = 'stream' } = config\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (controller.signal.aborted) return\n try {\n const runnableConfig: Record<string, unknown> = {\n version: 'v2',\n signal: controller.signal,\n }\n\n if (mode === 'events' && runnable.streamEvents) {\n const events = await runnable.streamEvents(\n { messages: request.messages },\n runnableConfig,\n )\n\n for await (const event of events) {\n if (controller.signal.aborted) return\n const eventName = String(event.event ?? '')\n if (eventName.endsWith('_stream')) {\n const chunk = asText(event.data)\n if (chunk) yield { type: 'text', content: chunk }\n } else if (isToolStartEvent(eventName) && event.name) {\n // Only genuine tool-start events — not chain/model starts.\n yield {\n type: 'tool_call',\n toolCall: {\n id: String(event.run_id ?? `${event.name}-${Date.now()}`),\n name: String(event.name),\n args: JSON.stringify(event.data ?? {}),\n },\n }\n }\n }\n } else if (runnable.stream) {\n const stream = await runnable.stream(\n { messages: request.messages },\n runnableConfig,\n )\n for await (const value of stream) {\n if (controller.signal.aborted) return\n const chunk = asText(value)\n if (chunk) yield { type: 'text', content: chunk }\n }\n } else {\n yield adapterErrorChunk('Runnable does not implement stream() or streamEvents()')\n return\n }\n\n if (controller.signal.aborted) return\n yield { type: 'done' }\n } catch (error) {\n // Abort should terminate quietly (no error chunk).\n if (isAbortError(error) || controller.signal.aborted) return\n const message = error instanceof Error ? error.message : String(error)\n yield adapterErrorChunk(message, { cause: error })\n }\n },\n abort: () => {\n controller.abort()\n },\n }\n },\n }\n}\n\nexport interface LangGraphConfig {\n graph: LangChainRunnable\n}\n\nexport function langgraph(config: LangGraphConfig): AdapterFactory {\n return langchain({\n runnable: config.graph,\n mode: 'events',\n })\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { parseSSE } from '@agentskit/net'\nimport type { RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { adapterErrorChunk } from './stream-errors'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\n retry?: RetryOptions\n}\n\nconst UI_STREAM_HEADER = 'x-vercel-ai-ui-message-stream'\n\n/**\n * Plain text mode: body bytes are text deltas. Used when the response is not\n * UI Message Stream v1.\n */\nasync function* parseVercelTextStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n if (text) yield { type: 'text', content: text }\n }\n } finally {\n reader.releaseLock()\n }\n\n yield { type: 'done' }\n}\n\n/**\n * Official AI SDK UI Message Stream protocol v1 (SSE):\n * data JSON parts (text-delta / reasoning-delta / error / abort / finish),\n * ending with `data: [DONE]`.\n */\nasync function* parseVercelUiMessageStreamV1(\n stream: ReadableStream,\n): AsyncIterableIterator<StreamChunk> {\n for await (const { data } of parseSSE(stream)) {\n if (data === '[DONE]') {\n yield { type: 'done' }\n return\n }\n\n try {\n const part = JSON.parse(data) as {\n type?: string\n delta?: string\n textDelta?: string\n errorText?: string\n message?: string\n reason?: string\n }\n const type = part.type\n if (type === 'text-delta') {\n const delta = part.delta ?? part.textDelta\n if (typeof delta === 'string' && delta) {\n yield { type: 'text', content: delta }\n }\n } else if (type === 'reasoning-delta') {\n const delta = part.delta ?? part.textDelta\n if (typeof delta === 'string' && delta) {\n yield { type: 'reasoning', content: delta }\n }\n } else if (type === 'error') {\n const message = part.errorText ?? part.message ?? 'Vercel AI UI stream error'\n yield adapterErrorChunk(String(message))\n return\n } else if (type === 'abort') {\n yield adapterErrorChunk(part.reason ?? 'Vercel AI UI stream aborted by provider')\n return\n } else if (type === 'finish') {\n // Wait for [DONE] sentinel.\n continue\n }\n } catch {\n // Ignore non-JSON data lines.\n }\n }\n\n yield adapterErrorChunk('Vercel AI UI stream truncated before [DONE]')\n}\n\n/**\n * Dispatch parser: UI Message Stream v1 when header is present; otherwise\n * plain text mode. Second arg is the Response from createStreamSource.\n */\nexport async function* parseVercelStream(\n stream: ReadableStream,\n response?: Response,\n): AsyncIterableIterator<StreamChunk> {\n const header =\n response?.headers.get(UI_STREAM_HEADER) ??\n response?.headers.get(UI_STREAM_HEADER.toLowerCase())\n if (header === 'v1') {\n yield* parseVercelUiMessageStreamV1(stream)\n return\n }\n yield* parseVercelTextStream(stream)\n}\n\nexport function vercelAI(config: VercelAIConfig): AdapterFactory {\n const { api, headers = {}, retry } = config\n\n return {\n capabilities: {\n // Vercel AI routes can do any of these — whether they do depends on\n // your route handler. Omit the field instead of lying.\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n messages: request.messages.map(message => ({ role: message.role, content: message.content })),\n tools: request.context?.tools,\n systemPrompt: request.context?.systemPrompt,\n }\n\n return createStreamSource(\n (signal) => fetch(api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(body),\n signal,\n }),\n parseVercelStream,\n 'API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface MistralConfig extends OpenAICompatibleConfig {}\n\n/**\n * Mistral AI. Uses the OpenAI-compatible chat completions endpoint.\n * Default models: `mistral-large-latest`, `mistral-small-latest`,\n * `open-mistral-nemo`.\n */\nexport const mistral = createOpenAICompatibleAdapter('https://api.mistral.ai/v1')\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface CohereConfig extends OpenAICompatibleConfig {}\n\nconst COHERE_BASE_URL = 'https://api.cohere.com/compatibility/v1'\nconst DEFAULT_MODEL = 'command-r-plus'\n\nconst baseFactory = createOpenAICompatibleAdapter(COHERE_BASE_URL)\n\n/**\n * Cohere Command models via Cohere's OpenAI-compatibility endpoint.\n *\n * - Streams tokens via SSE (OpenAI-compatible chunks).\n * - Supports tool calls in the OpenAI `tools` shape.\n * - Reports `usage` on the final stream chunk when the upstream model\n * returns it (Cohere's compatibility layer mirrors OpenAI's\n * `stream_options: { include_usage: true }` semantics).\n * - Inherits auto-retry from the shared OpenAI core (`retry`).\n *\n * Default model: `command-r-plus`. Override via `model`.\n */\nexport function cohere(config: Partial<CohereConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as CohereConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n }\n}\n\n/** Alias for naming consistency with other native adapters. */\nexport const cohereAdapter = cohere\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface TogetherConfig extends OpenAICompatibleConfig {}\n\n/**\n * Together AI. OpenAI-compatible endpoint, broad open-model catalog\n * (Llama, Qwen, DeepSeek, Mixtral, etc.).\n */\nexport const together = createOpenAICompatibleAdapter('https://api.together.xyz/v1')\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GroqConfig extends OpenAICompatibleConfig {}\n\nconst GROQ_BASE_URL = 'https://api.groq.com/openai/v1'\nconst DEFAULT_MODEL = 'openai/gpt-oss-120b'\n\nconst baseFactory = createOpenAICompatibleAdapter(GROQ_BASE_URL)\n\n/**\n * Groq — OpenAI-compatible endpoint serving Llama / Mixtral on LPUs.\n * Known for very low first-token latency.\n *\n * Default model: `openai/gpt-oss-120b`.\n */\nexport function groq(config: Partial<GroqConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as GroqConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n }\n}\n\n/** Alias for naming consistency with other native adapters. */\nexport const groqAdapter = groq\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface FireworksConfig extends OpenAICompatibleConfig {}\n\n/**\n * Fireworks AI. OpenAI-compatible endpoint with tuned open-source\n * models and fine-tunes (Llama, DeepSeek, Qwen, etc.).\n */\nexport const fireworks = createOpenAICompatibleAdapter('https://api.fireworks.ai/inference/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface OpenRouterConfig extends OpenAICompatibleConfig {}\n\n/**\n * OpenRouter — routes to 300+ provider models behind a single\n * OpenAI-compatible endpoint. Pass the fully-qualified id as\n * `model`, e.g. `anthropic/claude-sonnet-4-6`.\n */\nexport const openrouter = createOpenAICompatibleAdapter('https://openrouter.ai/api/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface HuggingFaceConfig extends OpenAICompatibleConfig {}\n\n/**\n * Hugging Face Inference Providers router. OpenAI-compatible\n * endpoint that fans out to HF-hosted model inference providers.\n * Pass any supported repo id as `model`, e.g.\n * `meta-llama/Meta-Llama-3.1-8B-Instruct`.\n */\nexport const huggingface = createOpenAICompatibleAdapter('https://router.huggingface.co/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface LMStudioConfig extends OpenAICompatibleConfig {}\n\n/**\n * LM Studio local server. Start the built-in OpenAI-compatible\n * server in LM Studio, then point this adapter at\n * `http://localhost:1234/v1` (the default).\n */\nexport const lmstudio = createOpenAICompatibleAdapter('http://localhost:1234/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface VLLMConfig extends OpenAICompatibleConfig {}\n\n/**\n * vLLM's OpenAI-compatible serving endpoint. Defaults to\n * `http://localhost:8000/v1` — the standard `vllm serve ...` port.\n */\nexport const vllm = createOpenAICompatibleAdapter('http://localhost:8000/v1')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface LlamaCppConfig extends OpenAICompatibleConfig {}\n\n/**\n * llama.cpp's OpenAI-compatible HTTP server (`llama-server`). Defaults\n * to `http://localhost:8080/v1`, matching the binary's default port.\n */\nexport const llamacpp = createOpenAICompatibleAdapter('http://localhost:8080/v1')\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface CerebrasConfig extends OpenAICompatibleConfig {}\n\nconst CEREBRAS_BASE_URL = 'https://api.cerebras.ai/v1'\nconst DEFAULT_MODEL = 'llama-3.3-70b'\n\nconst baseFactory = createOpenAICompatibleAdapter(CEREBRAS_BASE_URL)\n\n/**\n * Cerebras — ultra-fast inference on wafer-scale chips. OpenAI-compatible\n * endpoint serving Llama / Qwen models with very low first-token latency.\n *\n * Default model: `llama-3.3-70b`.\n */\nexport function cerebras(config: Partial<CerebrasConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as CerebrasConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n }\n}\n\nexport const cerebrasAdapter = cerebras\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\n\nexport interface AzureOpenAIConfig {\n apiKey: string\n /** Resource endpoint, e.g. `https://my-resource.openai.azure.com`. */\n endpoint: string\n /** Deployment name (NOT the underlying model name — Azure routes by deployment). */\n deployment: string\n /** Azure REST `api-version`. Defaults to `2024-10-21`. */\n apiVersion?: string\n retry?: RetryOptions\n /** Surface usage by setting `stream_options.include_usage`. Defaults to true. */\n includeUsage?: boolean\n}\n\nconst DEFAULT_API_VERSION = '2024-10-21'\n\nexport function azureOpenAI(config: AzureOpenAIConfig): AdapterFactory {\n const { apiKey, endpoint, deployment, apiVersion = DEFAULT_API_VERSION, retry } = config\n const includeUsage = config.includeUsage ?? true\n const url = `${endpoint.replace(/\\/$/, '')}/openai/deployments/${encodeURIComponent(deployment)}/chat/completions?api-version=${encodeURIComponent(apiVersion)}`\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body: Record<string, unknown> = {\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n if (includeUsage) body.stream_options = { include_usage: true }\n\n return createStreamSource(\n (signal) => fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': apiKey,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'Azure OpenAI API',\n retry,\n )\n },\n }\n}\n\nexport const azureOpenAIAdapter = azureOpenAI\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError } from './stream-errors'\n\nexport interface ReplicateConfig {\n apiKey: string\n /** Replicate model id, e.g. `meta/meta-llama-3-70b-instruct`. */\n model: string\n /** Optional pinned version hash (for non-official models). */\n version?: string\n /** Override the prediction endpoint base. */\n baseUrl?: string\n /** Map AdapterRequest → Replicate `input` object. Defaults to `{ prompt }`. */\n toInput?: (request: AdapterRequest) => Record<string, unknown>\n}\n\nconst DEFAULT_BASE_URL = 'https://api.replicate.com'\n\nfunction defaultPrompt(request: AdapterRequest): string {\n return request.messages\n .map(m => {\n if (m.role === 'system') return `[SYSTEM] ${m.content}`\n if (m.role === 'assistant') return `[ASSISTANT] ${m.content}`\n return `[USER] ${m.content}`\n })\n .join('\\n\\n') + '\\n\\n[ASSISTANT] '\n}\n\ninterface PredictionResponse {\n id: string\n urls?: { stream?: string; cancel?: string }\n error?: string\n}\n\nasync function* parseReplicateStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent = ''\n let sawDone = false\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n for (const line of lines) {\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7).trim()\n continue\n }\n if (!line.startsWith('data: ')) continue\n const data = line.slice(6)\n if (currentEvent === 'output' && data) {\n yield { type: 'text', content: data }\n } else if (currentEvent === 'done') {\n sawDone = true\n yield { type: 'done' }\n return\n } else if (currentEvent === 'error') {\n yield adapterErrorChunk(data || 'replicate stream error')\n return\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n if (!sawDone) {\n yield adapterErrorChunk('Replicate stream ended without done event')\n return\n }\n yield { type: 'done' }\n}\n\nexport function replicate(config: ReplicateConfig): AdapterFactory {\n const { apiKey, model, version, baseUrl = DEFAULT_BASE_URL, toInput = (r) => ({ prompt: defaultPrompt(r) }) } = config\n\n const predictionUrl = version\n ? `${baseUrl}/v1/predictions`\n : `${baseUrl}/v1/models/${model}/predictions`\n\n return {\n capabilities: {\n streaming: true,\n tools: false,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let aborted = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted) return\n try {\n const body: Record<string, unknown> = {\n input: toInput(request),\n stream: true,\n }\n if (version) body.version = version\n\n const response = await fetch(predictionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n })\n\n if (!response.ok) {\n yield adapterErrorChunk(`Replicate API error: ${response.status}`)\n return\n }\n\n const prediction = await response.json() as PredictionResponse\n if (prediction.error) {\n yield adapterErrorChunk(prediction.error)\n return\n }\n const streamUrl = prediction.urls?.stream\n if (!streamUrl) {\n yield adapterErrorChunk('Replicate prediction has no stream URL')\n return\n }\n\n const streamResponse = await fetch(streamUrl, {\n method: 'GET',\n headers: { Accept: 'text/event-stream' },\n signal: controller.signal,\n })\n if (!streamResponse.ok || !streamResponse.body) {\n yield adapterErrorChunk(`Replicate stream error: ${streamResponse.status}`)\n return\n }\n\n for await (const chunk of parseReplicateStream(streamResponse.body)) {\n if (aborted) return\n yield chunk\n }\n } catch (err) {\n if (isAbortError(err) || aborted) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n aborted = true\n controller.abort()\n },\n }\n },\n }\n}\n\nexport const replicateAdapter = replicate\n","import type { AdapterFactory } from '@agentskit/core'\nimport { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface BailConfig extends OpenAICompatibleConfig {}\n\nconst BAIL_BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1'\nconst DEFAULT_MODEL = 'qwen-max'\n\nconst baseFactory = createOpenAICompatibleAdapter(BAIL_BASE_URL)\n\n/**\n * Alibaba Bailian (Qwen) via the DashScope OpenAI-compatibility endpoint.\n *\n * Supports the Qwen-2.5 / 3 chat series and Qwen-VL multimodal models. APAC\n * users typically prefer this over OpenAI for latency + data residency.\n *\n * Default model: `qwen-max`.\n */\nexport function bail(config: Partial<BailConfig> & { apiKey: string }): AdapterFactory {\n const factory = baseFactory({\n model: DEFAULT_MODEL,\n ...config,\n } as BailConfig)\n return {\n ...factory,\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n }\n}\n\nexport const bailAdapter = bail\n/** Alias matching Alibaba's product naming. */\nexport const qwen = bail\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { parseGeminiStream, type RetryOptions } from './utils'\nimport { createStreamSource } from './stream-source'\nimport { toGeminiContents } from './tool-history'\n\nexport interface VertexConfig {\n /** GCP project id. */\n project: string\n /** Region, e.g. `us-central1`. */\n region: string\n /** Vertex model id, e.g. `gemini-2.5-pro`. */\n model: string\n /**\n * OAuth2 access token, or a function returning one (called per request).\n *\n * Use the `google-auth-library` (or `gcloud auth print-access-token`) to\n * mint these — the adapter intentionally doesn't take that as a hard dep.\n */\n accessToken: string | (() => string | Promise<string>)\n /** Override the publisher (defaults to `google`; set for partner publishers). */\n publisher?: string\n retry?: RetryOptions\n}\n\nexport function vertex(config: VertexConfig): AdapterFactory {\n const { project, region, model, accessToken, publisher = 'google', retry } = config\n const url = `https://${region}-aiplatform.googleapis.com/v1/projects/${project}/locations/${region}/publishers/${publisher}/models/${model}:streamGenerateContent?alt=sse`\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n reasoning: model.includes('pro'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const systemMessage = request.messages.find(message => message.role === 'system')\n const body = {\n contents: toGeminiContents(request.messages),\n systemInstruction: systemMessage\n ? { role: 'system', parts: [{ text: systemMessage.content }] }\n : undefined,\n tools: request.context?.tools && request.context.tools.length > 0\n ? [{\n functionDeclarations: request.context.tools.map(tool => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n })),\n }]\n : undefined,\n }\n\n return createStreamSource(\n async (signal) => {\n const token = typeof accessToken === 'string' ? accessToken : await accessToken()\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n signal,\n })\n },\n parseGeminiStream,\n 'Vertex AI',\n retry,\n )\n },\n }\n}\n\nexport const vertexAdapter = vertex\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError, parseCompleteToolArgs } from './stream-errors'\nimport { toAnthropicMessages } from './tool-history'\n\nexport interface BedrockConfig {\n /** Bedrock model id, e.g. `anthropic.claude-3-5-sonnet-20241022-v2:0`. */\n model: string\n /** AWS region (e.g. `us-east-1`). Falls back to the SDK's default credential chain. */\n region?: string\n /** Override `max_tokens` (Anthropic on Bedrock requires it). Defaults to 4096. */\n maxTokens?: number\n /**\n * Override the SDK client. Mostly for tests; production code should let the\n * adapter create the client from `region` + the SDK's default credential\n * chain.\n */\n client?: BedrockRuntimeClientLike\n}\n\n/**\n * Minimal structural type for `BedrockRuntimeClient` so we don't take a hard\n * dep on `@aws-sdk/client-bedrock-runtime`.\n *\n * Second options argument is optional so existing one-argument injected\n * clients remain structurally valid.\n */\nexport interface BedrockRuntimeClientLike {\n send(\n command: { input: BedrockInvokeInput },\n options?: { abortSignal?: AbortSignal },\n ): Promise<{\n body?: AsyncIterable<{ chunk?: { bytes?: Uint8Array } }>\n }>\n}\n\ninterface BedrockInvokeInput {\n modelId: string\n contentType: string\n accept: string\n body: string\n}\n\ninterface SdkModule {\n BedrockRuntimeClient: new (config: { region?: string }) => BedrockRuntimeClientLike\n InvokeModelWithResponseStreamCommand: new (input: BedrockInvokeInput) => {\n input: BedrockInvokeInput\n }\n}\n\nlet cachedSdk: Promise<SdkModule> | null = null\nasync function loadSdk(): Promise<SdkModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n // Optional peer dep — resolved lazily so installs without AWS keep working.\n const moduleId = '@aws-sdk/client-bedrock-runtime'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as SdkModule\n } catch {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_MISSING,\n message:\n 'Install @aws-sdk/client-bedrock-runtime to use the bedrock adapter: npm install @aws-sdk/client-bedrock-runtime',\n hint: 'bedrock depends on the optional peer @aws-sdk/client-bedrock-runtime.',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nfunction isAnthropicModel(model: string): boolean {\n return model.startsWith('anthropic.')\n}\n\nfunction buildAnthropicBody(request: AdapterRequest, maxTokens: number): string {\n const messages = toAnthropicMessages(request.messages)\n const system = request.messages.find(m => m.role === 'system')?.content\n const tools = request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n }))\n const body: Record<string, unknown> = {\n anthropic_version: 'bedrock-2023-05-31',\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages,\n }\n if (system) body.system = system\n if (tools && tools.length > 0) body.tools = tools\n return JSON.stringify(body)\n}\n\nasync function* parseAnthropicBedrockEvents(\n events: AsyncIterable<{ chunk?: { bytes?: Uint8Array } }>,\n): AsyncIterableIterator<StreamChunk> {\n const decoder = new TextDecoder()\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n const emitTool = function* (\n tc: { id: string; name: string; args: string },\n ): Generator<StreamChunk, boolean> {\n const parsed = parseCompleteToolArgs(tc.args)\n if (!parsed.ok) {\n yield {\n type: 'error',\n content: parsed.error.message,\n metadata: { error: parsed.error },\n }\n return false\n }\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: parsed.args } }\n return true\n }\n\n for await (const item of events) {\n const bytes = item.chunk?.bytes\n if (!bytes) continue\n let event: Record<string, unknown>\n try {\n event = JSON.parse(decoder.decode(bytes)) as Record<string, unknown>\n } catch {\n continue\n }\n const type = event.type as string | undefined\n if (type === 'content_block_delta') {\n const delta = event.delta as { type?: string; text?: string; partial_json?: string } | undefined\n if (delta?.type === 'text_delta' && delta.text) {\n yield { type: 'text', content: delta.text }\n } else if (delta?.type === 'input_json_delta') {\n const index = (event.index as number | undefined) ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) existing.args += delta.partial_json ?? ''\n }\n } else if (type === 'content_block_start') {\n const index = (event.index as number | undefined) ?? 0\n const block = event.content_block as { type?: string; id?: string; name?: string } | undefined\n if (block?.type === 'tool_use' && block.id && block.name) {\n pendingToolCalls.set(index, { id: block.id, name: block.name, args: '' })\n }\n } else if (type === 'content_block_stop') {\n const index = (event.index as number | undefined) ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n if (!(yield* emitTool(tc))) {\n pendingToolCalls.clear()\n return\n }\n pendingToolCalls.delete(index)\n }\n } else if (type === 'message_delta') {\n const usage = event.usage as { input_tokens?: number; output_tokens?: number } | undefined\n if (usage) {\n const promptTokens = usage.input_tokens ?? 0\n const completionTokens = usage.output_tokens ?? 0\n yield {\n type: 'usage',\n usage: { promptTokens, completionTokens, totalTokens: promptTokens + completionTokens },\n } as StreamChunk\n }\n } else if (type === 'message_start') {\n const usage = (event.message as { usage?: { input_tokens?: number } } | undefined)?.usage\n if (usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: usage.input_tokens ?? 0,\n completionTokens: 0,\n totalTokens: usage.input_tokens ?? 0,\n },\n } as StreamChunk\n }\n } else if (type === 'message_stop') {\n for (const [, tc] of pendingToolCalls) {\n if (!(yield* emitTool(tc))) {\n pendingToolCalls.clear()\n return\n }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n }\n\n pendingToolCalls.clear()\n yield adapterErrorChunk('Bedrock stream ended before message_stop')\n}\n\nexport function bedrock(config: BedrockConfig): AdapterFactory {\n const { model, region, maxTokens = 4096 } = config\n\n if (!isAnthropicModel(model)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `bedrock: model \"${model}\" is not supported in v1. Only anthropic.* models are wired up; Titan + others are tracked as a follow-up.`,\n hint: 'Pass an anthropic.* model id like \"anthropic.claude-3-5-sonnet-20241022-v2:0\".',\n })\n }\n\n let clientPromise: Promise<BedrockRuntimeClientLike> | null = null\n const getClient = async (): Promise<BedrockRuntimeClientLike> => {\n if (config.client) return config.client\n if (!clientPromise) {\n clientPromise = (async () => {\n const sdk = await loadSdk()\n return new sdk.BedrockRuntimeClient({ region })\n })()\n }\n return clientPromise\n }\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let aborted = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted || controller.signal.aborted) return\n try {\n const client = await getClient()\n if (aborted || controller.signal.aborted) return\n const sdk = config.client ? null : await loadSdk()\n const input: BedrockInvokeInput = {\n modelId: model,\n contentType: 'application/json',\n accept: 'application/json',\n body: buildAnthropicBody(request, maxTokens),\n }\n const command = sdk\n ? new sdk.InvokeModelWithResponseStreamCommand(input)\n : { input }\n const response = await client.send(command, { abortSignal: controller.signal })\n if (!response.body) {\n yield adapterErrorChunk('Bedrock: empty response body')\n return\n }\n for await (const chunk of parseAnthropicBedrockEvents(response.body)) {\n if (aborted || controller.signal.aborted) return\n yield chunk\n }\n } catch (err) {\n if (isAbortError(err) || aborted) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n aborted = true\n controller.abort()\n },\n }\n },\n }\n}\n\nexport const bedrockAdapter = bedrock\n","import { AdapterError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { adapterErrorChunk, isAbortError, raceAbort } from './stream-errors'\n\n/**\n * Browser-only adapter backed by WebLLM (https://github.com/mlc-ai/web-llm).\n * Models run on-device via WebGPU; no network for inference. The MLCEngine\n * is loaded lazily on first stream so apps can ship the import without\n * paying the wasm cost up front.\n *\n * `@mlc-ai/web-llm` is an **optional peer dependency** — install it\n * alongside this package when you opt into browser-only inference.\n */\n\nexport interface WebLlmConfig {\n /** Model id from MLC's catalog, e.g. `Llama-3.1-8B-Instruct-q4f16_1-MLC`. */\n model: string\n /**\n * Override the engine to inject a pre-loaded one (the MLCEngine spin-up\n * is non-trivial — apps usually warm it once, not per turn).\n */\n engine?: WebLlmEngineLike\n /** Engine progress callback (model download / compile percent). */\n onProgress?: (info: { progress: number; text: string }) => void\n}\n\nexport interface WebLlmEngineLike {\n reload(model: string, opts?: { initProgressCallback?: (i: { progress: number; text: string }) => void }): Promise<void>\n chat: {\n completions: {\n create(params: {\n messages: Array<{ role: string; content: string }>\n stream: true\n }): AsyncIterable<{ choices: Array<{ delta?: { content?: string } }> }> | Promise<AsyncIterable<{ choices: Array<{ delta?: { content?: string } }> }>>\n }\n }\n}\n\ninterface WebLlmModule {\n CreateMLCEngine(model: string, opts?: { initProgressCallback?: (i: { progress: number; text: string }) => void }): Promise<WebLlmEngineLike>\n}\n\nlet cachedSdk: Promise<WebLlmModule> | null = null\nasync function loadSdk(): Promise<WebLlmModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n const moduleId = '@mlc-ai/web-llm'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as WebLlmModule\n } catch {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_MISSING,\n message: 'Install @mlc-ai/web-llm to use the webllm adapter: npm install @mlc-ai/web-llm',\n hint: 'webllm is browser-only and depends on the optional peer @mlc-ai/web-llm.',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nexport function webllm(config: WebLlmConfig): AdapterFactory {\n let enginePromise: Promise<WebLlmEngineLike> | null = null\n const getEngine = (): Promise<WebLlmEngineLike> => {\n if (config.engine) return Promise.resolve(config.engine)\n if (!enginePromise) {\n enginePromise = (async () => {\n const sdk = await loadSdk()\n return sdk.CreateMLCEngine(config.model, { initProgressCallback: config.onProgress })\n })()\n }\n return enginePromise\n }\n\n return {\n capabilities: {\n streaming: true,\n tools: false,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let aborted = false\n let activeIter: AsyncIterator<{ choices: Array<{ delta?: { content?: string } }> }> | null = null\n\n const softAbort = (): void => {\n aborted = true\n if (!controller.signal.aborted) controller.abort()\n if (activeIter && typeof activeIter.return === 'function') {\n void activeIter.return(undefined).catch(() => {})\n }\n }\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted || controller.signal.aborted) return\n try {\n const engine = await raceAbort(getEngine(), controller.signal)\n if (aborted || controller.signal.aborted) return\n\n const messages = request.messages.map(m => ({ role: m.role, content: m.content }))\n const completion = await raceAbort(\n Promise.resolve(\n engine.chat.completions.create({ messages, stream: true }),\n ),\n controller.signal,\n )\n if (aborted || controller.signal.aborted) return\n\n activeIter = completion[Symbol.asyncIterator]()\n while (true) {\n if (aborted || controller.signal.aborted) {\n if (typeof activeIter.return === 'function') {\n await activeIter.return(undefined).catch(() => {})\n }\n return\n }\n const next = await raceAbort(activeIter.next(), controller.signal)\n if (next.done) break\n if (aborted || controller.signal.aborted) {\n if (typeof activeIter.return === 'function') {\n await activeIter.return(undefined).catch(() => {})\n }\n return\n }\n const delta = next.value.choices[0]?.delta?.content\n if (delta) yield { type: 'text', content: delta }\n }\n if (aborted || controller.signal.aborted) return\n yield { type: 'done' }\n } catch (err) {\n if (isAbortError(err) || aborted || controller.signal.aborted) return\n const message = err instanceof Error ? err.message : String(err)\n yield adapterErrorChunk(message, { cause: err })\n }\n },\n abort: () => {\n softAbort()\n },\n }\n },\n }\n}\n\nexport const webllmAdapter = webllm\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type {\n AdapterCapabilities,\n AdapterFactory,\n AdapterRequest,\n DataRegion,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\nimport { isAbortError, raceAbort } from './stream-errors'\n\nexport interface RouterCandidate {\n id: string\n adapter: AdapterFactory\n /** Data residency region for this adapter endpoint. */\n region?: DataRegion\n /**\n * Relative cost hint (lower wins for policy='cheapest'). Only\n * relative values matter — use $/1M tokens or any consistent unit.\n */\n cost?: number\n /** Typical latency in ms. Lower wins for policy='fastest'. */\n latencyMs?: number\n /**\n * Capability override. Defaults to `adapter.capabilities`.\n * Used to reject candidates missing required features\n * (e.g. tools, multiModal).\n */\n capabilities?: AdapterCapabilities\n /** Free-form tags used by classifier routing (e.g. 'fast', 'coding'). */\n tags?: string[]\n /**\n * Estimated grid CO2 intensity (gCO2eq per 1k tokens) for this\n * adapter+region. Lower wins for `policy='greenest'`. Use\n * `applyCarbonTable()` to populate from `DEFAULT_CARBON_TABLE` or\n * a custom table.\n */\n gCO2PerKtok?: number\n}\n\nexport type RouterPolicy =\n | 'cheapest'\n | 'fastest'\n | 'greenest'\n | 'green-cost'\n | 'capability-match'\n | ((input: { request: AdapterRequest; candidates: RouterCandidate[] }) => string | Promise<string>)\n\nexport interface RouterOptions {\n candidates: RouterCandidate[]\n /** Require all selected adapters to match this data-residency region. */\n region?: DataRegion\n /** Dynamic region selector. Takes precedence over `region`. */\n regionOf?: (request: AdapterRequest) => DataRegion | undefined\n /** Policy when `classify` doesn't pick a candidate. Default 'cheapest'. */\n policy?: RouterPolicy\n /**\n * Fast path: inspect the request, return a candidate id or tag(s).\n * Return `undefined` to fall back to `policy`.\n */\n classify?: (request: AdapterRequest) => string | string[] | undefined\n /** Observability hook — fires once per decision. */\n onRoute?: (decision: { id: string; reason: string; request: AdapterRequest }) => void\n}\n\nfunction requireCapabilities(request: AdapterRequest): AdapterCapabilities {\n const needs: AdapterCapabilities = {}\n if (request.context?.tools && request.context.tools.length > 0) needs.tools = true\n return needs\n}\n\nfunction matchesCapabilities(need: AdapterCapabilities, have: AdapterCapabilities | undefined): boolean {\n if (!have) return true\n for (const key of Object.keys(need) as Array<keyof AdapterCapabilities>) {\n if (key === 'extensions') continue\n if (need[key] && have[key] === false) return false\n }\n return true\n}\n\nfunction pickSyncPolicy(\n pool: RouterCandidate[],\n policy: Exclude<RouterPolicy, (...a: never[]) => unknown>,\n): { c: RouterCandidate; reason: string } {\n if (policy === 'cheapest') {\n const c = pool.reduce((best, x) => ((x.cost ?? Infinity) < (best.cost ?? Infinity) ? x : best), pool[0]!)\n return { c, reason: 'cheapest' }\n }\n if (policy === 'fastest') {\n const c = pool.reduce((best, x) => ((x.latencyMs ?? Infinity) < (best.latencyMs ?? Infinity) ? x : best), pool[0]!)\n return { c, reason: 'fastest' }\n }\n if (policy === 'greenest') {\n const c = pool.reduce((best, x) => ((x.gCO2PerKtok ?? Infinity) < (best.gCO2PerKtok ?? Infinity) ? x : best), pool[0]!)\n return { c, reason: 'greenest' }\n }\n if (policy === 'green-cost') {\n // Composite score: normalised carbon × normalised cost. Lower wins.\n // A candidate missing either signal is treated as median (neutral).\n const carbonValues = pool.map(p => p.gCO2PerKtok).filter((v): v is number => v != null)\n const costValues = pool.map(p => p.cost).filter((v): v is number => v != null)\n const maxC = Math.max(1, ...carbonValues)\n const maxCost = Math.max(1, ...costValues)\n const score = (x: RouterCandidate): number => {\n const carbon = (x.gCO2PerKtok ?? maxC / 2) / maxC\n const cost = (x.cost ?? maxCost / 2) / maxCost\n return carbon + cost\n }\n const c = pool.reduce((best, x) => (score(x) < score(best) ? x : best), pool[0]!)\n return { c, reason: 'green-cost' }\n }\n return { c: pool[0]!, reason: 'capability-match' }\n}\n\nfunction matchesRegion(candidate: RouterCandidate, region: DataRegion | undefined): boolean {\n return region === undefined || candidate.region === region\n}\n\n/**\n * Build an AdapterFactory that picks one of N candidates per request.\n *\n * Resolution order:\n * 1. `classify(request)` returns a candidate id → use it\n * 2. `classify(request)` returns tag(s) → filter by tags, then `policy`\n * 3. Fall back to `policy` over all capability-matched candidates\n */\nexport function createRouter(options: RouterOptions): AdapterFactory {\n const { candidates } = options\n if (candidates.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'createRouter requires at least one candidate',\n hint: 'Pass at least one candidate, e.g. createRouter({ candidates: [{ id, adapter, capabilities }] }).',\n })\n }\n const policy = options.policy ?? 'cheapest'\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const need = requireCapabilities(request)\n const region = options.regionOf?.(request) ?? options.region\n const capable = candidates.filter(c => matchesCapabilities(need, c.capabilities ?? c.adapter.capabilities))\n const eligible = capable.filter(c => matchesRegion(c, region))\n\n if (capable.length > 0 && eligible.length === 0 && region !== undefined) {\n // Programmer configuration at createSource time — ADR allows throw.\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `no candidate satisfies required region: ${region}`,\n hint: 'Set candidate.region to the requested data-residency region, or remove the router region requirement.',\n })\n }\n\n const classified = options.classify?.(request)\n if (typeof classified === 'string') {\n const c = eligible.find(x => x.id === classified)\n if (c) {\n options.onRoute?.({ id: c.id, reason: region ? `classify:id:${region}` : 'classify:id', request })\n return c.adapter.createSource(request)\n }\n }\n\n let pool = eligible\n let pickedBy: string | undefined\n if (Array.isArray(classified) && classified.length > 0) {\n const filtered = eligible.filter(c => c.tags && classified.every(t => c.tags!.includes(t)))\n if (filtered.length > 0) {\n pool = filtered\n pickedBy = region ? `classify:tags:${region}` : 'classify:tags'\n }\n }\n\n if (pool.length === 0) {\n // No eligible candidate for this request — config/setup failure at createSource.\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: 'no candidate satisfies the request',\n hint: 'Ensure at least one candidate declares the required capabilities (tools, json, etc.).',\n })\n }\n\n if (typeof policy === 'function') {\n const maybe = policy({ request, candidates: pool })\n if (typeof maybe !== 'string') {\n // Defer resolution into the streamed source.\n const controller = new AbortController()\n let child: StreamSource | undefined\n return {\n abort: () => {\n controller.abort()\n child?.abort()\n },\n stream: async function* () {\n let id: string\n try {\n id = await raceAbort(maybe, controller.signal)\n } catch (err) {\n if (isAbortError(err)) return\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n const c = pool.find(x => x.id === id)\n if (!c) {\n const error = new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `policy returned unknown id: ${id}`,\n hint: 'Custom policy functions must return one of the candidate ids.',\n })\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n try {\n options.onRoute?.({ id: c.id, reason: pickedBy ?? 'custom policy', request })\n child = c.adapter.createSource(request)\n for await (const chunk of child.stream()) {\n yield chunk\n }\n } catch (err) {\n if (controller.signal.aborted || isAbortError(err)) return\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n }\n },\n }\n }\n const c = pool.find(x => x.id === maybe)\n if (!c) {\n // Sync policy at createSource — programmer error may throw.\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `policy returned unknown id: ${maybe}`,\n hint: 'Custom policy functions must return one of the candidate ids.',\n })\n }\n options.onRoute?.({ id: c.id, reason: pickedBy ?? 'custom policy', request })\n return c.adapter.createSource(request)\n }\n\n const { c, reason } = pickSyncPolicy(pool, policy)\n options.onRoute?.({ id: c.id, reason: pickedBy ?? reason, request })\n return c.adapter.createSource(request)\n },\n }\n}\n","import type { RouterCandidate } from './router'\n\n/**\n * Carbon-aware routing data. Estimated grid CO2 intensity (gCO2eq per\n * 1k tokens) per provider+region. Numbers are best-effort approximations\n * derived from public grid-mix data and provider PUE disclosures — they\n * are good enough to differentiate \"very dirty\" from \"very clean\" but\n * are not audited.\n *\n * Sources:\n * - Electricity Maps (electricitymaps.com) for grid carbon intensity.\n * - Provider PUE / efficiency reports (Anthropic, Google, AWS).\n * - LLMCarbon (Faiz et al., 2024) for tok→J coefficients.\n *\n * Pull-requests welcome to refine. The table is community-updateable\n * and ships at compile time; a runtime table can be passed via\n * `applyCarbonTable(candidates, customTable)`.\n *\n * Closes part of issue #209.\n */\n\nexport type ProviderRegionKey = `${string}:${string}`\n\nexport type CarbonTable = Record<ProviderRegionKey, number>\n\n/**\n * Default carbon table. Keys are `provider:region`; values are\n * estimated gCO2eq per 1k tokens of typical mixed input/output. Lower\n * is greener.\n */\nexport const DEFAULT_CARBON_TABLE: CarbonTable = {\n // Anthropic — primarily AWS us-east-* / eu-west-* via Bedrock-style fronts.\n 'anthropic:us-east-1': 0.42,\n 'anthropic:us-west-2': 0.18,\n 'anthropic:eu-central-1': 0.32,\n 'anthropic:eu-west-1': 0.27,\n\n // OpenAI — Azure East US / West Europe / Sweden Central.\n 'openai:eastus': 0.40,\n 'openai:westus3': 0.19,\n 'openai:swedencentral': 0.04,\n 'openai:westeurope': 0.28,\n\n // Google (Vertex / Gemini) — typically reports lowest PUE.\n 'google:us-central1': 0.34,\n 'google:us-west1': 0.16,\n 'google:europe-west1': 0.21,\n 'google:europe-north1': 0.05,\n\n // AWS Bedrock direct.\n 'aws:us-east-1': 0.42,\n 'aws:us-west-2': 0.18,\n 'aws:eu-west-1': 0.27,\n\n // Local / on-device — only the device's grid matters.\n 'ollama:local': 0.30,\n 'webllm:browser': 0.30,\n 'lmstudio:local': 0.30,\n\n // Self-hosted / community.\n 'groq:us-east-1': 0.40,\n 'fireworks:us-west-2': 0.18,\n 'together:us-east-1': 0.42,\n 'cerebras:us-west-2': 0.18,\n}\n\nexport interface ApplyCarbonOptions {\n /** Override the default table. */\n table?: CarbonTable\n /**\n * How to derive the lookup key for a candidate. Defaults to\n * `${provider}:${region}` where `provider` is the candidate id\n * before the first `-` and `region` is `candidate.region`.\n */\n keyFor?: (candidate: RouterCandidate) => ProviderRegionKey | undefined\n /** Fallback gCO2eq per 1k tokens when no table entry is found. */\n fallback?: number\n}\n\nfunction defaultKey(candidate: RouterCandidate): ProviderRegionKey | undefined {\n if (!candidate.region) return undefined\n const provider = candidate.id.split(/[-:]/)[0]\n return `${provider}:${candidate.region}` as ProviderRegionKey\n}\n\n/**\n * Decorate a list of router candidates with `gCO2PerKtok` from a\n * carbon table. Returns a new list — does not mutate the input.\n *\n * ```ts\n * const candidates = applyCarbonTable([\n * { id: 'openai-eu', adapter: openai({...}), region: 'swedencentral', cost: 0.6 },\n * { id: 'anthropic-us', adapter: anthropic({...}), region: 'us-east-1', cost: 0.5 },\n * ])\n *\n * const router = createRouter({ candidates, policy: 'green-cost' })\n * ```\n */\nexport function applyCarbonTable(\n candidates: RouterCandidate[],\n options: ApplyCarbonOptions = {},\n): RouterCandidate[] {\n const table = options.table ?? DEFAULT_CARBON_TABLE\n const keyFor = options.keyFor ?? defaultKey\n return candidates.map(c => {\n if (c.gCO2PerKtok != null) return c\n const key = keyFor(c)\n const value = key ? table[key] : undefined\n return { ...c, gCO2PerKtok: value ?? options.fallback }\n })\n}\n\n/**\n * Estimated CO2 emitted by a single completion (grams). Multiply\n * `gCO2PerKtok` by `tokens / 1000`. Provided as a convenience for\n * dashboards / chargeback reports — runtimes typically derive this\n * from token usage events.\n */\nexport function estimateCO2Grams(gCO2PerKtok: number | undefined, tokens: number): number {\n if (gCO2PerKtok == null) return 0\n return (tokens / 1000) * gCO2PerKtok\n}\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { isAbortError } from './stream-errors'\n\nexport interface EnsembleCandidate {\n id: string\n adapter: AdapterFactory\n /** Weight used by 'weighted-vote' aggregator. Default 1. */\n weight?: number\n}\n\nexport interface EnsembleBranchResult {\n id: string\n text: string\n chunks: StreamChunk[]\n error?: Error\n}\n\nexport type EnsembleAggregator =\n | 'majority-vote'\n | 'concat'\n | 'longest'\n | ((branches: EnsembleBranchResult[]) => string | Promise<string>)\n\nexport interface EnsembleOptions {\n candidates: EnsembleCandidate[]\n /** How to combine branches into the single output text. Default 'majority-vote'. */\n aggregate?: EnsembleAggregator\n /** Per-candidate timeout in ms. Branches that time out are marked with an error. */\n timeoutMs?: number\n /** Observability hook — fires once with every branch's result. */\n onBranches?: (branches: EnsembleBranchResult[]) => void\n}\n\nasync function drain(source: StreamSource, timeoutMs?: number): Promise<{ chunks: StreamChunk[]; text: string; error?: Error }> {\n const chunks: StreamChunk[] = []\n let text = ''\n let timer: ReturnType<typeof setTimeout> | undefined\n let timedOut = false\n let error: Error | undefined\n if (timeoutMs !== undefined) {\n timer = setTimeout(() => {\n timedOut = true\n source.abort()\n }, timeoutMs)\n }\n try {\n for await (const chunk of source.stream()) {\n chunks.push(chunk)\n if (chunk.type === 'text' && typeof chunk.content === 'string') text += chunk.content\n if (chunk.type === 'error') {\n const metaErr = chunk.metadata?.error\n error = metaErr instanceof Error\n ? metaErr\n : new Error(chunk.content ?? 'stream error')\n }\n }\n } catch (err) {\n if (!isAbortError(err)) {\n error = err instanceof Error ? err : new Error(String(err))\n } else if (!timedOut) {\n error = err instanceof Error ? err : new Error(String(err))\n }\n } finally {\n if (timer) clearTimeout(timer)\n }\n if (timedOut) error = new Error(`timeout after ${timeoutMs}ms`)\n return { chunks, text, error }\n}\n\nfunction majorityVote(branches: EnsembleBranchResult[], candidates: EnsembleCandidate[]): string {\n const counts = new Map<string, number>()\n const weightById = new Map(candidates.map(c => [c.id, c.weight ?? 1]))\n for (const b of branches) {\n if (b.error) continue\n counts.set(b.text, (counts.get(b.text) ?? 0) + (weightById.get(b.id) ?? 1))\n }\n let best = ''\n let bestScore = -1\n for (const [text, score] of counts) {\n if (score > bestScore) {\n bestScore = score\n best = text\n }\n }\n return best\n}\n\n/**\n * Build an AdapterFactory that runs the same request against N\n * candidates in parallel, then aggregates the results into a single\n * text output. Unlike `speculate` (which picks a winner), `ensemble`\n * combines — majority vote, concatenation, longest, or a custom fn.\n *\n * The returned source emits a single `{ type: 'text' }` chunk with\n * the aggregated output followed by `{ type: 'done' }`, so it plugs\n * into any runtime that expects a regular streaming adapter.\n */\nexport function createEnsembleAdapter(options: EnsembleOptions): AdapterFactory {\n if (options.candidates.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'createEnsembleAdapter requires at least one candidate',\n hint: 'Pass at least one candidate, e.g. createEnsembleAdapter({ candidates: [{ id, adapter }] }).',\n })\n }\n const aggregate = options.aggregate ?? 'majority-vote'\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let aborted = false\n const sources: StreamSource[] = []\n\n const run = async (): Promise<EnsembleBranchResult[]> => {\n const tasks = options.candidates.map(async (c, i): Promise<EnsembleBranchResult> => {\n try {\n const source = c.adapter.createSource(request)\n sources[i] = source\n if (aborted) {\n source.abort()\n return { id: c.id, chunks: [], text: '', error: new Error('aborted') }\n }\n const { chunks, text, error } = await drain(source, options.timeoutMs)\n return { id: c.id, chunks, text, error }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n return { id: c.id, chunks: [], text: '', error }\n }\n })\n return Promise.all(tasks)\n }\n\n const finalText = async (branches: EnsembleBranchResult[]): Promise<string> => {\n if (typeof aggregate === 'function') return aggregate(branches)\n if (aggregate === 'concat') {\n return branches\n .filter(b => !b.error)\n .map(b => b.text)\n .join('\\n---\\n')\n }\n if (aggregate === 'longest') {\n return branches\n .filter(b => !b.error)\n .reduce(\n (best, b) => (b.text.length > best.length ? b.text : best),\n '',\n )\n }\n return majorityVote(branches, options.candidates)\n }\n\n return {\n abort: () => {\n aborted = true\n for (const s of sources) s?.abort()\n },\n stream: async function* () {\n if (aborted) return\n const branches = await run()\n options.onBranches?.(branches)\n if (aborted) {\n for (const s of sources) s?.abort()\n return\n }\n try {\n const text = await finalText(branches)\n if (!text && branches.every(b => b.error)) {\n const summary = branches\n .map(b => `${b.id}: ${b.error?.message ?? 'unknown'}`)\n .join('; ')\n const err = new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `all ensemble branches failed (${summary})`,\n hint: 'Inspect each branch error via options.onBranches or the err.branchErrors field.',\n })\n ;(err as AdapterError & { branchErrors: Array<{ id: string; error: Error | undefined }> }).branchErrors =\n branches.map(b => ({ id: b.id, error: b.error }))\n yield {\n type: 'error',\n content: err.message,\n metadata: { error: err },\n } as StreamChunk\n return\n }\n yield {\n type: 'text',\n content: text,\n metadata: {\n ensemble: branches.map(b => ({\n id: b.id,\n bytes: b.text.length,\n error: b.error?.message,\n })),\n },\n } as StreamChunk\n yield { type: 'done' } as StreamChunk\n } catch (err) {\n if (aborted || isAbortError(err)) return\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n }\n },\n }\n },\n }\n}\n","import { AdapterError, ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { isAbortError } from './stream-errors'\n\nexport interface FallbackOptions {\n /**\n * Predicate deciding whether an error from a given adapter should\n * trigger fall-through to the next. Default: always retry the next.\n */\n shouldRetry?: (error: Error, index: number) => boolean\n /** Observability hook — fires when one adapter fails and the chain advances. */\n onFallback?: (from: { id: string; index: number; error: Error }) => void\n}\n\nexport interface FallbackCandidate {\n id: string\n adapter: AdapterFactory\n}\n\n/**\n * Try adapters in order. If the first fails (throws while opening, or\n * errors mid-stream before emitting any non-done chunk), fall through\n * to the next. As soon as a candidate produces its first real chunk,\n * that's the committed one — we don't retroactively retry mid-stream.\n *\n * Errors that happen *after* committing are propagated; the caller\n * sees a normal streaming failure, not a mysterious cross-candidate\n * retry that could duplicate tool calls.\n */\nexport function createFallbackAdapter(\n candidates: FallbackCandidate[],\n options: FallbackOptions = {},\n): AdapterFactory {\n if (candidates.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'createFallbackAdapter requires at least one candidate',\n hint: 'Pass at least one candidate, e.g. createFallbackAdapter([{ id: \"primary\", adapter }]).',\n })\n }\n\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let active: StreamSource | undefined\n let aborted = false\n\n return {\n abort: () => {\n aborted = true\n active?.abort()\n },\n stream: async function* () {\n const errors: Array<{ id: string; error: Error }> = []\n for (let i = 0; i < candidates.length; i++) {\n if (aborted) return\n const candidate = candidates[i]!\n let source: StreamSource\n try {\n source = candidate.adapter.createSource(request)\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n errors.push({ id: candidate.id, error })\n options.onFallback?.({ id: candidate.id, index: i, error })\n if (options.shouldRetry && !options.shouldRetry(error, i)) {\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n continue\n }\n active = source\n\n // Pull until the first *committing* chunk. A throw, zero chunks, or\n // a leading `error` chunk (e.g. a 404 stale-model / 429 rate-limit\n // that the provider adapter surfaces as a chunk instead of throwing)\n // marks this candidate failed → advance to the next. Once a real\n // content chunk commits, mid-stream errors propagate (no retry).\n const iter = source.stream()[Symbol.asyncIterator]()\n let firstReal: StreamChunk | undefined\n let branchError: Error | undefined\n const leadingUsage: StreamChunk[] = []\n try {\n while (true) {\n if (aborted) {\n source.abort()\n return\n }\n const r = await iter.next()\n if (r.done) {\n branchError = new Error(`candidate ${candidate.id} emitted no chunks`)\n break\n }\n if (r.value.type === 'error') {\n const metaErr = r.value.metadata?.error\n branchError =\n metaErr instanceof Error\n ? metaErr\n : new Error(\n `candidate ${candidate.id}: ${r.value.content ?? 'stream error'}`,\n )\n break\n }\n if (r.value.type === 'usage') {\n leadingUsage.push(r.value)\n continue\n }\n firstReal = r.value\n break\n }\n } catch (err) {\n if (isAbortError(err) || aborted) {\n source.abort()\n return\n }\n branchError = err instanceof Error ? err : new Error(String(err))\n }\n\n if (branchError || !firstReal) {\n const error = branchError ?? new Error(`candidate ${candidate.id} emitted no chunks`)\n errors.push({ id: candidate.id, error })\n options.onFallback?.({ id: candidate.id, index: i, error })\n try {\n source.abort()\n } catch {\n // ignore\n }\n if (typeof iter.return === 'function') {\n try {\n await iter.return(undefined)\n } catch {\n // ignore\n }\n }\n if (options.shouldRetry && !options.shouldRetry(error, i)) {\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n active = undefined\n continue\n }\n\n for (const chunk of leadingUsage) yield chunk\n yield firstReal\n while (true) {\n if (aborted) {\n source.abort()\n return\n }\n try {\n const next = await iter.next()\n if (next.done) return\n yield next.value\n } catch (err) {\n if (isAbortError(err) || aborted) {\n source.abort()\n return\n }\n const error = err instanceof Error ? err : new Error(String(err))\n yield {\n type: 'error',\n content: error.message,\n metadata: { error },\n } as StreamChunk\n return\n }\n }\n }\n const summary = errors.map(e => `${e.id}: ${e.error.message}`).join('; ')\n const err = new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `all fallback candidates failed (${summary})`,\n hint: 'Check each candidate adapter\\'s configuration and provider keys.',\n })\n yield {\n type: 'error',\n content: err.message,\n metadata: { error: err },\n } as StreamChunk\n },\n }\n },\n }\n}\n","import { ConfigError, ErrorCodes } from '@agentskit/core'\nimport type {\n AdapterFactory,\n AdapterRequest,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\nimport { abortableSleep, adapterErrorChunk, isAbortError } from './stream-errors'\n\nexport type MockResponse = StreamChunk[] | ((request: AdapterRequest) => StreamChunk[])\n\nexport interface MockAdapterOptions {\n /**\n * Static chunks, a request-aware function, or a sequence of responses\n * (the i-th call returns the i-th item, looping when exhausted).\n */\n response: MockResponse | MockResponse[]\n /** ms between yielded chunks. Default 0 (synchronous). */\n delayMs?: number\n /** Track every request the adapter received. Useful for assertions. */\n history?: AdapterRequest[]\n}\n\n/**\n * A deterministic adapter for tests, demos, and dry-run experiments.\n *\n * Conforms to ADR 0001 — Adapter contract:\n * - createSource is pure (A1) — no work until stream() runs\n * - Always emits a terminal chunk (A3)\n * - abort() is safe (A6)\n * - Does not mutate input messages (A7)\n *\n * Examples:\n *\n * // Static\n * const adapter = mockAdapter({\n * response: [\n * { type: 'text', content: 'Hello!' },\n * { type: 'done' },\n * ],\n * })\n *\n * // Request-aware\n * const adapter = mockAdapter({\n * response: req => {\n * const last = req.messages[req.messages.length - 1]?.content ?? ''\n * return [\n * { type: 'text', content: 'Echo: ' + last },\n * { type: 'done' },\n * ]\n * },\n * })\n *\n * // Sequenced — different output each call\n * const adapter = mockAdapter({\n * response: [\n * [{ type: 'text', content: 'first' }, { type: 'done' }],\n * [{ type: 'text', content: 'second' }, { type: 'done' }],\n * ],\n * })\n */\nexport function mockAdapter(options: MockAdapterOptions): AdapterFactory {\n const { response, delayMs = 0, history } = options\n let callIndex = 0\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const controller = new AbortController()\n let myCall: number | undefined\n let cancelled = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (cancelled || controller.signal.aborted) return\n try {\n if (myCall === undefined) {\n myCall = callIndex++\n history?.push(request)\n }\n const chunks = resolve(response, myCall, request)\n\n for (const chunk of chunks) {\n if (cancelled || controller.signal.aborted) return\n if (delayMs > 0) {\n await abortableSleep(delayMs, controller.signal, ms => new Promise(resolveTimer => setTimeout(resolveTimer, ms)))\n }\n if (cancelled || controller.signal.aborted) return\n if (chunk.type === 'error' && !(chunk.metadata?.error instanceof Error)) {\n const normalized = adapterErrorChunk(\n chunk.content ?? 'Mock adapter error',\n { cause: chunk.metadata?.error },\n )\n yield {\n ...chunk,\n metadata: { ...chunk.metadata, ...normalized.metadata },\n }\n return\n }\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') return\n }\n\n yield { type: 'done' }\n } catch (error) {\n if (cancelled || controller.signal.aborted || isAbortError(error)) return\n const message = error instanceof Error ? error.message : String(error)\n yield adapterErrorChunk(message, { cause: error })\n }\n },\n abort: () => {\n cancelled = true\n controller.abort()\n },\n }\n },\n }\n}\n\nfunction resolve(\n response: MockResponse | MockResponse[],\n callIndex: number,\n request: AdapterRequest,\n): StreamChunk[] {\n if (Array.isArray(response) && response.length > 0 && Array.isArray(response[0])) {\n // Sequenced responses\n const sequence = response as StreamChunk[][]\n const item = sequence[callIndex % sequence.length]\n return item\n }\n if (Array.isArray(response) && response.length > 0 && typeof response[0] === 'function') {\n // Sequenced functions\n const sequence = response as Array<(req: AdapterRequest) => StreamChunk[]>\n return sequence[callIndex % sequence.length](request)\n }\n if (typeof response === 'function') {\n return response(request)\n }\n return response as StreamChunk[]\n}\n\n// ============================================================================\n// Recording / replay\n// ============================================================================\n\nexport interface RecordedTurn {\n /** ISO timestamp when this turn was recorded. */\n recordedAt: string\n /** The request that produced this turn. */\n request: AdapterRequest\n /** Every chunk yielded by the wrapped adapter. */\n chunks: StreamChunk[]\n}\n\nexport type RecordingFixture = RecordedTurn[]\n\nexport interface RecordingSink {\n push(turn: RecordedTurn): void | Promise<void>\n}\n\n/**\n * Wrap a real adapter so every turn is captured to a sink. Use this in\n * dev to build up a fixture, then replay with replayAdapter() in tests.\n */\nexport function recordingAdapter(\n inner: AdapterFactory,\n sink: RecordingSink,\n): AdapterFactory {\n return {\n capabilities: inner.capabilities,\n createSource: (request: AdapterRequest): StreamSource => {\n let innerSource: StreamSource | undefined\n const captured: StreamChunk[] = []\n let aborted = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n if (aborted) return\n const recordedAt = new Date().toISOString()\n try {\n innerSource = inner.createSource(request)\n for await (const chunk of innerSource.stream()) {\n if (aborted) return\n captured.push(chunk)\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') return\n }\n const errorChunk = adapterErrorChunk('Recorded adapter ended without a terminal chunk')\n captured.push(errorChunk)\n yield errorChunk\n } catch (error) {\n if (aborted || isAbortError(error)) return\n const message = error instanceof Error ? error.message : String(error)\n const errorChunk = adapterErrorChunk(message, { cause: error })\n captured.push(errorChunk)\n yield errorChunk\n } finally {\n try {\n await sink.push({ recordedAt, request, chunks: captured })\n } catch {\n // Recording must not corrupt the wrapped adapter stream.\n }\n }\n },\n abort: () => {\n aborted = true\n innerSource?.abort()\n },\n }\n },\n }\n}\n\n/**\n * In-memory recording sink — useful for tests and ephemeral capture.\n */\nexport function inMemorySink(): RecordingSink & { fixture: RecordingFixture } {\n const fixture: RecordingFixture = []\n return {\n fixture,\n push(turn) {\n fixture.push(turn)\n },\n }\n}\n\n/**\n * Replay an adapter from a recorded fixture. Each turn maps 1:1 to a\n * recorded entry by index — call N replays fixture[N % fixture.length].\n */\nexport function replayAdapter(fixture: RecordingFixture): AdapterFactory {\n if (fixture.length === 0) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'replayAdapter: fixture is empty',\n hint: 'Pass a non-empty fixture; record one with recordingAdapter() first.',\n })\n }\n return mockAdapter({\n response: fixture.map(turn => turn.chunks),\n })\n}\n","/**\n * Shared helpers for embedder adapters.\n */\n\nimport { AdapterError, ErrorCodes } from '@agentskit/core'\n\nexport async function throwIfNotOk(\n response: Response,\n label: string,\n _url: string,\n): Promise<void> {\n if (response.ok) return\n void response.body?.cancel().catch(() => {})\n throw embeddingError(label, `HTTP ${response.status}`)\n}\n\nexport function embeddingError(\n label: string,\n detail: string,\n cause?: unknown,\n): AdapterError {\n return new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${label} embedding failed: ${detail}`,\n cause,\n })\n}\n\n/**\n * Validate a 2xx embedding payload: finite non-empty number[].\n * Throws AdapterError (AgentsKitError) — never returns undefined.\n */\nexport function requireEmbeddingVector(\n value: unknown,\n label: string,\n): number[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${label} returned an empty or missing embedding vector`,\n hint: 'The provider responded 2xx but the embedding payload was empty or malformed.',\n })\n }\n const vector: number[] = []\n for (let i = 0; i < value.length; i++) {\n const n = value[i]\n if (typeof n !== 'number' || !Number.isFinite(n)) {\n throw new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `${label} returned a non-finite embedding value at index ${i}`,\n hint: 'Embedding vectors must be finite numbers only.',\n })\n }\n vector.push(n)\n }\n return vector\n}\n","import type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface OpenAIEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const url = `${baseUrl}/v1/models`\n const response = await fetch(url, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n await throwIfNotOk(response, 'openai', url)\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError('OpenAI', `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError('OpenAI', `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function openaiEmbedder(config: OpenAIEmbedderConfig): EmbedFn {\n const { apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data?: Array<{ embedding?: unknown }> }\n const embedding = data.data?.[0]?.embedding\n return requireEmbeddingVector(embedding, 'OpenAI')\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface GeminiEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const url = `${baseUrl}/v1beta/models`\n const response = await fetch(url, {\n headers: { 'x-goog-api-key': apiKey },\n })\n await throwIfNotOk(response, 'gemini', url)\n const data = (await response.json()) as {\n models: Array<{ name: string; supportedGenerationMethods: string[] }>\n }\n return data.models\n .filter(m => m.supportedGenerationMethods.includes('embedContent'))\n .map(m => m.name.replace('models/', ''))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError('Gemini', `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError('Gemini', `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function geminiEmbedder(config: GeminiEmbedderConfig): EmbedFn {\n const {\n apiKey,\n model = 'text-embedding-004',\n baseUrl = 'https://generativelanguage.googleapis.com',\n } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(\n `${baseUrl}/v1beta/models/${model}:embedContent`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-goog-api-key': apiKey,\n },\n body: JSON.stringify({\n model: `models/${model}`,\n content: { parts: [{ text }] },\n }),\n },\n )\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { embedding?: { values?: unknown } }\n return requireEmbeddingVector(data.embedding?.values, 'Gemini')\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface OllamaEmbedderConfig {\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string): Promise<string[]> {\n const url = `${baseUrl}/api/tags`\n const response = await fetch(url)\n await throwIfNotOk(response, 'ollama', url)\n const data = (await response.json()) as { models: Array<{ name: string }> }\n return data.models\n .map(m => m.name)\n .filter(name => name.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError('Ollama', `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError('Ollama', `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function ollamaEmbedder(config: OllamaEmbedderConfig): EmbedFn {\n const { model = 'nomic-embed-text', baseUrl = 'http://localhost:11434' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/api/embed`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(baseUrl, message)\n }\n\n const data = (await response.json()) as { embeddings?: unknown[] }\n const first = Array.isArray(data.embeddings) ? data.embeddings[0] : undefined\n return requireEmbeddingVector(first, 'Ollama')\n }\n}\n","import { ConfigError, ErrorCodes } from '@agentskit/core'\nimport type { EmbedFn } from '@agentskit/core'\nimport { embeddingError, requireEmbeddingVector, throwIfNotOk } from './shared'\n\nexport interface OpenAICompatibleEmbedderConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(provider: string, baseUrl: string, apiKey: string): Promise<string[]> {\n const url = `${baseUrl}/v1/models`\n const response = await fetch(url, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n await throwIfNotOk(response, provider, url)\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n provider: string,\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(provider, baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return embeddingError(provider, `${originalError}. Available embedding models: ${list}`)\n } catch (fetchError) {\n return embeddingError(provider, `${originalError}. Could not fetch available models`, fetchError)\n }\n}\n\nexport function createOpenAICompatibleEmbedder(provider: string, defaultBaseUrl: string) {\n return function embedder(config: OpenAICompatibleEmbedderConfig): EmbedFn {\n if (!config.model) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `Model is required for ${provider}. Pass { model: \"<model-name>\" }.`,\n hint: `${provider} does not infer a default; pick a recent embedding model and pass it explicitly.`,\n })\n }\n const { apiKey, model, baseUrl = defaultBaseUrl } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n void response.body?.cancel().catch(() => {})\n const message = `HTTP ${response.status}`\n throw await buildModelError(provider, baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data?: Array<{ embedding?: unknown }> }\n const embedding = data.data?.[0]?.embedding\n return requireEmbeddingVector(embedding, provider)\n }\n }\n}\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface DeepSeekEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const deepseekEmbedder = createOpenAICompatibleEmbedder('DeepSeek', 'https://api.deepseek.com')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface GrokEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const grokEmbedder = createOpenAICompatibleEmbedder('Grok', 'https://api.x.ai')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface KimiEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const kimiEmbedder = createOpenAICompatibleEmbedder('Kimi', 'https://api.moonshot.ai')\n","import { ConfigError, ErrorCodes, type AdapterFactory } from '@agentskit/core'\n\n/**\n * Provider model deprecation policy. When a provider deprecates a\n * model, today the adapter silently 404s in production. This module\n * lets you ship a deprecation table per provider and pick a behaviour:\n *\n * - `warn` — log once at startup, keep using the model.\n * - `remap` — auto-substitute the configured successor.\n * - `fail` — throw at startup so deploys catch it.\n *\n * The deprecation table is community-updateable: the default export\n * holds known deprecations as of the AgentsKit release; consumers can\n * pass their own table to override or extend.\n *\n * Closes issue #800.\n */\n\nexport type DeprecationAction = 'warn' | 'remap' | 'fail'\n\nexport interface ModelDeprecation {\n provider: string\n model: string\n /** ISO date the provider's sunset takes effect. */\n sunsetOn?: string\n /** Suggested successor — used when `onDeprecation: 'remap'`. */\n successor?: string\n /** Optional human-readable reason / link. */\n note?: string\n}\n\nexport interface DeprecationPolicy {\n onDeprecation: DeprecationAction\n table?: ModelDeprecation[]\n /** Sink for warnings. Defaults to `console.warn`. */\n logger?: (msg: string) => void\n}\n\n/**\n * Known deprecations (current as of AgentsKit shipping). Bump on each\n * release; PRs welcome. Successor picks lean towards the same\n * provider's current default unless the entire family is gone.\n */\nexport const DEFAULT_DEPRECATION_TABLE: ModelDeprecation[] = [\n // OpenAI\n { provider: 'openai', model: 'gpt-3.5-turbo-0301', successor: 'gpt-4o-mini', sunsetOn: '2024-09-13' },\n { provider: 'openai', model: 'gpt-3.5-turbo-0613', successor: 'gpt-4o-mini', sunsetOn: '2024-09-13' },\n { provider: 'openai', model: 'gpt-4-0314', successor: 'gpt-4o', sunsetOn: '2024-06-13' },\n { provider: 'openai', model: 'gpt-4-32k', successor: 'gpt-4o', sunsetOn: '2024-06-06' },\n { provider: 'openai', model: 'text-davinci-003', successor: 'gpt-4o-mini', sunsetOn: '2024-01-04' },\n // Anthropic\n { provider: 'anthropic', model: 'claude-2.0', successor: 'claude-3-5-sonnet-latest', sunsetOn: '2025-07-21' },\n { provider: 'anthropic', model: 'claude-2.1', successor: 'claude-3-5-sonnet-latest', sunsetOn: '2025-07-21' },\n { provider: 'anthropic', model: 'claude-instant-1.2', successor: 'claude-3-5-haiku-latest', sunsetOn: '2024-07-22' },\n { provider: 'anthropic', model: 'claude-3-sonnet-20240229', successor: 'claude-3-5-sonnet-latest', sunsetOn: '2025-07-21' },\n // Google\n { provider: 'google', model: 'gemini-1.0-pro', successor: 'gemini-1.5-pro', sunsetOn: '2025-02-15' },\n { provider: 'google', model: 'gemini-pro-vision', successor: 'gemini-1.5-pro', sunsetOn: '2024-07-12' },\n]\n\nexport interface ResolveModelInput {\n provider: string\n model: string\n}\n\nexport interface ResolveModelResult {\n /** Final model id to use (may differ from input if remapped). */\n model: string\n remapped: boolean\n deprecation?: ModelDeprecation\n}\n\nexport function resolveModel(\n input: ResolveModelInput,\n policy: DeprecationPolicy,\n): ResolveModelResult {\n const table = policy.table ?? DEFAULT_DEPRECATION_TABLE\n const hit = table.find(d => d.provider === input.provider && d.model === input.model)\n\n if (!hit) return { model: input.model, remapped: false }\n\n const log = policy.logger ?? ((msg: string) => console.warn(msg))\n const sunset = hit.sunsetOn ? ` (sunset ${hit.sunsetOn})` : ''\n const successor = hit.successor ? ` Suggested successor: ${hit.successor}.` : ''\n const base = `[agentskit] Model \"${input.provider}:${input.model}\" is deprecated${sunset}.${successor}`\n\n switch (policy.onDeprecation) {\n case 'fail':\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: base,\n hint: hit.successor ? `Set model to \"${hit.successor}\".` : 'Pick a supported model from the provider.',\n })\n case 'remap': {\n if (!hit.successor) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `${base} No successor available — cannot remap.`,\n })\n }\n log(`${base} Auto-remapping to \"${hit.successor}\".`)\n return { model: hit.successor, remapped: true, deprecation: hit }\n }\n case 'warn':\n default:\n log(base)\n return { model: input.model, remapped: false, deprecation: hit }\n }\n}\n\n/**\n * Wrap an `AdapterFactory` so that any model field on its requests is\n * checked against the deprecation policy at startup. Convenience for\n * adapters that don't want to plumb the check into their own code:\n *\n * ```ts\n * const adapter = withDeprecationPolicy(openai({ apiKey, model: 'gpt-3.5-turbo-0301' }), {\n * provider: 'openai',\n * onDeprecation: 'remap',\n * })\n * ```\n *\n * For adapters with internal model state (most), prefer calling\n * `resolveModel()` inside the factory and substituting before the\n * first request — this wrapper is a fallback for opaque adapters.\n */\nexport function withDeprecationPolicy<F extends AdapterFactory>(\n factory: F,\n options: { provider: string; model: string } & DeprecationPolicy,\n): F {\n // Run once at construction so `fail` halts deploy, not first request.\n resolveModel({ provider: options.provider, model: options.model }, options)\n return factory\n}\n","/**\n * Opt-in credential rotation primitives.\n *\n * These utilities do **not** automatically wire into stock adapters. Built-in\n * factories (openai, anthropic, bedrock, vertex, …) still take a plain\n * `apiKey` / `accessToken` string (or a caller-supplied resolver) at\n * construction. Use `createRotatingCredentials` / `refreshCredentials` only\n * when you explicitly opt in — e.g. custom wrappers that call `current()` on\n * every request, or adapters you implement that expose\n * `CredentialRefreshable.refreshCredentials`.\n *\n * Without that opt-in, rotating a provider key still means reconstructing the\n * adapter (or restarting the process). The helpers stay exported so production\n * apps can build that layer without re-inventing the holder + audit event shape.\n *\n * Closes issue #799 (primitives only; adapter adoption is opt-in).\n */\n\nexport type CredentialResolver = () => string | Promise<string>\n\nexport interface RotatingCredentials {\n /** Resolve the current secret. Opt-in adapters call this on every request. */\n current: CredentialResolver\n /** Replace the in-memory secret. Returns the new value. */\n rotate: (next: string) => Promise<string>\n /** Subscribe to rotation events. Returns an unsubscribe handle. */\n onRotate: (handler: (event: CredentialRotationEvent) => void) => () => void\n}\n\nexport interface CredentialRotationEvent {\n /** ISO timestamp of the rotation. */\n rotatedAt: string\n /** Stable id (e.g. provider name) for audit-log correlation. */\n id: string\n /** Last 4 chars of the new secret — useful for \"did the rotation actually happen?\" without leaking the key. */\n fingerprint: string\n}\n\nexport interface CredentialRefreshable {\n /**\n * Opt-in adapters that support credential rotation expose this method.\n * Stock AgentsKit adapters do not implement it unless documented otherwise.\n * Calling it replaces the in-memory secret. The next request uses\n * the new value; in-flight requests are unaffected.\n */\n refreshCredentials: (next: string) => Promise<void>\n}\n\nexport function createRotatingCredentials(\n initial: string,\n options: { id: string },\n): RotatingCredentials {\n let value = initial\n const handlers = new Set<(e: CredentialRotationEvent) => void>()\n\n return {\n current: () => value,\n rotate: async next => {\n value = next\n const event: CredentialRotationEvent = {\n rotatedAt: new Date().toISOString(),\n id: options.id,\n fingerprint: next.slice(-4),\n }\n for (const h of handlers) h(event)\n return next\n },\n onRotate: handler => {\n handlers.add(handler)\n return () => handlers.delete(handler)\n },\n }\n}\n\n/**\n * Refresh credentials on any object that implements\n * `CredentialRefreshable`. A no-op (with a debug log) if the adapter\n * doesn't support rotation, so callers can run the rotation playbook\n * across a heterogeneous set of adapters without branching.\n *\n * Most stock adapters do **not** implement `refreshCredentials` — this\n * remains an opt-in primitive unless an adapter documents support.\n */\nexport async function refreshCredentials(\n adapter: unknown,\n next: string,\n options?: { id?: string; logger?: (msg: string) => void },\n): Promise<boolean> {\n const log = options?.logger ?? ((msg: string) => console.log(msg))\n if (\n adapter &&\n typeof adapter === 'object' &&\n 'refreshCredentials' in adapter &&\n typeof (adapter as CredentialRefreshable).refreshCredentials === 'function'\n ) {\n await (adapter as CredentialRefreshable).refreshCredentials(next)\n log(`[agentskit] credentials refreshed${options?.id ? ` (${options.id})` : ''}`)\n return true\n }\n log(`[agentskit] adapter does not support credential rotation; restart required${options?.id ? ` (${options.id})` : ''}`)\n return false\n}\n"]}
|