@x12i/openrouter-runtime 1.0.6 → 1.4.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/LICENSE +21 -21
- package/README.md +160 -140
- package/dist/index.cjs +483 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -6
- package/dist/index.d.ts +113 -6
- package/dist/index.js +479 -34
- package/dist/index.js.map +1 -1
- package/package.json +41 -41
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/console-logger.ts","../src/config/defaults.ts","../src/openrouter/errors.ts","../src/utils/delay.ts","../src/openrouter/http-client.ts","../src/utils/json.ts","../src/function-tools/tool-messages.ts","../src/normalize/citations.ts","../src/normalize/images.ts","../src/normalize/patches.ts","../src/normalize/tool-usage.ts","../src/normalize/usage.ts","../src/utils/ids.ts","../src/normalize/normalize-chat-response.ts","../src/policies/post-response-validation.ts","../src/config/normalize-model.ts","../src/config/validate-runtime-request.ts","../src/openrouter/endpoints.ts","../src/openrouter/headers.ts","../src/tools/nested-tools.ts","../src/tools/server-tools.ts","../src/runtime/runtime.ts","../src/function-tools/registry.ts","../src/function-tools/parse-tool-args.ts","../src/function-tools/execute-function-tool.ts","../src/runtime/tool-loop.ts","../src/runtime/run-chat.ts","../src/normalize/normalize-responses-response.ts","../src/runtime/run-responses.ts","../src/runtime/streaming.ts","../src/runtime/create-runtime.ts"],"sourcesContent":["import type { RuntimeLogger } from \"../types/public\";\n\nconst TRUTHY = new Set([\"1\", \"true\", \"yes\", \"on\"]);\n\nexport function isRuntimeLoggingEnabled(\n env: Record<string, string | undefined> | undefined = typeof process === \"undefined\" ? undefined : process.env\n): boolean {\n const value = env?.OPENROUTER_RUNTIME_LOGS?.trim().toLowerCase();\n return value !== undefined && TRUTHY.has(value);\n}\n\nexport function createConsoleLogger(): RuntimeLogger {\n return {\n debug(event, data) {\n console.debug(`[openrouter-runtime] ${event}`, data ?? \"\");\n },\n info(event, data) {\n console.info(`[openrouter-runtime] ${event}`, data ?? \"\");\n },\n warn(event, data) {\n console.warn(`[openrouter-runtime] ${event}`, data ?? \"\");\n },\n error(event, data) {\n console.error(`[openrouter-runtime] ${event}`, data ?? \"\");\n }\n };\n}\n","import type { OpenRouterRuntimeOptions } from \"../types/public\";\nimport type { RequiredRuntimeDefaults, RequiredRuntimeOptions } from \"../types/internal\";\nimport { createConsoleLogger, isRuntimeLoggingEnabled } from \"../utils/console-logger\";\n\nexport function resolveRuntimeOptions(options: OpenRouterRuntimeOptions): RequiredRuntimeOptions {\n const logger = options.logger ?? (isRuntimeLoggingEnabled() ? createConsoleLogger() : undefined);\n return {\n ...options,\n apiKey: options.apiKey ?? readOpenRouterApiKeyFromEnv() ?? \"\",\n baseUrl: options.baseUrl ?? \"https://openrouter.ai/api/v1\",\n defaultHeaders: options.defaultHeaders ?? {},\n fetch: options.fetch ?? globalThis.fetch,\n ...(logger ? { logger } : {})\n };\n}\n\nexport function resolveDefaults(options: OpenRouterRuntimeOptions): RequiredRuntimeDefaults {\n const retry = options.defaults?.retry;\n return {\n ...options.defaults,\n apiMode: options.defaults?.apiMode ?? \"auto\",\n timeoutMs: options.defaults?.timeoutMs ?? 120_000,\n retry: {\n enabled: retry?.enabled ?? true,\n maxAttempts: retry?.maxAttempts ?? options.defaults?.maxRetries ?? 3,\n baseDelayMs: retry?.baseDelayMs ?? 500,\n maxDelayMs: retry?.maxDelayMs ?? 5_000\n },\n requireCitationsWhenSearchUsed: options.defaults?.requireCitationsWhenSearchUsed ?? true,\n onPolicyViolation: options.defaults?.onPolicyViolation ?? \"return_error\",\n serverTools: options.defaults?.serverTools ?? {\n datetime: {\n mode: \"allowed\",\n timezone: \"UTC\"\n }\n }\n };\n}\n\nfunction readOpenRouterApiKeyFromEnv(): string | undefined {\n const env = typeof process === \"undefined\" ? undefined : process.env;\n return env?.OPENROUTER_API_KEY || env?.OPEN_ROUTER_KEY;\n}\n","export class RuntimeConfigError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = \"RuntimeConfigError\";\n }\n}\n\nexport type ProviderFailureCode =\n | \"PROVIDER_AUTH_FAILED\"\n | \"PROVIDER_RATE_LIMITED\"\n | \"PROVIDER_QUOTA_EXCEEDED\"\n | \"PROVIDER_MODEL_NOT_FOUND\"\n | \"PROVIDER_GATEWAY_UNREACHABLE\"\n | \"PROVIDER_REQUEST_FAILED\";\n\nexport interface ProviderAttemptError {\n provider: string;\n modelId?: string;\n httpStatus?: number;\n code: ProviderFailureCode;\n message: string;\n retryable?: boolean;\n}\n\nexport class OpenRouterHttpError extends Error {\n constructor(\n public readonly status: number,\n public readonly code: ProviderFailureCode,\n message: string,\n public readonly body?: unknown,\n public readonly retryable = false,\n public readonly providerAttempts: ProviderAttemptError[] = []\n ) {\n super(message);\n this.name = \"OpenRouterHttpError\";\n }\n}\n","export function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function retryDelay(attempt: number, baseDelayMs: number, maxDelayMs: number): number {\n const exponential = Math.min(maxDelayMs, baseDelayMs * 2 ** Math.max(0, attempt - 1));\n const jitter = Math.floor(Math.random() * Math.min(250, exponential));\n return exponential + jitter;\n}\n","import { delay, retryDelay } from \"../utils/delay\";\nimport { OpenRouterHttpError, type ProviderAttemptError, type ProviderFailureCode } from \"./errors\";\nimport type { CompiledOpenRouterRequest } from \"../types/public\";\nimport type { RequiredRuntimeDefaults, RequiredRuntimeOptions } from \"../types/internal\";\n\nexport async function sendOpenRouterRequest(\n compiled: CompiledOpenRouterRequest,\n options: RequiredRuntimeOptions,\n defaults: RequiredRuntimeDefaults,\n timeoutMs: number\n): Promise<unknown> {\n const attempts = defaults.retry.enabled ? defaults.retry.maxAttempts : 1;\n let lastError: unknown;\n const providerAttempts: ProviderAttemptError[] = [];\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await sendOnce(compiled, options, timeoutMs);\n } catch (error) {\n lastError = error;\n if (error instanceof OpenRouterHttpError) {\n const providerAttempt = toProviderAttempt(error, compiled);\n providerAttempts.push(providerAttempt);\n options.logger?.warn?.(\"openrouter.provider_attempt.failed\", {\n ...providerAttempt,\n attempt,\n maxAttempts: attempts\n });\n }\n const retryable = error instanceof OpenRouterHttpError ? error.retryable : true;\n if (!retryable || attempt >= attempts) {\n if (error instanceof OpenRouterHttpError) {\n throw new OpenRouterHttpError(\n error.status,\n error.code,\n error.message,\n error.body,\n error.retryable,\n providerAttempts\n );\n }\n throw error;\n }\n await delay(retryDelay(attempt, defaults.retry.baseDelayMs, defaults.retry.maxDelayMs));\n }\n }\n throw lastError;\n}\n\nasync function sendOnce(\n compiled: CompiledOpenRouterRequest,\n options: RequiredRuntimeOptions,\n timeoutMs: number\n): Promise<unknown> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const response = await options.fetch(compiled.url, {\n method: \"POST\",\n headers: compiled.headers,\n body: JSON.stringify(compiled.body),\n signal: controller.signal\n });\n const text = await response.text();\n const body = text ? parseBody(text) : undefined;\n if (!response.ok) {\n const message = extractMessage(body) ?? `OpenRouter request failed with status ${response.status}.`;\n throw new OpenRouterHttpError(\n response.status,\n classifyProviderFailure(response.status, message, body),\n message,\n body,\n isRetryableStatus(response.status)\n );\n }\n return body;\n } catch (error) {\n if (error instanceof OpenRouterHttpError) throw error;\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new OpenRouterHttpError(408, \"PROVIDER_GATEWAY_UNREACHABLE\", \"OpenRouter request timed out.\", undefined, true);\n }\n throw new OpenRouterHttpError(\n 503,\n \"PROVIDER_GATEWAY_UNREACHABLE\",\n error instanceof Error ? error.message : \"OpenRouter request failed before receiving a response.\",\n undefined,\n true\n );\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction parseBody(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction extractMessage(body: unknown): string | undefined {\n if (typeof body !== \"object\" || body === null) return undefined;\n const record = body as Record<string, unknown>;\n const error = record.error;\n if (typeof error === \"object\" && error !== null && typeof (error as Record<string, unknown>).message === \"string\") {\n return (error as Record<string, string>).message;\n }\n return typeof record.message === \"string\" ? record.message : undefined;\n}\n\nfunction toProviderAttempt(error: OpenRouterHttpError, compiled: CompiledOpenRouterRequest): ProviderAttemptError {\n const modelId = typeof compiled.body.model === \"string\" ? compiled.body.model : undefined;\n return {\n provider: \"openrouter\",\n ...(modelId ? { modelId } : {}),\n httpStatus: error.status,\n code: error.code,\n message: error.message,\n retryable: error.retryable\n };\n}\n\nfunction classifyProviderFailure(status: number, message: string, body: unknown): ProviderFailureCode {\n const haystack = `${message} ${JSON.stringify(body ?? \"\")}`.toLowerCase();\n if (status === 401 || status === 403) return \"PROVIDER_AUTH_FAILED\";\n if (status === 402 || mentionsQuota(haystack)) return \"PROVIDER_QUOTA_EXCEEDED\";\n if (status === 404 || mentionsMissingModel(haystack)) return \"PROVIDER_MODEL_NOT_FOUND\";\n if (status === 429) return \"PROVIDER_RATE_LIMITED\";\n if (status === 408 || status >= 500) return \"PROVIDER_GATEWAY_UNREACHABLE\";\n return \"PROVIDER_REQUEST_FAILED\";\n}\n\nfunction mentionsQuota(text: string): boolean {\n return /\\b(quota|credit|credits|billing|balance|insufficient funds|insufficient credit)\\b/.test(text);\n}\n\nfunction mentionsMissingModel(text: string): boolean {\n return (\n /\\bmodel\\b.*\\b(not found|not a valid|invalid|unavailable)\\b/.test(text) ||\n /\\b(no endpoints found|not a valid model id)\\b/.test(text)\n );\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status === 500 || status === 502 || status === 503 || status === 504;\n}\n","export function parseJsonMaybe(value: unknown): unknown {\n if (typeof value !== \"string\") return value;\n if (value.trim() === \"\") return {};\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\nexport function stringifyToolResult(value: unknown): string {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { stringifyToolResult } from \"../utils/json\";\nimport type { RuntimeFunctionToolResult } from \"../types/public\";\n\nexport function resultToChatToolMessage(result: RuntimeFunctionToolResult): Record<string, unknown> {\n return {\n role: \"tool\",\n tool_call_id: result.callId,\n name: result.name,\n content: stringifyToolResult(result.status === \"completed\" ? result.result : { error: result.error })\n };\n}\n\nexport function resultToResponsesInput(result: RuntimeFunctionToolResult): Record<string, unknown> {\n return {\n type: \"function_call_output\",\n call_id: result.callId,\n output: stringifyToolResult(result.status === \"completed\" ? result.result : { error: result.error })\n };\n}\n","import type { RuntimeCitation } from \"../types/public\";\nimport { isRecord } from \"../utils/json\";\n\nexport function extractCitations(value: unknown): RuntimeCitation[] {\n const citations: RuntimeCitation[] = [];\n if (typeof value === \"string\") {\n return extractCitationsFromText(value);\n }\n visit(value, (item) => {\n const url = pickString(item, [\"url\", \"uri\"]);\n if (!url) return;\n citations.push({\n type: \"url\",\n url,\n sourceProvider: \"openrouter\",\n raw: item,\n ...optional(\"title\", pickString(item, [\"title\", \"name\"])),\n ...optional(\"excerpt\", pickString(item, [\"excerpt\", \"content\", \"text\"])),\n ...optional(\"startIndex\", pickNumber(item, [\"start_index\", \"startIndex\"])),\n ...optional(\"endIndex\", pickNumber(item, [\"end_index\", \"endIndex\"]))\n });\n });\n return dedupeCitations(citations);\n}\n\nexport function extractCitationsFromText(text: string): RuntimeCitation[] {\n const citations: RuntimeCitation[] = [];\n const markdownLinkPattern = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)\\s]+)\\)/g;\n for (const match of text.matchAll(markdownLinkPattern)) {\n const title = match[1];\n const url = cleanUrl(match[2]);\n const startIndex = match.index;\n citations.push({\n type: \"url\",\n url,\n sourceProvider: \"openrouter\",\n raw: match[0],\n ...(title ? { title } : {}),\n ...(startIndex !== undefined ? { startIndex, endIndex: startIndex + match[0].length } : {})\n });\n }\n\n const urlPattern = /https?:\\/\\/[^\\s)]+/g;\n for (const match of text.matchAll(urlPattern)) {\n const url = cleanUrl(match[0]);\n const startIndex = match.index;\n citations.push({\n type: \"url\",\n url,\n sourceProvider: \"openrouter\",\n raw: match[0],\n ...(startIndex !== undefined ? { startIndex, endIndex: startIndex + match[0].length } : {})\n });\n }\n\n return dedupeCitations(citations);\n}\n\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\n return value === undefined ? {} : { [key]: value };\n}\n\nfunction visit(value: unknown, onCitation: (record: Record<string, unknown>) => void): void {\n if (Array.isArray(value)) {\n for (const item of value) visit(item, onCitation);\n return;\n }\n if (!isRecord(value)) return;\n if (value.type === \"url_citation\" || value.type === \"citation\" || value.url || value.uri) onCitation(value);\n for (const key of [\"annotations\", \"citations\"]) visit(value[key], onCitation);\n}\n\nfunction pickString(record: Record<string, unknown>, keys: string[]): string | undefined {\n for (const key of keys) if (typeof record[key] === \"string\") return record[key];\n return undefined;\n}\n\nfunction pickNumber(record: Record<string, unknown>, keys: string[]): number | undefined {\n for (const key of keys) if (typeof record[key] === \"number\") return record[key];\n return undefined;\n}\n\nexport function dedupeCitations(citations: RuntimeCitation[]): RuntimeCitation[] {\n const seen = new Set<string>();\n return citations.filter((citation) => {\n const key = citation.url;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nfunction cleanUrl(url: string | undefined): string {\n return (url ?? \"\").replace(/[.,;:!?]+$/, \"\");\n}\n","import type { RuntimeGeneratedImage } from \"../types/public\";\nimport { isRecord } from \"../utils/json\";\n\nexport function extractImages(value: unknown): RuntimeGeneratedImage[] {\n const images: RuntimeGeneratedImage[] = [];\n visit(value, (record) => {\n const imageUrl = stringValue(record.image_url) ?? stringValue(record.url);\n if (imageUrl) images.push({ imageUrl, status: \"ok\", raw: record });\n });\n return images;\n}\n\nfunction visit(value: unknown, onImage: (record: Record<string, unknown>) => void): void {\n if (Array.isArray(value)) {\n for (const item of value) visit(item, onImage);\n return;\n }\n if (!isRecord(value)) return;\n if (value.type === \"image\" || value.type === \"image_generation_call\" || value.image_url || value.url) {\n if (value.image_url || value.type === \"image_generation_call\") onImage(value);\n }\n for (const nested of Object.values(value)) visit(nested, onImage);\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (isRecord(value) && typeof value.url === \"string\") return value.url;\n return undefined;\n}\n","import type { RuntimePatchProposal } from \"../types/public\";\nimport { isRecord } from \"../utils/json\";\n\nexport function extractPatches(value: unknown): RuntimePatchProposal[] {\n const patches: RuntimePatchProposal[] = [];\n visit(value, (record) => {\n const operation = normalizeOperation(record);\n if (!operation) return;\n patches.push({\n callId: stringValue(record.call_id) ?? stringValue(record.id) ?? \"patch_call\",\n status: record.status === \"failed\" ? \"failed\" : \"completed\",\n operation,\n raw: record\n });\n });\n return patches;\n}\n\nfunction visit(value: unknown, onPatch: (record: Record<string, unknown>) => void): void {\n if (Array.isArray(value)) {\n for (const item of value) visit(item, onPatch);\n return;\n }\n if (!isRecord(value)) return;\n if (value.type === \"apply_patch_call\" || value.type === \"patch\" || value.operation) onPatch(value);\n for (const nested of Object.values(value)) visit(nested, onPatch);\n}\n\nfunction normalizeOperation(record: Record<string, unknown>): RuntimePatchProposal[\"operation\"] | undefined {\n const operation = isRecord(record.operation) ? record.operation : record;\n const type = stringValue(operation.type) ?? stringValue(operation.operation);\n const path = stringValue(operation.path) ?? stringValue(operation.file);\n if (!type || !path) return undefined;\n if (type === \"delete_file\") return { type, path };\n if (type === \"create_file\" || type === \"update_file\") {\n return { type, path, diff: stringValue(operation.diff) ?? stringValue(operation.patch) ?? \"\" };\n }\n return undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n","import type {\n RuntimeFunctionToolUsage,\n RuntimeServerToolsPolicy,\n RuntimeToolUsage,\n ServerToolKey\n} from \"../types/public\";\n\nconst serverToolKeys: ServerToolKey[] = [\n \"webSearch\",\n \"webFetch\",\n \"datetime\",\n \"imageGeneration\",\n \"applyPatch\",\n \"fusion\",\n \"advisor\",\n \"subagent\"\n];\n\nconst rawTypeToKey: Record<string, ServerToolKey> = {\n \"openrouter:web_search\": \"webSearch\",\n web_search: \"webSearch\",\n webSearch: \"webSearch\",\n \"openrouter:web_fetch\": \"webFetch\",\n web_fetch: \"webFetch\",\n webFetch: \"webFetch\",\n \"openrouter:datetime\": \"datetime\",\n datetime: \"datetime\",\n \"openrouter:image_generation\": \"imageGeneration\",\n image_generation: \"imageGeneration\",\n imageGeneration: \"imageGeneration\",\n \"openrouter:apply_patch\": \"applyPatch\",\n apply_patch: \"applyPatch\",\n applyPatch: \"applyPatch\",\n \"openrouter:fusion\": \"fusion\",\n fusion: \"fusion\",\n \"openrouter:advisor\": \"advisor\",\n advisor: \"advisor\",\n \"openrouter:subagent\": \"subagent\",\n subagent: \"subagent\"\n};\n\nexport function createToolUsage(\n policy: RuntimeServerToolsPolicy | undefined,\n raw: unknown,\n functionTools: RuntimeFunctionToolUsage[] = []\n): RuntimeToolUsage {\n const counts = detectServerToolCounts(raw);\n const serverTools = Object.fromEntries(\n serverToolKeys.map((key) => {\n const item = policyValue(policy, key);\n const requested = Array.isArray(item) ? item.some((x) => x.mode !== \"disabled\") : !!item && item.mode !== \"disabled\";\n const required = Array.isArray(item) ? item.some((x) => x.mode === \"required\") : !!item && item.mode === \"required\";\n return [\n key,\n {\n requested,\n required,\n used: (counts[key] ?? 0) > 0,\n callCount: counts[key] ?? 0\n }\n ];\n })\n ) as RuntimeToolUsage[\"serverTools\"];\n return { serverTools, functionTools };\n}\n\nfunction policyValue(policy: RuntimeServerToolsPolicy | undefined, key: ServerToolKey) {\n return policy?.[key];\n}\n\nfunction detectServerToolCounts(raw: unknown): Partial<Record<ServerToolKey, number>> {\n const counts: Partial<Record<ServerToolKey, number>> = {};\n visit(raw, (type) => {\n const key = rawTypeToKey[type];\n if (key) counts[key] = (counts[key] ?? 0) + 1;\n });\n return counts;\n}\n\nfunction visit(value: unknown, onType: (type: string) => void): void {\n if (Array.isArray(value)) {\n for (const item of value) visit(item, onType);\n return;\n }\n if (typeof value !== \"object\" || value === null) return;\n const record = value as Record<string, unknown>;\n if (typeof record.type === \"string\") onType(record.type);\n if (typeof record.name === \"string\") onType(record.name);\n for (const nested of Object.values(record)) visit(nested, onType);\n}\n","import type { RuntimeUsage } from \"../types/public\";\nimport { isRecord } from \"../utils/json\";\n\nexport function normalizeUsage(usage: unknown): RuntimeUsage | undefined {\n if (!isRecord(usage)) return undefined;\n const details = isRecord(usage.completion_tokens_details) ? usage.completion_tokens_details : undefined;\n return {\n raw: usage,\n ...optional(\"inputTokens\", numberValue(usage.prompt_tokens) ?? numberValue(usage.input_tokens)),\n ...optional(\"outputTokens\", numberValue(usage.completion_tokens) ?? numberValue(usage.output_tokens)),\n ...optional(\"totalTokens\", numberValue(usage.total_tokens)),\n ...optional(\"reasoningTokens\", numberValue(details?.reasoning_tokens) ?? numberValue(usage.reasoning_tokens)),\n ...optional(\"costUsd\", numberValue(usage.cost))\n };\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\n return value === undefined ? {} : { [key]: value };\n}\n","export function createRuntimeId(prefix = \"orun\"): string {\n const cryptoObject = globalThis.crypto;\n if (cryptoObject?.randomUUID) return `${prefix}_${cryptoObject.randomUUID()}`;\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n}\n","import { dedupeCitations, extractCitations } from \"./citations\";\nimport { extractImages } from \"./images\";\nimport { extractPatches } from \"./patches\";\nimport { createToolUsage } from \"./tool-usage\";\nimport { normalizeUsage } from \"./usage\";\nimport type {\n ResolvedApiMode,\n RuntimeFunctionToolUsage,\n RuntimeResponse,\n RuntimeServerToolsPolicy,\n RuntimeWarning\n} from \"../types/public\";\nimport { createRuntimeId } from \"../utils/ids\";\nimport { isRecord } from \"../utils/json\";\n\nexport function normalizeChatResponse(params: {\n requestBody: unknown;\n response: unknown;\n apiMode: ResolvedApiMode;\n model: string;\n serverTools?: RuntimeServerToolsPolicy;\n warnings: RuntimeWarning[];\n functionToolUsage?: RuntimeFunctionToolUsage[];\n metadata?: Record<string, unknown>;\n}): RuntimeResponse {\n const responseRecord = isRecord(params.response) ? params.response : {};\n const choice = Array.isArray(responseRecord.choices) && isRecord(responseRecord.choices[0]) ? responseRecord.choices[0] : {};\n const message = isRecord(choice.message) ? choice.message : {};\n const text = normalizeContentToText(message.content);\n return {\n id: typeof responseRecord.id === \"string\" ? responseRecord.id : createRuntimeId(\"orresp\"),\n status: \"completed\",\n apiMode: params.apiMode,\n model: typeof responseRecord.model === \"string\" ? responseRecord.model : params.model,\n text,\n citations: dedupeCitations([\n ...extractCitations([message.annotations, responseRecord.citations, params.response]),\n ...extractCitations(text)\n ]),\n images: extractImages(params.response),\n patches: extractPatches(params.response),\n toolUsage: createToolUsage(params.serverTools, params.response, params.functionToolUsage),\n warnings: params.warnings,\n errors: [],\n raw: {\n request: params.requestBody,\n response: params.response\n },\n ...optional(\"usage\", normalizeUsage(responseRecord.usage)),\n ...optional(\"finishReason\", typeof choice.finish_reason === \"string\" ? choice.finish_reason : undefined),\n ...optional(\"metadata\", params.metadata)\n };\n}\n\nexport function normalizeContentToText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .map((part) => {\n if (typeof part === \"string\") return part;\n if (isRecord(part) && typeof part.text === \"string\") return part.text;\n if (isRecord(part) && typeof part.content === \"string\") return part.content;\n return \"\";\n })\n .filter(Boolean)\n .join(\"\");\n}\n\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\n return value === undefined ? {} : { [key]: value };\n}\n","import type { RuntimeDefaults, RuntimeResponse, RuntimeServerToolsPolicy } from \"../types/public\";\n\nexport async function validatePostResponse(\n response: RuntimeResponse,\n defaults: RuntimeDefaults,\n serverTools?: RuntimeServerToolsPolicy\n): Promise<RuntimeResponse> {\n const errors = [...response.errors];\n const warnings = [...response.warnings];\n const webSearchUsage = response.toolUsage.serverTools.webSearch;\n if (\n webSearchUsage.requested &&\n response.citations.length > 0 &&\n !webSearchUsage.used\n ) {\n webSearchUsage.used = true;\n webSearchUsage.callCount = Math.max(webSearchUsage.callCount ?? 0, 1);\n }\n for (const [key, usage] of Object.entries(response.toolUsage.serverTools)) {\n if (usage.required && !usage.used) {\n const code = `${toScreamingSnake(key)}_REQUIRED_BUT_NOT_USED`;\n usage.policyViolation = code;\n const violation = { code, message: `${key} was required but no usage evidence was found.` };\n if (defaults.onPolicyViolation === \"throw\") {\n errors.push({ ...violation, source: \"policy\" });\n } else {\n warnings.push(violation);\n }\n }\n }\n const citationsRequired = serverTools?.webSearch?.requireCitations ?? defaults.requireCitationsWhenSearchUsed;\n if (citationsRequired && webSearchUsage.used && response.citations.length === 0) {\n const violation = {\n code: \"CITATIONS_REQUIRED_BUT_MISSING\",\n message: \"Web search was used but no citations were extracted.\"\n };\n webSearchUsage.policyViolation = webSearchUsage.policyViolation ?? violation.code;\n if (defaults.onPolicyViolation === \"throw\") {\n errors.push({ ...violation, source: \"policy\" });\n } else {\n warnings.push(violation);\n }\n }\n return {\n ...response,\n status: errors.some((error) => error.source === \"policy\") ? \"policy_violation\" : response.status,\n errors,\n warnings\n };\n}\n\nfunction toScreamingSnake(value: string): string {\n return value.replace(/[A-Z]/g, (match) => `_${match}`).toUpperCase();\n}\n","import type { RuntimeServerToolsPolicy, RuntimeWarning } from \"../types/public\";\n\nexport interface ModelNormalizationResult {\n model: string;\n warnings: RuntimeWarning[];\n impliedServerTools?: Partial<RuntimeServerToolsPolicy>;\n}\n\nexport function normalizeModel(model: string): ModelNormalizationResult {\n if (!model.endsWith(\":online\")) {\n return { model, warnings: [] };\n }\n\n return {\n model: model.slice(0, -\":online\".length),\n warnings: [\n {\n code: \"OPENROUTER_ONLINE_VARIANT_DEPRECATED\",\n message: \"The :online model suffix is deprecated. Use serverTools.webSearch instead.\"\n }\n ],\n impliedServerTools: {\n webSearch: { mode: \"allowed\" }\n }\n };\n}\n","import { RuntimeConfigError } from \"../openrouter/errors\";\nimport type {\n OpenRouterRuntimeOptions,\n ResolvedApiMode,\n RuntimeFunctionToolDefinition,\n RuntimeRequest,\n RuntimeServerToolsPolicy\n} from \"../types/public\";\n\nexport function validateRuntimeRequest(\n request: RuntimeRequest,\n options: OpenRouterRuntimeOptions,\n apiMode: ResolvedApiMode,\n model: string,\n serverTools: RuntimeServerToolsPolicy | undefined\n): void {\n if (!options.apiKey) throw new RuntimeConfigError(\"OPENROUTER_API_KEY_MISSING\", \"OpenRouter API key is required.\");\n if (!model) throw new RuntimeConfigError(\"MODEL_MISSING\", \"Runtime request must include a model.\");\n if (!request.messages?.length && !request.input && !request.prompt) {\n throw new RuntimeConfigError(\"INPUT_MISSING\", \"Runtime request must include messages, input, or prompt.\");\n }\n if (serverTools?.applyPatch?.mode && serverTools.applyPatch.mode !== \"disabled\" && apiMode !== \"responses\") {\n throw new RuntimeConfigError(\"APPLY_PATCH_REQUIRES_RESPONSES_API\", \"apply_patch requires the Responses API.\");\n }\n if (serverTools?.applyPatch?.behavior === \"apply_with_callback\" && !options.patchApplier) {\n throw new RuntimeConfigError(\"PATCH_APPLIER_REQUIRED\", \"apply_with_callback requires options.patchApplier.\");\n }\n validateWebSearch(serverTools);\n validateWebFetch(serverTools);\n validateDomains(serverTools?.webSearch?.allowedDomains, \"allowedDomains\");\n validateDomains(serverTools?.webSearch?.excludedDomains, \"excludedDomains\");\n validateDomains(serverTools?.webFetch?.allowedDomains, \"allowedDomains\");\n validateDomains(serverTools?.webFetch?.blockedDomains, \"blockedDomains\");\n validateFunctionTools(request.functionTools);\n validateAdvisorNames(serverTools);\n validateToolChoice(request, serverTools);\n}\n\nfunction validateWebSearch(policy?: RuntimeServerToolsPolicy): void {\n const search = policy?.webSearch;\n if (!search || search.mode === \"disabled\") return;\n const maxResults = search.maxResults ?? 5;\n const maxTotalResults = search.maxTotalResults ?? 15;\n if (maxResults < 1 || maxResults > 25) {\n throw new RuntimeConfigError(\"INVALID_WEB_SEARCH_MAX_RESULTS\", \"webSearch.maxResults must be between 1 and 25.\");\n }\n if (search.engine === \"perplexity\" && maxResults > 20) {\n throw new RuntimeConfigError(\"PERPLEXITY_MAX_RESULTS_EXCEEDED\", \"Perplexity search supports at most 20 results.\");\n }\n if (maxTotalResults < maxResults) {\n throw new RuntimeConfigError(\"MAX_TOTAL_RESULTS_LT_MAX_RESULTS\", \"maxTotalResults must be >= maxResults.\");\n }\n}\n\nfunction validateWebFetch(policy?: RuntimeServerToolsPolicy): void {\n const fetch = policy?.webFetch;\n if (!fetch || fetch.mode === \"disabled\") return;\n if (fetch.maxUses !== undefined && fetch.maxUses < 1) {\n throw new RuntimeConfigError(\"INVALID_WEB_FETCH_MAX_USES\", \"webFetch.maxUses must be >= 1.\");\n }\n}\n\nfunction validateDomains(domains: string[] | undefined, field: string): void {\n for (const domain of domains ?? []) {\n if (/^https?:\\/\\//i.test(domain) || domain.includes(\"/\") || domain.trim() !== domain || domain === \"\") {\n throw new RuntimeConfigError(\"INVALID_DOMAIN\", `${field} must contain domains, not URLs.`, { domain });\n }\n }\n}\n\nfunction validateFunctionTools(tools: RuntimeFunctionToolDefinition[] | undefined): void {\n const names = new Set<string>();\n for (const tool of tools ?? []) {\n if (names.has(tool.name)) {\n throw new RuntimeConfigError(\"DUPLICATE_FUNCTION_TOOL\", `Function tool ${tool.name} is defined more than once.`);\n }\n names.add(tool.name);\n }\n}\n\nfunction validateAdvisorNames(policy?: RuntimeServerToolsPolicy): void {\n const advisors = Array.isArray(policy?.advisor) ? policy.advisor : policy?.advisor ? [policy.advisor] : [];\n const names = new Set<string>();\n for (const advisor of advisors) {\n if (!advisor.name) continue;\n if (names.has(advisor.name)) {\n throw new RuntimeConfigError(\"DUPLICATE_ADVISOR_NAME\", `Advisor ${advisor.name} is defined more than once.`);\n }\n names.add(advisor.name);\n }\n}\n\nfunction validateToolChoice(request: RuntimeRequest, policy?: RuntimeServerToolsPolicy): void {\n const choice = request.toolChoice;\n if (!choice || typeof choice === \"string\") return;\n if (choice.type === \"function\") {\n if (!request.functionTools?.some((tool) => tool.name === choice.functionName)) {\n throw new RuntimeConfigError(\"TOOL_CHOICE_FUNCTION_NOT_ENABLED\", `Function tool ${choice.functionName} is not enabled.`);\n }\n return;\n }\n const map = {\n web_search: policy?.webSearch,\n web_fetch: policy?.webFetch,\n datetime: policy?.datetime,\n image_generation: policy?.imageGeneration,\n apply_patch: policy?.applyPatch,\n fusion: policy?.fusion,\n advisor: policy?.advisor,\n subagent: policy?.subagent\n };\n const selected = map[choice.serverTool];\n const enabled = Array.isArray(selected)\n ? selected.some((item) => item.mode !== \"disabled\")\n : !!selected && selected.mode !== \"disabled\";\n if (!enabled) {\n throw new RuntimeConfigError(\"TOOL_CHOICE_SERVER_TOOL_NOT_ENABLED\", `Server tool ${choice.serverTool} is not enabled.`);\n }\n}\n","import type { ResolvedApiMode } from \"../types/public\";\n\nexport function endpointFor(baseUrl: string, apiMode: ResolvedApiMode): string {\n const trimmed = baseUrl.replace(/\\/+$/, \"\");\n return apiMode === \"chat\" ? `${trimmed}/chat/completions` : `${trimmed}/responses`;\n}\n","import type { OpenRouterRuntimeOptions } from \"../types/public\";\n\nexport function buildHeaders(options: OpenRouterRuntimeOptions): Record<string, string> {\n return {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${options.apiKey}`,\n ...(options.appAttribution?.siteUrl ? { \"HTTP-Referer\": options.appAttribution.siteUrl } : {}),\n ...(options.appAttribution?.appName ? { \"X-Title\": options.appAttribution.appName } : {}),\n ...(options.defaultHeaders ?? {})\n };\n}\n","import { RuntimeConfigError } from \"../openrouter/errors\";\nimport type { NestedOpenRouterServerToolPolicy } from \"../types/public\";\n\nconst allowedNestedTypes = new Set([\n \"openrouter:web_search\",\n \"openrouter:web_fetch\",\n \"openrouter:datetime\",\n \"openrouter:image_generation\"\n]);\n\nexport function validateNestedTools(tools?: NestedOpenRouterServerToolPolicy[]): void {\n for (const tool of tools ?? []) {\n if (!allowedNestedTypes.has(tool.type)) {\n throw new RuntimeConfigError(\n \"INVALID_NESTED_SERVER_TOOL\",\n `Nested server tool ${tool.type} is not allowed.`\n );\n }\n }\n}\n","import type {\n AdvisorPolicy,\n ApplyPatchPolicy,\n DatetimePolicy,\n FusionPolicy,\n ImageGenerationPolicy,\n RuntimeServerToolsPolicy,\n SubagentPolicy,\n WebFetchPolicy,\n WebSearchPolicy\n} from \"../types/public\";\nimport type { OpenRouterTool } from \"../types/internal\";\nimport { validateNestedTools } from \"./nested-tools\";\n\nfunction cleanParameters(parameters: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(parameters).filter(([, value]) => value !== undefined));\n}\n\nfunction enabled(policy?: { mode: string }): boolean {\n return !!policy && policy.mode !== \"disabled\";\n}\n\nexport function buildOpenRouterServerTools(policy?: RuntimeServerToolsPolicy): OpenRouterTool[] {\n const tools: OpenRouterTool[] = [];\n const webSearch = buildWebSearchTool(policy?.webSearch);\n if (webSearch) tools.push(webSearch);\n const webFetch = buildWebFetchTool(policy?.webFetch);\n if (webFetch) tools.push(webFetch);\n const datetime = buildDatetimeTool(policy?.datetime);\n if (datetime) tools.push(datetime);\n const image = buildImageGenerationTool(policy?.imageGeneration);\n if (image) tools.push(image);\n const patch = buildApplyPatchTool(policy?.applyPatch);\n if (patch) tools.push(patch);\n const fusion = buildFusionTool(policy?.fusion);\n if (fusion) tools.push(fusion);\n tools.push(...buildAdvisorTools(policy?.advisor));\n const subagent = buildSubagentTool(policy?.subagent);\n if (subagent) tools.push(subagent);\n return tools;\n}\n\nexport function buildWebSearchTool(policy?: WebSearchPolicy): OpenRouterTool | undefined {\n if (!enabled(policy)) return undefined;\n return {\n type: \"openrouter:web_search\",\n parameters: cleanParameters({\n engine: policy?.engine ?? \"auto\",\n max_results: policy?.maxResults ?? 5,\n max_total_results: policy?.maxTotalResults ?? 15,\n search_context_size: policy?.searchContextSize ?? \"medium\",\n allowed_domains: policy?.allowedDomains,\n excluded_domains: policy?.excludedDomains,\n user_location: policy?.userLocation\n })\n };\n}\n\nexport function buildWebFetchTool(policy?: WebFetchPolicy): OpenRouterTool | undefined {\n if (!enabled(policy)) return undefined;\n return {\n type: \"openrouter:web_fetch\",\n parameters: cleanParameters({\n engine: policy?.engine ?? \"auto\",\n max_uses: policy?.maxUses ?? 10,\n max_content_tokens: policy?.maxContentTokens ?? 50_000,\n allowed_domains: policy?.allowedDomains,\n blocked_domains: policy?.blockedDomains\n })\n };\n}\n\nexport function buildDatetimeTool(policy?: DatetimePolicy): OpenRouterTool | undefined {\n if (!enabled(policy)) return undefined;\n return {\n type: \"openrouter:datetime\",\n parameters: cleanParameters({ timezone: policy?.timezone ?? \"UTC\" })\n };\n}\n\nexport function buildImageGenerationTool(policy?: ImageGenerationPolicy): OpenRouterTool | undefined {\n if (!enabled(policy)) return undefined;\n return {\n type: \"openrouter:image_generation\",\n parameters: cleanParameters({\n model: policy?.model ?? \"openai/gpt-5-image\",\n quality: policy?.quality,\n size: policy?.size,\n aspect_ratio: policy?.aspectRatio,\n background: policy?.background,\n output_format: policy?.outputFormat,\n output_compression: policy?.outputCompression,\n moderation: policy?.moderation\n })\n };\n}\n\nexport function buildApplyPatchTool(policy?: ApplyPatchPolicy): OpenRouterTool | undefined {\n if (!enabled(policy)) return undefined;\n return { type: \"openrouter:apply_patch\" };\n}\n\nexport function buildFusionTool(policy?: FusionPolicy): OpenRouterTool | undefined {\n if (!enabled(policy)) return undefined;\n return {\n type: \"openrouter:fusion\",\n parameters: cleanParameters({\n analysis_models: policy?.analysisModels,\n model: policy?.judgeModel,\n max_tool_calls: policy?.maxToolCalls ?? 8,\n max_completion_tokens: policy?.maxCompletionTokens,\n reasoning: policy?.reasoning,\n temperature: policy?.temperature\n })\n };\n}\n\nexport function buildAdvisorTools(policy?: AdvisorPolicy | AdvisorPolicy[]): OpenRouterTool[] {\n const advisors = Array.isArray(policy) ? policy : policy ? [policy] : [];\n return advisors.filter(enabled).map((advisor) => {\n validateNestedTools(advisor.tools);\n return {\n type: \"openrouter:advisor\",\n parameters: cleanParameters({\n name: advisor.name,\n model: advisor.model,\n instructions: advisor.instructions,\n tools: advisor.tools,\n forward_transcript: advisor.forwardTranscript ?? false,\n stream: advisor.stream,\n max_tool_calls: advisor.maxToolCalls,\n max_completion_tokens: advisor.maxCompletionTokens,\n reasoning: advisor.reasoning,\n temperature: advisor.temperature\n })\n };\n });\n}\n\nexport function buildSubagentTool(policy?: SubagentPolicy): OpenRouterTool | undefined {\n if (!policy || policy.mode === \"disabled\") return undefined;\n const subagent = policy;\n validateNestedTools(subagent.tools);\n return {\n type: \"openrouter:subagent\",\n parameters: cleanParameters({\n model: subagent.model,\n instructions: subagent.instructions,\n tools: subagent.tools,\n max_tool_calls: subagent.maxToolCalls,\n max_completion_tokens: subagent.maxCompletionTokens,\n reasoning: subagent.reasoning,\n temperature: subagent.temperature\n })\n };\n}\n","import { normalizeModel } from \"../config/normalize-model\";\nimport { validateRuntimeRequest } from \"../config/validate-runtime-request\";\nimport { endpointFor } from \"../openrouter/endpoints\";\nimport { buildHeaders } from \"../openrouter/headers\";\nimport { buildOpenRouterServerTools } from \"../tools/server-tools\";\nimport type { OpenRouterTool, RuntimeCompileContext } from \"../types/internal\";\nimport type {\n ApiMode,\n CompiledOpenRouterRequest,\n OpenRouterRuntimeOptions,\n ResolvedApiMode,\n RuntimeDefaults,\n RuntimeMessage,\n RuntimeRequest,\n RuntimeServerToolsPolicy,\n RuntimeToolChoice,\n RuntimeWarning\n} from \"../types/public\";\n\nexport function compileRuntimeRequest(\n request: RuntimeRequest,\n defaults: RuntimeDefaults,\n options: OpenRouterRuntimeOptions = { apiKey: \"\" },\n context: Partial<RuntimeCompileContext> = {}\n): CompiledOpenRouterRequest {\n const warnings: RuntimeWarning[] = [];\n const effectiveContext: RuntimeCompileContext = { streaming: false, ...context };\n const requestedModel = request.model ?? options.defaultModel ?? \"\";\n const normalized = normalizeModel(requestedModel);\n warnings.push(...normalized.warnings);\n const serverTools = mergeServerTools(defaults.serverTools, normalized.impliedServerTools, request.serverTools);\n const apiMode = resolveApiMode(request, defaults.apiMode, serverTools);\n validateRuntimeRequest(request, options, apiMode, normalized.model, serverTools);\n\n const tools: OpenRouterTool[] = [\n ...buildOpenRouterServerTools(serverTools),\n ...(request.functionTools ?? []).map((tool) => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters\n }\n }))\n ];\n\n const headers = buildHeaders(options);\n const baseBody = buildBaseBody(request, normalized.model, defaults, tools, serverTools);\n const body =\n apiMode === \"chat\"\n ? buildChatBody(request, baseBody)\n : buildResponsesBody(request, baseBody);\n enforceStreamingPolicyForRun(body, warnings, effectiveContext);\n\n return {\n apiMode,\n url: endpointFor(options.baseUrl ?? \"https://openrouter.ai/api/v1\", apiMode),\n headers,\n body,\n warnings\n };\n}\n\nfunction enforceStreamingPolicyForRun(\n body: Record<string, unknown>,\n warnings: RuntimeWarning[],\n context: RuntimeCompileContext\n): void {\n if (context.streaming) return;\n if (body.stream !== undefined && body.stream !== false) {\n warnings.push({\n code: \"STREAMING_OVERRIDE_IGNORED_FOR_RUN\",\n message: \"runtime.run() is non-streaming. Use runtime.executeStreamingChat() when streaming is implemented.\",\n details: { ignoredStreamValue: body.stream }\n });\n }\n // Explicit false so wire traffic and logs never look ambiguous.\n body.stream = false;\n stripAdvisorStreaming(body, warnings);\n}\n\nfunction stripAdvisorStreaming(body: Record<string, unknown>, warnings: RuntimeWarning[]): void {\n const tools = body.tools;\n if (!Array.isArray(tools)) return;\n let stripped = 0;\n for (const tool of tools) {\n if (!tool || typeof tool !== \"object\") continue;\n const record = tool as Record<string, unknown>;\n if (record.type !== \"openrouter:advisor\") continue;\n const parameters = record.parameters;\n if (!parameters || typeof parameters !== \"object\") continue;\n const params = parameters as Record<string, unknown>;\n if (params.stream === undefined || params.stream === false) continue;\n params.stream = false;\n stripped += 1;\n }\n if (stripped > 0) {\n warnings.push({\n code: \"ADVISOR_STREAMING_IGNORED_FOR_RUN\",\n message:\n \"runtime.run() disables advisor.stream. Nested advisor streaming is not supported on the non-streaming entrypoint.\",\n details: { advisorsStripped: stripped }\n });\n }\n}\n\nexport function resolveApiMode(\n request: RuntimeRequest,\n defaultMode: ApiMode = \"auto\",\n serverTools?: RuntimeServerToolsPolicy\n): ResolvedApiMode {\n const mode = request.apiMode ?? defaultMode;\n if (mode === \"chat\") return \"chat\";\n if (mode === \"responses\") return \"responses\";\n if (serverTools?.applyPatch?.mode && serverTools.applyPatch.mode !== \"disabled\") return \"responses\";\n if (request.input) return \"responses\";\n return \"chat\";\n}\n\nexport function mergeServerTools(\n ...policies: Array<Partial<RuntimeServerToolsPolicy> | undefined>\n): RuntimeServerToolsPolicy | undefined {\n const merged: RuntimeServerToolsPolicy = {};\n for (const policy of policies) {\n if (!policy) continue;\n Object.assign(merged, policy);\n }\n return Object.keys(merged).length ? merged : undefined;\n}\n\nfunction buildBaseBody(\n request: RuntimeRequest,\n model: string,\n defaults: RuntimeDefaults,\n tools: OpenRouterTool[],\n serverTools?: RuntimeServerToolsPolicy\n): Record<string, unknown> {\n const body: Record<string, unknown> = {\n model,\n temperature: request.temperature ?? defaults.temperature,\n reasoning: request.reasoning,\n tools: tools.length ? tools : undefined,\n tool_choice: compileToolChoice(request.toolChoice, serverTools),\n ...request.rawOpenRouterOverrides\n };\n return clean(body);\n}\n\nfunction buildChatBody(request: RuntimeRequest, baseBody: Record<string, unknown>): Record<string, unknown> {\n const messages = compileMessages(request);\n return clean({\n ...baseBody,\n messages,\n max_completion_tokens: request.maxTokens,\n response_format: request.responseFormat\n });\n}\n\nfunction buildResponsesBody(request: RuntimeRequest, baseBody: Record<string, unknown>): Record<string, unknown> {\n return clean({\n ...baseBody,\n input: request.input ?? compilePromptInput(request),\n instructions: request.instructions ?? request.system,\n max_output_tokens: request.maxTokens,\n text: request.responseFormat\n });\n}\n\nexport function compileMessages(request: RuntimeRequest): Record<string, unknown>[] {\n const messages: RuntimeMessage[] = [];\n if (request.system) messages.push({ role: \"system\", content: request.system });\n if (request.messages) messages.push(...request.messages);\n if (request.prompt) messages.push({ role: \"user\", content: request.prompt });\n return messages.map(compileMessage);\n}\n\nfunction compilePromptInput(request: RuntimeRequest): unknown {\n if (request.prompt) return request.prompt;\n return compileMessages(request).map((message) => ({\n role: message.role,\n content: message.content\n }));\n}\n\nfunction compileMessage(message: RuntimeMessage): Record<string, unknown> {\n return clean({\n role: message.role,\n content: compileContent(message.content),\n name: message.name,\n tool_call_id: message.toolCallId\n });\n}\n\nfunction compileContent(content: RuntimeMessage[\"content\"]): unknown {\n if (typeof content === \"string\") return content;\n return content.map((part) => {\n if (part.type === \"image_url\") {\n return { type: \"image_url\", image_url: { url: part.imageUrl } };\n }\n if (part.type === \"file\") {\n return clean({\n type: \"file\",\n file_name: part.fileName,\n mime_type: part.mimeType,\n data: part.data,\n url: part.url\n });\n }\n return part;\n });\n}\n\nfunction compileToolChoice(choice: RuntimeToolChoice | undefined, serverTools?: RuntimeServerToolsPolicy): unknown {\n if (!choice || choice === \"auto\") return undefined;\n if (choice === \"none\" || choice === \"required\") return choice;\n if (choice.type === \"function\") {\n return { type: \"function\", function: { name: choice.functionName } };\n }\n const toolType = `openrouter:${choice.serverTool}`;\n const matchingPolicy = serverToolPolicyForChoice(choice.serverTool, serverTools);\n return matchingPolicy === 1 ? { type: toolType } : \"required\";\n}\n\nfunction serverToolPolicyForChoice(name: string, policy?: RuntimeServerToolsPolicy): number {\n const value = {\n web_search: policy?.webSearch,\n web_fetch: policy?.webFetch,\n datetime: policy?.datetime,\n image_generation: policy?.imageGeneration,\n apply_patch: policy?.applyPatch,\n fusion: policy?.fusion,\n advisor: policy?.advisor,\n subagent: policy?.subagent\n }[name];\n if (!value) return 0;\n if (Array.isArray(value)) return value.filter((item) => item.mode !== \"disabled\").length;\n return value.mode === \"disabled\" ? 0 : 1;\n}\n\nfunction clean<T extends Record<string, unknown>>(record: T): T {\n return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined)) as T;\n}\n","import type { OpenRouterRuntimeOptions, RuntimeFunctionToolDefinition, RuntimeToolExecutor } from \"../types/public\";\n\nexport function resolveExecutor(\n name: string,\n definitions: RuntimeFunctionToolDefinition[] | undefined,\n options: OpenRouterRuntimeOptions\n): RuntimeToolExecutor | undefined {\n return definitions?.find((tool) => tool.name === name)?.executor ?? options.tools?.[name];\n}\n","import { parseJsonMaybe } from \"../utils/json\";\n\nexport function parseToolArgs(args: unknown): unknown {\n return parseJsonMaybe(args);\n}\n","import { RuntimeConfigError } from \"../openrouter/errors\";\nimport { resolveExecutor } from \"./registry\";\nimport { parseToolArgs } from \"./parse-tool-args\";\nimport type {\n OpenRouterRuntimeOptions,\n RuntimeFunctionToolCall,\n RuntimeFunctionToolDefinition,\n RuntimeFunctionToolResult,\n RuntimeRequest\n} from \"../types/public\";\n\nexport async function executeFunctionTool(\n call: RuntimeFunctionToolCall,\n request: RuntimeRequest,\n definitions: RuntimeFunctionToolDefinition[] | undefined,\n options: OpenRouterRuntimeOptions\n): Promise<RuntimeFunctionToolResult> {\n const executor = resolveExecutor(call.name, definitions, options);\n if (!executor) {\n throw new RuntimeConfigError(\"FUNCTION_TOOL_EXECUTOR_MISSING\", `No executor registered for ${call.name}.`);\n }\n const started = Date.now();\n const args = parseToolArgs(call.args);\n try {\n options.logger?.debug?.(\"runtime.function_tool.started\", { name: call.name, callId: call.callId });\n await options.hooks?.beforeFunctionToolExecution?.({ ...call, args });\n const context = {\n requestId: request.id ?? \"\",\n toolName: call.name,\n callId: call.callId,\n ...(request.metadata ? { metadata: request.metadata } : {})\n };\n const result = await executor(args, context);\n const normalized = {\n name: call.name,\n callId: call.callId,\n status: \"completed\" as const,\n result,\n durationMs: Date.now() - started\n };\n await options.hooks?.afterFunctionToolExecution?.(normalized);\n options.logger?.debug?.(\"runtime.function_tool.completed\", { name: call.name, callId: call.callId });\n return normalized;\n } catch (error) {\n const normalized = {\n name: call.name,\n callId: call.callId,\n status: \"failed\" as const,\n error: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - started\n };\n await options.hooks?.afterFunctionToolExecution?.(normalized);\n options.logger?.warn?.(\"runtime.function_tool.failed\", normalized);\n return normalized;\n }\n}\n","import { executeFunctionTool } from \"../function-tools/execute-function-tool\";\nimport { parseToolArgs } from \"../function-tools/parse-tool-args\";\nimport type {\n OpenRouterRuntimeOptions,\n RuntimeFunctionToolCall,\n RuntimeFunctionToolDefinition,\n RuntimeFunctionToolUsage,\n RuntimeRequest\n} from \"../types/public\";\nimport { isRecord } from \"../utils/json\";\n\nexport function extractChatFunctionCalls(response: unknown): RuntimeFunctionToolCall[] {\n const record = isRecord(response) ? response : {};\n const choice = Array.isArray(record.choices) && isRecord(record.choices[0]) ? record.choices[0] : {};\n const message = isRecord(choice.message) ? choice.message : {};\n const calls = Array.isArray(message.tool_calls) ? message.tool_calls : [];\n return calls.flatMap((call) => {\n if (!isRecord(call) || call.type !== \"function\" || !isRecord(call.function)) return [];\n const name = typeof call.function.name === \"string\" ? call.function.name : undefined;\n if (!name) return [];\n return [\n {\n name,\n callId: typeof call.id === \"string\" ? call.id : name,\n args: call.function.arguments\n }\n ];\n });\n}\n\nexport function extractResponsesFunctionCalls(response: unknown): RuntimeFunctionToolCall[] {\n const record = isRecord(response) ? response : {};\n const output = Array.isArray(record.output) ? record.output : [];\n return output.flatMap((item) => {\n if (!isRecord(item) || item.type !== \"function_call\") return [];\n const name = typeof item.name === \"string\" ? item.name : undefined;\n if (!name) return [];\n return [\n {\n name,\n callId: typeof item.call_id === \"string\" ? item.call_id : typeof item.id === \"string\" ? item.id : name,\n args: item.arguments\n }\n ];\n });\n}\n\nexport async function executeFunctionCalls(params: {\n calls: RuntimeFunctionToolCall[];\n request: RuntimeRequest;\n definitions: RuntimeFunctionToolDefinition[] | undefined;\n options: OpenRouterRuntimeOptions;\n previousUsage: RuntimeFunctionToolUsage[];\n maxFunctionToolCalls: number;\n}): Promise<RuntimeFunctionToolUsage[]> {\n if (params.previousUsage.length + params.calls.length > params.maxFunctionToolCalls) {\n throw new Error(\"maxFunctionToolCalls exceeded.\");\n }\n const results = [];\n for (const call of params.calls) {\n const result = await executeFunctionTool(call, params.request, params.definitions, params.options);\n results.push({\n name: result.name,\n callId: result.callId,\n status: result.status,\n args: parseToolArgs(call.args),\n ...(result.result !== undefined ? { result: result.result } : {}),\n ...(result.error !== undefined ? { error: result.error } : {}),\n ...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {})\n });\n }\n return results;\n}\n","import { sendOpenRouterRequest } from \"../openrouter/http-client\";\nimport { resultToChatToolMessage } from \"../function-tools/tool-messages\";\nimport { normalizeChatResponse } from \"../normalize/normalize-chat-response\";\nimport { validatePostResponse } from \"../policies/post-response-validation\";\nimport { mergeServerTools } from \"./runtime\";\nimport { executeFunctionCalls, extractChatFunctionCalls } from \"./tool-loop\";\nimport type { RuntimeContext } from \"../types/internal\";\nimport type { CompiledOpenRouterRequest, RuntimeFunctionToolUsage, RuntimeRequest } from \"../types/public\";\nimport { isRecord } from \"../utils/json\";\n\nexport async function runChat(\n request: RuntimeRequest,\n compiled: CompiledOpenRouterRequest,\n context: RuntimeContext\n) {\n const maxIterations = request.execution?.maxToolIterations ?? 8;\n const maxFunctionToolCalls = request.execution?.maxFunctionToolCalls ?? 20;\n const functionUsage: RuntimeFunctionToolUsage[] = [];\n let activeCompiled = compiled;\n let response: unknown;\n\n for (let iteration = 0; iteration <= maxIterations; iteration++) {\n response = await sendOpenRouterRequest(\n activeCompiled,\n context.options,\n context.defaults,\n request.execution?.timeoutMs ?? context.defaults.timeoutMs\n );\n const calls = extractChatFunctionCalls(response);\n if (!calls.length) break;\n const results = await executeFunctionCalls({\n calls,\n request,\n definitions: request.functionTools,\n options: context.options,\n previousUsage: functionUsage,\n maxFunctionToolCalls\n });\n functionUsage.push(...results);\n const body = activeCompiled.body;\n const messages = Array.isArray(body.messages) ? [...body.messages] : [];\n const assistantMessage = extractAssistantMessage(response);\n if (assistantMessage) messages.push(assistantMessage);\n messages.push(...results.map(resultToChatToolMessage));\n activeCompiled = { ...activeCompiled, body: { ...body, messages, tool_choice: \"auto\" } };\n }\n\n const model = typeof compiled.body.model === \"string\" ? compiled.body.model : \"\";\n const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);\n const normalized = normalizeChatResponse({\n requestBody: activeCompiled.body,\n response,\n apiMode: \"chat\",\n model,\n warnings: compiled.warnings,\n functionToolUsage: functionUsage,\n ...optional(\"serverTools\", serverTools),\n ...optional(\"metadata\", request.metadata)\n });\n return validatePostResponse(normalized, context.defaults, serverTools);\n}\n\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\n return value === undefined ? {} : { [key]: value };\n}\n\nfunction extractAssistantMessage(response: unknown): Record<string, unknown> | undefined {\n const record = isRecord(response) ? response : {};\n const choice = Array.isArray(record.choices) && isRecord(record.choices[0]) ? record.choices[0] : {};\n const message = isRecord(choice.message) ? choice.message : undefined;\n if (!message) return undefined;\n return message;\n}\n","import { dedupeCitations, extractCitations } from \"./citations\";\nimport { extractImages } from \"./images\";\nimport { extractPatches } from \"./patches\";\nimport { createToolUsage } from \"./tool-usage\";\nimport { normalizeUsage } from \"./usage\";\nimport type {\n RuntimeFunctionToolUsage,\n RuntimeResponse,\n RuntimeServerToolsPolicy,\n RuntimeWarning\n} from \"../types/public\";\nimport { createRuntimeId } from \"../utils/ids\";\nimport { isRecord } from \"../utils/json\";\n\nexport function normalizeResponsesResponse(params: {\n requestBody: unknown;\n response: unknown;\n model: string;\n serverTools?: RuntimeServerToolsPolicy;\n warnings: RuntimeWarning[];\n functionToolUsage?: RuntimeFunctionToolUsage[];\n metadata?: Record<string, unknown>;\n}): RuntimeResponse {\n const record = isRecord(params.response) ? params.response : {};\n const text = extractOutputText(record);\n return {\n id: typeof record.id === \"string\" ? record.id : createRuntimeId(\"orresp\"),\n status: record.status === \"requires_action\" ? \"requires_action\" : \"completed\",\n apiMode: \"responses\",\n model: typeof record.model === \"string\" ? record.model : params.model,\n text,\n citations: dedupeCitations([...extractCitations(params.response), ...extractCitations(text)]),\n images: extractImages(params.response),\n patches: extractPatches(params.response),\n toolUsage: createToolUsage(params.serverTools, params.response, params.functionToolUsage),\n warnings: params.warnings,\n errors: [],\n raw: {\n request: params.requestBody,\n response: params.response\n },\n ...optional(\"usage\", normalizeUsage(record.usage)),\n ...optional(\"finishReason\", typeof record.status === \"string\" ? record.status : undefined),\n ...optional(\"metadata\", params.metadata)\n };\n}\n\nfunction extractOutputText(record: Record<string, unknown>): string {\n if (typeof record.output_text === \"string\") return record.output_text;\n const output = Array.isArray(record.output) ? record.output : [];\n const chunks: string[] = [];\n for (const item of output) {\n if (!isRecord(item)) continue;\n if (typeof item.text === \"string\") chunks.push(item.text);\n const content = Array.isArray(item.content) ? item.content : [];\n for (const part of content) {\n if (isRecord(part) && typeof part.text === \"string\") chunks.push(part.text);\n }\n }\n return chunks.join(\"\");\n}\n\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\n return value === undefined ? {} : { [key]: value };\n}\n","import { resultToResponsesInput } from \"../function-tools/tool-messages\";\nimport { normalizeResponsesResponse } from \"../normalize/normalize-responses-response\";\nimport { sendOpenRouterRequest } from \"../openrouter/http-client\";\nimport { validatePostResponse } from \"../policies/post-response-validation\";\nimport { mergeServerTools } from \"./runtime\";\nimport { executeFunctionCalls, extractResponsesFunctionCalls } from \"./tool-loop\";\nimport type { RuntimeContext } from \"../types/internal\";\nimport type { CompiledOpenRouterRequest, RuntimeFunctionToolUsage, RuntimeRequest } from \"../types/public\";\nimport { isRecord } from \"../utils/json\";\n\nexport async function runResponses(\n request: RuntimeRequest,\n compiled: CompiledOpenRouterRequest,\n context: RuntimeContext\n) {\n const maxIterations = request.execution?.maxToolIterations ?? 8;\n const maxFunctionToolCalls = request.execution?.maxFunctionToolCalls ?? 20;\n const functionUsage: RuntimeFunctionToolUsage[] = [];\n let activeCompiled = compiled;\n let response: unknown;\n\n for (let iteration = 0; iteration <= maxIterations; iteration++) {\n response = await sendOpenRouterRequest(\n activeCompiled,\n context.options,\n context.defaults,\n request.execution?.timeoutMs ?? context.defaults.timeoutMs\n );\n const calls = extractResponsesFunctionCalls(response);\n if (!calls.length) break;\n const results = await executeFunctionCalls({\n calls,\n request,\n definitions: request.functionTools,\n options: context.options,\n previousUsage: functionUsage,\n maxFunctionToolCalls\n });\n functionUsage.push(...results);\n activeCompiled = {\n ...activeCompiled,\n body: {\n ...activeCompiled.body,\n tool_choice: \"auto\",\n previous_response_id: isRecord(response) && typeof response.id === \"string\" ? response.id : undefined,\n input: results.map(resultToResponsesInput)\n }\n };\n }\n\n const model = typeof compiled.body.model === \"string\" ? compiled.body.model : \"\";\n const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);\n const normalized = normalizeResponsesResponse({\n requestBody: activeCompiled.body,\n response,\n model,\n warnings: compiled.warnings,\n functionToolUsage: functionUsage,\n ...optional(\"serverTools\", serverTools),\n ...optional(\"metadata\", request.metadata)\n });\n return validatePostResponse(normalized, context.defaults, serverTools);\n}\n\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\n return value === undefined ? {} : { [key]: value };\n}\n","import { RuntimeConfigError } from \"../openrouter/errors\";\n\n/**\n * Reserved streaming entrypoint. Intentionally separate from `run()`.\n * Calling this today throws — use `run()` for non-streaming execution.\n */\nexport async function* executeStreamingChatNotImplemented(): AsyncIterable<never> {\n throw new RuntimeConfigError(\n \"STREAMING_NOT_IMPLEMENTED\",\n \"executeStreamingChat() is reserved and not implemented yet. Use runtime.run() for non-streaming execution.\"\n );\n}\n","import { resolveDefaults, resolveRuntimeOptions } from \"../config/defaults\";\nimport { OpenRouterHttpError, RuntimeConfigError } from \"../openrouter/errors\";\nimport { runChat } from \"./run-chat\";\nimport { runResponses } from \"./run-responses\";\nimport { compileRuntimeRequest } from \"./runtime\";\nimport { executeStreamingChatNotImplemented } from \"./streaming\";\nimport type { OpenRouterRuntime, OpenRouterRuntimeOptions, RuntimeRequest, RuntimeResponse } from \"../types/public\";\nimport type { RuntimeContext } from \"../types/internal\";\nimport { createRuntimeId } from \"../utils/ids\";\n\nexport function createOpenRouterRuntime(options: OpenRouterRuntimeOptions): OpenRouterRuntime {\n const resolvedOptions = resolveRuntimeOptions(options);\n const defaults = resolveDefaults(options);\n const context: RuntimeContext = { options: resolvedOptions, defaults };\n\n return {\n async run(request: RuntimeRequest): Promise<RuntimeResponse> {\n const requestWithId = { ...request, id: request.id ?? createRuntimeId() };\n try {\n resolvedOptions.logger?.info?.(\"runtime.request.started\", {\n requestId: requestWithId.id,\n streaming: false,\n entrypoint: \"run\"\n });\n await resolvedOptions.hooks?.beforeCompile?.(requestWithId);\n const compiled = compileRuntimeRequest(requestWithId, defaults, resolvedOptions, { streaming: false });\n await resolvedOptions.hooks?.afterCompile?.(compiled);\n resolvedOptions.logger?.debug?.(\"runtime.request.compiled\", {\n requestId: requestWithId.id,\n apiMode: compiled.apiMode,\n streaming: false,\n bodyStream: compiled.body.stream,\n streamingWarnings: compiled.warnings\n .filter((warning) => warning.code.includes(\"STREAMING\") || warning.code.includes(\"ADVISOR_STREAMING\"))\n .map((warning) => warning.code)\n });\n await resolvedOptions.hooks?.beforeOpenRouterRequest?.(compiled);\n const response = compiled.apiMode === \"chat\"\n ? await runChat(requestWithId, compiled, context)\n : await runResponses(requestWithId, compiled, context);\n await resolvedOptions.hooks?.afterOpenRouterResponse?.(response.raw.response);\n resolvedOptions.logger?.info?.(\"runtime.response.normalized\", {\n requestId: requestWithId.id,\n status: response.status,\n streaming: false\n });\n return response;\n } catch (error) {\n return errorResponse(requestWithId, error);\n }\n },\n executeStreamingChat(request: RuntimeRequest) {\n resolvedOptions.logger?.warn?.(\"runtime.executeStreamingChat.called\", {\n requestId: request.id,\n streaming: true,\n entrypoint: \"executeStreamingChat\",\n implemented: false\n });\n return executeStreamingChatNotImplemented();\n }\n };\n\n function errorResponse(request: RuntimeRequest, error: unknown): RuntimeResponse {\n const runtimeError = normalizeError(error);\n if (error instanceof RuntimeConfigError && defaults.onPolicyViolation === \"throw\") throw error;\n return {\n id: request.id ?? createRuntimeId(\"orerr\"),\n status: \"failed\",\n apiMode: request.apiMode === \"responses\" ? \"responses\" : \"chat\",\n model: request.model ?? resolvedOptions.defaultModel ?? \"\",\n text: \"\",\n citations: [],\n images: [],\n patches: [],\n toolUsage: {\n serverTools: {\n webSearch: { requested: false, required: false, used: false },\n webFetch: { requested: false, required: false, used: false },\n datetime: { requested: false, required: false, used: false },\n imageGeneration: { requested: false, required: false, used: false },\n applyPatch: { requested: false, required: false, used: false },\n fusion: { requested: false, required: false, used: false },\n advisor: { requested: false, required: false, used: false },\n subagent: { requested: false, required: false, used: false }\n },\n functionTools: []\n },\n warnings: [],\n errors: [runtimeError],\n raw: {\n request,\n response: error instanceof OpenRouterHttpError ? error.body : undefined\n },\n ...(request.metadata ? { metadata: request.metadata } : {})\n };\n }\n}\n\nfunction normalizeError(error: unknown) {\n if (error instanceof RuntimeConfigError) {\n return {\n code: error.code,\n message: error.message,\n source: \"validation\" as const,\n ...optionalErrorField(\"operatorHint\", operatorHintFor(error.code)),\n details: error.details\n };\n }\n if (error instanceof OpenRouterHttpError) {\n return {\n code: error.code,\n message: error.message,\n source: \"openrouter\" as const,\n retryable: error.retryable,\n ...optionalErrorField(\"operatorHint\", operatorHintFor(error.code)),\n details: {\n providerAttempts: error.providerAttempts,\n ...(error.body === undefined ? {} : { response: error.body })\n }\n };\n }\n return {\n code: \"RUNTIME_ERROR\",\n message: error instanceof Error ? error.message : String(error),\n source: \"runtime\" as const\n };\n}\n\nfunction optionalErrorField<T>(key: string, value: T | undefined): Record<string, T> {\n return value === undefined ? {} : { [key]: value };\n}\n\nfunction operatorHintFor(code: string): string | undefined {\n switch (code) {\n case \"OPENROUTER_API_KEY_MISSING\":\n return \"Set OPENROUTER_API_KEY or OPEN_ROUTER_KEY, or pass apiKey when creating the runtime.\";\n case \"PROVIDER_AUTH_FAILED\":\n return \"Check that the OpenRouter API key is present, valid, and authorized for this route.\";\n case \"PROVIDER_RATE_LIMITED\":\n return \"Retry after the provider rate limit resets or reduce request concurrency.\";\n case \"PROVIDER_QUOTA_EXCEEDED\":\n return \"Check provider billing, credits, quota, and project limits.\";\n case \"PROVIDER_MODEL_NOT_FOUND\":\n return \"Verify the model id and whether it is available through OpenRouter for this account.\";\n case \"PROVIDER_GATEWAY_UNREACHABLE\":\n return \"Retry later; the provider gateway was unreachable or timed out.\";\n default:\n return undefined;\n }\n}\n"],"mappings":"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","names":["visit","visit","stringValue","visit","optional","optional","enabled","optional","optional","optional"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/console-logger.ts","../src/config/defaults.ts","../src/openrouter/errors.ts","../src/utils/delay.ts","../src/openrouter/http-client.ts","../src/utils/json.ts","../src/function-tools/tool-messages.ts","../src/normalize/citations.ts","../src/normalize/images.ts","../src/normalize/patches.ts","../src/normalize/tool-usage.ts","../src/normalize/usage.ts","../src/utils/ids.ts","../src/normalize/normalize-chat-response.ts","../src/policies/post-response-validation.ts","../src/config/normalize-model.ts","../src/config/validate-runtime-request.ts","../src/openrouter/endpoints.ts","../src/openrouter/headers.ts","../src/tools/nested-tools.ts","../src/tools/server-tools.ts","../src/utils/provider-metadata.ts","../src/runtime/runtime.ts","../src/function-tools/registry.ts","../src/function-tools/parse-tool-args.ts","../src/function-tools/execute-function-tool.ts","../src/runtime/tool-loop.ts","../src/runtime/run-chat.ts","../src/normalize/normalize-responses-response.ts","../src/runtime/run-responses.ts","../src/openrouter/stream-client.ts","../src/runtime/streaming.ts","../src/runtime/create-runtime.ts"],"sourcesContent":["import type { RuntimeLogger } from \"../types/public\";\r\n\r\nconst TRUTHY = new Set([\"1\", \"true\", \"yes\", \"on\"]);\r\n\r\nexport function isRuntimeLoggingEnabled(\r\n env: Record<string, string | undefined> | undefined = typeof process === \"undefined\" ? undefined : process.env\r\n): boolean {\r\n const value = env?.OPENROUTER_RUNTIME_LOGS?.trim().toLowerCase();\r\n return value !== undefined && TRUTHY.has(value);\r\n}\r\n\r\nexport function createConsoleLogger(): RuntimeLogger {\r\n return {\r\n debug(event, data) {\r\n console.debug(`[openrouter-runtime] ${event}`, data ?? \"\");\r\n },\r\n info(event, data) {\r\n console.info(`[openrouter-runtime] ${event}`, data ?? \"\");\r\n },\r\n warn(event, data) {\r\n console.warn(`[openrouter-runtime] ${event}`, data ?? \"\");\r\n },\r\n error(event, data) {\r\n console.error(`[openrouter-runtime] ${event}`, data ?? \"\");\r\n }\r\n };\r\n}\r\n","import type { OpenRouterRuntimeOptions } from \"../types/public\";\r\nimport type { RequiredRuntimeDefaults, RequiredRuntimeOptions } from \"../types/internal\";\r\nimport { createConsoleLogger, isRuntimeLoggingEnabled } from \"../utils/console-logger\";\r\n\r\nexport function resolveRuntimeOptions(options: OpenRouterRuntimeOptions): RequiredRuntimeOptions {\r\n const logger = options.logger ?? (isRuntimeLoggingEnabled() ? createConsoleLogger() : undefined);\r\n return {\r\n ...options,\r\n apiKey: options.apiKey ?? readOpenRouterApiKeyFromEnv() ?? \"\",\r\n baseUrl: options.baseUrl ?? \"https://openrouter.ai/api/v1\",\r\n defaultHeaders: options.defaultHeaders ?? {},\r\n fetch: options.fetch ?? globalThis.fetch,\r\n ...(logger ? { logger } : {})\r\n };\r\n}\r\n\r\nexport function resolveDefaults(options: OpenRouterRuntimeOptions): RequiredRuntimeDefaults {\r\n const retry = options.defaults?.retry;\r\n return {\r\n ...options.defaults,\r\n apiMode: options.defaults?.apiMode ?? \"auto\",\r\n timeoutMs: options.defaults?.timeoutMs ?? 120_000,\r\n retry: {\r\n enabled: retry?.enabled ?? true,\r\n maxAttempts: retry?.maxAttempts ?? options.defaults?.maxRetries ?? 3,\r\n baseDelayMs: retry?.baseDelayMs ?? 500,\r\n maxDelayMs: retry?.maxDelayMs ?? 5_000\r\n },\r\n requireCitationsWhenSearchUsed: options.defaults?.requireCitationsWhenSearchUsed ?? true,\r\n onPolicyViolation: options.defaults?.onPolicyViolation ?? \"return_error\",\r\n serverTools: options.defaults?.serverTools ?? {\r\n datetime: {\r\n mode: \"allowed\",\r\n timezone: \"UTC\"\r\n }\r\n }\r\n };\r\n}\r\n\r\nfunction readOpenRouterApiKeyFromEnv(): string | undefined {\r\n const env = typeof process === \"undefined\" ? undefined : process.env;\r\n return env?.OPENROUTER_API_KEY || env?.OPEN_ROUTER_KEY;\r\n}\r\n","export class RuntimeConfigError extends Error {\r\n constructor(\r\n public readonly code: string,\r\n message: string,\r\n public readonly details?: unknown\r\n ) {\r\n super(message);\r\n this.name = \"RuntimeConfigError\";\r\n }\r\n}\r\n\r\nexport type ProviderFailureCode =\r\n | \"PROVIDER_AUTH_FAILED\"\r\n | \"PROVIDER_RATE_LIMITED\"\r\n | \"PROVIDER_QUOTA_EXCEEDED\"\r\n | \"PROVIDER_MODEL_NOT_FOUND\"\r\n | \"PROVIDER_GATEWAY_UNREACHABLE\"\r\n | \"PROVIDER_REQUEST_FAILED\";\r\n\r\nexport interface ProviderAttemptError {\r\n provider: string;\r\n modelId?: string;\r\n httpStatus?: number;\r\n code: ProviderFailureCode;\r\n message: string;\r\n retryable?: boolean;\r\n}\r\n\r\nexport class OpenRouterHttpError extends Error {\r\n constructor(\r\n public readonly status: number,\r\n public readonly code: ProviderFailureCode,\r\n message: string,\r\n public readonly body?: unknown,\r\n public readonly retryable = false,\r\n public readonly providerAttempts: ProviderAttemptError[] = []\r\n ) {\r\n super(message);\r\n this.name = \"OpenRouterHttpError\";\r\n }\r\n}\r\n","export function delay(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nexport function retryDelay(attempt: number, baseDelayMs: number, maxDelayMs: number): number {\r\n const exponential = Math.min(maxDelayMs, baseDelayMs * 2 ** Math.max(0, attempt - 1));\r\n const jitter = Math.floor(Math.random() * Math.min(250, exponential));\r\n return exponential + jitter;\r\n}\r\n","import { delay, retryDelay } from \"../utils/delay\";\r\nimport { OpenRouterHttpError, type ProviderAttemptError, type ProviderFailureCode } from \"./errors\";\r\nimport type { CompiledOpenRouterRequest } from \"../types/public\";\r\nimport type { RequiredRuntimeDefaults, RequiredRuntimeOptions } from \"../types/internal\";\r\n\r\nexport async function sendOpenRouterRequest(\r\n compiled: CompiledOpenRouterRequest,\r\n options: RequiredRuntimeOptions,\r\n defaults: RequiredRuntimeDefaults,\r\n timeoutMs: number\r\n): Promise<unknown> {\r\n const attempts = defaults.retry.enabled ? defaults.retry.maxAttempts : 1;\r\n let lastError: unknown;\r\n const providerAttempts: ProviderAttemptError[] = [];\r\n for (let attempt = 1; attempt <= attempts; attempt++) {\r\n try {\r\n return await sendOnce(compiled, options, timeoutMs);\r\n } catch (error) {\r\n lastError = error;\r\n if (error instanceof OpenRouterHttpError) {\r\n const providerAttempt = toProviderAttempt(error, compiled);\r\n providerAttempts.push(providerAttempt);\r\n options.logger?.warn?.(\"openrouter.provider_attempt.failed\", {\r\n ...providerAttempt,\r\n attempt,\r\n maxAttempts: attempts\r\n });\r\n }\r\n const retryable = error instanceof OpenRouterHttpError ? error.retryable : true;\r\n if (!retryable || attempt >= attempts) {\r\n if (error instanceof OpenRouterHttpError) {\r\n throw new OpenRouterHttpError(\r\n error.status,\r\n error.code,\r\n error.message,\r\n error.body,\r\n error.retryable,\r\n providerAttempts\r\n );\r\n }\r\n throw error;\r\n }\r\n await delay(retryDelay(attempt, defaults.retry.baseDelayMs, defaults.retry.maxDelayMs));\r\n }\r\n }\r\n throw lastError;\r\n}\r\n\r\nasync function sendOnce(\r\n compiled: CompiledOpenRouterRequest,\r\n options: RequiredRuntimeOptions,\r\n timeoutMs: number\r\n): Promise<unknown> {\r\n const controller = new AbortController();\r\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\r\n try {\r\n const response = await options.fetch(compiled.url, {\r\n method: \"POST\",\r\n headers: compiled.headers,\r\n body: JSON.stringify(compiled.body),\r\n signal: controller.signal\r\n });\r\n const text = await response.text();\r\n const body = text ? parseBody(text) : undefined;\r\n if (!response.ok) {\r\n const message = extractMessage(body) ?? `OpenRouter request failed with status ${response.status}.`;\r\n throw new OpenRouterHttpError(\r\n response.status,\r\n classifyProviderFailure(response.status, message, body),\r\n message,\r\n body,\r\n isRetryableStatus(response.status)\r\n );\r\n }\r\n return body;\r\n } catch (error) {\r\n if (error instanceof OpenRouterHttpError) throw error;\r\n if (error instanceof Error && error.name === \"AbortError\") {\r\n throw new OpenRouterHttpError(408, \"PROVIDER_GATEWAY_UNREACHABLE\", \"OpenRouter request timed out.\", undefined, true);\r\n }\r\n throw new OpenRouterHttpError(\r\n 503,\r\n \"PROVIDER_GATEWAY_UNREACHABLE\",\r\n error instanceof Error ? error.message : \"OpenRouter request failed before receiving a response.\",\r\n undefined,\r\n true\r\n );\r\n } finally {\r\n clearTimeout(timeout);\r\n }\r\n}\r\n\r\nfunction parseBody(text: string): unknown {\r\n try {\r\n return JSON.parse(text);\r\n } catch {\r\n return text;\r\n }\r\n}\r\n\r\nfunction extractMessage(body: unknown): string | undefined {\r\n if (typeof body !== \"object\" || body === null) return undefined;\r\n const record = body as Record<string, unknown>;\r\n const error = record.error;\r\n if (typeof error === \"object\" && error !== null && typeof (error as Record<string, unknown>).message === \"string\") {\r\n return (error as Record<string, string>).message;\r\n }\r\n return typeof record.message === \"string\" ? record.message : undefined;\r\n}\r\n\r\nfunction toProviderAttempt(error: OpenRouterHttpError, compiled: CompiledOpenRouterRequest): ProviderAttemptError {\r\n const modelId = typeof compiled.body.model === \"string\" ? compiled.body.model : undefined;\r\n return {\r\n provider: \"openrouter\",\r\n ...(modelId ? { modelId } : {}),\r\n httpStatus: error.status,\r\n code: error.code,\r\n message: error.message,\r\n retryable: error.retryable\r\n };\r\n}\r\n\r\nfunction classifyProviderFailure(status: number, message: string, body: unknown): ProviderFailureCode {\r\n const haystack = `${message} ${JSON.stringify(body ?? \"\")}`.toLowerCase();\r\n if (status === 401 || status === 403) return \"PROVIDER_AUTH_FAILED\";\r\n if (status === 402 || mentionsQuota(haystack)) return \"PROVIDER_QUOTA_EXCEEDED\";\r\n if (status === 404 || mentionsMissingModel(haystack)) return \"PROVIDER_MODEL_NOT_FOUND\";\r\n if (status === 429) return \"PROVIDER_RATE_LIMITED\";\r\n if (status === 408 || status >= 500) return \"PROVIDER_GATEWAY_UNREACHABLE\";\r\n return \"PROVIDER_REQUEST_FAILED\";\r\n}\r\n\r\nfunction mentionsQuota(text: string): boolean {\r\n return /\\b(quota|credit|credits|billing|balance|insufficient funds|insufficient credit)\\b/.test(text);\r\n}\r\n\r\nfunction mentionsMissingModel(text: string): boolean {\r\n return (\r\n /\\bmodel\\b.*\\b(not found|not a valid|invalid|unavailable)\\b/.test(text) ||\r\n /\\b(no endpoints found|not a valid model id)\\b/.test(text)\r\n );\r\n}\r\n\r\nfunction isRetryableStatus(status: number): boolean {\r\n return status === 429 || status === 500 || status === 502 || status === 503 || status === 504;\r\n}\r\n","export function parseJsonMaybe(value: unknown): unknown {\r\n if (typeof value !== \"string\") return value;\r\n if (value.trim() === \"\") return {};\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n}\r\n\r\nexport function stringifyToolResult(value: unknown): string {\r\n if (typeof value === \"string\") return value;\r\n return JSON.stringify(value);\r\n}\r\n\r\nexport function isRecord(value: unknown): value is Record<string, unknown> {\r\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n}\r\n","import { stringifyToolResult } from \"../utils/json\";\r\nimport type { RuntimeFunctionToolResult } from \"../types/public\";\r\n\r\nexport function resultToChatToolMessage(result: RuntimeFunctionToolResult): Record<string, unknown> {\r\n return {\r\n role: \"tool\",\r\n tool_call_id: result.callId,\r\n name: result.name,\r\n content: stringifyToolResult(result.status === \"completed\" ? result.result : { error: result.error })\r\n };\r\n}\r\n\r\nexport function resultToResponsesInput(result: RuntimeFunctionToolResult): Record<string, unknown> {\r\n return {\r\n type: \"function_call_output\",\r\n call_id: result.callId,\r\n output: stringifyToolResult(result.status === \"completed\" ? result.result : { error: result.error })\r\n };\r\n}\r\n","import type { RuntimeCitation } from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport function extractCitations(value: unknown): RuntimeCitation[] {\r\n const citations: RuntimeCitation[] = [];\r\n if (typeof value === \"string\") {\r\n return extractCitationsFromText(value);\r\n }\r\n visit(value, (item) => {\r\n const url = pickString(item, [\"url\", \"uri\"]);\r\n if (!url) return;\r\n citations.push({\r\n type: \"url\",\r\n url,\r\n sourceProvider: \"openrouter\",\r\n raw: item,\r\n ...optional(\"title\", pickString(item, [\"title\", \"name\"])),\r\n ...optional(\"excerpt\", pickString(item, [\"excerpt\", \"content\", \"text\"])),\r\n ...optional(\"startIndex\", pickNumber(item, [\"start_index\", \"startIndex\"])),\r\n ...optional(\"endIndex\", pickNumber(item, [\"end_index\", \"endIndex\"]))\r\n });\r\n });\r\n return dedupeCitations(citations);\r\n}\r\n\r\nexport function extractCitationsFromText(text: string): RuntimeCitation[] {\r\n const citations: RuntimeCitation[] = [];\r\n const markdownLinkPattern = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)\\s]+)\\)/g;\r\n for (const match of text.matchAll(markdownLinkPattern)) {\r\n const title = match[1];\r\n const url = cleanUrl(match[2]);\r\n const startIndex = match.index;\r\n citations.push({\r\n type: \"url\",\r\n url,\r\n sourceProvider: \"openrouter\",\r\n raw: match[0],\r\n ...(title ? { title } : {}),\r\n ...(startIndex !== undefined ? { startIndex, endIndex: startIndex + match[0].length } : {})\r\n });\r\n }\r\n\r\n const urlPattern = /https?:\\/\\/[^\\s)]+/g;\r\n for (const match of text.matchAll(urlPattern)) {\r\n const url = cleanUrl(match[0]);\r\n const startIndex = match.index;\r\n citations.push({\r\n type: \"url\",\r\n url,\r\n sourceProvider: \"openrouter\",\r\n raw: match[0],\r\n ...(startIndex !== undefined ? { startIndex, endIndex: startIndex + match[0].length } : {})\r\n });\r\n }\r\n\r\n return dedupeCitations(citations);\r\n}\r\n\r\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\r\n return value === undefined ? {} : { [key]: value };\r\n}\r\n\r\nfunction visit(value: unknown, onCitation: (record: Record<string, unknown>) => void): void {\r\n if (Array.isArray(value)) {\r\n for (const item of value) visit(item, onCitation);\r\n return;\r\n }\r\n if (!isRecord(value)) return;\r\n if (value.type === \"url_citation\" || value.type === \"citation\" || value.url || value.uri) onCitation(value);\r\n for (const key of [\"annotations\", \"citations\"]) visit(value[key], onCitation);\r\n}\r\n\r\nfunction pickString(record: Record<string, unknown>, keys: string[]): string | undefined {\r\n for (const key of keys) if (typeof record[key] === \"string\") return record[key];\r\n return undefined;\r\n}\r\n\r\nfunction pickNumber(record: Record<string, unknown>, keys: string[]): number | undefined {\r\n for (const key of keys) if (typeof record[key] === \"number\") return record[key];\r\n return undefined;\r\n}\r\n\r\nexport function dedupeCitations(citations: RuntimeCitation[]): RuntimeCitation[] {\r\n const seen = new Set<string>();\r\n return citations.filter((citation) => {\r\n const key = citation.url;\r\n if (seen.has(key)) return false;\r\n seen.add(key);\r\n return true;\r\n });\r\n}\r\n\r\nfunction cleanUrl(url: string | undefined): string {\r\n return (url ?? \"\").replace(/[.,;:!?]+$/, \"\");\r\n}\r\n","import type { RuntimeGeneratedImage } from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport function extractImages(value: unknown): RuntimeGeneratedImage[] {\r\n const images: RuntimeGeneratedImage[] = [];\r\n visit(value, (record) => {\r\n const imageUrl = stringValue(record.image_url) ?? stringValue(record.url);\r\n if (imageUrl) images.push({ imageUrl, status: \"ok\", raw: record });\r\n });\r\n return images;\r\n}\r\n\r\nfunction visit(value: unknown, onImage: (record: Record<string, unknown>) => void): void {\r\n if (Array.isArray(value)) {\r\n for (const item of value) visit(item, onImage);\r\n return;\r\n }\r\n if (!isRecord(value)) return;\r\n if (value.type === \"image\" || value.type === \"image_generation_call\" || value.image_url || value.url) {\r\n if (value.image_url || value.type === \"image_generation_call\") onImage(value);\r\n }\r\n for (const nested of Object.values(value)) visit(nested, onImage);\r\n}\r\n\r\nfunction stringValue(value: unknown): string | undefined {\r\n if (typeof value === \"string\") return value;\r\n if (isRecord(value) && typeof value.url === \"string\") return value.url;\r\n return undefined;\r\n}\r\n","import type { RuntimePatchProposal } from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport function extractPatches(value: unknown): RuntimePatchProposal[] {\r\n const patches: RuntimePatchProposal[] = [];\r\n visit(value, (record) => {\r\n const operation = normalizeOperation(record);\r\n if (!operation) return;\r\n patches.push({\r\n callId: stringValue(record.call_id) ?? stringValue(record.id) ?? \"patch_call\",\r\n status: record.status === \"failed\" ? \"failed\" : \"completed\",\r\n operation,\r\n raw: record\r\n });\r\n });\r\n return patches;\r\n}\r\n\r\nfunction visit(value: unknown, onPatch: (record: Record<string, unknown>) => void): void {\r\n if (Array.isArray(value)) {\r\n for (const item of value) visit(item, onPatch);\r\n return;\r\n }\r\n if (!isRecord(value)) return;\r\n if (value.type === \"apply_patch_call\" || value.type === \"patch\" || value.operation) onPatch(value);\r\n for (const nested of Object.values(value)) visit(nested, onPatch);\r\n}\r\n\r\nfunction normalizeOperation(record: Record<string, unknown>): RuntimePatchProposal[\"operation\"] | undefined {\r\n const operation = isRecord(record.operation) ? record.operation : record;\r\n const type = stringValue(operation.type) ?? stringValue(operation.operation);\r\n const path = stringValue(operation.path) ?? stringValue(operation.file);\r\n if (!type || !path) return undefined;\r\n if (type === \"delete_file\") return { type, path };\r\n if (type === \"create_file\" || type === \"update_file\") {\r\n return { type, path, diff: stringValue(operation.diff) ?? stringValue(operation.patch) ?? \"\" };\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction stringValue(value: unknown): string | undefined {\r\n return typeof value === \"string\" ? value : undefined;\r\n}\r\n","import type {\r\n RuntimeFunctionToolUsage,\r\n RuntimeServerToolsPolicy,\r\n RuntimeToolUsage,\r\n ServerToolKey\r\n} from \"../types/public\";\r\n\r\nconst serverToolKeys: ServerToolKey[] = [\r\n \"webSearch\",\r\n \"webFetch\",\r\n \"datetime\",\r\n \"imageGeneration\",\r\n \"applyPatch\",\r\n \"fusion\",\r\n \"advisor\",\r\n \"subagent\"\r\n];\r\n\r\nconst rawTypeToKey: Record<string, ServerToolKey> = {\r\n \"openrouter:web_search\": \"webSearch\",\r\n web_search: \"webSearch\",\r\n webSearch: \"webSearch\",\r\n \"openrouter:web_fetch\": \"webFetch\",\r\n web_fetch: \"webFetch\",\r\n webFetch: \"webFetch\",\r\n \"openrouter:datetime\": \"datetime\",\r\n datetime: \"datetime\",\r\n \"openrouter:image_generation\": \"imageGeneration\",\r\n image_generation: \"imageGeneration\",\r\n imageGeneration: \"imageGeneration\",\r\n \"openrouter:apply_patch\": \"applyPatch\",\r\n apply_patch: \"applyPatch\",\r\n applyPatch: \"applyPatch\",\r\n \"openrouter:fusion\": \"fusion\",\r\n fusion: \"fusion\",\r\n \"openrouter:advisor\": \"advisor\",\r\n advisor: \"advisor\",\r\n \"openrouter:subagent\": \"subagent\",\r\n subagent: \"subagent\"\r\n};\r\n\r\nexport function createToolUsage(\r\n policy: RuntimeServerToolsPolicy | undefined,\r\n raw: unknown,\r\n functionTools: RuntimeFunctionToolUsage[] = []\r\n): RuntimeToolUsage {\r\n const counts = detectServerToolCounts(raw);\r\n const serverTools = Object.fromEntries(\r\n serverToolKeys.map((key) => {\r\n const item = policyValue(policy, key);\r\n const requested = Array.isArray(item) ? item.some((x) => x.mode !== \"disabled\") : !!item && item.mode !== \"disabled\";\r\n const required = Array.isArray(item) ? item.some((x) => x.mode === \"required\") : !!item && item.mode === \"required\";\r\n return [\r\n key,\r\n {\r\n requested,\r\n required,\r\n used: (counts[key] ?? 0) > 0,\r\n callCount: counts[key] ?? 0\r\n }\r\n ];\r\n })\r\n ) as RuntimeToolUsage[\"serverTools\"];\r\n return { serverTools, functionTools };\r\n}\r\n\r\nfunction policyValue(policy: RuntimeServerToolsPolicy | undefined, key: ServerToolKey) {\r\n return policy?.[key];\r\n}\r\n\r\nfunction detectServerToolCounts(raw: unknown): Partial<Record<ServerToolKey, number>> {\r\n const counts: Partial<Record<ServerToolKey, number>> = {};\r\n visit(raw, (type) => {\r\n const key = rawTypeToKey[type];\r\n if (key) counts[key] = (counts[key] ?? 0) + 1;\r\n });\r\n return counts;\r\n}\r\n\r\nfunction visit(value: unknown, onType: (type: string) => void): void {\r\n if (Array.isArray(value)) {\r\n for (const item of value) visit(item, onType);\r\n return;\r\n }\r\n if (typeof value !== \"object\" || value === null) return;\r\n const record = value as Record<string, unknown>;\r\n if (typeof record.type === \"string\") onType(record.type);\r\n if (typeof record.name === \"string\") onType(record.name);\r\n for (const nested of Object.values(record)) visit(nested, onType);\r\n}\r\n","import type { RuntimeUsage } from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport function normalizeUsage(usage: unknown): RuntimeUsage | undefined {\r\n if (!isRecord(usage)) return undefined;\r\n const details = isRecord(usage.completion_tokens_details) ? usage.completion_tokens_details : undefined;\r\n return {\r\n raw: usage,\r\n ...optional(\"inputTokens\", numberValue(usage.prompt_tokens) ?? numberValue(usage.input_tokens)),\r\n ...optional(\"outputTokens\", numberValue(usage.completion_tokens) ?? numberValue(usage.output_tokens)),\r\n ...optional(\"totalTokens\", numberValue(usage.total_tokens)),\r\n ...optional(\"reasoningTokens\", numberValue(details?.reasoning_tokens) ?? numberValue(usage.reasoning_tokens)),\r\n ...optional(\"costUsd\", numberValue(usage.cost))\r\n };\r\n}\r\n\r\nfunction numberValue(value: unknown): number | undefined {\r\n return typeof value === \"number\" ? value : undefined;\r\n}\r\n\r\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\r\n return value === undefined ? {} : { [key]: value };\r\n}\r\n","export function createRuntimeId(prefix = \"orun\"): string {\r\n const cryptoObject = globalThis.crypto;\r\n if (cryptoObject?.randomUUID) return `${prefix}_${cryptoObject.randomUUID()}`;\r\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2)}`;\r\n}\r\n","import { dedupeCitations, extractCitations } from \"./citations\";\r\nimport { extractImages } from \"./images\";\r\nimport { extractPatches } from \"./patches\";\r\nimport { createToolUsage } from \"./tool-usage\";\r\nimport { normalizeUsage } from \"./usage\";\r\nimport type {\r\n ResolvedApiMode,\r\n RuntimeFunctionToolUsage,\r\n RuntimeResponse,\r\n RuntimeServerToolsPolicy,\r\n RuntimeWarning\r\n} from \"../types/public\";\r\nimport { createRuntimeId } from \"../utils/ids\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport function normalizeChatResponse(params: {\r\n requestBody: unknown;\r\n response: unknown;\r\n apiMode: ResolvedApiMode;\r\n model: string;\r\n serverTools?: RuntimeServerToolsPolicy;\r\n warnings: RuntimeWarning[];\r\n functionToolUsage?: RuntimeFunctionToolUsage[];\r\n metadata?: Record<string, unknown>;\r\n}): RuntimeResponse {\r\n const responseRecord = isRecord(params.response) ? params.response : {};\r\n const choice = Array.isArray(responseRecord.choices) && isRecord(responseRecord.choices[0]) ? responseRecord.choices[0] : {};\r\n const message = isRecord(choice.message) ? choice.message : {};\r\n const text = normalizeContentToText(message.content);\r\n return {\r\n id: typeof responseRecord.id === \"string\" ? responseRecord.id : createRuntimeId(\"orresp\"),\r\n status: \"completed\",\r\n apiMode: params.apiMode,\r\n model: typeof responseRecord.model === \"string\" ? responseRecord.model : params.model,\r\n text,\r\n citations: dedupeCitations([\r\n ...extractCitations([message.annotations, responseRecord.citations, params.response]),\r\n ...extractCitations(text)\r\n ]),\r\n images: extractImages(params.response),\r\n patches: extractPatches(params.response),\r\n toolUsage: createToolUsage(params.serverTools, params.response, params.functionToolUsage),\r\n warnings: params.warnings,\r\n errors: [],\r\n raw: {\r\n request: params.requestBody,\r\n response: params.response\r\n },\r\n ...optional(\"usage\", normalizeUsage(responseRecord.usage)),\r\n ...optional(\"finishReason\", typeof choice.finish_reason === \"string\" ? choice.finish_reason : undefined),\r\n ...optional(\"metadata\", params.metadata)\r\n };\r\n}\r\n\r\nexport function normalizeContentToText(content: unknown): string {\r\n if (typeof content === \"string\") return content;\r\n if (!Array.isArray(content)) return \"\";\r\n return content\r\n .map((part) => {\r\n if (typeof part === \"string\") return part;\r\n if (isRecord(part) && typeof part.text === \"string\") return part.text;\r\n if (isRecord(part) && typeof part.content === \"string\") return part.content;\r\n return \"\";\r\n })\r\n .filter(Boolean)\r\n .join(\"\");\r\n}\r\n\r\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\r\n return value === undefined ? {} : { [key]: value };\r\n}\r\n","import type { RuntimeDefaults, RuntimeResponse, RuntimeServerToolsPolicy } from \"../types/public\";\r\n\r\nexport async function validatePostResponse(\r\n response: RuntimeResponse,\r\n defaults: RuntimeDefaults,\r\n serverTools?: RuntimeServerToolsPolicy\r\n): Promise<RuntimeResponse> {\r\n const errors = [...response.errors];\r\n const warnings = [...response.warnings];\r\n const webSearchUsage = response.toolUsage.serverTools.webSearch;\r\n if (\r\n webSearchUsage.requested &&\r\n response.citations.length > 0 &&\r\n !webSearchUsage.used\r\n ) {\r\n webSearchUsage.used = true;\r\n webSearchUsage.callCount = Math.max(webSearchUsage.callCount ?? 0, 1);\r\n }\r\n for (const [key, usage] of Object.entries(response.toolUsage.serverTools)) {\r\n if (usage.required && !usage.used) {\r\n const code = `${toScreamingSnake(key)}_REQUIRED_BUT_NOT_USED`;\r\n usage.policyViolation = code;\r\n const violation = { code, message: `${key} was required but no usage evidence was found.` };\r\n if (defaults.onPolicyViolation === \"throw\") {\r\n errors.push({ ...violation, source: \"policy\" });\r\n } else {\r\n warnings.push(violation);\r\n }\r\n }\r\n }\r\n const citationsRequired = serverTools?.webSearch?.requireCitations ?? defaults.requireCitationsWhenSearchUsed;\r\n if (citationsRequired && webSearchUsage.used && response.citations.length === 0) {\r\n const violation = {\r\n code: \"CITATIONS_REQUIRED_BUT_MISSING\",\r\n message: \"Web search was used but no citations were extracted.\"\r\n };\r\n webSearchUsage.policyViolation = webSearchUsage.policyViolation ?? violation.code;\r\n if (defaults.onPolicyViolation === \"throw\") {\r\n errors.push({ ...violation, source: \"policy\" });\r\n } else {\r\n warnings.push(violation);\r\n }\r\n }\r\n return {\r\n ...response,\r\n status: errors.some((error) => error.source === \"policy\") ? \"policy_violation\" : response.status,\r\n errors,\r\n warnings\r\n };\r\n}\r\n\r\nfunction toScreamingSnake(value: string): string {\r\n return value.replace(/[A-Z]/g, (match) => `_${match}`).toUpperCase();\r\n}\r\n","import type { RuntimeServerToolsPolicy, RuntimeWarning } from \"../types/public\";\r\n\r\nexport interface ModelNormalizationResult {\r\n model: string;\r\n warnings: RuntimeWarning[];\r\n impliedServerTools?: Partial<RuntimeServerToolsPolicy>;\r\n}\r\n\r\nexport function normalizeModel(model: string): ModelNormalizationResult {\r\n if (!model.endsWith(\":online\")) {\r\n return { model, warnings: [] };\r\n }\r\n\r\n return {\r\n model: model.slice(0, -\":online\".length),\r\n warnings: [\r\n {\r\n code: \"OPENROUTER_ONLINE_VARIANT_DEPRECATED\",\r\n message: \"The :online model suffix is deprecated. Use serverTools.webSearch instead.\"\r\n }\r\n ],\r\n impliedServerTools: {\r\n webSearch: { mode: \"allowed\" }\r\n }\r\n };\r\n}\r\n","import { RuntimeConfigError } from \"../openrouter/errors\";\r\nimport type {\r\n OpenRouterRuntimeOptions,\r\n ResolvedApiMode,\r\n RuntimeFunctionToolDefinition,\r\n RuntimeRequest,\r\n RuntimeServerToolsPolicy\r\n} from \"../types/public\";\r\n\r\nexport function validateRuntimeRequest(\r\n request: RuntimeRequest,\r\n options: OpenRouterRuntimeOptions,\r\n apiMode: ResolvedApiMode,\r\n model: string,\r\n serverTools: RuntimeServerToolsPolicy | undefined\r\n): void {\r\n if (!options.apiKey) throw new RuntimeConfigError(\"OPENROUTER_API_KEY_MISSING\", \"OpenRouter API key is required.\");\r\n if (!model) throw new RuntimeConfigError(\"MODEL_MISSING\", \"Runtime request must include a model.\");\r\n if (!request.messages?.length && !request.input && !request.prompt) {\r\n throw new RuntimeConfigError(\"INPUT_MISSING\", \"Runtime request must include messages, input, or prompt.\");\r\n }\r\n if (serverTools?.applyPatch?.mode && serverTools.applyPatch.mode !== \"disabled\" && apiMode !== \"responses\") {\r\n throw new RuntimeConfigError(\"APPLY_PATCH_REQUIRES_RESPONSES_API\", \"apply_patch requires the Responses API.\");\r\n }\r\n if (serverTools?.applyPatch?.behavior === \"apply_with_callback\" && !options.patchApplier) {\r\n throw new RuntimeConfigError(\"PATCH_APPLIER_REQUIRED\", \"apply_with_callback requires options.patchApplier.\");\r\n }\r\n validateWebSearch(serverTools);\r\n validateWebFetch(serverTools);\r\n validateDomains(serverTools?.webSearch?.allowedDomains, \"allowedDomains\");\r\n validateDomains(serverTools?.webSearch?.excludedDomains, \"excludedDomains\");\r\n validateDomains(serverTools?.webFetch?.allowedDomains, \"allowedDomains\");\r\n validateDomains(serverTools?.webFetch?.blockedDomains, \"blockedDomains\");\r\n validateFunctionTools(request.functionTools);\r\n validateAdvisorNames(serverTools);\r\n validateToolChoice(request, serverTools);\r\n}\r\n\r\nfunction validateWebSearch(policy?: RuntimeServerToolsPolicy): void {\r\n const search = policy?.webSearch;\r\n if (!search || search.mode === \"disabled\") return;\r\n const maxResults = search.maxResults ?? 5;\r\n const maxTotalResults = search.maxTotalResults ?? 15;\r\n if (maxResults < 1 || maxResults > 25) {\r\n throw new RuntimeConfigError(\"INVALID_WEB_SEARCH_MAX_RESULTS\", \"webSearch.maxResults must be between 1 and 25.\");\r\n }\r\n if (search.engine === \"perplexity\" && maxResults > 20) {\r\n throw new RuntimeConfigError(\"PERPLEXITY_MAX_RESULTS_EXCEEDED\", \"Perplexity search supports at most 20 results.\");\r\n }\r\n if (maxTotalResults < maxResults) {\r\n throw new RuntimeConfigError(\"MAX_TOTAL_RESULTS_LT_MAX_RESULTS\", \"maxTotalResults must be >= maxResults.\");\r\n }\r\n}\r\n\r\nfunction validateWebFetch(policy?: RuntimeServerToolsPolicy): void {\r\n const fetch = policy?.webFetch;\r\n if (!fetch || fetch.mode === \"disabled\") return;\r\n if (fetch.maxUses !== undefined && fetch.maxUses < 1) {\r\n throw new RuntimeConfigError(\"INVALID_WEB_FETCH_MAX_USES\", \"webFetch.maxUses must be >= 1.\");\r\n }\r\n}\r\n\r\nfunction validateDomains(domains: string[] | undefined, field: string): void {\r\n for (const domain of domains ?? []) {\r\n if (/^https?:\\/\\//i.test(domain) || domain.includes(\"/\") || domain.trim() !== domain || domain === \"\") {\r\n throw new RuntimeConfigError(\"INVALID_DOMAIN\", `${field} must contain domains, not URLs.`, { domain });\r\n }\r\n }\r\n}\r\n\r\nfunction validateFunctionTools(tools: RuntimeFunctionToolDefinition[] | undefined): void {\r\n const names = new Set<string>();\r\n for (const tool of tools ?? []) {\r\n if (names.has(tool.name)) {\r\n throw new RuntimeConfigError(\"DUPLICATE_FUNCTION_TOOL\", `Function tool ${tool.name} is defined more than once.`);\r\n }\r\n names.add(tool.name);\r\n }\r\n}\r\n\r\nfunction validateAdvisorNames(policy?: RuntimeServerToolsPolicy): void {\r\n const advisors = Array.isArray(policy?.advisor) ? policy.advisor : policy?.advisor ? [policy.advisor] : [];\r\n const names = new Set<string>();\r\n for (const advisor of advisors) {\r\n if (!advisor.name) continue;\r\n if (names.has(advisor.name)) {\r\n throw new RuntimeConfigError(\"DUPLICATE_ADVISOR_NAME\", `Advisor ${advisor.name} is defined more than once.`);\r\n }\r\n names.add(advisor.name);\r\n }\r\n}\r\n\r\nfunction validateToolChoice(request: RuntimeRequest, policy?: RuntimeServerToolsPolicy): void {\r\n const choice = request.toolChoice;\r\n if (!choice || typeof choice === \"string\") return;\r\n if (choice.type === \"function\") {\r\n if (!request.functionTools?.some((tool) => tool.name === choice.functionName)) {\r\n throw new RuntimeConfigError(\"TOOL_CHOICE_FUNCTION_NOT_ENABLED\", `Function tool ${choice.functionName} is not enabled.`);\r\n }\r\n return;\r\n }\r\n const map = {\r\n web_search: policy?.webSearch,\r\n web_fetch: policy?.webFetch,\r\n datetime: policy?.datetime,\r\n image_generation: policy?.imageGeneration,\r\n apply_patch: policy?.applyPatch,\r\n fusion: policy?.fusion,\r\n advisor: policy?.advisor,\r\n subagent: policy?.subagent\r\n };\r\n const selected = map[choice.serverTool];\r\n const enabled = Array.isArray(selected)\r\n ? selected.some((item) => item.mode !== \"disabled\")\r\n : !!selected && selected.mode !== \"disabled\";\r\n if (!enabled) {\r\n throw new RuntimeConfigError(\"TOOL_CHOICE_SERVER_TOOL_NOT_ENABLED\", `Server tool ${choice.serverTool} is not enabled.`);\r\n }\r\n}\r\n","import type { ResolvedApiMode } from \"../types/public\";\r\n\r\nexport function endpointFor(baseUrl: string, apiMode: ResolvedApiMode): string {\r\n const trimmed = baseUrl.replace(/\\/+$/, \"\");\r\n return apiMode === \"chat\" ? `${trimmed}/chat/completions` : `${trimmed}/responses`;\r\n}\r\n","import type { OpenRouterRuntimeOptions } from \"../types/public\";\r\n\r\nexport function buildHeaders(options: OpenRouterRuntimeOptions, agentId?: string): Record<string, string> {\r\n const requestAppName = agentId?.trim();\r\n return {\r\n \"content-type\": \"application/json\",\r\n authorization: `Bearer ${options.apiKey}`,\r\n ...(options.appAttribution?.siteUrl ? { \"HTTP-Referer\": options.appAttribution.siteUrl } : {}),\r\n ...appTitleHeaders(options.appAttribution?.appName),\r\n ...(options.defaultHeaders ?? {}),\r\n ...(requestAppName ? appTitleHeaders(requestAppName) : {})\r\n };\r\n}\r\n\r\n/** OpenRouter's activity log App column reads these headers. */\r\nfunction appTitleHeaders(name: string | undefined): Record<string, string> {\r\n if (!name) return {};\r\n return {\r\n \"X-Title\": name,\r\n \"X-OpenRouter-Title\": name\r\n };\r\n}\r\n","import { RuntimeConfigError } from \"../openrouter/errors\";\r\nimport type { NestedOpenRouterServerToolPolicy } from \"../types/public\";\r\n\r\nconst allowedNestedTypes = new Set([\r\n \"openrouter:web_search\",\r\n \"openrouter:web_fetch\",\r\n \"openrouter:datetime\",\r\n \"openrouter:image_generation\"\r\n]);\r\n\r\nexport function validateNestedTools(tools?: NestedOpenRouterServerToolPolicy[]): void {\r\n for (const tool of tools ?? []) {\r\n if (!allowedNestedTypes.has(tool.type)) {\r\n throw new RuntimeConfigError(\r\n \"INVALID_NESTED_SERVER_TOOL\",\r\n `Nested server tool ${tool.type} is not allowed.`\r\n );\r\n }\r\n }\r\n}\r\n","import type {\r\n AdvisorPolicy,\r\n ApplyPatchPolicy,\r\n DatetimePolicy,\r\n FusionPolicy,\r\n ImageGenerationPolicy,\r\n RuntimeReasoningConfig,\r\n RuntimeServerToolsPolicy,\r\n SubagentPolicy,\r\n WebFetchPolicy,\r\n WebSearchPolicy\r\n} from \"../types/public\";\r\nimport type { OpenRouterTool } from \"../types/internal\";\r\nimport { validateNestedTools } from \"./nested-tools\";\r\n\r\nfunction cleanParameters(parameters: Record<string, unknown>): Record<string, unknown> {\r\n return Object.fromEntries(Object.entries(parameters).filter(([, value]) => value !== undefined));\r\n}\r\n\r\nfunction enabled(policy?: { mode: string }): boolean {\r\n return !!policy && policy.mode !== \"disabled\";\r\n}\r\n\r\nexport function buildOpenRouterServerTools(\r\n policy?: RuntimeServerToolsPolicy,\r\n fallbackReasoning?: RuntimeReasoningConfig\r\n): OpenRouterTool[] {\r\n const tools: OpenRouterTool[] = [];\r\n const webSearch = buildWebSearchTool(policy?.webSearch);\r\n if (webSearch) tools.push(webSearch);\r\n const webFetch = buildWebFetchTool(policy?.webFetch);\r\n if (webFetch) tools.push(webFetch);\r\n const datetime = buildDatetimeTool(policy?.datetime);\r\n if (datetime) tools.push(datetime);\r\n const image = buildImageGenerationTool(policy?.imageGeneration);\r\n if (image) tools.push(image);\r\n const patch = buildApplyPatchTool(policy?.applyPatch);\r\n if (patch) tools.push(patch);\r\n const fusion = buildFusionTool(policy?.fusion, fallbackReasoning);\r\n if (fusion) tools.push(fusion);\r\n tools.push(...buildAdvisorTools(policy?.advisor, fallbackReasoning));\r\n const subagent = buildSubagentTool(policy?.subagent, fallbackReasoning);\r\n if (subagent) tools.push(subagent);\r\n return tools;\r\n}\r\n\r\nexport function buildWebSearchTool(policy?: WebSearchPolicy): OpenRouterTool | undefined {\r\n if (!enabled(policy)) return undefined;\r\n return {\r\n type: \"openrouter:web_search\",\r\n parameters: cleanParameters({\r\n engine: policy?.engine ?? \"auto\",\r\n max_results: policy?.maxResults ?? 5,\r\n max_total_results: policy?.maxTotalResults ?? 15,\r\n search_context_size: policy?.searchContextSize ?? \"medium\",\r\n allowed_domains: policy?.allowedDomains,\r\n excluded_domains: policy?.excludedDomains,\r\n user_location: policy?.userLocation\r\n })\r\n };\r\n}\r\n\r\nexport function buildWebFetchTool(policy?: WebFetchPolicy): OpenRouterTool | undefined {\r\n if (!enabled(policy)) return undefined;\r\n return {\r\n type: \"openrouter:web_fetch\",\r\n parameters: cleanParameters({\r\n engine: policy?.engine ?? \"auto\",\r\n max_uses: policy?.maxUses ?? 10,\r\n max_content_tokens: policy?.maxContentTokens ?? 50_000,\r\n allowed_domains: policy?.allowedDomains,\r\n blocked_domains: policy?.blockedDomains\r\n })\r\n };\r\n}\r\n\r\nexport function buildDatetimeTool(policy?: DatetimePolicy): OpenRouterTool | undefined {\r\n if (!enabled(policy)) return undefined;\r\n return {\r\n type: \"openrouter:datetime\",\r\n parameters: cleanParameters({ timezone: policy?.timezone ?? \"UTC\" })\r\n };\r\n}\r\n\r\nexport function buildImageGenerationTool(policy?: ImageGenerationPolicy): OpenRouterTool | undefined {\r\n if (!enabled(policy)) return undefined;\r\n return {\r\n type: \"openrouter:image_generation\",\r\n parameters: cleanParameters({\r\n model: policy?.model ?? \"openai/gpt-5-image\",\r\n quality: policy?.quality,\r\n size: policy?.size,\r\n aspect_ratio: policy?.aspectRatio,\r\n background: policy?.background,\r\n output_format: policy?.outputFormat,\r\n output_compression: policy?.outputCompression,\r\n moderation: policy?.moderation\r\n })\r\n };\r\n}\r\n\r\nexport function buildApplyPatchTool(policy?: ApplyPatchPolicy): OpenRouterTool | undefined {\r\n if (!enabled(policy)) return undefined;\r\n return { type: \"openrouter:apply_patch\" };\r\n}\r\n\r\nexport function buildFusionTool(\r\n policy?: FusionPolicy,\r\n fallbackReasoning?: RuntimeReasoningConfig\r\n): OpenRouterTool | undefined {\r\n if (!enabled(policy)) return undefined;\r\n return {\r\n type: \"openrouter:fusion\",\r\n parameters: cleanParameters({\r\n analysis_models: policy?.analysisModels,\r\n model: policy?.judgeModel,\r\n max_tool_calls: policy?.maxToolCalls ?? 8,\r\n max_completion_tokens: policy?.maxCompletionTokens,\r\n reasoning: policy?.reasoning ?? fallbackReasoning,\r\n temperature: policy?.temperature\r\n })\r\n };\r\n}\r\n\r\nexport function buildAdvisorTools(\r\n policy?: AdvisorPolicy | AdvisorPolicy[],\r\n fallbackReasoning?: RuntimeReasoningConfig\r\n): OpenRouterTool[] {\r\n const advisors = Array.isArray(policy) ? policy : policy ? [policy] : [];\r\n return advisors.filter(enabled).map((advisor) => {\r\n validateNestedTools(advisor.tools);\r\n return {\r\n type: \"openrouter:advisor\",\r\n parameters: cleanParameters({\r\n name: advisor.name,\r\n model: advisor.model,\r\n instructions: advisor.instructions,\r\n tools: advisor.tools,\r\n forward_transcript: advisor.forwardTranscript ?? false,\r\n stream: advisor.stream,\r\n max_tool_calls: advisor.maxToolCalls,\r\n max_completion_tokens: advisor.maxCompletionTokens,\r\n reasoning: advisor.reasoning ?? fallbackReasoning,\r\n temperature: advisor.temperature\r\n })\r\n };\r\n });\r\n}\r\n\r\nexport function buildSubagentTool(\r\n policy?: SubagentPolicy,\r\n fallbackReasoning?: RuntimeReasoningConfig\r\n): OpenRouterTool | undefined {\r\n if (!policy || policy.mode === \"disabled\") return undefined;\r\n const subagent = policy;\r\n validateNestedTools(subagent.tools);\r\n return {\r\n type: \"openrouter:subagent\",\r\n parameters: cleanParameters({\r\n model: subagent.model,\r\n instructions: subagent.instructions,\r\n tools: subagent.tools,\r\n max_tool_calls: subagent.maxToolCalls,\r\n max_completion_tokens: subagent.maxCompletionTokens,\r\n reasoning: subagent.reasoning ?? fallbackReasoning,\r\n temperature: subagent.temperature\r\n })\r\n };\r\n}\r\n","export interface ProviderMetadataLimits {\r\n maxPairs: number;\r\n maxKeyLength: number;\r\n maxValueLength: number;\r\n keyPattern?: RegExp;\r\n valuePattern?: RegExp;\r\n}\r\n\r\n/** OpenRouter and OpenAI metadata: 16 pairs, 64-character keys, 512-character values. */\r\nexport const OPENROUTER_METADATA_LIMITS: ProviderMetadataLimits = {\r\n maxPairs: 16,\r\n maxKeyLength: 64,\r\n maxValueLength: 512\r\n};\r\n\r\nconst PROVIDER_RECORD_CHUNK = 256;\r\nconst PROVIDER_RECORD_MAX_CHUNKS = 16;\r\n\r\n/**\r\n * One provider metadata record.\r\n * Callers pass `metadata` and `agentId`. Every provider stores the same `m.0`, `m.1`, ...\r\n * pairs: base64 of the UTF-8 JSON string map, 256 characters per pair, at most 16 pairs.\r\n * `decodeProviderMetadata` restores that map from any provider log.\r\n * `limits` stays on the signature for existing callers. The record uses the strictest\r\n * provider limits, so the pairs do not change between providers.\r\n */\r\nexport function toProviderMetadata(\r\n metadata: Record<string, unknown> | undefined,\r\n agentId: string | undefined,\r\n _limits: ProviderMetadataLimits,\r\n base: Record<string, unknown> | undefined\r\n): Record<string, string> | undefined {\r\n return encodeProviderRecord(collectProviderStrings(metadata, agentId, base));\r\n}\r\n\r\n/** Restores the string map from the `m.0`, `m.1`, ... pairs stored on a provider log. */\r\nexport function decodeProviderMetadata(wire: unknown): Record<string, string> {\r\n if (!isRecord(wire)) return {};\r\n const parts: string[] = [];\r\n for (let index = 0; ; index += 1) {\r\n const chunk = wire[`m.${index}`];\r\n if (typeof chunk !== \"string\") break;\r\n parts.push(chunk);\r\n }\r\n if (!parts.length) return {};\r\n const parsed: unknown = JSON.parse(Buffer.from(parts.join(\"\"), \"base64\").toString(\"utf8\"));\r\n if (!isRecord(parsed)) return {};\r\n const record: Record<string, string> = {};\r\n for (const [key, value] of Object.entries(parsed)) {\r\n if (typeof value === \"string\") record[key] = value;\r\n }\r\n return record;\r\n}\r\n\r\nfunction encodeProviderRecord(map: Record<string, string>): Record<string, string> | undefined {\r\n const keys = Object.keys(map).sort();\r\n if (!keys.length) return undefined;\r\n const ordered: Record<string, string> = {};\r\n for (const key of keys) {\r\n const value = map[key];\r\n if (value !== undefined) ordered[key] = value;\r\n }\r\n const encoded = Buffer.from(JSON.stringify(ordered), \"utf8\").toString(\"base64\");\r\n const chunks = Math.ceil(encoded.length / PROVIDER_RECORD_CHUNK);\r\n if (chunks > PROVIDER_RECORD_MAX_CHUNKS) {\r\n throw new Error(\r\n `METADATA_RECORD_TOO_LARGE: provider metadata is ${encoded.length} base64 characters; the maximum is ${PROVIDER_RECORD_CHUNK * PROVIDER_RECORD_MAX_CHUNKS}.`\r\n );\r\n }\r\n const wire: Record<string, string> = {};\r\n for (let index = 0; index < chunks; index += 1) {\r\n wire[`m.${index}`] = encoded.slice(index * PROVIDER_RECORD_CHUNK, (index + 1) * PROVIDER_RECORD_CHUNK);\r\n }\r\n return wire;\r\n}\r\n\r\nfunction collectProviderStrings(\r\n metadata: Record<string, unknown> | undefined,\r\n agentId: string | undefined,\r\n base: Record<string, unknown> | undefined\r\n): Record<string, string> {\r\n const map: Record<string, string> = {};\r\n appendStrings(map, base);\r\n appendStrings(map, metadata);\r\n const trimmedAgentId = agentId?.trim();\r\n if (trimmedAgentId) map.agentId = trimmedAgentId;\r\n return map;\r\n}\r\n\r\nfunction appendStrings(target: Record<string, string>, metadata: Record<string, unknown> | undefined): void {\r\n if (!metadata) return;\r\n for (const [key, value] of Object.entries(metadata)) {\r\n const asString = asMetadataString(value);\r\n if (asString !== undefined) target[key] = asString;\r\n }\r\n}\r\n\r\nfunction asMetadataString(value: unknown): string | undefined {\r\n if (typeof value === \"string\") return value;\r\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\r\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\r\n return undefined;\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n}\r\n","import { normalizeModel } from \"../config/normalize-model\";\r\nimport { validateRuntimeRequest } from \"../config/validate-runtime-request\";\r\nimport { endpointFor } from \"../openrouter/endpoints\";\r\nimport { buildHeaders } from \"../openrouter/headers\";\r\nimport { buildOpenRouterServerTools } from \"../tools/server-tools\";\r\nimport { isRecord } from \"../utils/json\";\r\nimport { OPENROUTER_METADATA_LIMITS, toProviderMetadata } from \"../utils/provider-metadata\";\r\nimport type { OpenRouterTool, RuntimeCompileContext } from \"../types/internal\";\r\nimport type {\r\n ApiMode,\r\n CompiledOpenRouterRequest,\r\n OpenRouterRuntimeOptions,\r\n ResolvedApiMode,\r\n RuntimeDefaults,\r\n RuntimeMessage,\r\n RuntimeRequest,\r\n RuntimeServerToolsPolicy,\r\n RuntimeToolChoice,\r\n RuntimeWarning\r\n} from \"../types/public\";\r\n\r\nexport function compileRuntimeRequest(\r\n request: RuntimeRequest,\r\n defaults: RuntimeDefaults,\r\n options: OpenRouterRuntimeOptions = { apiKey: \"\" },\r\n context: Partial<RuntimeCompileContext> = {}\r\n): CompiledOpenRouterRequest {\r\n const warnings: RuntimeWarning[] = [];\r\n const effectiveContext: RuntimeCompileContext = { streaming: false, ...context };\r\n const requestedModel = request.model ?? options.defaultModel ?? \"\";\r\n const normalized = normalizeModel(requestedModel);\r\n warnings.push(...normalized.warnings);\r\n const serverTools = mergeServerTools(defaults.serverTools, normalized.impliedServerTools, request.serverTools);\r\n const apiMode = resolveApiMode(request, defaults.apiMode, serverTools);\r\n validateRuntimeRequest(request, options, apiMode, normalized.model, serverTools);\r\n\r\n const tools: OpenRouterTool[] = [\r\n ...buildOpenRouterServerTools(\r\n serverTools,\r\n effectiveContext.suppressNestedReasoningFallback ? undefined : request.reasoning\r\n ),\r\n ...(request.functionTools ?? []).map((tool) => ({\r\n type: \"function\",\r\n function: {\r\n name: tool.name,\r\n description: tool.description,\r\n parameters: tool.parameters\r\n }\r\n }))\r\n ];\r\n\r\n const headers = buildHeaders(options, request.agentId);\r\n const baseBody = buildBaseBody(request, normalized.model, defaults, tools, serverTools);\r\n const assembled =\r\n apiMode === \"chat\"\r\n ? buildChatBody(request, baseBody)\r\n : buildResponsesBody(request, baseBody);\r\n let body = effectiveContext.finalizeBody ? effectiveContext.finalizeBody(assembled) : assembled;\r\n enforceStreamingPolicyForRun(body, warnings, effectiveContext);\r\n body = attachProviderMetadata(body, request);\r\n\r\n return {\r\n apiMode,\r\n url: endpointFor(options.baseUrl ?? \"https://openrouter.ai/api/v1\", apiMode),\r\n headers,\r\n body,\r\n warnings\r\n };\r\n}\r\n\r\nfunction attachProviderMetadata(body: Record<string, unknown>, request: RuntimeRequest): Record<string, unknown> {\r\n const fromBody = isRecord(body.metadata) ? body.metadata : undefined;\r\n const metadata = toProviderMetadata(request.metadata, request.agentId, OPENROUTER_METADATA_LIMITS, fromBody);\r\n if (metadata) return { ...body, metadata };\r\n if (body.metadata === undefined) return body;\r\n const rest = { ...body };\r\n delete rest.metadata;\r\n return rest;\r\n}\r\n\r\nfunction enforceStreamingPolicyForRun(\r\n body: Record<string, unknown>,\r\n warnings: RuntimeWarning[],\r\n context: RuntimeCompileContext\r\n): void {\r\n if (context.streaming) {\r\n // Only executeStreamingChat compiles with streaming: true.\r\n body.stream = true;\r\n return;\r\n }\r\n if (body.stream !== undefined && body.stream !== false) {\r\n warnings.push({\r\n code: \"STREAMING_OVERRIDE_IGNORED_FOR_RUN\",\r\n message: \"runtime.run() is non-streaming. Use runtime.executeStreamingChat() for streaming.\",\r\n details: { ignoredStreamValue: body.stream }\r\n });\r\n }\r\n // Explicit false so wire traffic and logs never look ambiguous.\r\n body.stream = false;\r\n stripAdvisorStreaming(body, warnings);\r\n}\r\n\r\nfunction stripAdvisorStreaming(body: Record<string, unknown>, warnings: RuntimeWarning[]): void {\r\n const tools = body.tools;\r\n if (!Array.isArray(tools)) return;\r\n let stripped = 0;\r\n for (const tool of tools) {\r\n if (!tool || typeof tool !== \"object\") continue;\r\n const record = tool as Record<string, unknown>;\r\n if (record.type !== \"openrouter:advisor\") continue;\r\n const parameters = record.parameters;\r\n if (!parameters || typeof parameters !== \"object\") continue;\r\n const params = parameters as Record<string, unknown>;\r\n if (params.stream === undefined || params.stream === false) continue;\r\n params.stream = false;\r\n stripped += 1;\r\n }\r\n if (stripped > 0) {\r\n warnings.push({\r\n code: \"ADVISOR_STREAMING_IGNORED_FOR_RUN\",\r\n message:\r\n \"runtime.run() disables advisor.stream. Nested advisor streaming is not supported on the non-streaming entrypoint.\",\r\n details: { advisorsStripped: stripped }\r\n });\r\n }\r\n}\r\n\r\nexport function resolveApiMode(\r\n request: RuntimeRequest,\r\n defaultMode: ApiMode = \"auto\",\r\n serverTools?: RuntimeServerToolsPolicy\r\n): ResolvedApiMode {\r\n const mode = request.apiMode ?? defaultMode;\r\n if (mode === \"chat\") return \"chat\";\r\n if (mode === \"responses\") return \"responses\";\r\n if (serverTools?.applyPatch?.mode && serverTools.applyPatch.mode !== \"disabled\") return \"responses\";\r\n if (request.input) return \"responses\";\r\n return \"chat\";\r\n}\r\n\r\nexport function mergeServerTools(\r\n ...policies: Array<Partial<RuntimeServerToolsPolicy> | undefined>\r\n): RuntimeServerToolsPolicy | undefined {\r\n const merged: RuntimeServerToolsPolicy = {};\r\n for (const policy of policies) {\r\n if (!policy) continue;\r\n Object.assign(merged, policy);\r\n }\r\n return Object.keys(merged).length ? merged : undefined;\r\n}\r\n\r\nfunction buildBaseBody(\r\n request: RuntimeRequest,\r\n model: string,\r\n defaults: RuntimeDefaults,\r\n tools: OpenRouterTool[],\r\n serverTools?: RuntimeServerToolsPolicy\r\n): Record<string, unknown> {\r\n const body: Record<string, unknown> = {\r\n model,\r\n temperature: request.temperature ?? defaults.temperature,\r\n reasoning: request.reasoning,\r\n tools: tools.length ? tools : undefined,\r\n tool_choice: compileToolChoice(request.toolChoice, serverTools),\r\n ...request.rawOpenRouterOverrides\r\n };\r\n return clean(body);\r\n}\r\n\r\nfunction buildChatBody(request: RuntimeRequest, baseBody: Record<string, unknown>): Record<string, unknown> {\r\n const messages = compileMessages(request);\r\n return clean({\r\n ...baseBody,\r\n messages,\r\n max_completion_tokens: request.maxTokens,\r\n response_format: request.responseFormat\r\n });\r\n}\r\n\r\nfunction buildResponsesBody(request: RuntimeRequest, baseBody: Record<string, unknown>): Record<string, unknown> {\r\n return clean({\r\n ...baseBody,\r\n input: request.input ?? compilePromptInput(request),\r\n instructions: request.instructions ?? request.system,\r\n max_output_tokens: request.maxTokens,\r\n text: request.responseFormat\r\n });\r\n}\r\n\r\nexport function compileMessages(request: RuntimeRequest): Record<string, unknown>[] {\r\n const messages: RuntimeMessage[] = [];\r\n if (request.system) messages.push({ role: \"system\", content: request.system });\r\n if (request.messages) messages.push(...request.messages);\r\n if (request.prompt) messages.push({ role: \"user\", content: request.prompt });\r\n return messages.map(compileMessage);\r\n}\r\n\r\nfunction compilePromptInput(request: RuntimeRequest): unknown {\r\n if (request.prompt) return request.prompt;\r\n return compileMessages(request).map((message) => ({\r\n role: message.role,\r\n content: message.content\r\n }));\r\n}\r\n\r\nfunction compileMessage(message: RuntimeMessage): Record<string, unknown> {\r\n return clean({\r\n role: message.role,\r\n content: compileContent(message.content),\r\n name: message.name,\r\n tool_call_id: message.toolCallId\r\n });\r\n}\r\n\r\nfunction compileContent(content: RuntimeMessage[\"content\"]): unknown {\r\n if (typeof content === \"string\") return content;\r\n return content.map((part) => {\r\n if (part.type === \"image_url\") {\r\n return { type: \"image_url\", image_url: { url: part.imageUrl } };\r\n }\r\n if (part.type === \"file\") {\r\n return clean({\r\n type: \"file\",\r\n file_name: part.fileName,\r\n mime_type: part.mimeType,\r\n data: part.data,\r\n url: part.url\r\n });\r\n }\r\n return part;\r\n });\r\n}\r\n\r\nfunction compileToolChoice(choice: RuntimeToolChoice | undefined, serverTools?: RuntimeServerToolsPolicy): unknown {\r\n if (!choice || choice === \"auto\") return undefined;\r\n if (choice === \"none\" || choice === \"required\") return choice;\r\n if (choice.type === \"function\") {\r\n return { type: \"function\", function: { name: choice.functionName } };\r\n }\r\n const toolType = `openrouter:${choice.serverTool}`;\r\n const matchingPolicy = serverToolPolicyForChoice(choice.serverTool, serverTools);\r\n return matchingPolicy === 1 ? { type: toolType } : \"required\";\r\n}\r\n\r\nfunction serverToolPolicyForChoice(name: string, policy?: RuntimeServerToolsPolicy): number {\r\n const value = {\r\n web_search: policy?.webSearch,\r\n web_fetch: policy?.webFetch,\r\n datetime: policy?.datetime,\r\n image_generation: policy?.imageGeneration,\r\n apply_patch: policy?.applyPatch,\r\n fusion: policy?.fusion,\r\n advisor: policy?.advisor,\r\n subagent: policy?.subagent\r\n }[name];\r\n if (!value) return 0;\r\n if (Array.isArray(value)) return value.filter((item) => item.mode !== \"disabled\").length;\r\n return value.mode === \"disabled\" ? 0 : 1;\r\n}\r\n\r\nfunction clean<T extends Record<string, unknown>>(record: T): T {\r\n return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined)) as T;\r\n}\r\n","import type { OpenRouterRuntimeOptions, RuntimeFunctionToolDefinition, RuntimeToolExecutor } from \"../types/public\";\r\n\r\nexport function resolveExecutor(\r\n name: string,\r\n definitions: RuntimeFunctionToolDefinition[] | undefined,\r\n options: OpenRouterRuntimeOptions\r\n): RuntimeToolExecutor | undefined {\r\n return definitions?.find((tool) => tool.name === name)?.executor ?? options.tools?.[name];\r\n}\r\n","import { parseJsonMaybe } from \"../utils/json\";\r\n\r\nexport function parseToolArgs(args: unknown): unknown {\r\n return parseJsonMaybe(args);\r\n}\r\n","import { RuntimeConfigError } from \"../openrouter/errors\";\r\nimport { resolveExecutor } from \"./registry\";\r\nimport { parseToolArgs } from \"./parse-tool-args\";\r\nimport type {\r\n OpenRouterRuntimeOptions,\r\n RuntimeFunctionToolCall,\r\n RuntimeFunctionToolDefinition,\r\n RuntimeFunctionToolResult,\r\n RuntimeRequest\r\n} from \"../types/public\";\r\n\r\nexport async function executeFunctionTool(\r\n call: RuntimeFunctionToolCall,\r\n request: RuntimeRequest,\r\n definitions: RuntimeFunctionToolDefinition[] | undefined,\r\n options: OpenRouterRuntimeOptions\r\n): Promise<RuntimeFunctionToolResult> {\r\n const executor = resolveExecutor(call.name, definitions, options);\r\n if (!executor) {\r\n throw new RuntimeConfigError(\"FUNCTION_TOOL_EXECUTOR_MISSING\", `No executor registered for ${call.name}.`);\r\n }\r\n const started = Date.now();\r\n const args = parseToolArgs(call.args);\r\n try {\r\n options.logger?.debug?.(\"runtime.function_tool.started\", { name: call.name, callId: call.callId });\r\n await options.hooks?.beforeFunctionToolExecution?.({ ...call, args });\r\n const context = {\r\n requestId: request.id ?? \"\",\r\n toolName: call.name,\r\n callId: call.callId,\r\n ...(request.metadata ? { metadata: request.metadata } : {})\r\n };\r\n const result = await executor(args, context);\r\n const normalized = {\r\n name: call.name,\r\n callId: call.callId,\r\n status: \"completed\" as const,\r\n result,\r\n durationMs: Date.now() - started\r\n };\r\n await options.hooks?.afterFunctionToolExecution?.(normalized);\r\n options.logger?.debug?.(\"runtime.function_tool.completed\", { name: call.name, callId: call.callId });\r\n return normalized;\r\n } catch (error) {\r\n const normalized = {\r\n name: call.name,\r\n callId: call.callId,\r\n status: \"failed\" as const,\r\n error: error instanceof Error ? error.message : String(error),\r\n durationMs: Date.now() - started\r\n };\r\n await options.hooks?.afterFunctionToolExecution?.(normalized);\r\n options.logger?.warn?.(\"runtime.function_tool.failed\", normalized);\r\n return normalized;\r\n }\r\n}\r\n","import { executeFunctionTool } from \"../function-tools/execute-function-tool\";\r\nimport { parseToolArgs } from \"../function-tools/parse-tool-args\";\r\nimport type {\r\n OpenRouterRuntimeOptions,\r\n RuntimeFunctionToolCall,\r\n RuntimeFunctionToolDefinition,\r\n RuntimeFunctionToolUsage,\r\n RuntimeRequest\r\n} from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport function extractChatFunctionCalls(response: unknown): RuntimeFunctionToolCall[] {\r\n const record = isRecord(response) ? response : {};\r\n const choice = Array.isArray(record.choices) && isRecord(record.choices[0]) ? record.choices[0] : {};\r\n const message = isRecord(choice.message) ? choice.message : {};\r\n const calls = Array.isArray(message.tool_calls) ? message.tool_calls : [];\r\n return calls.flatMap((call) => {\r\n if (!isRecord(call) || call.type !== \"function\" || !isRecord(call.function)) return [];\r\n const name = typeof call.function.name === \"string\" ? call.function.name : undefined;\r\n if (!name) return [];\r\n return [\r\n {\r\n name,\r\n callId: typeof call.id === \"string\" ? call.id : name,\r\n args: call.function.arguments\r\n }\r\n ];\r\n });\r\n}\r\n\r\nexport function extractResponsesFunctionCalls(response: unknown): RuntimeFunctionToolCall[] {\r\n const record = isRecord(response) ? response : {};\r\n const output = Array.isArray(record.output) ? record.output : [];\r\n return output.flatMap((item) => {\r\n if (!isRecord(item) || item.type !== \"function_call\") return [];\r\n const name = typeof item.name === \"string\" ? item.name : undefined;\r\n if (!name) return [];\r\n return [\r\n {\r\n name,\r\n callId: typeof item.call_id === \"string\" ? item.call_id : typeof item.id === \"string\" ? item.id : name,\r\n args: item.arguments\r\n }\r\n ];\r\n });\r\n}\r\n\r\nexport async function executeFunctionCalls(params: {\r\n calls: RuntimeFunctionToolCall[];\r\n request: RuntimeRequest;\r\n definitions: RuntimeFunctionToolDefinition[] | undefined;\r\n options: OpenRouterRuntimeOptions;\r\n previousUsage: RuntimeFunctionToolUsage[];\r\n maxFunctionToolCalls: number;\r\n}): Promise<RuntimeFunctionToolUsage[]> {\r\n if (params.previousUsage.length + params.calls.length > params.maxFunctionToolCalls) {\r\n throw new Error(\"maxFunctionToolCalls exceeded.\");\r\n }\r\n const results = [];\r\n for (const call of params.calls) {\r\n const result = await executeFunctionTool(call, params.request, params.definitions, params.options);\r\n results.push({\r\n name: result.name,\r\n callId: result.callId,\r\n status: result.status,\r\n args: parseToolArgs(call.args),\r\n ...(result.result !== undefined ? { result: result.result } : {}),\r\n ...(result.error !== undefined ? { error: result.error } : {}),\r\n ...(result.durationMs !== undefined ? { durationMs: result.durationMs } : {})\r\n });\r\n }\r\n return results;\r\n}\r\n","import { sendOpenRouterRequest } from \"../openrouter/http-client\";\r\nimport { resultToChatToolMessage } from \"../function-tools/tool-messages\";\r\nimport { normalizeChatResponse } from \"../normalize/normalize-chat-response\";\r\nimport { validatePostResponse } from \"../policies/post-response-validation\";\r\nimport { mergeServerTools } from \"./runtime\";\r\nimport { executeFunctionCalls, extractChatFunctionCalls } from \"./tool-loop\";\r\nimport type { RuntimeContext } from \"../types/internal\";\r\nimport type { CompiledOpenRouterRequest, RuntimeFunctionToolUsage, RuntimeRequest } from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport async function runChat(\r\n request: RuntimeRequest,\r\n compiled: CompiledOpenRouterRequest,\r\n context: RuntimeContext\r\n) {\r\n const maxIterations = request.execution?.maxToolIterations ?? 8;\r\n const maxFunctionToolCalls = request.execution?.maxFunctionToolCalls ?? 20;\r\n const functionUsage: RuntimeFunctionToolUsage[] = [];\r\n let activeCompiled = compiled;\r\n let response: unknown;\r\n\r\n for (let iteration = 0; iteration <= maxIterations; iteration++) {\r\n response = await sendOpenRouterRequest(\r\n activeCompiled,\r\n context.options,\r\n context.defaults,\r\n request.execution?.timeoutMs ?? context.defaults.timeoutMs\r\n );\r\n const calls = extractChatFunctionCalls(response);\r\n if (!calls.length) break;\r\n const results = await executeFunctionCalls({\r\n calls,\r\n request,\r\n definitions: request.functionTools,\r\n options: context.options,\r\n previousUsage: functionUsage,\r\n maxFunctionToolCalls\r\n });\r\n functionUsage.push(...results);\r\n const body = activeCompiled.body;\r\n const messages = Array.isArray(body.messages) ? [...body.messages] : [];\r\n const assistantMessage = extractAssistantMessage(response);\r\n if (assistantMessage) messages.push(assistantMessage);\r\n messages.push(...results.map(resultToChatToolMessage));\r\n activeCompiled = { ...activeCompiled, body: { ...body, messages, tool_choice: \"auto\" } };\r\n }\r\n\r\n const model = typeof compiled.body.model === \"string\" ? compiled.body.model : \"\";\r\n const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);\r\n const normalized = normalizeChatResponse({\r\n requestBody: activeCompiled.body,\r\n response,\r\n apiMode: \"chat\",\r\n model,\r\n warnings: compiled.warnings,\r\n functionToolUsage: functionUsage,\r\n ...optional(\"serverTools\", serverTools),\r\n ...optional(\"metadata\", request.metadata)\r\n });\r\n return validatePostResponse(normalized, context.defaults, serverTools);\r\n}\r\n\r\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\r\n return value === undefined ? {} : { [key]: value };\r\n}\r\n\r\nfunction extractAssistantMessage(response: unknown): Record<string, unknown> | undefined {\r\n const record = isRecord(response) ? response : {};\r\n const choice = Array.isArray(record.choices) && isRecord(record.choices[0]) ? record.choices[0] : {};\r\n const message = isRecord(choice.message) ? choice.message : undefined;\r\n if (!message) return undefined;\r\n return message;\r\n}\r\n","import { dedupeCitations, extractCitations } from \"./citations\";\r\nimport { extractImages } from \"./images\";\r\nimport { extractPatches } from \"./patches\";\r\nimport { createToolUsage } from \"./tool-usage\";\r\nimport { normalizeUsage } from \"./usage\";\r\nimport type {\r\n RuntimeFunctionToolUsage,\r\n RuntimeResponse,\r\n RuntimeServerToolsPolicy,\r\n RuntimeWarning\r\n} from \"../types/public\";\r\nimport { createRuntimeId } from \"../utils/ids\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport function normalizeResponsesResponse(params: {\r\n requestBody: unknown;\r\n response: unknown;\r\n model: string;\r\n serverTools?: RuntimeServerToolsPolicy;\r\n warnings: RuntimeWarning[];\r\n functionToolUsage?: RuntimeFunctionToolUsage[];\r\n metadata?: Record<string, unknown>;\r\n}): RuntimeResponse {\r\n const record = isRecord(params.response) ? params.response : {};\r\n const text = extractOutputText(record);\r\n return {\r\n id: typeof record.id === \"string\" ? record.id : createRuntimeId(\"orresp\"),\r\n status: record.status === \"requires_action\" ? \"requires_action\" : \"completed\",\r\n apiMode: \"responses\",\r\n model: typeof record.model === \"string\" ? record.model : params.model,\r\n text,\r\n citations: dedupeCitations([...extractCitations(params.response), ...extractCitations(text)]),\r\n images: extractImages(params.response),\r\n patches: extractPatches(params.response),\r\n toolUsage: createToolUsage(params.serverTools, params.response, params.functionToolUsage),\r\n warnings: params.warnings,\r\n errors: [],\r\n raw: {\r\n request: params.requestBody,\r\n response: params.response\r\n },\r\n ...optional(\"usage\", normalizeUsage(record.usage)),\r\n ...optional(\"finishReason\", typeof record.status === \"string\" ? record.status : undefined),\r\n ...optional(\"metadata\", params.metadata)\r\n };\r\n}\r\n\r\nfunction extractOutputText(record: Record<string, unknown>): string {\r\n if (typeof record.output_text === \"string\") return record.output_text;\r\n const output = Array.isArray(record.output) ? record.output : [];\r\n const chunks: string[] = [];\r\n for (const item of output) {\r\n if (!isRecord(item)) continue;\r\n if (typeof item.text === \"string\") chunks.push(item.text);\r\n const content = Array.isArray(item.content) ? item.content : [];\r\n for (const part of content) {\r\n if (isRecord(part) && typeof part.text === \"string\") chunks.push(part.text);\r\n }\r\n }\r\n return chunks.join(\"\");\r\n}\r\n\r\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\r\n return value === undefined ? {} : { [key]: value };\r\n}\r\n","import { resultToResponsesInput } from \"../function-tools/tool-messages\";\r\nimport { normalizeResponsesResponse } from \"../normalize/normalize-responses-response\";\r\nimport { sendOpenRouterRequest } from \"../openrouter/http-client\";\r\nimport { validatePostResponse } from \"../policies/post-response-validation\";\r\nimport { mergeServerTools } from \"./runtime\";\r\nimport { executeFunctionCalls, extractResponsesFunctionCalls } from \"./tool-loop\";\r\nimport type { RuntimeContext } from \"../types/internal\";\r\nimport type { CompiledOpenRouterRequest, RuntimeFunctionToolUsage, RuntimeRequest } from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\nexport async function runResponses(\r\n request: RuntimeRequest,\r\n compiled: CompiledOpenRouterRequest,\r\n context: RuntimeContext\r\n) {\r\n const maxIterations = request.execution?.maxToolIterations ?? 8;\r\n const maxFunctionToolCalls = request.execution?.maxFunctionToolCalls ?? 20;\r\n const functionUsage: RuntimeFunctionToolUsage[] = [];\r\n let activeCompiled = compiled;\r\n let response: unknown;\r\n\r\n for (let iteration = 0; iteration <= maxIterations; iteration++) {\r\n response = await sendOpenRouterRequest(\r\n activeCompiled,\r\n context.options,\r\n context.defaults,\r\n request.execution?.timeoutMs ?? context.defaults.timeoutMs\r\n );\r\n const calls = extractResponsesFunctionCalls(response);\r\n if (!calls.length) break;\r\n const results = await executeFunctionCalls({\r\n calls,\r\n request,\r\n definitions: request.functionTools,\r\n options: context.options,\r\n previousUsage: functionUsage,\r\n maxFunctionToolCalls\r\n });\r\n functionUsage.push(...results);\r\n activeCompiled = {\r\n ...activeCompiled,\r\n body: {\r\n ...activeCompiled.body,\r\n tool_choice: \"auto\",\r\n previous_response_id: isRecord(response) && typeof response.id === \"string\" ? response.id : undefined,\r\n input: results.map(resultToResponsesInput)\r\n }\r\n };\r\n }\r\n\r\n const model = typeof compiled.body.model === \"string\" ? compiled.body.model : \"\";\r\n const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);\r\n const normalized = normalizeResponsesResponse({\r\n requestBody: activeCompiled.body,\r\n response,\r\n model,\r\n warnings: compiled.warnings,\r\n functionToolUsage: functionUsage,\r\n ...optional(\"serverTools\", serverTools),\r\n ...optional(\"metadata\", request.metadata)\r\n });\r\n return validatePostResponse(normalized, context.defaults, serverTools);\r\n}\r\n\r\nfunction optional<T>(key: string, value: T | undefined): Record<string, T> {\r\n return value === undefined ? {} : { [key]: value };\r\n}\r\n","import { OpenRouterHttpError, type ProviderFailureCode } from \"./errors\";\r\nimport type { CompiledOpenRouterRequest } from \"../types/public\";\r\nimport type { RequiredRuntimeOptions } from \"../types/internal\";\r\n\r\nexport interface OpenRouterStreamSession {\r\n response: Response;\r\n cleanup: () => void;\r\n}\r\n\r\nexport async function openOpenRouterStream(\r\n compiled: CompiledOpenRouterRequest,\r\n options: RequiredRuntimeOptions,\r\n timeoutMs: number\r\n): Promise<OpenRouterStreamSession> {\r\n const controller = new AbortController();\r\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\r\n const cleanup = () => clearTimeout(timeout);\r\n\r\n try {\r\n const response = await options.fetch(compiled.url, {\r\n method: \"POST\",\r\n headers: {\r\n ...compiled.headers,\r\n Accept: \"text/event-stream\"\r\n },\r\n body: JSON.stringify(compiled.body),\r\n signal: controller.signal\r\n });\r\n\r\n if (!response.ok) {\r\n const text = await response.text();\r\n cleanup();\r\n const body = text ? parseBody(text) : undefined;\r\n const message = extractMessage(body) ?? `OpenRouter stream failed with status ${response.status}.`;\r\n throw new OpenRouterHttpError(\r\n response.status,\r\n classifyProviderFailure(response.status, message, body),\r\n message,\r\n body,\r\n isRetryableStatus(response.status)\r\n );\r\n }\r\n\r\n return { response, cleanup };\r\n } catch (error) {\r\n cleanup();\r\n if (error instanceof OpenRouterHttpError) throw error;\r\n if (error instanceof Error && error.name === \"AbortError\") {\r\n throw new OpenRouterHttpError(408, \"PROVIDER_GATEWAY_UNREACHABLE\", \"OpenRouter stream timed out.\", undefined, true);\r\n }\r\n throw new OpenRouterHttpError(\r\n 503,\r\n \"PROVIDER_GATEWAY_UNREACHABLE\",\r\n error instanceof Error ? error.message : \"OpenRouter stream failed before receiving a response.\",\r\n undefined,\r\n true\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Parse an OpenRouter SSE chat stream into JSON chunk objects.\r\n */\r\nexport async function* parseSseStream(response: Response): AsyncGenerator<unknown> {\r\n const body = response.body;\r\n if (!body) {\r\n throw new OpenRouterHttpError(\r\n 503,\r\n \"PROVIDER_GATEWAY_UNREACHABLE\",\r\n \"OpenRouter stream response had no body.\",\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n const reader = body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n const parts = buffer.split(/\\r?\\n/);\r\n buffer = parts.pop() ?? \"\";\r\n\r\n for (const part of parts) {\r\n const line = part.trim();\r\n if (!line || line.startsWith(\":\")) continue;\r\n if (!line.startsWith(\"data:\")) continue;\r\n const data = line.slice(5).trim();\r\n if (!data) continue;\r\n if (data === \"[DONE]\") return;\r\n try {\r\n yield JSON.parse(data) as unknown;\r\n } catch {\r\n // Ignore malformed SSE data lines.\r\n }\r\n }\r\n }\r\n\r\n const trailing = buffer.trim();\r\n if (trailing.startsWith(\"data:\")) {\r\n const data = trailing.slice(5).trim();\r\n if (data && data !== \"[DONE]\") {\r\n try {\r\n yield JSON.parse(data) as unknown;\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction parseBody(text: string): unknown {\r\n try {\r\n return JSON.parse(text);\r\n } catch {\r\n return text;\r\n }\r\n}\r\n\r\nfunction extractMessage(body: unknown): string | undefined {\r\n if (typeof body !== \"object\" || body === null) return undefined;\r\n const record = body as Record<string, unknown>;\r\n const error = record.error;\r\n if (typeof error === \"object\" && error !== null && typeof (error as Record<string, unknown>).message === \"string\") {\r\n return (error as Record<string, string>).message;\r\n }\r\n return typeof record.message === \"string\" ? record.message : undefined;\r\n}\r\n\r\nfunction classifyProviderFailure(status: number, message: string, body: unknown): ProviderFailureCode {\r\n const haystack = `${message} ${JSON.stringify(body ?? \"\")}`.toLowerCase();\r\n if (status === 401 || status === 403) return \"PROVIDER_AUTH_FAILED\";\r\n if (status === 402 || /\\b(quota|credit|credits|billing|balance|insufficient funds|insufficient credit)\\b/.test(haystack)) {\r\n return \"PROVIDER_QUOTA_EXCEEDED\";\r\n }\r\n if (\r\n status === 404 ||\r\n /\\bmodel\\b.*\\b(not found|not a valid|invalid|unavailable)\\b/.test(haystack) ||\r\n /\\b(no endpoints found|not a valid model id)\\b/.test(haystack)\r\n ) {\r\n return \"PROVIDER_MODEL_NOT_FOUND\";\r\n }\r\n if (status === 429) return \"PROVIDER_RATE_LIMITED\";\r\n if (status === 408 || status >= 500) return \"PROVIDER_GATEWAY_UNREACHABLE\";\r\n return \"PROVIDER_REQUEST_FAILED\";\r\n}\r\n\r\nfunction isRetryableStatus(status: number): boolean {\r\n return status === 429 || status === 500 || status === 502 || status === 503 || status === 504;\r\n}\r\n","import { RuntimeConfigError, OpenRouterHttpError } from \"../openrouter/errors\";\r\nimport { openOpenRouterStream, parseSseStream } from \"../openrouter/stream-client\";\r\nimport { compileRuntimeRequest } from \"./runtime\";\r\nimport { normalizeUsage } from \"../normalize/usage\";\r\nimport type { RuntimeContext } from \"../types/internal\";\r\nimport type {\r\n RuntimeDefaults,\r\n RuntimeError,\r\n RuntimeRequest,\r\n RuntimeCallOptions,\r\n RuntimeStreamDoneEvent,\r\n RuntimeStreamErrorEvent,\r\n RuntimeStreamEvent,\r\n RuntimeStreamReasoningDeltaEvent,\r\n RuntimeStreamStartEvent,\r\n RuntimeStreamTextDeltaEvent,\r\n RuntimeStreamToolCallDeltaEvent,\r\n RuntimeStreamUsageEvent,\r\n RuntimeStreamWarningEvent,\r\n RuntimeWarning\r\n} from \"../types/public\";\r\nimport { isRecord } from \"../utils/json\";\r\n\r\n/**\r\n * Streaming chat entrypoint — separate API from `run()`.\r\n * Always sends `stream: true` and yields typed SSE events.\r\n * Chat Completions only; Responses / applyPatch must use `run()`.\r\n */\r\nexport async function* executeStreamingChat(\r\n request: RuntimeRequest,\r\n context: RuntimeContext,\r\n call: RuntimeCallOptions = {}\r\n): AsyncGenerator<RuntimeStreamEvent> {\r\n const requestId = request.id ?? \"unknown\";\r\n const options = context.options;\r\n const defaults = context.defaults;\r\n\r\n options.logger?.info?.(\"runtime.executeStreamingChat.started\", {\r\n requestId,\r\n streaming: true,\r\n entrypoint: \"executeStreamingChat\"\r\n });\r\n\r\n try {\r\n assertStreamingChatRequest(request, defaults);\r\n\r\n const streamingRequest: RuntimeRequest = {\r\n ...request,\r\n apiMode: \"chat\"\r\n };\r\n\r\n const compiled = compileRuntimeRequest(streamingRequest, defaults, options, {\r\n streaming: true,\r\n ...(call.finalizeBody ? { finalizeBody: call.finalizeBody } : {}),\r\n ...(call.suppressNestedReasoningFallback ? { suppressNestedReasoningFallback: true } : {})\r\n });\r\n if (compiled.body.stream !== true) {\r\n throw new RuntimeConfigError(\r\n \"STREAMING_CHAT_MISCONFIGURED\",\r\n \"executeStreamingChat() requires stream=true on the compiled OpenRouter body.\"\r\n );\r\n }\r\n\r\n for (const warning of compiled.warnings) {\r\n yield warningEvent(requestId, warning);\r\n }\r\n\r\n const model = typeof compiled.body.model === \"string\" ? compiled.body.model : \"\";\r\n yield startEvent(requestId, model);\r\n\r\n await options.hooks?.beforeOpenRouterRequest?.(compiled);\r\n\r\n const timeoutMs = request.execution?.timeoutMs ?? defaults.timeoutMs;\r\n const session = await openOpenRouterStream(compiled, options, timeoutMs);\r\n\r\n let text = \"\";\r\n let finishReason: string | undefined;\r\n let resolvedModel = model;\r\n\r\n try {\r\n for await (const chunk of parseSseStream(session.response)) {\r\n if (!isRecord(chunk)) continue;\r\n\r\n if (chunk.error) {\r\n const message =\r\n isRecord(chunk.error) && typeof chunk.error.message === \"string\"\r\n ? chunk.error.message\r\n : \"OpenRouter stream returned an error chunk.\";\r\n const error: RuntimeError = {\r\n code: \"PROVIDER_REQUEST_FAILED\",\r\n message,\r\n source: \"openrouter\",\r\n details: chunk.error\r\n };\r\n yield errorEvent(requestId, error);\r\n throw new OpenRouterHttpError(500, \"PROVIDER_REQUEST_FAILED\", message, chunk, false);\r\n }\r\n\r\n if (typeof chunk.model === \"string\") resolvedModel = chunk.model;\r\n\r\n const choice =\r\n Array.isArray(chunk.choices) && isRecord(chunk.choices[0]) ? chunk.choices[0] : undefined;\r\n const delta = choice && isRecord(choice.delta) ? choice.delta : undefined;\r\n\r\n if (delta && call.extractStreamReasoning) {\r\n const reasoningText = call.extractStreamReasoning(delta);\r\n if (reasoningText) yield reasoningDeltaEvent(requestId, reasoningText);\r\n }\r\n\r\n if (delta && typeof delta.content === \"string\" && delta.content.length > 0) {\r\n text += delta.content;\r\n yield textDeltaEvent(requestId, delta.content);\r\n }\r\n\r\n if (delta && Array.isArray(delta.tool_calls)) {\r\n for (const toolCall of delta.tool_calls) {\r\n if (!isRecord(toolCall)) continue;\r\n const index = typeof toolCall.index === \"number\" ? toolCall.index : 0;\r\n const fn = isRecord(toolCall.function) ? toolCall.function : {};\r\n yield toolCallDeltaEvent(requestId, {\r\n index,\r\n ...(typeof toolCall.id === \"string\" ? { id: toolCall.id } : {}),\r\n ...(typeof fn.name === \"string\" ? { name: fn.name } : {}),\r\n ...(typeof fn.arguments === \"string\" ? { argumentsDelta: fn.arguments } : {})\r\n });\r\n }\r\n }\r\n\r\n if (choice && typeof choice.finish_reason === \"string\") {\r\n finishReason = choice.finish_reason;\r\n }\r\n\r\n if (chunk.usage) {\r\n const usage = normalizeUsage(chunk.usage);\r\n if (usage) yield usageEvent(requestId, usage);\r\n }\r\n }\r\n } finally {\r\n session.cleanup();\r\n }\r\n\r\n await options.hooks?.afterOpenRouterResponse?.({ streamed: true, text, finishReason, model: resolvedModel });\r\n\r\n yield doneEvent(requestId, {\r\n text,\r\n model: resolvedModel,\r\n ...(finishReason ? { finishReason } : {})\r\n });\r\n\r\n options.logger?.info?.(\"runtime.executeStreamingChat.completed\", {\r\n requestId,\r\n streaming: true,\r\n entrypoint: \"executeStreamingChat\",\r\n finishReason,\r\n textLength: text.length\r\n });\r\n } catch (error) {\r\n const runtimeError = toRuntimeError(error);\r\n yield errorEvent(requestId, runtimeError);\r\n options.logger?.error?.(\"runtime.executeStreamingChat.failed\", {\r\n requestId,\r\n streaming: true,\r\n code: runtimeError.code,\r\n message: runtimeError.message\r\n });\r\n throw error instanceof Error ? error : new Error(runtimeError.message);\r\n }\r\n}\r\n\r\nfunction assertStreamingChatRequest(request: RuntimeRequest, defaults: RuntimeDefaults): void {\r\n if (request.apiMode === \"responses\") {\r\n throw new RuntimeConfigError(\r\n \"STREAMING_CHAT_REQUIRES_CHAT_API\",\r\n \"executeStreamingChat() only supports Chat Completions. Use runtime.run() for Responses API requests.\"\r\n );\r\n }\r\n if (request.serverTools?.applyPatch?.mode && request.serverTools.applyPatch.mode !== \"disabled\") {\r\n throw new RuntimeConfigError(\r\n \"STREAMING_CHAT_DOES_NOT_SUPPORT_APPLY_PATCH\",\r\n \"executeStreamingChat() does not support applyPatch. Use runtime.run() instead.\"\r\n );\r\n }\r\n if (defaults.serverTools?.applyPatch?.mode && defaults.serverTools.applyPatch.mode !== \"disabled\") {\r\n // applyPatch forces responses mode — block streaming chat when defaults enable it\r\n // unless the request explicitly forces chat without apply patch override... \r\n // Safer: if defaults have applyPatch and request doesn't disable it, reject.\r\n const requestPatch = request.serverTools?.applyPatch;\r\n if (!requestPatch || requestPatch.mode !== \"disabled\") {\r\n throw new RuntimeConfigError(\r\n \"STREAMING_CHAT_DOES_NOT_SUPPORT_APPLY_PATCH\",\r\n \"executeStreamingChat() does not support applyPatch defaults. Use runtime.run() instead.\"\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction startEvent(requestId: string, model: string): RuntimeStreamStartEvent {\r\n return {\r\n type: \"stream.start\",\r\n requestId,\r\n data: {\r\n model,\r\n apiMode: \"chat\",\r\n entrypoint: \"executeStreamingChat\"\r\n }\r\n };\r\n}\r\n\r\nfunction textDeltaEvent(requestId: string, text: string): RuntimeStreamTextDeltaEvent {\r\n return {\r\n type: \"stream.text.delta\",\r\n requestId,\r\n data: { text }\r\n };\r\n}\r\n\r\nfunction reasoningDeltaEvent(requestId: string, text: string): RuntimeStreamReasoningDeltaEvent {\r\n return {\r\n type: \"stream.reasoning.delta\",\r\n requestId,\r\n data: { text }\r\n };\r\n}\r\n\r\nfunction toolCallDeltaEvent(\r\n requestId: string,\r\n data: RuntimeStreamToolCallDeltaEvent[\"data\"]\r\n): RuntimeStreamToolCallDeltaEvent {\r\n return {\r\n type: \"stream.tool_call.delta\",\r\n requestId,\r\n data\r\n };\r\n}\r\n\r\nfunction usageEvent(requestId: string, usage: NonNullable<ReturnType<typeof normalizeUsage>>): RuntimeStreamUsageEvent {\r\n return {\r\n type: \"stream.usage\",\r\n requestId,\r\n data: { usage }\r\n };\r\n}\r\n\r\nfunction warningEvent(requestId: string, warning: RuntimeWarning): RuntimeStreamWarningEvent {\r\n return {\r\n type: \"stream.warning\",\r\n requestId,\r\n data: { warning }\r\n };\r\n}\r\n\r\nfunction errorEvent(requestId: string, error: RuntimeError): RuntimeStreamErrorEvent {\r\n return {\r\n type: \"stream.error\",\r\n requestId,\r\n data: { error }\r\n };\r\n}\r\n\r\nfunction doneEvent(\r\n requestId: string,\r\n data: RuntimeStreamDoneEvent[\"data\"]\r\n): RuntimeStreamDoneEvent {\r\n return {\r\n type: \"stream.done\",\r\n requestId,\r\n data\r\n };\r\n}\r\n\r\nfunction toRuntimeError(error: unknown): RuntimeError {\r\n if (error instanceof RuntimeConfigError) {\r\n return {\r\n code: error.code,\r\n message: error.message,\r\n source: \"validation\",\r\n details: error.details\r\n };\r\n }\r\n if (error instanceof OpenRouterHttpError) {\r\n return {\r\n code: error.code,\r\n message: error.message,\r\n source: \"openrouter\",\r\n retryable: error.retryable,\r\n details: {\r\n providerAttempts: error.providerAttempts,\r\n ...(error.body === undefined ? {} : { response: error.body })\r\n }\r\n };\r\n }\r\n return {\r\n code: \"RUNTIME_ERROR\",\r\n message: error instanceof Error ? error.message : String(error),\r\n source: \"runtime\"\r\n };\r\n}\r\n","import { resolveDefaults, resolveRuntimeOptions } from \"../config/defaults\";\r\nimport { OpenRouterHttpError, RuntimeConfigError } from \"../openrouter/errors\";\r\nimport { runChat } from \"./run-chat\";\r\nimport { runResponses } from \"./run-responses\";\r\nimport { compileRuntimeRequest } from \"./runtime\";\r\nimport { executeStreamingChat } from \"./streaming\";\r\nimport type {\r\n OpenRouterRuntime,\r\n OpenRouterRuntimeOptions,\r\n RuntimeCallOptions,\r\n RuntimeRequest,\r\n RuntimeResponse,\r\n RuntimeStreamEvent\r\n} from \"../types/public\";\r\nimport type { RuntimeContext } from \"../types/internal\";\r\nimport { createRuntimeId } from \"../utils/ids\";\r\n\r\nexport function createOpenRouterRuntime(options: OpenRouterRuntimeOptions): OpenRouterRuntime {\r\n const resolvedOptions = resolveRuntimeOptions(options);\r\n const defaults = resolveDefaults(options);\r\n const context: RuntimeContext = { options: resolvedOptions, defaults };\r\n\r\n return {\r\n compile(request: RuntimeRequest, call?: RuntimeCallOptions) {\r\n return compileRuntimeRequest(request, defaults, resolvedOptions, {\r\n streaming: false,\r\n ...(call?.finalizeBody ? { finalizeBody: call.finalizeBody } : {}),\r\n ...(call?.suppressNestedReasoningFallback ? { suppressNestedReasoningFallback: true } : {})\r\n });\r\n },\r\n\r\n async run(request: RuntimeRequest, call?: RuntimeCallOptions): Promise<RuntimeResponse> {\r\n const requestWithId = { ...request, id: request.id ?? createRuntimeId() };\r\n try {\r\n resolvedOptions.logger?.info?.(\"runtime.request.started\", {\r\n requestId: requestWithId.id,\r\n streaming: false,\r\n entrypoint: \"run\"\r\n });\r\n await resolvedOptions.hooks?.beforeCompile?.(requestWithId);\r\n const compiled = compileRuntimeRequest(requestWithId, defaults, resolvedOptions, {\r\n streaming: false,\r\n ...(call?.finalizeBody ? { finalizeBody: call.finalizeBody } : {}),\r\n ...(call?.suppressNestedReasoningFallback\r\n ? { suppressNestedReasoningFallback: true }\r\n : {})\r\n });\r\n await resolvedOptions.hooks?.afterCompile?.(compiled);\r\n resolvedOptions.logger?.debug?.(\"runtime.request.compiled\", {\r\n requestId: requestWithId.id,\r\n apiMode: compiled.apiMode,\r\n streaming: false,\r\n bodyStream: compiled.body.stream,\r\n streamingWarnings: compiled.warnings\r\n .filter((warning) => warning.code.includes(\"STREAMING\") || warning.code.includes(\"ADVISOR_STREAMING\"))\r\n .map((warning) => warning.code)\r\n });\r\n await resolvedOptions.hooks?.beforeOpenRouterRequest?.(compiled);\r\n const response = compiled.apiMode === \"chat\"\r\n ? await runChat(requestWithId, compiled, context)\r\n : await runResponses(requestWithId, compiled, context);\r\n await resolvedOptions.hooks?.afterOpenRouterResponse?.(response.raw.response);\r\n resolvedOptions.logger?.info?.(\"runtime.response.normalized\", {\r\n requestId: requestWithId.id,\r\n status: response.status,\r\n streaming: false\r\n });\r\n return response;\r\n } catch (error) {\r\n return errorResponse(requestWithId, error);\r\n }\r\n },\r\n\r\n executeStreamingChat(request: RuntimeRequest, call?: RuntimeCallOptions): AsyncIterable<RuntimeStreamEvent> {\r\n const requestWithId = { ...request, id: request.id ?? createRuntimeId() };\r\n return executeStreamingChat(requestWithId, context, call);\r\n }\r\n };\r\n\r\n function errorResponse(request: RuntimeRequest, error: unknown): RuntimeResponse {\r\n const runtimeError = normalizeError(error);\r\n if (error instanceof RuntimeConfigError && defaults.onPolicyViolation === \"throw\") throw error;\r\n return {\r\n id: request.id ?? createRuntimeId(\"orerr\"),\r\n status: \"failed\",\r\n apiMode: request.apiMode === \"responses\" ? \"responses\" : \"chat\",\r\n model: request.model ?? resolvedOptions.defaultModel ?? \"\",\r\n text: \"\",\r\n citations: [],\r\n images: [],\r\n patches: [],\r\n toolUsage: {\r\n serverTools: {\r\n webSearch: { requested: false, required: false, used: false },\r\n webFetch: { requested: false, required: false, used: false },\r\n datetime: { requested: false, required: false, used: false },\r\n imageGeneration: { requested: false, required: false, used: false },\r\n applyPatch: { requested: false, required: false, used: false },\r\n fusion: { requested: false, required: false, used: false },\r\n advisor: { requested: false, required: false, used: false },\r\n subagent: { requested: false, required: false, used: false }\r\n },\r\n functionTools: []\r\n },\r\n warnings: [],\r\n errors: [runtimeError],\r\n raw: {\r\n request,\r\n response: error instanceof OpenRouterHttpError ? error.body : undefined\r\n },\r\n ...(request.metadata ? { metadata: request.metadata } : {})\r\n };\r\n }\r\n}\r\n\r\nfunction normalizeError(error: unknown) {\r\n if (error instanceof RuntimeConfigError) {\r\n return {\r\n code: error.code,\r\n message: error.message,\r\n source: \"validation\" as const,\r\n ...optionalErrorField(\"operatorHint\", operatorHintFor(error.code)),\r\n details: error.details\r\n };\r\n }\r\n if (error instanceof OpenRouterHttpError) {\r\n return {\r\n code: error.code,\r\n message: error.message,\r\n source: \"openrouter\" as const,\r\n retryable: error.retryable,\r\n ...optionalErrorField(\"operatorHint\", operatorHintFor(error.code)),\r\n details: {\r\n providerAttempts: error.providerAttempts,\r\n ...(error.body === undefined ? {} : { response: error.body })\r\n }\r\n };\r\n }\r\n return {\r\n code: \"RUNTIME_ERROR\",\r\n message: error instanceof Error ? error.message : String(error),\r\n source: \"runtime\" as const\r\n };\r\n}\r\n\r\nfunction optionalErrorField<T>(key: string, value: T | undefined): Record<string, T> {\r\n return value === undefined ? {} : { [key]: value };\r\n}\r\n\r\nfunction operatorHintFor(code: string): string | undefined {\r\n switch (code) {\r\n case \"OPENROUTER_API_KEY_MISSING\":\r\n return \"Set OPENROUTER_API_KEY or OPEN_ROUTER_KEY, or pass apiKey when creating the runtime.\";\r\n case \"PROVIDER_AUTH_FAILED\":\r\n return \"Check that the OpenRouter API key is present, valid, and authorized for this route.\";\r\n case \"PROVIDER_RATE_LIMITED\":\r\n return \"Retry after the provider rate limit resets or reduce request concurrency.\";\r\n case \"PROVIDER_QUOTA_EXCEEDED\":\r\n return \"Check provider billing, credits, quota, and project limits.\";\r\n case \"PROVIDER_MODEL_NOT_FOUND\":\r\n return \"Verify the model id and whether it is available through OpenRouter for this account.\";\r\n case \"PROVIDER_GATEWAY_UNREACHABLE\":\r\n return \"Retry later; the provider gateway was unreachable or timed out.\";\r\n default:\r\n return undefined;\r\n }\r\n}\r\n"],"mappings":"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","names":["visit","visit","stringValue","visit","optional","optional","enabled","isRecord","optional","optional","optional","parseBody","extractMessage","classifyProviderFailure","isRetryableStatus"]}
|