@x12i/openrouter-runtime 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/index.cjs +22 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +22 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,6 +47,15 @@ await runtime.run({
|
|
|
47
47
|
});
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
### Citation Policy
|
|
51
|
+
|
|
52
|
+
`defaults.requireCitationsWhenSearchUsed` controls the package-wide default for web-search citation enforcement. A request-level `serverTools.webSearch.requireCitations` value overrides that default:
|
|
53
|
+
|
|
54
|
+
- `requireCitations: true`: if web search is used and no citations are extracted, the runtime emits `CITATIONS_REQUIRED_BUT_MISSING`.
|
|
55
|
+
- `requireCitations: false`: disables citation enforcement for that request, even if the global default is `true`.
|
|
56
|
+
|
|
57
|
+
When `defaults.onPolicyViolation` is `"throw"`, citation policy failures are returned as `errors[]` with `source: "policy"` and `status: "policy_violation"`. When it is `"return_error"`, they remain in `warnings[]`.
|
|
58
|
+
|
|
50
59
|
`applyPatch` automatically selects the Responses API. The runtime returns patch proposals and never mutates files unless an explicit `patchApplier` is supplied.
|
|
51
60
|
|
|
52
61
|
## Function Tools
|
package/dist/index.cjs
CHANGED
|
@@ -502,12 +502,13 @@ function optional3(key, value) {
|
|
|
502
502
|
}
|
|
503
503
|
|
|
504
504
|
// src/policies/post-response-validation.ts
|
|
505
|
-
async function validatePostResponse(response, defaults) {
|
|
505
|
+
async function validatePostResponse(response, defaults, serverTools) {
|
|
506
506
|
const errors = [...response.errors];
|
|
507
507
|
const warnings = [...response.warnings];
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
508
|
+
const webSearchUsage = response.toolUsage.serverTools.webSearch;
|
|
509
|
+
if (webSearchUsage.requested && response.citations.length > 0 && !webSearchUsage.used) {
|
|
510
|
+
webSearchUsage.used = true;
|
|
511
|
+
webSearchUsage.callCount = Math.max(webSearchUsage.callCount ?? 0, 1);
|
|
511
512
|
}
|
|
512
513
|
for (const [key, usage] of Object.entries(response.toolUsage.serverTools)) {
|
|
513
514
|
if (usage.required && !usage.used) {
|
|
@@ -521,11 +522,18 @@ async function validatePostResponse(response, defaults) {
|
|
|
521
522
|
}
|
|
522
523
|
}
|
|
523
524
|
}
|
|
524
|
-
|
|
525
|
-
|
|
525
|
+
const citationsRequired = serverTools?.webSearch?.requireCitations ?? defaults.requireCitationsWhenSearchUsed;
|
|
526
|
+
if (citationsRequired && webSearchUsage.used && response.citations.length === 0) {
|
|
527
|
+
const violation = {
|
|
526
528
|
code: "CITATIONS_REQUIRED_BUT_MISSING",
|
|
527
|
-
message: "Web search was
|
|
528
|
-
}
|
|
529
|
+
message: "Web search was used but no citations were extracted."
|
|
530
|
+
};
|
|
531
|
+
webSearchUsage.policyViolation = webSearchUsage.policyViolation ?? violation.code;
|
|
532
|
+
if (defaults.onPolicyViolation === "throw") {
|
|
533
|
+
errors.push({ ...violation, source: "policy" });
|
|
534
|
+
} else {
|
|
535
|
+
warnings.push(violation);
|
|
536
|
+
}
|
|
529
537
|
}
|
|
530
538
|
return {
|
|
531
539
|
...response,
|
|
@@ -1109,6 +1117,7 @@ async function runChat(request, compiled, context) {
|
|
|
1109
1117
|
activeCompiled = { ...activeCompiled, body: { ...body, messages, tool_choice: "auto" } };
|
|
1110
1118
|
}
|
|
1111
1119
|
const model = typeof compiled.body.model === "string" ? compiled.body.model : "";
|
|
1120
|
+
const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);
|
|
1112
1121
|
const normalized = normalizeChatResponse({
|
|
1113
1122
|
requestBody: activeCompiled.body,
|
|
1114
1123
|
response,
|
|
@@ -1116,10 +1125,10 @@ async function runChat(request, compiled, context) {
|
|
|
1116
1125
|
model,
|
|
1117
1126
|
warnings: compiled.warnings,
|
|
1118
1127
|
functionToolUsage: functionUsage,
|
|
1119
|
-
...optional4("serverTools",
|
|
1128
|
+
...optional4("serverTools", serverTools),
|
|
1120
1129
|
...optional4("metadata", request.metadata)
|
|
1121
1130
|
});
|
|
1122
|
-
return validatePostResponse(normalized, context.defaults);
|
|
1131
|
+
return validatePostResponse(normalized, context.defaults, serverTools);
|
|
1123
1132
|
}
|
|
1124
1133
|
function optional4(key, value) {
|
|
1125
1134
|
return value === void 0 ? {} : { [key]: value };
|
|
@@ -1211,16 +1220,17 @@ async function runResponses(request, compiled, context) {
|
|
|
1211
1220
|
};
|
|
1212
1221
|
}
|
|
1213
1222
|
const model = typeof compiled.body.model === "string" ? compiled.body.model : "";
|
|
1223
|
+
const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);
|
|
1214
1224
|
const normalized = normalizeResponsesResponse({
|
|
1215
1225
|
requestBody: activeCompiled.body,
|
|
1216
1226
|
response,
|
|
1217
1227
|
model,
|
|
1218
1228
|
warnings: compiled.warnings,
|
|
1219
1229
|
functionToolUsage: functionUsage,
|
|
1220
|
-
...optional6("serverTools",
|
|
1230
|
+
...optional6("serverTools", serverTools),
|
|
1221
1231
|
...optional6("metadata", request.metadata)
|
|
1222
1232
|
});
|
|
1223
|
-
return validatePostResponse(normalized, context.defaults);
|
|
1233
|
+
return validatePostResponse(normalized, context.defaults, serverTools);
|
|
1224
1234
|
}
|
|
1225
1235
|
function optional6(key, value) {
|
|
1226
1236
|
return value === void 0 ? {} : { [key]: value };
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/config/defaults.ts","../src/openrouter/errors.ts","../src/utils/delay.ts","../src/openrouter/http-client.ts","../src/utils/json.ts","../src/function-tools/tool-messages.ts","../src/normalize/citations.ts","../src/normalize/images.ts","../src/normalize/patches.ts","../src/normalize/tool-usage.ts","../src/normalize/usage.ts","../src/utils/ids.ts","../src/normalize/normalize-chat-response.ts","../src/policies/post-response-validation.ts","../src/config/normalize-model.ts","../src/config/validate-runtime-request.ts","../src/openrouter/endpoints.ts","../src/openrouter/headers.ts","../src/tools/nested-tools.ts","../src/tools/server-tools.ts","../src/runtime/runtime.ts","../src/function-tools/registry.ts","../src/function-tools/parse-tool-args.ts","../src/function-tools/execute-function-tool.ts","../src/runtime/tool-loop.ts","../src/runtime/run-chat.ts","../src/normalize/normalize-responses-response.ts","../src/runtime/run-responses.ts","../src/runtime/create-runtime.ts"],"sourcesContent":["export { createOpenRouterRuntime } from \"./runtime/create-runtime\";\nexport { compileRuntimeRequest } from \"./runtime/runtime\";\nexport { RuntimeConfigError, OpenRouterHttpError } from \"./openrouter/errors\";\nexport { buildOpenRouterServerTools } from \"./tools/server-tools\";\n\nexport type {\n OpenRouterRuntime,\n OpenRouterRuntimeOptions,\n RuntimeRequest,\n RuntimeResponse,\n RuntimeMessage,\n RuntimeServerToolsPolicy,\n WebSearchPolicy,\n WebFetchPolicy,\n DatetimePolicy,\n ImageGenerationPolicy,\n ApplyPatchPolicy,\n FusionPolicy,\n AdvisorPolicy,\n SubagentPolicy,\n RuntimeCitation,\n RuntimeGeneratedImage,\n RuntimePatchProposal,\n RuntimeUsage,\n RuntimeToolUsage,\n RuntimeFunctionToolDefinition,\n RuntimeToolExecutor,\n RuntimeDefaults,\n CompiledOpenRouterRequest\n} from \"./types/public\";\n","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 } from \"../types/public\";\n\nexport async function validatePostResponse(response: RuntimeResponse, defaults: RuntimeDefaults): Promise<RuntimeResponse> {\n const errors = [...response.errors];\n const warnings = [...response.warnings];\n if (\n response.toolUsage.serverTools.webSearch.requested &&\n response.citations.length > 0 &&\n !response.toolUsage.serverTools.webSearch.used\n ) {\n response.toolUsage.serverTools.webSearch.used = true;\n response.toolUsage.serverTools.webSearch.callCount = Math.max(response.toolUsage.serverTools.webSearch.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 if (\n defaults.requireCitationsWhenSearchUsed &&\n response.toolUsage.serverTools.webSearch.requested &&\n response.citations.length === 0\n ) {\n warnings.push({\n code: \"CITATIONS_REQUIRED_BUT_MISSING\",\n message: \"Web search was requested but no citations were extracted.\"\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 normalized = normalizeChatResponse({\n requestBody: activeCompiled.body,\n response,\n apiMode: \"chat\",\n model,\n warnings: compiled.warnings,\n functionToolUsage: functionUsage,\n ...optional(\"serverTools\", mergeServerTools(context.defaults.serverTools, request.serverTools)),\n ...optional(\"metadata\", request.metadata)\n });\n return validatePostResponse(normalized, context.defaults);\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 normalized = normalizeResponsesResponse({\n requestBody: activeCompiled.body,\n response,\n model,\n warnings: compiled.warnings,\n functionToolUsage: functionUsage,\n ...optional(\"serverTools\", mergeServerTools(context.defaults.serverTools, request.serverTools)),\n ...optional(\"metadata\", request.metadata)\n });\n return validatePostResponse(normalized, context.defaults);\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/index.ts","../src/config/defaults.ts","../src/openrouter/errors.ts","../src/utils/delay.ts","../src/openrouter/http-client.ts","../src/utils/json.ts","../src/function-tools/tool-messages.ts","../src/normalize/citations.ts","../src/normalize/images.ts","../src/normalize/patches.ts","../src/normalize/tool-usage.ts","../src/normalize/usage.ts","../src/utils/ids.ts","../src/normalize/normalize-chat-response.ts","../src/policies/post-response-validation.ts","../src/config/normalize-model.ts","../src/config/validate-runtime-request.ts","../src/openrouter/endpoints.ts","../src/openrouter/headers.ts","../src/tools/nested-tools.ts","../src/tools/server-tools.ts","../src/runtime/runtime.ts","../src/function-tools/registry.ts","../src/function-tools/parse-tool-args.ts","../src/function-tools/execute-function-tool.ts","../src/runtime/tool-loop.ts","../src/runtime/run-chat.ts","../src/normalize/normalize-responses-response.ts","../src/runtime/run-responses.ts","../src/runtime/create-runtime.ts"],"sourcesContent":["export { createOpenRouterRuntime } from \"./runtime/create-runtime\";\nexport { compileRuntimeRequest } from \"./runtime/runtime\";\nexport { RuntimeConfigError, OpenRouterHttpError } from \"./openrouter/errors\";\nexport { buildOpenRouterServerTools } from \"./tools/server-tools\";\n\nexport type {\n OpenRouterRuntime,\n OpenRouterRuntimeOptions,\n RuntimeRequest,\n RuntimeResponse,\n RuntimeMessage,\n RuntimeServerToolsPolicy,\n WebSearchPolicy,\n WebFetchPolicy,\n DatetimePolicy,\n ImageGenerationPolicy,\n ApplyPatchPolicy,\n FusionPolicy,\n AdvisorPolicy,\n SubagentPolicy,\n RuntimeCitation,\n RuntimeGeneratedImage,\n RuntimePatchProposal,\n RuntimeUsage,\n RuntimeToolUsage,\n RuntimeError,\n RuntimeWarning,\n RuntimePolicyViolation,\n ServerToolUsage,\n ServerToolKey,\n RuntimeFunctionToolDefinition,\n RuntimeToolExecutor,\n RuntimeDefaults,\n CompiledOpenRouterRequest\n} from \"./types/public\";\n","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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -393,4 +393,4 @@ interface OpenRouterTool {
|
|
|
393
393
|
|
|
394
394
|
declare function buildOpenRouterServerTools(policy?: RuntimeServerToolsPolicy): OpenRouterTool[];
|
|
395
395
|
|
|
396
|
-
export { type AdvisorPolicy, type ApplyPatchPolicy, type CompiledOpenRouterRequest, type DatetimePolicy, type FusionPolicy, type ImageGenerationPolicy, OpenRouterHttpError, type OpenRouterRuntime, type OpenRouterRuntimeOptions, type RuntimeCitation, RuntimeConfigError, type RuntimeDefaults, type RuntimeFunctionToolDefinition, type RuntimeGeneratedImage, type RuntimeMessage, type RuntimePatchProposal, type RuntimeRequest, type RuntimeResponse, type RuntimeServerToolsPolicy, type RuntimeToolExecutor, type RuntimeToolUsage, type RuntimeUsage, type SubagentPolicy, type WebFetchPolicy, type WebSearchPolicy, buildOpenRouterServerTools, compileRuntimeRequest, createOpenRouterRuntime };
|
|
396
|
+
export { type AdvisorPolicy, type ApplyPatchPolicy, type CompiledOpenRouterRequest, type DatetimePolicy, type FusionPolicy, type ImageGenerationPolicy, OpenRouterHttpError, type OpenRouterRuntime, type OpenRouterRuntimeOptions, type RuntimeCitation, RuntimeConfigError, type RuntimeDefaults, type RuntimeError, type RuntimeFunctionToolDefinition, type RuntimeGeneratedImage, type RuntimeMessage, type RuntimePatchProposal, type RuntimePolicyViolation, type RuntimeRequest, type RuntimeResponse, type RuntimeServerToolsPolicy, type RuntimeToolExecutor, type RuntimeToolUsage, type RuntimeUsage, type RuntimeWarning, type ServerToolKey, type ServerToolUsage, type SubagentPolicy, type WebFetchPolicy, type WebSearchPolicy, buildOpenRouterServerTools, compileRuntimeRequest, createOpenRouterRuntime };
|
package/dist/index.d.ts
CHANGED
|
@@ -393,4 +393,4 @@ interface OpenRouterTool {
|
|
|
393
393
|
|
|
394
394
|
declare function buildOpenRouterServerTools(policy?: RuntimeServerToolsPolicy): OpenRouterTool[];
|
|
395
395
|
|
|
396
|
-
export { type AdvisorPolicy, type ApplyPatchPolicy, type CompiledOpenRouterRequest, type DatetimePolicy, type FusionPolicy, type ImageGenerationPolicy, OpenRouterHttpError, type OpenRouterRuntime, type OpenRouterRuntimeOptions, type RuntimeCitation, RuntimeConfigError, type RuntimeDefaults, type RuntimeFunctionToolDefinition, type RuntimeGeneratedImage, type RuntimeMessage, type RuntimePatchProposal, type RuntimeRequest, type RuntimeResponse, type RuntimeServerToolsPolicy, type RuntimeToolExecutor, type RuntimeToolUsage, type RuntimeUsage, type SubagentPolicy, type WebFetchPolicy, type WebSearchPolicy, buildOpenRouterServerTools, compileRuntimeRequest, createOpenRouterRuntime };
|
|
396
|
+
export { type AdvisorPolicy, type ApplyPatchPolicy, type CompiledOpenRouterRequest, type DatetimePolicy, type FusionPolicy, type ImageGenerationPolicy, OpenRouterHttpError, type OpenRouterRuntime, type OpenRouterRuntimeOptions, type RuntimeCitation, RuntimeConfigError, type RuntimeDefaults, type RuntimeError, type RuntimeFunctionToolDefinition, type RuntimeGeneratedImage, type RuntimeMessage, type RuntimePatchProposal, type RuntimePolicyViolation, type RuntimeRequest, type RuntimeResponse, type RuntimeServerToolsPolicy, type RuntimeToolExecutor, type RuntimeToolUsage, type RuntimeUsage, type RuntimeWarning, type ServerToolKey, type ServerToolUsage, type SubagentPolicy, type WebFetchPolicy, type WebSearchPolicy, buildOpenRouterServerTools, compileRuntimeRequest, createOpenRouterRuntime };
|
package/dist/index.js
CHANGED
|
@@ -472,12 +472,13 @@ function optional3(key, value) {
|
|
|
472
472
|
}
|
|
473
473
|
|
|
474
474
|
// src/policies/post-response-validation.ts
|
|
475
|
-
async function validatePostResponse(response, defaults) {
|
|
475
|
+
async function validatePostResponse(response, defaults, serverTools) {
|
|
476
476
|
const errors = [...response.errors];
|
|
477
477
|
const warnings = [...response.warnings];
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
478
|
+
const webSearchUsage = response.toolUsage.serverTools.webSearch;
|
|
479
|
+
if (webSearchUsage.requested && response.citations.length > 0 && !webSearchUsage.used) {
|
|
480
|
+
webSearchUsage.used = true;
|
|
481
|
+
webSearchUsage.callCount = Math.max(webSearchUsage.callCount ?? 0, 1);
|
|
481
482
|
}
|
|
482
483
|
for (const [key, usage] of Object.entries(response.toolUsage.serverTools)) {
|
|
483
484
|
if (usage.required && !usage.used) {
|
|
@@ -491,11 +492,18 @@ async function validatePostResponse(response, defaults) {
|
|
|
491
492
|
}
|
|
492
493
|
}
|
|
493
494
|
}
|
|
494
|
-
|
|
495
|
-
|
|
495
|
+
const citationsRequired = serverTools?.webSearch?.requireCitations ?? defaults.requireCitationsWhenSearchUsed;
|
|
496
|
+
if (citationsRequired && webSearchUsage.used && response.citations.length === 0) {
|
|
497
|
+
const violation = {
|
|
496
498
|
code: "CITATIONS_REQUIRED_BUT_MISSING",
|
|
497
|
-
message: "Web search was
|
|
498
|
-
}
|
|
499
|
+
message: "Web search was used but no citations were extracted."
|
|
500
|
+
};
|
|
501
|
+
webSearchUsage.policyViolation = webSearchUsage.policyViolation ?? violation.code;
|
|
502
|
+
if (defaults.onPolicyViolation === "throw") {
|
|
503
|
+
errors.push({ ...violation, source: "policy" });
|
|
504
|
+
} else {
|
|
505
|
+
warnings.push(violation);
|
|
506
|
+
}
|
|
499
507
|
}
|
|
500
508
|
return {
|
|
501
509
|
...response,
|
|
@@ -1079,6 +1087,7 @@ async function runChat(request, compiled, context) {
|
|
|
1079
1087
|
activeCompiled = { ...activeCompiled, body: { ...body, messages, tool_choice: "auto" } };
|
|
1080
1088
|
}
|
|
1081
1089
|
const model = typeof compiled.body.model === "string" ? compiled.body.model : "";
|
|
1090
|
+
const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);
|
|
1082
1091
|
const normalized = normalizeChatResponse({
|
|
1083
1092
|
requestBody: activeCompiled.body,
|
|
1084
1093
|
response,
|
|
@@ -1086,10 +1095,10 @@ async function runChat(request, compiled, context) {
|
|
|
1086
1095
|
model,
|
|
1087
1096
|
warnings: compiled.warnings,
|
|
1088
1097
|
functionToolUsage: functionUsage,
|
|
1089
|
-
...optional4("serverTools",
|
|
1098
|
+
...optional4("serverTools", serverTools),
|
|
1090
1099
|
...optional4("metadata", request.metadata)
|
|
1091
1100
|
});
|
|
1092
|
-
return validatePostResponse(normalized, context.defaults);
|
|
1101
|
+
return validatePostResponse(normalized, context.defaults, serverTools);
|
|
1093
1102
|
}
|
|
1094
1103
|
function optional4(key, value) {
|
|
1095
1104
|
return value === void 0 ? {} : { [key]: value };
|
|
@@ -1181,16 +1190,17 @@ async function runResponses(request, compiled, context) {
|
|
|
1181
1190
|
};
|
|
1182
1191
|
}
|
|
1183
1192
|
const model = typeof compiled.body.model === "string" ? compiled.body.model : "";
|
|
1193
|
+
const serverTools = mergeServerTools(context.defaults.serverTools, request.serverTools);
|
|
1184
1194
|
const normalized = normalizeResponsesResponse({
|
|
1185
1195
|
requestBody: activeCompiled.body,
|
|
1186
1196
|
response,
|
|
1187
1197
|
model,
|
|
1188
1198
|
warnings: compiled.warnings,
|
|
1189
1199
|
functionToolUsage: functionUsage,
|
|
1190
|
-
...optional6("serverTools",
|
|
1200
|
+
...optional6("serverTools", serverTools),
|
|
1191
1201
|
...optional6("metadata", request.metadata)
|
|
1192
1202
|
});
|
|
1193
|
-
return validatePostResponse(normalized, context.defaults);
|
|
1203
|
+
return validatePostResponse(normalized, context.defaults, serverTools);
|
|
1194
1204
|
}
|
|
1195
1205
|
function optional6(key, value) {
|
|
1196
1206
|
return value === void 0 ? {} : { [key]: value };
|
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 } from \"../types/public\";\n\nexport async function validatePostResponse(response: RuntimeResponse, defaults: RuntimeDefaults): Promise<RuntimeResponse> {\n const errors = [...response.errors];\n const warnings = [...response.warnings];\n if (\n response.toolUsage.serverTools.webSearch.requested &&\n response.citations.length > 0 &&\n !response.toolUsage.serverTools.webSearch.used\n ) {\n response.toolUsage.serverTools.webSearch.used = true;\n response.toolUsage.serverTools.webSearch.callCount = Math.max(response.toolUsage.serverTools.webSearch.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 if (\n defaults.requireCitationsWhenSearchUsed &&\n response.toolUsage.serverTools.webSearch.requested &&\n response.citations.length === 0\n ) {\n warnings.push({\n code: \"CITATIONS_REQUIRED_BUT_MISSING\",\n message: \"Web search was requested but no citations were extracted.\"\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 normalized = normalizeChatResponse({\n requestBody: activeCompiled.body,\n response,\n apiMode: \"chat\",\n model,\n warnings: compiled.warnings,\n functionToolUsage: functionUsage,\n ...optional(\"serverTools\", mergeServerTools(context.defaults.serverTools, request.serverTools)),\n ...optional(\"metadata\", request.metadata)\n });\n return validatePostResponse(normalized, context.defaults);\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 normalized = normalizeResponsesResponse({\n requestBody: activeCompiled.body,\n response,\n model,\n warnings: compiled.warnings,\n functionToolUsage: functionUsage,\n ...optional(\"serverTools\", mergeServerTools(context.defaults.serverTools, request.serverTools)),\n ...optional(\"metadata\", request.metadata)\n });\n return validatePostResponse(normalized, context.defaults);\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/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"]}
|
package/package.json
CHANGED