@x12i/openrouter-runtime 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/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/create-runtime.ts"],"sourcesContent":["import type { OpenRouterRuntimeOptions } from \"../types/public\";\nimport type { RequiredRuntimeDefaults, RequiredRuntimeOptions } from \"../types/internal\";\n\nexport function resolveRuntimeOptions(options: OpenRouterRuntimeOptions): RequiredRuntimeOptions {\n return {\n ...options,\n baseUrl: options.baseUrl ?? \"https://openrouter.ai/api/v1\",\n defaultHeaders: options.defaultHeaders ?? {},\n fetch: options.fetch ?? globalThis.fetch\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","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 class OpenRouterHttpError extends Error {\n constructor(\n public readonly status: number,\n public readonly code: string,\n message: string,\n public readonly body?: unknown,\n public readonly retryable = false\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 } 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 for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await sendOnce(compiled, options, timeoutMs);\n } catch (error) {\n lastError = error;\n const retryable = error instanceof OpenRouterHttpError ? error.retryable : true;\n if (!retryable || attempt >= attempts) throw error;\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 throw new OpenRouterHttpError(\n response.status,\n statusToCode(response.status),\n extractMessage(body) ?? `OpenRouter request failed with status ${response.status}.`,\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, \"OPENROUTER_TIMEOUT\", \"OpenRouter request timed out.\", undefined, true);\n }\n throw error;\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 statusToCode(status: number): string {\n if (status === 401) return \"OPENROUTER_AUTH_FAILED\";\n if (status === 429) return \"OPENROUTER_RATE_LIMITED\";\n return \"OPENROUTER_REQUEST_FAILED\";\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 } 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): CompiledOpenRouterRequest {\n const warnings: RuntimeWarning[] = [];\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\n return {\n apiMode,\n url: endpointFor(options.baseUrl ?? \"https://openrouter.ai/api/v1\", apiMode),\n headers,\n body,\n warnings\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_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 { 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 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\", { requestId: requestWithId.id });\n await resolvedOptions.hooks?.beforeCompile?.(requestWithId);\n const compiled = compileRuntimeRequest(requestWithId, defaults, resolvedOptions);\n await resolvedOptions.hooks?.afterCompile?.(compiled);\n resolvedOptions.logger?.debug?.(\"runtime.request.compiled\", {\n requestId: requestWithId.id,\n apiMode: compiled.apiMode\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\", { requestId: requestWithId.id, status: response.status });\n return response;\n } catch (error) {\n return errorResponse(requestWithId, error);\n }\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 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 details: error.body\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"],"mappings":"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","names":["visit","visit","stringValue","visit","optional","optional","enabled","optional","optional","optional"]}
1
+ {"version":3,"sources":["../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 { OpenRouterRuntimeOptions } from \"../types/public\";\nimport type { RequiredRuntimeDefaults, RequiredRuntimeOptions } from \"../types/internal\";\n\nexport function resolveRuntimeOptions(options: OpenRouterRuntimeOptions): RequiredRuntimeOptions {\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 };\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 === true) {\n warnings.push({\n code: \"STREAMING_OVERRIDE_IGNORED_FOR_RUN\",\n message: \"runtime.run() is non-streaming. Use runtime.stream() when streaming is implemented.\"\n });\n }\n delete body.stream;\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_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\nexport async function* streamNotImplemented(): AsyncIterable<never> {\n throw new RuntimeConfigError(\n \"STREAMING_NOT_IMPLEMENTED\",\n \"Streaming is reserved for a later phase. 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 { streamNotImplemented } 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\", { requestId: requestWithId.id });\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 });\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\", { requestId: requestWithId.id, status: response.status });\n return response;\n } catch (error) {\n return errorResponse(requestWithId, error);\n }\n },\n stream: streamNotImplemented\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/openrouter-runtime",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "TypeScript runtime for OpenRouter models, server tools, user tools, citations, patches, and normalized responses.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",