{"version":3,"sources":["../src/core/runtime-types.ts","../src/core/admission-utils.ts","../src/core/error-text.ts","../src/core/failure-headers.ts","../src/core/failure-retry-after.ts","../src/core/retry-snapshot.ts","../src/core/retry.ts","../src/core/failure.ts","../src/core/health-record.ts","../src/core/health-store.ts","../src/core/modality.ts","../src/core/http-headers.ts","../src/core/router-fallback-options.ts","../src/core/abort-signal.ts","../src/core/json-value.ts","../src/core/call-options-primitives.ts","../src/core/call-options-prompt.ts","../src/core/call-options-output.ts","../src/core/call-options-extras.ts","../src/core/call-options.ts","../src/core/file-data.ts","../src/core/provider-body.ts","../src/core/router-generate-validation.ts","../src/core/router-generate-snapshot.ts","../src/core/router-generate-content.ts","../src/core/router-generate-validator.ts","../src/core/router-generate-envelope.ts","../src/core/budget.ts","../src/core/ordering.ts","../src/core/cooldown.ts","../src/core/timeout.ts","../src/core/router-options.ts","../src/core/timeout-operation.ts","../src/core/stream-part-fields.ts","../src/core/stream-candidate-snapshot.ts","../src/core/stream-candidate-hooks.ts","../src/core/stream-candidate-cleanup.ts","../src/core/stream-reader.ts","../src/core/stream-lifecycle-validator.ts","../src/core/stream-part-json.ts","../src/core/stream-part-snapshot.ts","../src/core/stream-part-validation.ts","../src/core/observability.ts","../src/core/stream-config.ts","../src/core/stream-pump-context.ts","../src/core/stream-pump-state.ts","../src/core/stream-pump-admission.ts","../src/core/stream-pump-observability.ts","../src/core/stream-pump-failure.ts","../src/core/stream-pump-parts.ts","../src/core/stream-pump.ts","../src/core/stream-result.ts","../src/core/stream.ts","../src/core/router-model-options.ts","../src/core/router-supported-urls.ts","../src/core/admission-storage.ts","../src/core/admission-capacity.ts","../src/core/admission.ts","../src/core/health-overlay.ts","../src/core/candidate-health-store-context.ts","../src/core/candidate-health-store.ts","../src/core/candidate-health-transitions.ts","../src/core/candidate-health.ts","../src/core/router-entry.ts","../src/core/router-model-config.ts","../src/core/router-model-state.ts","../src/core/router-attempt-observability.ts","../src/core/router-attempt-admission.ts","../src/core/router-attempt-runtime.ts","../src/core/router-stream-language-model.ts","../src/core/router-language-model.ts","../src/core/router.ts"],"names":["values","isObjectLike","getTopLevelMediaType","MAX_METADATA_FIELD_LENGTH","isSignalAborted","durationMs","signal","FINISH_REASONS","validUsageNumber","validOptionalString","validOptionalBoolean","validWarning","local","model","adaptiveConcurrency","healthKey","maxConcurrency","supports","providerFamily"],"mappings":"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","file":"index.cjs","sourcesContent":["const typedArrayTagGetter = Object.getOwnPropertyDescriptor(\n  Object.getPrototypeOf(Uint8Array.prototype),\n  Symbol.toStringTag\n)?.get;\n\n/** Consume a native Promise without consulting arbitrary `then` properties. */\nexport function consumeGenuinePromise(value: unknown): boolean {\n  if (\n    !(\n      (typeof value === \"object\" && value !== null) ||\n      typeof value === \"function\"\n    )\n  ) {\n    return false;\n  }\n  try {\n    const chained = Promise.prototype.then.call(\n      value,\n      () => undefined,\n      () => undefined\n    );\n    Promise.prototype.then.call(\n      chained,\n      () => undefined,\n      () => undefined\n    );\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/** Consume Promise-valued own data fields without invoking accessors. */\nexport function consumeOwnDataPromiseFields(\n  value: object,\n  keys: readonly (string | number)[]\n): void {\n  for (const key of keys) {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, key);\n      if (descriptor !== undefined && \"value\" in descriptor) {\n        consumeGenuinePromise(descriptor.value);\n      }\n    } catch {\n      // A malformed Proxy field cannot prevent checks of later bounded keys.\n    }\n  }\n}\n\n/** Capture a native/cross-realm Promise without consulting a `then` property. */\nexport function captureGenuinePromise<T>(\n  value: unknown\n): Promise<T> | undefined {\n  let genuine = true;\n  const captured = new Promise<T>((resolve, reject) => {\n    try {\n      Promise.prototype.then.call(value, resolve, reject);\n    } catch {\n      genuine = false;\n    }\n  });\n  return genuine ? captured : undefined;\n}\n\n/** Require a genuine Promise and map brand failures without reading `then`. */\nexport function requireGenuinePromise<T>(\n  value: unknown,\n  errorFactory: (cause: unknown) => unknown\n): Promise<T> {\n  return new Promise((resolve, reject) => {\n    try {\n      Promise.prototype.then.call(value, resolve, reject);\n    } catch (error) {\n      reject(errorFactory(error));\n    }\n  });\n}\n\n/** Cross-realm-safe Uint8Array check for provider file payloads. */\nexport function isUint8ArrayValue(value: unknown): value is Uint8Array {\n  if (typedArrayTagGetter === undefined) {\n    return false;\n  }\n  try {\n    return (\n      ArrayBuffer.isView(value) &&\n      Reflect.apply(typedArrayTagGetter, value, []) === \"Uint8Array\"\n    );\n  } catch {\n    return false;\n  }\n}\n\n/** Cross-realm-safe URL check using the platform URL brand operation. */\nexport function isUrlValue(value: unknown): value is URL {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  try {\n    URL.prototype.toString.call(value);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/** Cross-realm-safe finite Date check using the Date internal slot. */\nexport function isDateValue(value: unknown): value is Date {\n  try {\n    return Number.isFinite(Date.prototype.getTime.call(value));\n  } catch {\n    return false;\n  }\n}\n\n/** Accept ordinary records across realms while rejecting class/runtime containers. */\nexport function isPlainObjectValue<T>(\n  value: T\n): value is T & Record<string, unknown> {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return false;\n  }\n  try {\n    const prototype = Object.getPrototypeOf(value);\n    return prototype === null || Object.getPrototypeOf(prototype) === null;\n  } catch {\n    return false;\n  }\n}\n\n/** Validate template-literal identifiers shaped as `<namespace>.<name>`. */\nexport function isDottedIdentifier(\n  value: unknown\n): value is `${string}.${string}` {\n  return (\n    isBoundedIdentifier(value) && value.indexOf(\".\") > 0 && !value.endsWith(\".\")\n  );\n}\n\n/** Bound opaque IDs used in maps/sets while rejecting ambiguous empty IDs. */\nexport function isBoundedIdentifier(\n  value: unknown,\n  maximum = 4096\n): value is string {\n  return (\n    typeof value === \"string\" && value.length > 0 && value.length <= maximum\n  );\n}\n\n/** Array check that rejects holes skipped by every/map and inherited indexes. */\nexport function isDenseArray(value: readonly unknown[]): boolean {\n  for (let index = 0; index < value.length; index++) {\n    if (!Object.hasOwn(value, index)) {\n      return false;\n    }\n  }\n  return true;\n}\n","import {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nimport type {\n  AdaptiveConcurrencyConfig,\n  FailureClassification,\n  RouterOrderingToken,\n} from \"./types\";\n\nexport const MAX_ROUND_ROBIN_POOLS = 1024;\nexport const MAX_ROUND_ROBIN_POOL_KEY_CHARS = 1_048_576;\nexport const MAX_WAITERS_PER_KEY = 10_000;\nexport const ADMISSION_ORDERING_TOKEN_RE = /^v1:(\\d+):([^:]+):(\\d+)$/;\n\nexport function roundRobinPoolKey(\n  candidates: readonly { fullIndex: number }[]\n): string {\n  return candidates.map(({ fullIndex }) => fullIndex).join(\",\");\n}\n\nexport interface AdmissionEntry {\n  adaptiveConcurrency?: boolean | AdaptiveConcurrencyConfig;\n  healthKey?: string;\n  maxConcurrency?: number;\n}\n\nexport interface AdmissionSnapshot {\n  adaptive: boolean;\n  increaseAfterSuccesses?: number;\n  index: number;\n  inFlight: number;\n  limit?: number;\n  max?: number;\n  min?: number;\n  successes?: number;\n  waiting: number;\n}\n\nexport class RouterConcurrencyError extends Error {\n  readonly code = \"concurrency_exhausted\";\n  readonly logicalId: string;\n\n  constructor(logicalId: string) {\n    super(\n      `ai-router: all compatible candidates for \"${logicalId}\" are at their concurrency limit`\n    );\n    this.name = \"RouterConcurrencyError\";\n    this.logicalId = logicalId;\n  }\n}\n\nexport interface AdaptiveState {\n  increaseAfterSuccesses: number;\n  lastOutcomeOrderingToken?: RouterOrderingToken;\n  lastOutcomeStartedAt?: number;\n  limit: number;\n  max: number;\n  min: number;\n  successes: number;\n}\n\nexport function normalizedAdaptiveState(\n  value: unknown\n): AdaptiveState | undefined {\n  if (typeof value !== \"object\" || value === null) {\n    return;\n  }\n  try {\n    const record = value as Record<string, unknown>;\n    const state = {\n      increaseAfterSuccesses: record.increaseAfterSuccesses,\n      lastOutcomeOrderingToken: record.lastOutcomeOrderingToken,\n      lastOutcomeStartedAt: record.lastOutcomeStartedAt,\n      limit: record.limit,\n      max: record.max,\n      min: record.min,\n      successes: record.successes,\n    };\n    if (\n      !(\n        Number.isSafeInteger(state.min) &&\n        (state.min as number) >= 1 &&\n        Number.isSafeInteger(state.max) &&\n        (state.max as number) >= (state.min as number) &&\n        Number.isSafeInteger(state.limit) &&\n        (state.limit as number) >= (state.min as number) &&\n        (state.limit as number) <= (state.max as number) &&\n        Number.isSafeInteger(state.increaseAfterSuccesses) &&\n        (state.increaseAfterSuccesses as number) >= 1 &&\n        Number.isSafeInteger(state.successes) &&\n        (state.successes as number) >= 0 &&\n        (state.lastOutcomeStartedAt === undefined ||\n          (typeof state.lastOutcomeStartedAt === \"number\" &&\n            Number.isFinite(state.lastOutcomeStartedAt) &&\n            state.lastOutcomeStartedAt >= 0)) &&\n        (state.lastOutcomeOrderingToken === undefined ||\n          (typeof state.lastOutcomeOrderingToken === \"number\" &&\n            Number.isFinite(state.lastOutcomeOrderingToken) &&\n            state.lastOutcomeOrderingToken >= 0) ||\n          (typeof state.lastOutcomeOrderingToken === \"string\" &&\n            state.lastOutcomeOrderingToken.length <= 256))\n      )\n    ) {\n      return;\n    }\n    return state as AdaptiveState;\n  } catch {\n    return;\n  }\n}\n\nexport interface Waiter {\n  acquire: () => number | undefined;\n  resolve: (value: number | undefined) => void;\n}\n\nexport function isValidWaiterSlot(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1;\n}\n\nexport function isCongestionFailure(\n  failure: FailureClassification | undefined\n): boolean {\n  if (failure === undefined) {\n    return false;\n  }\n  if (failure.scope === \"credential\" || failure.statusCode === 429) {\n    return true;\n  }\n  return (\n    failure.retryable &&\n    (failure.statusCode === 408 ||\n      failure.statusCode === 425 ||\n      (failure.statusCode !== undefined && failure.statusCode >= 500))\n  );\n}\n\nexport function staleAdaptiveOutcome(\n  state: AdaptiveState,\n  attemptStartedAt: number | undefined,\n  orderingToken: RouterOrderingToken | undefined\n): boolean {\n  if (\n    attemptStartedAt === undefined ||\n    state.lastOutcomeStartedAt === undefined\n  ) {\n    return false;\n  }\n  if (attemptStartedAt !== state.lastOutcomeStartedAt) {\n    return attemptStartedAt < state.lastOutcomeStartedAt;\n  }\n  const previous = state.lastOutcomeOrderingToken;\n  if (previous === undefined || orderingToken === undefined) {\n    return false;\n  }\n  if (typeof previous === \"number\" && typeof orderingToken === \"number\") {\n    return orderingToken < previous;\n  }\n  if (typeof previous === \"string\" && typeof orderingToken === \"string\") {\n    return compareAdaptiveOrderingTokens(orderingToken, previous) < 0;\n  }\n  return false;\n}\n\nexport function compareAdaptiveOrderingTokens(\n  left: string,\n  right: string\n): number {\n  const leftMatch = ADMISSION_ORDERING_TOKEN_RE.exec(left);\n  const rightMatch = ADMISSION_ORDERING_TOKEN_RE.exec(right);\n  if (leftMatch === null || rightMatch === null) {\n    return left < right ? -1 : Number(left > right);\n  }\n  const timestampOrder = BigInt(leftMatch[1]) - BigInt(rightMatch[1]);\n  if (timestampOrder !== 0n) {\n    return timestampOrder < 0n ? -1 : 1;\n  }\n  if (leftMatch[2] !== rightMatch[2]) {\n    return leftMatch[2] < rightMatch[2] ? -1 : 1;\n  }\n  const counterOrder = BigInt(leftMatch[3]) - BigInt(rightMatch[3]);\n  return counterOrder < 0n ? -1 : Number(counterOrder > 0n);\n}\n\nexport function retainAdaptiveOutcomeOrder(\n  state: AdaptiveState,\n  attemptStartedAt: number | undefined,\n  orderingToken: RouterOrderingToken | undefined\n): void {\n  if (\n    attemptStartedAt === undefined ||\n    !Number.isFinite(attemptStartedAt) ||\n    attemptStartedAt < 0\n  ) {\n    return;\n  }\n  state.lastOutcomeStartedAt = attemptStartedAt;\n  if (\n    (typeof orderingToken === \"number\" &&\n      Number.isFinite(orderingToken) &&\n      orderingToken >= 0) ||\n    (typeof orderingToken === \"string\" && orderingToken.length <= 256)\n  ) {\n    state.lastOutcomeOrderingToken = orderingToken;\n  } else {\n    state.lastOutcomeOrderingToken = undefined;\n  }\n}\n\nexport function abortReason(signal: AbortSignal | undefined): unknown {\n  try {\n    const reason = signal?.reason;\n    return consumeGenuinePromise(reason)\n      ? new DOMException(\"aborted\", \"AbortError\")\n      : (reason ?? new DOMException(\"aborted\", \"AbortError\"));\n  } catch {\n    return new DOMException(\"aborted\", \"AbortError\");\n  }\n}\n\nexport function isSignalAborted(signal: AbortSignal | undefined): boolean {\n  try {\n    const aborted = signal?.aborted;\n    return !consumeGenuinePromise(aborted) && aborted === true;\n  } catch {\n    return false;\n  }\n}\n\nexport function captureUsableWaiter(value: unknown): Waiter | undefined {\n  if (typeof value !== \"object\" || value === null) {\n    return;\n  }\n  try {\n    consumeOwnDataPromiseFields(value, [\"acquire\", \"resolve\"]);\n    const acquire = Reflect.get(value, \"acquire\");\n    const resolve = Reflect.get(value, \"resolve\");\n    const asyncAcquire = consumeGenuinePromise(acquire);\n    const asyncResolve = consumeGenuinePromise(resolve);\n    if (\n      asyncAcquire ||\n      asyncResolve ||\n      typeof acquire !== \"function\" ||\n      typeof resolve !== \"function\"\n    ) {\n      return;\n    }\n    return {\n      acquire: () => Reflect.apply(acquire, value, []),\n      resolve: (slot) => Reflect.apply(resolve, value, [slot]),\n    };\n  } catch {\n    return;\n  }\n}\n\nexport class AdmissionRegistry {\n  readonly adaptiveStates = new Map<string, AdaptiveState>();\n  readonly configurations = new Map<string, string>();\n  readonly inFlightCounts = new Map<string, number>();\n  readonly waiters = new Map<string, Waiter[]>();\n}\n","const DEFAULT_MAX_CHARS = 16_384;\nconst MAX_DEPTH = 5;\nconst MAX_NODES = 256;\nconst MAX_PROPERTIES_PER_OBJECT = 64;\nconst MAX_PARSED_ERROR_JSON_CHARS = 65_536;\nconst JSON_CONTAINER_PREFIX_RE = /^[\\s\\r\\n]*[[{]/;\nconst PROVIDER_ERROR_KEYS = new Set([\n  \"error\",\n  \"errors\",\n  \"code\",\n  \"type\",\n  \"tag\",\n  \"message\",\n  \"title\",\n  \"detail\",\n  \"details\",\n  \"reason\",\n  \"description\",\n]);\nconst PROVIDER_ERROR_WRAPPER_KEYS = new Set([\"body\", \"data\", \"response\"]);\nconst PROVIDER_SEMANTIC_KEYS = [\n  ...PROVIDER_ERROR_KEYS,\n  ...PROVIDER_ERROR_WRAPPER_KEYS,\n] as const;\nconst GENERAL_ERROR_KEYS = [\n  \"name\",\n  \"message\",\n  \"statusCode\",\n  \"status\",\n  \"code\",\n  \"type\",\n  \"tag\",\n  \"error\",\n  \"errors\",\n  \"title\",\n  \"detail\",\n  \"details\",\n  \"reason\",\n  \"description\",\n  \"body\",\n  \"data\",\n  \"response\",\n  \"cause\",\n] as const;\n\nfunction isHighSurrogate(code: number): boolean {\n  return code >= 0xd8_00 && code <= 0xdb_ff;\n}\n\nfunction isLowSurrogate(code: number): boolean {\n  return code >= 0xdc_00 && code <= 0xdf_ff;\n}\n\nfunction safePrefix(value: string, maximum: number): string {\n  let end = Math.min(value.length, Math.max(0, maximum));\n  if (\n    end > 0 &&\n    end < value.length &&\n    isHighSurrogate(value.charCodeAt(end - 1)) &&\n    isLowSurrogate(value.charCodeAt(end))\n  ) {\n    end -= 1;\n  }\n  return value.slice(0, end);\n}\n\nfunction safeSuffix(value: string, maximum: number): string {\n  let start = Math.max(0, value.length - Math.max(0, maximum));\n  if (\n    start > 0 &&\n    start < value.length &&\n    isHighSurrogate(value.charCodeAt(start - 1)) &&\n    isLowSurrogate(value.charCodeAt(start))\n  ) {\n    start += 1;\n  }\n  return value.slice(start);\n}\n\nfunction isObjectLike(value: unknown): value is object {\n  return (\n    (typeof value === \"object\" && value !== null) || typeof value === \"function\"\n  );\n}\n\nfunction parseProviderErrorJSON(value: string): unknown | undefined {\n  if (\n    value.length > MAX_PARSED_ERROR_JSON_CHARS ||\n    !JSON_CONTAINER_PREFIX_RE.test(value)\n  ) {\n    return;\n  }\n  try {\n    return JSON.parse(value);\n  } catch {\n    return;\n  }\n}\n\nclass BoundedTextCollector {\n  private chars = 0;\n  private nodes = 0;\n  private parsedErrorJsonChars = 0;\n  private readonly maxChars: number;\n  private readonly parts: string[] = [];\n  private readonly seen = new WeakSet<object>();\n  private readonly semanticFieldsOnly: boolean;\n\n  constructor(maxChars: number, semanticFieldsOnly = false) {\n    this.maxChars = Number.isFinite(maxChars)\n      ? Math.max(0, Math.floor(maxChars))\n      : DEFAULT_MAX_CHARS;\n    this.semanticFieldsOnly = semanticFieldsOnly;\n  }\n\n  collect(value: unknown): string {\n    this.visit(value, 0);\n    return safePrefix(this.parts.join(\" \"), this.maxChars);\n  }\n\n  private append(text: string): void {\n    if (this.chars >= this.maxChars) {\n      return;\n    }\n    const remaining = this.maxChars - this.chars;\n    const split = Math.floor(remaining * 0.75);\n    const bounded =\n      text.length <= remaining || remaining < 16\n        ? safePrefix(text, remaining)\n        : `${safePrefix(text, split - 3)} … ${safeSuffix(\n            text,\n            remaining - split\n          )}`;\n    this.parts.push(bounded);\n    this.chars += bounded.length + 1;\n  }\n\n  private appendPrimitive(value: unknown): boolean {\n    if (typeof value === \"string\") {\n      this.append(value);\n      return true;\n    }\n    if (\n      typeof value === \"number\" ||\n      typeof value === \"boolean\" ||\n      typeof value === \"bigint\"\n    ) {\n      this.append(String(value));\n      return true;\n    }\n    return false;\n  }\n\n  private visit(value: unknown, depth: number): void {\n    if (consumeGenuinePromise(value)) {\n      return;\n    }\n    if (this.atLimit(depth) || this.appendPrimitive(value)) {\n      return;\n    }\n    if (!isObjectLike(value) || this.seen.has(value)) {\n      return;\n    }\n    consumeOwnDataPromiseFields(\n      value,\n      this.semanticFieldsOnly ? PROVIDER_SEMANTIC_KEYS : GENERAL_ERROR_KEYS\n    );\n    this.seen.add(value);\n    this.nodes += 1;\n    this.visitProperties(value as Record<string, unknown>, depth);\n  }\n\n  private atLimit(depth: number): boolean {\n    return (\n      this.chars >= this.maxChars ||\n      this.nodes >= MAX_NODES ||\n      depth > MAX_DEPTH\n    );\n  }\n\n  private visitProperties(value: Record<string, unknown>, depth: number): void {\n    if (this.semanticFieldsOnly) {\n      this.visitSemanticProperties(value, depth);\n      return;\n    }\n    for (const key of GENERAL_ERROR_KEYS) {\n      if (this.chars >= this.maxChars) {\n        break;\n      }\n      try {\n        if (!Object.hasOwn(value, key)) {\n          continue;\n        }\n        this.append(key);\n        this.visitOwnDataProperty(value, key, depth);\n      } catch {\n        // Ignore hostile descriptor traps while retaining other known fields.\n      }\n    }\n  }\n\n  private visitOwnDataProperty(\n    value: Record<string, unknown>,\n    key: string,\n    depth: number\n  ): void {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, key);\n      if (descriptor !== undefined && \"value\" in descriptor) {\n        this.visit(descriptor.value, depth + 1);\n      }\n    } catch {\n      // Ignore hostile descriptor traps while retaining other known fields.\n    }\n  }\n\n  private visitSemanticProperties(\n    value: Record<string, unknown>,\n    depth: number\n  ): void {\n    let array = false;\n    try {\n      array = Array.isArray(value);\n    } catch {\n      return;\n    }\n    if (array) {\n      this.visitSemanticArray(value as unknown as unknown[], depth);\n      return;\n    }\n    for (const key of PROVIDER_ERROR_KEYS) {\n      this.visitSemanticKey(value, key, depth, false);\n    }\n    for (const key of PROVIDER_ERROR_WRAPPER_KEYS) {\n      this.visitSemanticKey(value, key, depth, true);\n    }\n  }\n\n  private visitSemanticArray(value: unknown[], depth: number): void {\n    let length = 0;\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, \"length\");\n      const candidate =\n        descriptor !== undefined && \"value\" in descriptor\n          ? descriptor.value\n          : undefined;\n      if (!Number.isSafeInteger(candidate) || candidate < 0) {\n        return;\n      }\n      length = Math.min(candidate, MAX_PROPERTIES_PER_OBJECT);\n    } catch {\n      return;\n    }\n    for (let index = 0; index < length; index += 1) {\n      const key = String(index);\n      try {\n        const descriptor = Object.getOwnPropertyDescriptor(value, key);\n        if (descriptor === undefined || !(\"value\" in descriptor)) {\n          continue;\n        }\n        this.append(key);\n        this.visit(descriptor.value, depth + 1);\n      } catch {\n        // Ignore hostile indexes while retaining other bounded entries.\n      }\n    }\n  }\n\n  private visitSemanticKey(\n    value: Record<string, unknown>,\n    key: string,\n    depth: number,\n    wrapper: boolean\n  ): void {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, key);\n      if (descriptor === undefined || !(\"value\" in descriptor)) {\n        return;\n      }\n      let nested = descriptor.value;\n      if (wrapper && typeof nested === \"string\") {\n        nested = this.parseNestedProviderErrorJSON(nested);\n      }\n      if (wrapper && !isObjectLike(nested)) {\n        return;\n      }\n      this.append(key);\n      this.visit(nested, depth + 1);\n    } catch {\n      // Ignore hostile descriptor traps while retaining other fields.\n    }\n  }\n\n  private parseNestedProviderErrorJSON(value: string): unknown | undefined {\n    if (\n      value.length >\n      MAX_PARSED_ERROR_JSON_CHARS - this.parsedErrorJsonChars\n    ) {\n      return;\n    }\n    this.parsedErrorJsonChars += value.length;\n    return parseProviderErrorJSON(value);\n  }\n}\n\n/** Extract bounded classifier text without serializing an entire provider body. */\nexport function boundedErrorText(\n  value: unknown,\n  maxChars = DEFAULT_MAX_CHARS\n): string {\n  return new BoundedTextCollector(maxChars).collect(value);\n}\n\n/** Extract only provider error-semantic fields, excluding echoed request data. */\nexport function boundedProviderErrorText(\n  value: unknown,\n  maxChars = DEFAULT_MAX_CHARS\n): string {\n  let source = value;\n  if (typeof value === \"string\") {\n    if (!JSON_CONTAINER_PREFIX_RE.test(value)) {\n      return boundedErrorText(value, maxChars);\n    }\n    source = parseProviderErrorJSON(value);\n    if (source === undefined) {\n      return \"\";\n    }\n  }\n  return new BoundedTextCollector(maxChars, true).collect(source);\n}\n\nexport function safeErrorProperty(value: unknown, key: string): unknown {\n  if (!isObjectLike(value)) {\n    return;\n  }\n  try {\n    return (value as Record<string, unknown>)[key];\n  } catch {\n    return;\n  }\n}\n\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n","import { safeErrorProperty } from \"./error-text\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\n\nconst RATE_LIMIT_HEADER_NAMES = new Set([\n  \"retry-after-ms\",\n  \"retry-after\",\n  \"x-ratelimit-reset\",\n  \"x-ratelimit-reset-requests\",\n  \"x-ratelimit-reset-tokens\",\n  \"ratelimit-reset\",\n]);\nconst RATE_LIMIT_HEADER_ALIASES = new Map<string, readonly string[]>([\n  [\"retry-after-ms\", [\"Retry-After-Ms\", \"Retry-After-MS\", \"RETRY-AFTER-MS\"]],\n  [\"retry-after\", [\"Retry-After\", \"RETRY-AFTER\"]],\n  [\n    \"x-ratelimit-reset\",\n    [\"X-RateLimit-Reset\", \"X-Ratelimit-Reset\", \"X-RATELIMIT-RESET\"],\n  ],\n  [\n    \"x-ratelimit-reset-requests\",\n    [\n      \"X-RateLimit-Reset-Requests\",\n      \"X-Ratelimit-Reset-Requests\",\n      \"X-RATELIMIT-RESET-REQUESTS\",\n    ],\n  ],\n  [\n    \"x-ratelimit-reset-tokens\",\n    [\n      \"X-RateLimit-Reset-Tokens\",\n      \"X-Ratelimit-Reset-Tokens\",\n      \"X-RATELIMIT-RESET-TOKENS\",\n    ],\n  ],\n  [\n    \"ratelimit-reset\",\n    [\"RateLimit-Reset\", \"Ratelimit-Reset\", \"RATELIMIT-RESET\"],\n  ],\n]);\n\nexport interface HeaderSource {\n  get?: CallableFunction;\n  value: unknown;\n  values?: ReadonlyMap<string, readonly string[]>;\n}\n\nconst MAX_HEADER_VALUES = 16;\nconst MAX_HEADER_VALUE_CHARS = 512;\n\nfunction headerStrings(value: unknown): string[] {\n  if (consumeGenuinePromise(value)) {\n    return [];\n  }\n  if (typeof value === \"string\") {\n    return [value.slice(0, MAX_HEADER_VALUE_CHARS)];\n  }\n  try {\n    if (!Array.isArray(value)) {\n      return [];\n    }\n  } catch {\n    return [];\n  }\n  let length = 0;\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(value, \"length\");\n    const candidate =\n      descriptor !== undefined && \"value\" in descriptor\n        ? descriptor.value\n        : undefined;\n    if (!Number.isSafeInteger(candidate) || candidate < 0) {\n      return [];\n    }\n    length = Math.min(candidate, MAX_HEADER_VALUES);\n  } catch {\n    return [];\n  }\n  const values: string[] = [];\n  for (let index = 0; index < length; index += 1) {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, index);\n      if (descriptor === undefined || !(\"value\" in descriptor)) {\n        continue;\n      }\n      const item = descriptor.value;\n      if (consumeGenuinePromise(item)) {\n        continue;\n      }\n      if (typeof item === \"string\") {\n        values.push(item.slice(0, MAX_HEADER_VALUE_CHARS));\n      }\n    } catch {\n      // Ignore hostile indexes while retaining other bounded values.\n    }\n  }\n  return values;\n}\n\nexport function headerSources(\n  error: unknown,\n  response: unknown,\n  seen: Set<unknown>\n): HeaderSource[] {\n  const values = [\n    safeErrorProperty(error, \"responseHeaders\"),\n    safeErrorProperty(error, \"headers\"),\n    safeErrorProperty(response, \"responseHeaders\"),\n    safeErrorProperty(response, \"headers\"),\n  ];\n  const sources: HeaderSource[] = [];\n  for (const value of values) {\n    if (consumeGenuinePromise(value)) {\n      continue;\n    }\n    if (\n      ((typeof value === \"object\" && value !== null) ||\n        typeof value === \"function\") &&\n      seen.has(value)\n    ) {\n      continue;\n    }\n    seen.add(value);\n    const getValue = safeErrorProperty(value, \"get\");\n    const get = consumeGenuinePromise(getValue) ? undefined : getValue;\n    const values = snapshotPlainHeaders(value);\n    sources.push(\n      typeof get === \"function\" ? { get, value, values } : { value, values }\n    );\n  }\n  return sources;\n}\n\nfunction snapshotPlainHeaders(\n  value: unknown\n): ReadonlyMap<string, readonly string[]> {\n  const snapshot = new Map<string, readonly string[]>();\n  if (typeof value !== \"object\" || value === null) {\n    return snapshot;\n  }\n  for (const name of RATE_LIMIT_HEADER_NAMES) {\n    const header = ownHeaderValue(value, name);\n    const values = headerStrings(header);\n    if (values.length > 0) {\n      snapshot.set(name, values);\n    }\n  }\n  snapshotCaseInsensitiveHeaders(value, snapshot);\n  return snapshot;\n}\n\nfunction snapshotCaseInsensitiveHeaders(\n  value: object,\n  snapshot: Map<string, readonly string[]>\n): void {\n  for (const [normalized, aliases] of RATE_LIMIT_HEADER_ALIASES) {\n    if (snapshot.has(normalized)) {\n      continue;\n    }\n    for (const alias of aliases) {\n      const values = headerStrings(ownHeaderValue(value, alias));\n      if (values.length > 0) {\n        snapshot.set(normalized, values);\n        break;\n      }\n    }\n  }\n}\n\nfunction ownHeaderValue(value: object, key: string): unknown {\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(value, key);\n    return descriptor !== undefined && \"value\" in descriptor\n      ? descriptor.value\n      : undefined;\n  } catch {\n    return;\n  }\n}\n\nexport function headerValues(\n  sources: readonly HeaderSource[],\n  name: string\n): string[] {\n  const values: string[] = [];\n  for (const source of sources) {\n    values.push(...headerValuesFrom(source, name));\n  }\n  return values;\n}\n\nfunction headerValuesFromGetter(source: HeaderSource, name: string): string[] {\n  if (source.get === undefined) {\n    return [];\n  }\n  try {\n    const value = Reflect.apply(source.get, source.value, [name]);\n    if (consumeGenuinePromise(value)) {\n      return [];\n    }\n    return headerStrings(value);\n  } catch {\n    return [];\n  }\n}\n\nfunction headerValuesFrom(\n  source: HeaderSource,\n  name: string\n): readonly string[] {\n  const getterValues = headerValuesFromGetter(source, name);\n  if (getterValues.length > 0) {\n    return getterValues;\n  }\n  return source.values?.get(name) ?? [];\n}\n","import { safeErrorProperty } from \"./error-text\";\nimport {\n  type HeaderSource,\n  headerSources,\n  headerValues,\n} from \"./failure-headers\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\n\nconst RESET_VALUE_RE = /^(\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)(ms|s)?$/i;\nconst RETRY_AFTER_SECONDS_RE = /^\\d+(?:\\.\\d+)?$/;\n\nfunction finiteDelay(value: number): number | undefined {\n  if (value === Number.POSITIVE_INFINITY) {\n    return Number.MAX_SAFE_INTEGER;\n  }\n  if (!Number.isFinite(value) || value < 0) {\n    return;\n  }\n  return Math.min(value, Number.MAX_SAFE_INTEGER);\n}\n\nfunction retryAfterSeconds(value: string): number | undefined {\n  const values = value\n    .split(\",\")\n    .map((part) => part.trim())\n    .filter((part) => RETRY_AFTER_SECONDS_RE.test(part));\n  if (values.length === 0) {\n    return;\n  }\n  return Math.max(...values.map(Number));\n}\n\nfunction validRetryClock(value: number): boolean {\n  return (\n    Number.isFinite(value) && value >= 0 && value <= Number.MAX_SAFE_INTEGER\n  );\n}\n\nfunction retryAfterDelayMs(value: string, now: number): number | undefined {\n  const seconds = retryAfterSeconds(value);\n  if (seconds !== undefined) {\n    return finiteDelay(seconds * 1000);\n  }\n  if (!Number.isNaN(Number(value))) {\n    return;\n  }\n  let date = Number.NaN;\n  try {\n    date = Date.parse(value);\n  } catch {\n    // A broken date parser must not hide valid secondary reset hints.\n  }\n  if (!(Number.isFinite(date) && validRetryClock(now))) {\n    return;\n  }\n  return finiteDelay(Math.max(0, date - now));\n}\n\nfunction resetDelayMs(value: string, now: number): number | undefined {\n  const trimmed = value.trim().toLowerCase();\n  const match = RESET_VALUE_RE.exec(trimmed);\n  if (match === null) {\n    return;\n  }\n  const numericValue = Number(match[1]);\n  if (!Number.isFinite(numericValue)) {\n    return;\n  }\n  if (match[2] === \"ms\") {\n    return finiteDelay(numericValue);\n  }\n  if (match[2] === \"s\") {\n    return finiteDelay(numericValue * 1000);\n  }\n  if (numericValue >= 10_000_000_000) {\n    if (!validRetryClock(now)) {\n      return;\n    }\n    return finiteDelay(Math.max(0, numericValue - now));\n  }\n  if (numericValue >= 1_000_000_000) {\n    if (!validRetryClock(now)) {\n      return;\n    }\n    return finiteDelay(Math.max(0, numericValue * 1000 - now));\n  }\n  const epochDelay = numericValue * 1000 - now;\n  return finiteDelay(epochDelay >= 0 ? epochDelay : numericValue * 1000);\n}\n\nfunction resetDelaysMs(value: string, now: number): number[] {\n  return value\n    .split(\",\")\n    .map((part) => resetDelayMs(part, now))\n    .filter((delay): delay is number => delay !== undefined);\n}\n\nfunction retryDelayFromSources(\n  sources: readonly HeaderSource[],\n  now: number\n): number | undefined {\n  const retryAfterMilliseconds = headerValues(\n    sources,\n    \"retry-after-ms\"\n  ).flatMap((value) =>\n    value\n      .split(\",\")\n      .map((part) => part.trim())\n      .filter((part) => RETRY_AFTER_SECONDS_RE.test(part))\n      .map(Number)\n      .map((item) => finiteDelay(item))\n      .filter((delay): delay is number => delay !== undefined)\n  );\n  if (retryAfterMilliseconds.length > 0) {\n    return Math.max(...retryAfterMilliseconds);\n  }\n  const retryAfterDelays = headerValues(sources, \"retry-after\")\n    .map((value) => retryAfterDelayMs(value, now))\n    .filter((value): value is number => value !== undefined);\n  if (retryAfterDelays.length > 0) {\n    return Math.max(...retryAfterDelays);\n  }\n  const resetDelays = [\n    \"x-ratelimit-reset\",\n    \"x-ratelimit-reset-requests\",\n    \"x-ratelimit-reset-tokens\",\n    \"ratelimit-reset\",\n  ]\n    .flatMap((name) => headerValues(sources, name))\n    .flatMap((value) => resetDelaysMs(value, now));\n  return resetDelays.length > 0 ? Math.max(...resetDelays) : undefined;\n}\n\nexport function retryAfterMsOfContext(\n  error: unknown,\n  now?: number,\n  captured?: {\n    cause: unknown;\n    causeResponse: unknown;\n    response: unknown;\n  }\n): number | undefined {\n  let decisionNow = now;\n  if (decisionNow === undefined) {\n    try {\n      decisionNow = Date.now();\n      if (consumeGenuinePromise(decisionNow)) {\n        decisionNow = Number.NaN;\n      }\n    } catch {\n      decisionNow = Number.NaN;\n    }\n  }\n  let context = captured;\n  if (context === undefined) {\n    const responseValue = safeErrorProperty(error, \"response\");\n    const response = consumeGenuinePromise(responseValue)\n      ? undefined\n      : responseValue;\n    const causeValue = safeErrorProperty(error, \"cause\");\n    const cause = consumeGenuinePromise(causeValue) ? undefined : causeValue;\n    const boundedCause = cause === error ? undefined : cause;\n    const causeResponseValue = safeErrorProperty(boundedCause, \"response\");\n    context = {\n      cause: boundedCause,\n      causeResponse: consumeGenuinePromise(causeResponseValue)\n        ? undefined\n        : causeResponseValue,\n      response,\n    };\n  }\n  const seen = new Set<unknown>();\n  const topDelay = retryDelayFromSources(\n    headerSources(error, context.response, seen),\n    decisionNow\n  );\n  if (topDelay !== undefined) {\n    return topDelay;\n  }\n  return retryDelayFromSources(\n    headerSources(context.cause, context.causeResponse, seen),\n    decisionNow\n  );\n}\n\nexport function retryAfterMsOf(\n  error: unknown,\n  now?: number\n): number | undefined {\n  return retryAfterMsOfContext(error, now);\n}\n","import {\n  boundedErrorText,\n  boundedProviderErrorText,\n  safeErrorProperty,\n} from \"./error-text\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n\nconst RETRY_ERROR_DATA_KEYS = [\n  \"body\",\n  \"cause\",\n  \"code\",\n  \"data\",\n  \"message\",\n  \"name\",\n  \"response\",\n  \"responseBody\",\n  \"status\",\n  \"statusCode\",\n] as const;\n\nfunction consumeRetryErrorDataFields(value: unknown): void {\n  if (isObjectLike(value)) {\n    consumeOwnDataPromiseFields(value, RETRY_ERROR_DATA_KEYS);\n  }\n}\n\nfunction normalizedErrorMessage(\n  error: unknown,\n  rawMessage: unknown,\n  causeMessage: unknown\n): string {\n  if (typeof rawMessage === \"string\" && rawMessage.length > 0) {\n    return boundedErrorText(rawMessage).toLowerCase();\n  }\n  if (typeof causeMessage === \"string\" && causeMessage.length > 0) {\n    return boundedErrorText(causeMessage).toLowerCase();\n  }\n  return boundedErrorText(error).toLowerCase();\n}\n\nfunction normalizeObjectError(error: object): {\n  statusCode?: number;\n  message: string;\n} {\n  consumeRetryErrorDataFields(error);\n  const rawMessage = safeErrorProperty(error, \"message\");\n  const responseValue = safeErrorProperty(error, \"response\");\n  const response = synchronousRetryContainer(responseValue);\n  const topStatusCode = statusCodeOf(error, response);\n  const hasTopMessage = typeof rawMessage === \"string\" && rawMessage.length > 0;\n  const causeValue =\n    topStatusCode === undefined || !hasTopMessage\n      ? safeErrorProperty(error, \"cause\")\n      : undefined;\n  const asyncCause = consumeGenuinePromise(causeValue);\n  const cause = causeValue === error || asyncCause ? undefined : causeValue;\n  const causeResponse =\n    topStatusCode === undefined\n      ? synchronousRetryContainer(safeErrorProperty(cause, \"response\"))\n      : undefined;\n  const statusCode = topStatusCode ?? statusCodeOf(cause, causeResponse);\n  const causeMessage = hasTopMessage\n    ? undefined\n    : safeErrorProperty(cause, \"message\");\n  const message = normalizedErrorMessage(error, rawMessage, causeMessage);\n  return statusCode == null ? { message } : { statusCode, message };\n}\n\n/**\n * Status codes that are positively RETRYABLE (transient/capacity/auth-refresh\n * conditions where another provider may succeed). Mirrors `ai-fallback`.\n * In addition, any status `>= 500` is retryable.\n */\n\nconst nativeErrorIsError = (\n  Error as unknown as { isError?: (value: unknown) => boolean }\n).isError;\nconst nativeDOMExceptionNameGetter = (() => {\n  try {\n    return Object.getOwnPropertyDescriptor(\n      globalThis.DOMException.prototype,\n      \"name\"\n    )?.get;\n  } catch {\n    return;\n  }\n})();\n\nexport function isObjectLike(value: unknown): value is object {\n  return (\n    (typeof value === \"object\" && value !== null) || typeof value === \"function\"\n  );\n}\n\nfunction safeIsAbortError(error: unknown): boolean {\n  try {\n    const brandedError =\n      typeof nativeErrorIsError === \"function\" && nativeErrorIsError(error);\n    let brandedDOMException = false;\n    if (typeof nativeDOMExceptionNameGetter === \"function\") {\n      try {\n        nativeDOMExceptionNameGetter.call(error);\n        brandedDOMException = true;\n      } catch {\n        // Web-IDL accessors reject objects without DOMException internal slots.\n      }\n    }\n    if (!(brandedError || error instanceof Error || brandedDOMException)) {\n      return false;\n    }\n    const name = safeErrorProperty(error, \"name\");\n    if (consumeGenuinePromise(name)) {\n      return false;\n    }\n    return (\n      name === \"AbortError\" ||\n      name === \"ResponseAborted\" ||\n      name === \"TimeoutError\"\n    );\n  } catch {\n    return false;\n  }\n}\n\n/** Only accept a finite number — never coerce a numeric string (e.g. 'ECONNRESET'). */\nfunction pickNumber(value: unknown): number | undefined {\n  return typeof value === \"number\" &&\n    Number.isInteger(value) &&\n    value >= 100 &&\n    value <= 599\n    ? value\n    : undefined;\n}\n\n/**\n * Extract just the numeric HTTP status the classifier needs — without the\n * `message` normalization (and its `JSON.stringify`) that the default\n * classifier never reads.\n */\nfunction errorDetailsOf(error: unknown, response: unknown): string {\n  if (!isObjectLike(error)) {\n    return String(error ?? \"\");\n  }\n  const message = safeErrorProperty(error, \"message\");\n  const bodyDetails = [\n    safeErrorProperty(error, \"responseBody\"),\n    response,\n    safeErrorProperty(error, \"body\"),\n    safeErrorProperty(error, \"data\"),\n  ]\n    .filter((value) => value !== undefined)\n    .map((value) => boundedProviderErrorText(value, 4096));\n  return [boundedErrorText(message, 4096), ...bodyDetails].join(\" \");\n}\n\nexport interface RetryErrorSnapshot {\n  aborted: boolean;\n  code: unknown;\n  details: string;\n  invalidCode?: boolean;\n  invalidStatus?: boolean;\n  statusCode?: number;\n}\n\nexport interface RetryErrorContext {\n  cause: unknown;\n  causeResponse: unknown;\n  response: unknown;\n  snapshot: RetryErrorSnapshot;\n}\n\nfunction statusCodeOf(value: unknown, response: unknown): number | undefined {\n  return statusSnapshotOf(value, response).statusCode;\n}\n\nfunction captureErrorProperty(\n  value: unknown,\n  key: string\n): { unreadable: boolean; value?: unknown } {\n  if (!isObjectLike(value)) {\n    return { unreadable: false };\n  }\n  try {\n    const captured = Reflect.get(value as object, key);\n    if (consumeGenuinePromise(captured)) {\n      return { unreadable: true };\n    }\n    return { unreadable: false, value: captured };\n  } catch {\n    return { unreadable: true };\n  }\n}\n\nfunction statusSnapshotOf(\n  value: unknown,\n  response: unknown\n): { invalid: boolean; statusCode?: number } {\n  if (!isObjectLike(value)) {\n    return { invalid: false };\n  }\n  let invalid = false;\n  const candidates: readonly (readonly [unknown, string])[] = [\n    [value, \"statusCode\"],\n    [value, \"status\"],\n    [response, \"statusCode\"],\n    [response, \"status\"],\n  ];\n  for (const [container, key] of candidates) {\n    const captured = captureErrorProperty(container, key);\n    if (captured.unreadable) {\n      invalid = true;\n      continue;\n    }\n    const candidate = captured.value;\n    if (candidate === undefined) {\n      continue;\n    }\n    const statusCode = pickNumber(candidate);\n    if (statusCode !== undefined) {\n      return { invalid, statusCode };\n    }\n    invalid = true;\n  }\n  return { invalid };\n}\n\nfunction shouldCaptureDetails(\n  mode: \"always\" | \"for-404\",\n  statusCode: number | undefined,\n  invalidCode: boolean,\n  invalidStatus: boolean\n): boolean {\n  return (\n    mode === \"always\" || statusCode === 404 || invalidCode || invalidStatus\n  );\n}\n\nfunction synchronousRetryContainer(value: unknown): unknown {\n  return consumeGenuinePromise(value) ? undefined : value;\n}\n\nfunction boundedRetryCause(\n  error: unknown,\n  cause: unknown\n): { async: boolean; value: unknown } {\n  const async = consumeGenuinePromise(cause);\n  return { async, value: cause === error || async ? undefined : cause };\n}\n\nexport function snapshotRetryErrorContext(\n  error: unknown,\n  detailsMode: \"always\" | \"for-404\" = \"for-404\",\n  captureCause = false\n): RetryErrorContext {\n  consumeRetryErrorDataFields(error);\n  const objectLike = isObjectLike(error);\n  const responseCapture = captureErrorProperty(error, \"response\");\n  const asyncResponse = consumeGenuinePromise(responseCapture.value);\n  const response = asyncResponse ? undefined : responseCapture.value;\n  const topStatus = statusSnapshotOf(error, response);\n  const topStatusCode = topStatus.statusCode;\n  const causeCapture =\n    objectLike && (captureCause || topStatusCode === undefined)\n      ? captureErrorProperty(error, \"cause\")\n      : { unreadable: false };\n  const cause = causeCapture.value;\n  const bounded = boundedRetryCause(error, cause);\n  const asyncCause = bounded.async;\n  const boundedCause = bounded.value;\n  const causeResponseCapture = captureErrorProperty(boundedCause, \"response\");\n  const asyncCauseResponse = consumeGenuinePromise(causeResponseCapture.value);\n  const causeResponse = asyncCauseResponse\n    ? undefined\n    : causeResponseCapture.value;\n  const causeStatus = statusSnapshotOf(boundedCause, causeResponse);\n  const statusCode = topStatusCode ?? causeStatus.statusCode;\n  const malformedStatus = [\n    topStatus.invalid,\n    causeStatus.invalid,\n    responseCapture.unreadable,\n    causeCapture.unreadable,\n    causeResponseCapture.unreadable,\n    asyncResponse,\n    asyncCauseResponse,\n    asyncCause,\n  ].some(Boolean);\n  const invalidStatus = statusCode === undefined && malformedStatus;\n  const codeCapture = captureErrorProperty(error, \"code\");\n  const code = codeCapture.value;\n  const causeCodeCapture =\n    code === undefined && topStatusCode === undefined\n      ? captureErrorProperty(boundedCause, \"code\")\n      : { unreadable: false };\n  const causeCode = causeCodeCapture.value;\n  const malformedCode = [\n    codeCapture.unreadable,\n    causeCodeCapture.unreadable,\n    asyncCause,\n  ].some(Boolean);\n  const invalidCode =\n    code === undefined && causeCode === undefined && malformedCode;\n  const includeDetails = shouldCaptureDetails(\n    detailsMode,\n    statusCode,\n    invalidCode,\n    invalidStatus\n  );\n  return {\n    cause: boundedCause,\n    causeResponse,\n    response,\n    snapshot: {\n      aborted: safeIsAbortError(error) || safeIsAbortError(boundedCause),\n      code: code ?? (topStatusCode === undefined ? causeCode : undefined),\n      details: includeDetails\n        ? `${errorDetailsOf(error, response)} ${\n            topStatusCode === undefined\n              ? errorDetailsOf(boundedCause, causeResponse)\n              : \"\"\n          }`\n        : \"\",\n      ...(invalidCode ? { invalidCode: true } : {}),\n      ...(invalidStatus ? { invalidStatus: true } : {}),\n      ...(statusCode === undefined ? {} : { statusCode }),\n    },\n  };\n}\n\nexport function snapshotRetryError(\n  error: unknown,\n  detailsMode: \"always\" | \"for-404\" = \"for-404\"\n): RetryErrorSnapshot {\n  return snapshotRetryErrorContext(error, detailsMode).snapshot;\n}\n\nexport function normalizeRetryError(error: unknown): {\n  statusCode?: number;\n  message: string;\n} {\n  if (error == null) {\n    return { message: \"\" };\n  }\n  if (typeof error === \"string\") {\n    return { message: boundedErrorText(error).toLowerCase() };\n  }\n  if (isObjectLike(error)) {\n    return normalizeObjectError(error);\n  }\n  return { message: String(error).toLowerCase() };\n}\n\n/**\n * Default classifier. Returns `true` to retry (fall through to the next\n * candidate), `false` to stop and surface the error.\n *\n * Decision order, driven by the numeric `statusCode` when one is present:\n *  1. An abort/timeout (the caller's `abortSignal` fired, or a `TimeoutError`)\n *     -> stop. Retrying another candidate with the same aborted signal is\n *     pointless and would swallow the caller's intent.\n *  2. A positively-retryable status (`RETRYABLE_STATUS` or `>= 500`) -> retry.\n *  3. A 4xx client error NOT in the retryable set (e.g. 404/410) -> stop.\n *     These are errors that are unlikely to change across providers. Use a\n *     custom classifier when an application needs stricter 4xx handling.\n *  4. Otherwise -> retry. A generic thrown error with no recognizable status is\n *     treated as a transient/unknown failure. This reproduces the router's\n *     historical \"retry on any thrown error\" behavior.\n *\n * Note: classification is intentionally status-based. A client error surfaced\n * only as a message string (no `statusCode`) is treated as unknown -> retried.\n * Callers wanting message-based or stricter policies should pass a custom\n * {@link ShouldRetryThisError} (and may call this as a fallback).\n */\n","import { boundedErrorText } from \"./error-text\";\nimport {\n  isObjectLike,\n  normalizeRetryError,\n  type RetryErrorSnapshot,\n  snapshotRetryError,\n} from \"./retry-snapshot\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\nimport type { ShouldRetryThisError } from \"./types\";\n\nexport type { ShouldRetryThisError } from \"./types\";\n\nconst RETRYABLE_STATUS = new Set([\n  // In a multi-provider route these statuses are commonly scoped to one\n  // provider's endpoint, credentials, parameter dialect, or model catalogue.\n  // A caller that knows a 4xx is universal can retain strict behaviour with a\n  // custom `shouldRetry` classifier.\n  400, 401, 402, 403, 408, 409, 412, 413, 421, 422, 425, 429, 498,\n]);\n\nconst MODEL_UNAVAILABLE_RE =\n  /\\bunknown model\\b|\\bmodel\\b[\\s\\S]{0,160}\\b(?:not found|not available|does not exist|not supported by any provider)\\b|\\bno (?:available )?endpoints? (?:(?:was|were) )?found\\b|\\brequested provider\\b[\\s\\S]{0,160}\\bnot available\\b|\\bprovider\\b[\\s\\S]{0,160}\\bnot configured for model\\b|\\bunable to access model\\b[\\s\\S]{0,160}\\bsupported models?\\b|\\bupstream_waf_blocked\\b|\\bcloudflare waf\\b[\\s\\S]{0,40}\\b(?:block(?:ed)?|reject(?:ed|ion)?|den(?:y|ied))\\b/i;\nconst MODEL_UNAVAILABLE_CODE_RE = /\\bmodel_(?:not_found|not_available)\\b/i;\nconst MODEL_UNAVAILABLE_DETAIL_CODE_RE =\n  /\\b(?:code|type|tag)\\b[\\s\\S]{0,40}\\bmodel_(?:not_found|not_available)\\b/i;\nconst PROVIDER_UNAVAILABLE_CODE_RE =\n  /\\bprovider_(?:not_found|not_available)\\b/i;\nconst PROVIDER_UNAVAILABLE_DETAIL_CODE_RE =\n  /\\b(?:code|type|tag)\\b[\\s\\S]{0,40}\\bprovider_(?:not_found|not_available)\\b/i;\nconst CREDIT_EXHAUSTED_RE =\n  /\\b(?:insufficient|low|exhausted|exceeded|depleted|no more|not enough|requires available|run out|out of)\\b[\\s\\S]{0,100}\\b(?:balance|credits?|funds|quota)\\b|\\b(?:balance|credits?|funds|quota)\\b[\\s\\S]{0,100}\\b(?:insufficient|low|exhausted|exceeded|depleted|no more|not enough|run out|out of)\\b/i;\nconst PROVIDER_CREDENTIAL_CODE_RE =\n  /\\b(?:access_terminated_error|invalid_api_key|authentication_error|invalid_authentication|invalid_token|api_key_(?:invalid|disabled)|key_disabled|rate_limit_error|insufficient_quota|quota_exceeded|no_more_credits)\\b/i;\nconst PROVIDER_CREDENTIAL_DETAIL_CODE_RE =\n  /\\b(?:code|type|tag)\\b[\\s\\S]{0,40}\\b(?:access_terminated_error|invalid_api_key|authentication_error|invalid_authentication|invalid_token|api_key_(?:invalid|disabled)|key_disabled|rate_limit_error|insufficient_quota|quota_exceeded|no_more_credits)\\b/i;\n\nconst FAILURE_MESSAGES = new WeakMap<unknown[], string>();\nconst MAX_FAILURES = 10_000;\n\nexport function isProviderCredentialCode(value: unknown): boolean {\n  return typeof value === \"string\" && PROVIDER_CREDENTIAL_CODE_RE.test(value);\n}\n\nexport function isModelUnavailableCode(value: unknown): boolean {\n  return typeof value === \"string\" && MODEL_UNAVAILABLE_CODE_RE.test(value);\n}\n\nexport function isProviderUnavailableCode(value: unknown): boolean {\n  return typeof value === \"string\" && PROVIDER_UNAVAILABLE_CODE_RE.test(value);\n}\n\nexport function hasProviderCredentialCodeInDetails(value: string): boolean {\n  return PROVIDER_CREDENTIAL_DETAIL_CODE_RE.test(value);\n}\n\nexport function hasModelUnavailableCodeInDetails(value: string): boolean {\n  return MODEL_UNAVAILABLE_DETAIL_CODE_RE.test(value);\n}\n\nexport function hasProviderUnavailableCodeInDetails(value: string): boolean {\n  return PROVIDER_UNAVAILABLE_DETAIL_CODE_RE.test(value);\n}\n\nexport function hasRoutingUnitUnavailableDetails(value: string): boolean {\n  return MODEL_UNAVAILABLE_RE.test(value);\n}\n\nfunction failureMessage(error: unknown): string {\n  let rawMessage: unknown;\n  if (isObjectLike(error)) {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(error, \"message\");\n      rawMessage =\n        descriptor !== undefined && \"value\" in descriptor\n          ? descriptor.value\n          : undefined;\n    } catch {\n      // Fall through to the bounded diagnostic-field snapshot.\n    }\n  }\n  return typeof rawMessage === \"string\"\n    ? boundedErrorText(rawMessage, 1024)\n    : boundedErrorText(error, 1024) || \"unknown error\";\n}\n\nexport function recordFailure(errors: unknown[], error: unknown): void {\n  errors.push(error);\n  FAILURE_MESSAGES.set(errors, failureMessage(error));\n}\n\nexport function copyFailureRecord(source: unknown[], target: unknown[]): void {\n  const message = FAILURE_MESSAGES.get(source);\n  if (message !== undefined) {\n    FAILURE_MESSAGES.set(target, message);\n  }\n}\n\nfunction snapshotFailures(errors: unknown[]): unknown[] {\n  let length = 0;\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(errors, \"length\");\n    const candidate =\n      descriptor !== undefined && \"value\" in descriptor\n        ? descriptor.value\n        : undefined;\n    if (!Number.isSafeInteger(candidate) || candidate < 0) {\n      return [];\n    }\n    length = Math.min(candidate, MAX_FAILURES);\n  } catch {\n    return [];\n  }\n  const snapshot: unknown[] = [];\n  for (let index = 0; index < length; index++) {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(errors, index);\n      snapshot[index] =\n        descriptor !== undefined && \"value\" in descriptor\n          ? descriptor.value\n          : undefined;\n    } catch {\n      snapshot[index] = undefined;\n    }\n  }\n  return snapshot;\n}\n\nexport function shouldRetryErrorSnapshot(\n  snapshot: RetryErrorSnapshot\n): boolean {\n  if (snapshot.aborted) {\n    return false;\n  }\n  const { code, details, statusCode } = snapshot;\n  if (\n    isProviderCredentialCode(code) ||\n    hasProviderCredentialCodeInDetails(details)\n  ) {\n    return true;\n  }\n  if (\n    isModelUnavailableCode(code) ||\n    hasModelUnavailableCodeInDetails(details) ||\n    isProviderUnavailableCode(code) ||\n    hasProviderUnavailableCodeInDetails(details)\n  ) {\n    return true;\n  }\n  if (snapshot.invalidCode === true && statusCode === undefined) {\n    return false;\n  }\n  if (snapshot.invalidStatus === true && statusCode === undefined) {\n    return false;\n  }\n  if (statusCode !== undefined) {\n    if (RETRYABLE_STATUS.has(statusCode) || statusCode >= 500) {\n      return true;\n    }\n    if (\n      statusCode === 404 &&\n      (hasRoutingUnitUnavailableDetails(details) ||\n        CREDIT_EXHAUSTED_RE.test(details))\n    ) {\n      return true;\n    }\n    if (statusCode >= 400 && statusCode < 500) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Reduce an unknown error to the two things the classifier reasons about: a\n * numeric `statusCode` (when present) and a lowercased `message` to pattern-match.\n *\n * The `error` field of a v4 stream error part is typed `unknown` and the\n * openai-compatible provider may deliver an `Error`, a plain string, or an\n * arbitrary object — so this must cope with all of them.\n */\n\nexport function normalizeError(error: unknown): {\n  statusCode?: number;\n  message: string;\n} {\n  return normalizeRetryError(error);\n}\n\nexport function defaultShouldRetryThisError(error: unknown): boolean {\n  return shouldRetryErrorSnapshot(snapshotRetryError(error));\n}\n\n/** Resolve the classifier to use: the caller's hook, or the default. */\nexport function resolveShouldRetry(\n  hook?: ShouldRetryThisError\n): ShouldRetryThisError {\n  return hook ?? defaultShouldRetryThisError;\n}\n\n/** Run a classifier defensively — a throw inside it degrades to \"do not retry\". */\nexport function safeShouldRetry(\n  shouldRetry: ShouldRetryThisError,\n  error: unknown\n): boolean {\n  try {\n    const result: unknown = shouldRetry(error);\n    if (consumeGenuinePromise(result)) {\n      return false;\n    }\n    return result === true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Build the error to surface when every candidate has failed.\n *\n *  - 0 errors (defensive; unreachable in practice) -> a generic Error.\n *  - 1 error -> that error verbatim (identity preserved for the common case).\n *  - many -> an `AggregateError` whose `.errors` holds every candidate error and\n *    whose `.message` embeds the last error's message.\n */\nexport function surfaceFailure(errors: unknown[], logicalId: string): unknown {\n  const failures = snapshotFailures(errors);\n  if (failures.length === 0) {\n    return new Error(`ai-router: all candidates for \"${logicalId}\" failed`);\n  }\n  if (failures.length === 1) {\n    return failures[0];\n  }\n  const last = failures.at(-1);\n  const lastMessage = FAILURE_MESSAGES.get(errors) ?? failureMessage(last);\n  return new AggregateError(\n    failures,\n    `ai-router: all ${failures.length} candidates for \"${logicalId}\" failed; last error: ${lastMessage}`,\n    { cause: last }\n  );\n}\n","import { safeErrorProperty } from \"./error-text\";\nimport { retryAfterMsOfContext } from \"./failure-retry-after\";\nimport {\n  hasModelUnavailableCodeInDetails,\n  hasProviderCredentialCodeInDetails,\n  hasProviderUnavailableCodeInDetails,\n  hasRoutingUnitUnavailableDetails,\n  isModelUnavailableCode,\n  isProviderCredentialCode,\n  isProviderUnavailableCode,\n  shouldRetryErrorSnapshot,\n} from \"./retry\";\nimport { snapshotRetryErrorContext } from \"./retry-snapshot\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nimport type { FailureClassification, FailureScope } from \"./types\";\n\nconst PROVIDER_SCOPED = new Set([400, 404, 409, 413, 422]);\nconst CREDENTIAL_SCOPED = new Set([401, 402, 403, 412, 429, 498]);\nconst AUTH_DEAD_COOLDOWN_MS = 3_600_000;\nconst QUOTA_LIKE_RE =\n  /\\b(?:balance|credits?|funds|quota|budgets?|spend(?:ing)?|billing|monthly|rate.?limit|usage.?limit|suspend|resource package|recharge|top.?up)\\b/i;\nconst EXHAUSTED_RE =\n  /\\b(?:insufficient|low|exhaust(?:ed|ion)?|exceed(?:ed|s|ing)?|deplet(?:e|ed|ion)?|over|run out|out of|no more|not enough|requires available)\\b/i;\nconst MISSING_CREDENTIAL_RE =\n  /\\b(?:missing|no|unavailable)\\b[\\s\\S]{0,40}\\b(?:upstream\\s+)?(?:credentials?|api[ -]?keys?)\\b|\\b(?:upstream\\s+)?(?:credentials?|api[ -]?keys?)\\b[\\s\\S]{0,40}\\b(?:missing|not configured|unavailable)\\b/i;\nconst PLAN_ACCESS_RE =\n  /\\b(?:(?:subscription|current|paid) plan|pay-as-you-go)\\b/i;\nconst HARD_AUTH_CODE_RE =\n  /\\b(?:access_terminated_error|invalid_api_key|authentication_error|invalid_authentication|invalid_token|api_key_(?:invalid|disabled)|key_disabled)\\b/i;\nconst HARD_AUTH_DETAIL_CODE_RE =\n  /\\b(?:code|type|tag)\\b[\\s\\S]{0,40}\\b(?:access_terminated_error|invalid_api_key|authentication_error|invalid_authentication|invalid_token|api_key_(?:invalid|disabled)|key_disabled)\\b/i;\nconst REQUEST_ERROR_CODES = new Set([\n  \"call_options_contract_error\",\n  \"cancellation_unavailable\",\n  \"caller_abort\",\n  \"timer_unavailable\",\n  \"total_timeout\",\n  \"stream_unavailable\",\n  \"validator_contract_error\",\n]);\nconst FAILURE_SCOPES = new Set<FailureScope>([\n  \"request\",\n  \"credential\",\n  \"routing-unit\",\n  \"provider-family\",\n  \"transient\",\n]);\n\nexport function normalizeFailureClassification(\n  value: unknown\n): FailureClassification {\n  if (typeof value !== \"object\" || value === null) {\n    throw new Error(\"invalid failure classification\");\n  }\n  if (consumeGenuinePromise(value)) {\n    throw new Error(\"failure classification must be synchronous\");\n  }\n  const record = value as Record<string, unknown>;\n  const keys = [\n    \"cooldownMs\",\n    \"retryAfterMs\",\n    \"retryable\",\n    \"scope\",\n    \"statusCode\",\n  ] as const;\n  consumeOwnDataPromiseFields(record, keys);\n  const field = (key: (typeof keys)[number]) => {\n    const candidate = record[key];\n    if (consumeGenuinePromise(candidate)) {\n      throw new Error(\"failure classification must be synchronous\");\n    }\n    return candidate;\n  };\n  const retryable = field(\"retryable\");\n  const scope = field(\"scope\");\n  if (\n    typeof retryable !== \"boolean\" ||\n    typeof scope !== \"string\" ||\n    !FAILURE_SCOPES.has(scope as FailureScope)\n  ) {\n    throw new Error(\"invalid failure classification\");\n  }\n  const optionalNumber = (key: string, nonNegative = false) => {\n    const candidate = field(key as (typeof keys)[number]);\n    if (candidate === undefined) {\n      return;\n    }\n    if (\n      typeof candidate !== \"number\" ||\n      !Number.isFinite(candidate) ||\n      (nonNegative && candidate < 0)\n    ) {\n      throw new Error(\"invalid failure classification\");\n    }\n    return candidate;\n  };\n  const cooldownMs = optionalNumber(\"cooldownMs\", true);\n  const retryAfterMs = optionalNumber(\"retryAfterMs\", true);\n  const statusCode = optionalNumber(\"statusCode\");\n  if (\n    statusCode !== undefined &&\n    (!Number.isInteger(statusCode) || statusCode < 100 || statusCode > 599)\n  ) {\n    throw new Error(\"invalid failure classification\");\n  }\n  return {\n    retryable,\n    scope: scope as FailureScope,\n    ...(cooldownMs === undefined ? {} : { cooldownMs }),\n    ...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n    ...(statusCode === undefined ? {} : { statusCode }),\n  };\n}\n\nexport function isTerminalRequestFailure(error: unknown): boolean {\n  const code = safeErrorProperty(error, \"code\");\n  if (consumeGenuinePromise(code)) {\n    return false;\n  }\n  return typeof code === \"string\" && REQUEST_ERROR_CODES.has(code);\n}\n\nfunction isCredentialFailure(\n  statusCode: number,\n  details: string,\n  code: unknown\n): boolean {\n  if (hasCredentialCode(code, details)) {\n    return true;\n  }\n  if (CREDENTIAL_SCOPED.has(statusCode)) {\n    return true;\n  }\n  if (statusCode === 503 && MISSING_CREDENTIAL_RE.test(details)) {\n    return true;\n  }\n  if (statusCode === 404 && PLAN_ACCESS_RE.test(details)) {\n    return true;\n  }\n  return (\n    (statusCode === 400 || statusCode === 404) &&\n    QUOTA_LIKE_RE.test(details) &&\n    EXHAUSTED_RE.test(details)\n  );\n}\n\nfunction hasCredentialCode(code: unknown, details: string): boolean {\n  return (\n    isProviderCredentialCode(code) ||\n    hasProviderCredentialCodeInDetails(details)\n  );\n}\n\nfunction isHardAuthFailure(\n  statusCode: number | undefined,\n  details: string,\n  code: unknown\n): boolean {\n  return (\n    statusCode === 401 ||\n    statusCode === 498 ||\n    (typeof code === \"string\" && HARD_AUTH_CODE_RE.test(code)) ||\n    HARD_AUTH_DETAIL_CODE_RE.test(details) ||\n    (statusCode === 403 &&\n      !QUOTA_LIKE_RE.test(details) &&\n      !hasRoutingUnitUnavailableEvidence(code, details)) ||\n    (statusCode === 503 && MISSING_CREDENTIAL_RE.test(details))\n  );\n}\n\nfunction hasRoutingUnitUnavailableCodeEvidence(\n  code: unknown,\n  details: string\n): boolean {\n  return (\n    isModelUnavailableCode(code) ||\n    hasModelUnavailableCodeInDetails(details) ||\n    isProviderUnavailableCode(code) ||\n    hasProviderUnavailableCodeInDetails(details)\n  );\n}\n\nfunction hasRoutingUnitUnavailableEvidence(\n  code: unknown,\n  details: string\n): boolean {\n  return (\n    hasRoutingUnitUnavailableCodeEvidence(code, details) ||\n    hasRoutingUnitUnavailableDetails(details)\n  );\n}\n\nfunction defaultFailureScope(\n  statusCode: number | undefined,\n  retryable: boolean,\n  details: string,\n  code: unknown\n): FailureScope {\n  if (hasCredentialCode(code, details)) {\n    return \"credential\";\n  }\n  if (hasRoutingUnitUnavailableCodeEvidence(code, details)) {\n    return \"routing-unit\";\n  }\n  if (PLAN_ACCESS_RE.test(details)) {\n    return \"credential\";\n  }\n  if (hasRoutingUnitUnavailableDetails(details)) {\n    return \"routing-unit\";\n  }\n  if (statusCode === undefined) {\n    return retryable ? \"transient\" : \"request\";\n  }\n  if (!retryable && statusCode >= 400 && statusCode < 500) {\n    return \"request\";\n  }\n  if (isCredentialFailure(statusCode, details, code)) {\n    return \"credential\";\n  }\n  if (PROVIDER_SCOPED.has(statusCode)) {\n    return \"routing-unit\";\n  }\n  return \"transient\";\n}\n\nexport function defaultClassifyFailure(error: unknown): FailureClassification {\n  const { cause, causeResponse, response, snapshot } =\n    snapshotRetryErrorContext(error, \"always\", true);\n  const { code, details, statusCode } = snapshot;\n  const retryable = shouldRetryErrorSnapshot(snapshot);\n\n  if (typeof code === \"string\" && REQUEST_ERROR_CODES.has(code)) {\n    return { retryable: false, scope: \"request\" };\n  }\n  if (code === \"invalid_provider_model\") {\n    return {\n      cooldownMs: AUTH_DEAD_COOLDOWN_MS,\n      retryable: true,\n      scope: \"routing-unit\",\n    };\n  }\n  const scope = defaultFailureScope(statusCode, retryable, details, code);\n  const retryAfterMs = retryAfterMsOfContext(error, undefined, {\n    cause,\n    causeResponse,\n    response,\n  });\n  const hardAuthFailure = isHardAuthFailure(statusCode, details, code);\n  return {\n    retryable,\n    scope,\n    ...(hardAuthFailure ? { cooldownMs: AUTH_DEAD_COOLDOWN_MS } : {}),\n    ...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n    ...(statusCode === undefined ? {} : { statusCode }),\n  };\n}\n","import {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nimport type { RouterHealthRecord, RouterOrderingToken } from \"./types\";\n\nexport const DEFAULT_TRANSIENT_MS = 15_000;\nexport const DEFAULT_CREDENTIAL_MS = 60_000;\nexport const MAX_COOLDOWN_MS = 3_600_000;\nexport const PROBE_LEASE_MS = 30_000;\nexport const MAX_LOCAL_WRITE_FAILURES = 100_000;\nexport const HEALTH_CLOCK_SKEW_MS = 300_000;\nexport const HEALTH_STALE_AFTER_MS = 86_400_000;\nexport const STRING_TOKEN_RE = /^v1:(\\d{13,}):([^:]+):(\\d{6})$/;\nexport const HEALTH_RECORD_KEYS = [\n  \"cooldownUntil\",\n  \"failures\",\n  \"lastFailureAt\",\n  \"lastStatus\",\n  \"lastSuccessAt\",\n  \"observedAtMs\",\n  \"probingUntil\",\n  \"version\",\n] as const;\n\nexport function validHealthNow(value: unknown): value is number {\n  return (\n    typeof value === \"number\" &&\n    Number.isFinite(value) &&\n    value >= 0 &&\n    Number.isFinite(value + MAX_COOLDOWN_MS) &&\n    value + DEFAULT_TRANSIENT_MS > value\n  );\n}\n\nexport function stringTokenTimestamp(token: string): bigint | undefined {\n  const match = STRING_TOKEN_RE.exec(token);\n  if (match === null) {\n    return;\n  }\n  try {\n    return BigInt(match[1]);\n  } catch {\n    return;\n  }\n}\n\nexport function validOrderingToken(\n  value: unknown\n): value is RouterOrderingToken {\n  return (\n    (typeof value === \"number\" && Number.isFinite(value) && value >= 0) ||\n    (typeof value === \"string\" &&\n      value.length <= 256 &&\n      stringTokenTimestamp(value) !== undefined)\n  );\n}\n\nexport function consumeAsyncResult(value: unknown): boolean {\n  return consumeGenuinePromise(value);\n}\n\nexport function invalidStoreMutationResult(value: unknown): boolean {\n  return (\n    consumeAsyncResult(value) ||\n    (typeof value === \"object\" && value !== null) ||\n    typeof value === \"function\"\n  );\n}\n\nexport function validOptionalHttpStatus(value: number | undefined): boolean {\n  return (\n    value === undefined ||\n    (Number.isSafeInteger(value) && value >= 100 && value <= 599)\n  );\n}\n\nexport function snapshotHealthRecord(value: object): Record<string, unknown> {\n  const snapshot: Record<string, unknown> = {};\n  consumeOwnDataPromiseFields(value, HEALTH_RECORD_KEYS);\n  for (const key of HEALTH_RECORD_KEYS) {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, key);\n      if (descriptor !== undefined && \"value\" in descriptor) {\n        snapshot[key] = descriptor.value;\n      }\n    } catch {\n      // A hostile descriptor boundary degrades to a malformed record without\n      // executing caller getters, prototype extensions, or key enumeration.\n    }\n  }\n  return snapshot;\n}\n\nexport function normalizedRecord(\n  value: unknown\n): RouterHealthRecord | undefined {\n  if (typeof value !== \"object\" || value === null) {\n    return;\n  }\n  try {\n    const record = snapshotHealthRecord(value);\n    const cooldownUntil = record.cooldownUntil;\n    const failures = record.failures;\n    if (\n      typeof cooldownUntil !== \"number\" ||\n      !Number.isFinite(cooldownUntil) ||\n      cooldownUntil < 0 ||\n      typeof failures !== \"number\" ||\n      !Number.isSafeInteger(failures) ||\n      failures < 0\n    ) {\n      return;\n    }\n    const finiteOptional = (key: string): number | undefined | false => {\n      const item = record[key];\n      if (item === undefined) {\n        return;\n      }\n      return typeof item === \"number\" && Number.isFinite(item) ? item : false;\n    };\n    const observedAtMs = finiteOptional(\"observedAtMs\");\n    const probingUntil = finiteOptional(\"probingUntil\");\n    const lastStatus = finiteOptional(\"lastStatus\");\n    const version = finiteOptional(\"version\");\n    const lastFailureAt = record.lastFailureAt;\n    const lastSuccessAt = record.lastSuccessAt;\n    if (\n      observedAtMs === false ||\n      probingUntil === false ||\n      lastStatus === false ||\n      version === false ||\n      (observedAtMs !== undefined && observedAtMs < 0) ||\n      (probingUntil !== undefined && probingUntil < 0) ||\n      (probingUntil !== undefined && failures === 0) ||\n      !validOptionalHttpStatus(lastStatus) ||\n      (version !== undefined &&\n        (!Number.isSafeInteger(version) || version < 0)) ||\n      !(lastFailureAt === undefined || validOrderingToken(lastFailureAt)) ||\n      !(lastSuccessAt === undefined || validOrderingToken(lastSuccessAt))\n    ) {\n      return;\n    }\n    return {\n      cooldownUntil,\n      failures,\n      ...(lastFailureAt === undefined ? {} : { lastFailureAt }),\n      ...(lastStatus === undefined ? {} : { lastStatus }),\n      ...(lastSuccessAt === undefined ? {} : { lastSuccessAt }),\n      ...(observedAtMs === undefined ? {} : { observedAtMs }),\n      ...(probingUntil === undefined ? {} : { probingUntil }),\n      ...(version === undefined ? {} : { version }),\n    };\n  } catch {\n    return;\n  }\n}\n\nexport function compareBigInts(\n  left: bigint | undefined,\n  right: bigint | undefined\n): number {\n  if (left === undefined || right === undefined) {\n    return 0;\n  }\n  if (left === right) {\n    return 0;\n  }\n  return left < right ? -1 : 1;\n}\n\nexport function compareStringTokens(left: string, right: string): number {\n  if (left === right) {\n    return 0;\n  }\n  const timestampOrder = compareBigInts(\n    stringTokenTimestamp(left),\n    stringTokenTimestamp(right)\n  );\n  if (timestampOrder !== 0) {\n    return timestampOrder;\n  }\n  return left < right ? -1 : 1;\n}\n\nexport function tokenTime(value: RouterOrderingToken): bigint | undefined {\n  return typeof value === \"number\"\n    ? BigInt(Math.floor(value / 4096))\n    : stringTokenTimestamp(value);\n}\n\nexport function stringTokenTooFarInFuture(\n  value: RouterOrderingToken | undefined,\n  now: number\n): boolean {\n  if (typeof value !== \"string\") {\n    return false;\n  }\n  const timestamp = stringTokenTimestamp(value);\n  return (\n    timestamp !== undefined &&\n    timestamp > BigInt(Math.floor(now + HEALTH_CLOCK_SKEW_MS))\n  );\n}\n\nexport function compareTokens(\n  left: RouterOrderingToken | undefined,\n  right: RouterOrderingToken | undefined\n): number {\n  if (left === undefined || right === undefined) {\n    if (left === right) {\n      return 0;\n    }\n    return left === undefined ? -1 : 1;\n  }\n  if (typeof left === \"number\" && typeof right === \"number\") {\n    return left - right;\n  }\n  if (typeof left === \"string\" && typeof right === \"string\") {\n    return compareStringTokens(left, right);\n  }\n  return compareBigInts(tokenTime(left), tokenTime(right));\n}\n\nexport function sameTimestampDifferentSources(\n  left: RouterOrderingToken | undefined,\n  right: RouterOrderingToken | undefined\n): boolean {\n  if (typeof left !== \"string\" || typeof right !== \"string\") {\n    return false;\n  }\n  const leftMatch = STRING_TOKEN_RE.exec(left);\n  const rightMatch = STRING_TOKEN_RE.exec(right);\n  return (\n    leftMatch !== null &&\n    rightMatch !== null &&\n    leftMatch[1] === rightMatch[1] &&\n    leftMatch[2] !== rightMatch[2]\n  );\n}\n\nexport function successSupersedesFailure(\n  success: RouterOrderingToken | undefined,\n  failure: RouterOrderingToken\n): boolean {\n  return (\n    !sameTimestampDifferentSources(success, failure) &&\n    compareTokens(success, failure) >= 0\n  );\n}\n\nexport function failureAtOrAfterAttempt(\n  failure: RouterOrderingToken | undefined,\n  attempt: RouterOrderingToken\n): boolean {\n  return (\n    sameTimestampDifferentSources(failure, attempt) ||\n    compareTokens(failure, attempt) >= 0\n  );\n}\n\nexport function successCanSupersede(\n  failure: RouterOrderingToken | undefined,\n  success: RouterOrderingToken\n): boolean {\n  if (failure === undefined) {\n    return true;\n  }\n  if (typeof failure === \"string\" && typeof success === \"string\") {\n    const failureMatch = STRING_TOKEN_RE.exec(failure);\n    const successMatch = STRING_TOKEN_RE.exec(success);\n    if (failureMatch !== null && successMatch !== null) {\n      const timestampOrder = compareBigInts(\n        stringTokenTimestamp(failure),\n        stringTokenTimestamp(success)\n      );\n      if (timestampOrder !== 0) {\n        return timestampOrder < 0;\n      }\n      if (failureMatch[2] !== successMatch[2]) {\n        return false;\n      }\n    }\n  }\n  return compareTokens(failure, success) <= 0;\n}\n\nexport function newestToken(\n  left: RouterOrderingToken | undefined,\n  right: RouterOrderingToken\n): RouterOrderingToken {\n  return compareTokens(left, right) >= 0 ? (left ?? right) : right;\n}\n\nexport function sharedRecordSupersedesLocal(\n  shared: RouterHealthRecord | undefined,\n  local: RouterHealthRecord\n): boolean {\n  if (shared === undefined) {\n    return false;\n  }\n  if (local.lastSuccessAt !== undefined) {\n    return (\n      (shared.lastFailureAt !== undefined &&\n        !successCanSupersede(shared.lastFailureAt, local.lastSuccessAt)) ||\n      (shared.lastSuccessAt !== undefined &&\n        compareTokens(shared.lastSuccessAt, local.lastSuccessAt) > 0)\n    );\n  }\n  return (\n    (shared.lastSuccessAt !== undefined &&\n      successCanSupersede(local.lastFailureAt, shared.lastSuccessAt)) ||\n    compareTokens(shared.lastFailureAt, local.lastFailureAt) > 0 ||\n    (shared.observedAtMs ?? 0) > (local.observedAtMs ?? 0)\n  );\n}\n\nexport function effectiveHealthRecord(\n  shared: RouterHealthRecord | undefined,\n  local: RouterHealthRecord | undefined\n): RouterHealthRecord | undefined {\n  return local !== undefined && !sharedRecordSupersedesLocal(shared, local)\n    ? local\n    : shared;\n}\n\nexport function fingerprint(value: string): string {\n  let hash = 0x9e3779b185ebca87n;\n  for (let index = 0; index < value.length; index++) {\n    hash = BigInt.asUintN(\n      64,\n      hash * 0x100000001b3n + BigInt(value.charCodeAt(index))\n    );\n  }\n  return hash.toString(16).padStart(16, \"0\");\n}\n\nexport function redactHealthKey(key: string): string {\n  for (const marker of [\":credential:\", \":family:\"]) {\n    const offset = key.indexOf(marker);\n    if (offset !== -1) {\n      const prefix = key.slice(0, offset + marker.length);\n      return `${prefix}#${fingerprint(key.slice(offset + marker.length))}`;\n    }\n  }\n  return key;\n}\n","import { snapshotHealthRecord } from \"./health-record\";\nimport type { RouterHealthRecord, RouterHealthStore } from \"./types\";\n\nexport type HealthTransition =\n  | \"cas-exhausted\"\n  | \"cooling\"\n  | \"deduplicated\"\n  | \"ignored-stale\"\n  | \"recovered\";\n\nexport interface HealthProbeLease {\n  key: string;\n  probingUntil: number;\n  source?: \"local\";\n}\n\nexport class RouterHealthUnavailableError extends Error {\n  readonly code = \"health_unavailable\";\n  readonly logicalId: string;\n\n  constructor(logicalId: string) {\n    super(\n      `ai-router: all compatible candidates for \"${logicalId}\" are unavailable due to health cooldown`\n    );\n    this.name = \"RouterHealthUnavailableError\";\n    this.logicalId = logicalId;\n  }\n}\n\nexport function cloneHealthRecord(\n  value: RouterHealthRecord\n): RouterHealthRecord {\n  return snapshotHealthRecord(value) as unknown as RouterHealthRecord;\n}\n\nexport function resolveCasResult<T>(\n  result: unknown,\n  success: T\n): T | \"cas-exhausted\" | undefined {\n  if (result === false) {\n    return;\n  }\n  return result === true ? success : \"cas-exhausted\";\n}\n\nexport class MemoryRouterHealthStore implements RouterHealthStore {\n  private readonly records = new Map<string, RouterHealthRecord>();\n  private readonly maxRecords: number;\n\n  constructor(maxRecords = 100_000) {\n    if (!Number.isSafeInteger(maxRecords) || maxRecords < 1) {\n      throw new Error(\n        \"ai-router: memory health store maxRecords must be a positive safe integer\"\n      );\n    }\n    this.maxRecords = maxRecords;\n  }\n\n  delete(key: string): void {\n    this.records.delete(key);\n  }\n\n  compareAndSet(\n    key: string,\n    expectedVersion: number | undefined,\n    value: RouterHealthRecord\n  ): boolean {\n    if (this.records.get(key)?.version !== expectedVersion) {\n      return false;\n    }\n    this.setRecord(key, value);\n    return true;\n  }\n\n  entries(): IterableIterator<[string, RouterHealthRecord]> {\n    return Array.from(\n      this.records,\n      ([key, value]) =>\n        [key, cloneHealthRecord(value)] as [string, RouterHealthRecord]\n    ).values();\n  }\n\n  get(key: string): RouterHealthRecord | undefined {\n    const value = this.records.get(key);\n    if (value !== undefined) {\n      this.records.delete(key);\n      this.records.set(key, value);\n    }\n    return value === undefined ? undefined : cloneHealthRecord(value);\n  }\n\n  set(key: string, value: RouterHealthRecord): void {\n    this.setRecord(key, value);\n  }\n\n  private setRecord(key: string, value: RouterHealthRecord): void {\n    this.records.delete(key);\n    this.records.set(key, cloneHealthRecord(value));\n    if (this.records.size > this.maxRecords) {\n      const oldest = this.records.keys().next().value;\n      if (oldest !== undefined) {\n        this.records.delete(oldest);\n      }\n    }\n  }\n}\n","import type { LanguageModelV4Prompt } from \"@ai-sdk/provider\";\nimport { getTopLevelMediaType } from \"@ai-sdk/provider-utils\";\n\nimport type { Modality } from \"./types\";\n\ntype NonSystemMessage = Exclude<\n  LanguageModelV4Prompt[number],\n  { role: \"system\" }\n>;\ntype PromptPart = NonSystemMessage[\"content\"][number];\n\nfunction addPartModalities(modalities: Set<Modality>, part: PromptPart): void {\n  if (part.type === \"text\" || part.type === \"reasoning\") {\n    modalities.add(\"text\");\n    return;\n  }\n  if (part.type === \"file\" || part.type === \"reasoning-file\") {\n    modalities.add(fileModality(part.mediaType));\n    return;\n  }\n  if (part.type !== \"tool-result\" || part.output.type !== \"content\") {\n    return;\n  }\n  for (const output of part.output.value) {\n    if (output.type === \"file\") {\n      modalities.add(fileModality(output.mediaType));\n    }\n  }\n}\n\n/**\n * Scan a model-level prompt (`LanguageModelV4Prompt`, spec v4 — what the AI SDK\n * passes into `doGenerate`/`doStream`) and report which input modalities appear.\n *\n * V4 details that matter here:\n *  - File input is a content part with `type: 'file'` (`LanguageModelV4FilePart`).\n *  - The IANA media type lives in `part.mediaType` (NOT `mimeType`).\n *  - `mediaType` may be a full `type/subtype` (e.g. `image/png`), a bare\n *    top-level segment (e.g. `image`), or an `image/*` wildcard. We normalize\n *    via `getTopLevelMediaType()` so all three forms work.\n *  - PDF is `application/pdf` (top-level `application`), so it is special-cased\n *    rather than matched by top-level prefix.\n *  - `part.data` is a tagged union (`SharedV4FileData`); irrelevant for\n *    modality routing — we only read `mediaType`.\n *  - Only `user`/`assistant` messages carry input parts; `system` content is a\n *    plain string (pure text).\n */\nexport function detectModalities(prompt: LanguageModelV4Prompt): Set<Modality> {\n  const modalities = new Set<Modality>();\n\n  for (const message of prompt) {\n    if (message.role === \"system\") {\n      modalities.add(\"text\");\n      continue;\n    }\n\n    for (const part of message.content) {\n      addPartModalities(modalities, part);\n    }\n  }\n\n  return modalities;\n}\n\n/**\n * Map a single file part's media type to a routing modality. Unknown media\n * types remain files rather than disappearing from capability routing.\n */\nfunction fileModality(rawMediaType: string): Modality {\n  // Strip any media-type parameters (e.g. `application/pdf; charset=…`) before\n  // matching so `type/subtype` comparisons stay exact.\n  const mediaType = rawMediaType.toLowerCase().split(\";\")[0].trim();\n\n  // PDF is application/pdf — special-case before the top-level scan.\n  if (mediaType === \"application/pdf\" || mediaType === \"application/x-pdf\") {\n    return \"pdf\";\n  }\n\n  // Normalizes 'image/png', 'image/*' and bare 'image' all to 'image'.\n  const top = getTopLevelMediaType(mediaType);\n  if (top === \"image\" || top === \"video\" || top === \"audio\") {\n    return top;\n  }\n\n  // text/*, application/*, and vendor media types are still file parts and\n  // require generic file support; they must not route to text-part-only models.\n  return \"file\";\n}\n\n/**\n * True iff every modality in `required` is present in the entry's `supports`.\n *\n * An omitted (`undefined`) `supports` means the entry is a universal candidate\n * that matches ANY modality — it is never filtered out.\n */\nexport function supportsAll(\n  supports: Modality[] | undefined,\n  required: Set<Modality>\n): boolean {\n  if (supports === undefined) {\n    return true;\n  }\n  for (const modality of required) {\n    if (!supports.includes(modality)) {\n      return false;\n    }\n  }\n  return true;\n}\n","const HTTP_HEADER_NAME_PATTERN = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\n\nexport function isValidHttpHeaderName(value: string): boolean {\n  return value.length <= 256 && HTTP_HEADER_NAME_PATTERN.test(value);\n}\n\nexport function hasInvalidHttpHeaderValueCharacter(value: string): boolean {\n  for (let index = 0; index < value.length; index += 1) {\n    const code = value.charCodeAt(index);\n    if (code <= 8 || (code >= 10 && code <= 31) || code === 127) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function boundedEnumerableOwnKeys(\n  value: object,\n  maximum: number\n): string[] | undefined {\n  const keys: string[] = [];\n  let visited = 0;\n  for (const key in value) {\n    if (Object.hasOwn(value, key)) {\n      visited += 1;\n      if (visited > maximum) {\n        return;\n      }\n      keys.push(key);\n    } else {\n      visited += 1;\n      if (visited > maximum) {\n        return;\n      }\n    }\n  }\n  return keys;\n}\n","import { safeErrorProperty } from \"./error-text\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  isPlainObjectValue,\n} from \"./runtime-types\";\nimport type {\n  FallbackOptions,\n  RetryBudgetConfig,\n  RouterHealthStore,\n} from \"./types\";\n\nexport const capturedHealthStores = new WeakMap<object, RouterHealthStore>();\n\nexport function captureHealthStore(store: unknown): RouterHealthStore {\n  if (\n    !(\n      (typeof store === \"object\" && store !== null) ||\n      typeof store === \"function\"\n    )\n  ) {\n    throw new Error(\"ai-router: fallback.healthStore must be an object\");\n  }\n  const storeObject = store as object;\n  const existing = capturedHealthStores.get(storeObject);\n  if (existing !== undefined) {\n    return existing;\n  }\n  const methodNames = [\n    \"compareAndSet\",\n    \"delete\",\n    \"entries\",\n    \"get\",\n    \"set\",\n  ] as const;\n  consumeOwnDataPromiseFields(storeObject, methodNames);\n  const methods = {\n    compareAndSet: safeErrorProperty(store, \"compareAndSet\"),\n    delete: safeErrorProperty(store, \"delete\"),\n    entries: safeErrorProperty(store, \"entries\"),\n    get: safeErrorProperty(store, \"get\"),\n    set: safeErrorProperty(store, \"set\"),\n  };\n  let asyncMethod = false;\n  for (const method of Object.values(methods)) {\n    if (consumeGenuinePromise(method)) {\n      asyncMethod = true;\n    }\n  }\n  if (asyncMethod) {\n    throw new Error(\n      \"ai-router: fallback.healthStore methods must be synchronous\"\n    );\n  }\n  for (const method of [\"delete\", \"get\", \"set\"] as const) {\n    if (typeof methods[method] !== \"function\") {\n      throw new Error(\n        `ai-router: fallback.healthStore.${method} must be a function`\n      );\n    }\n  }\n  for (const method of [\"compareAndSet\", \"entries\"] as const) {\n    const value = methods[method];\n    if (value !== undefined && typeof value !== \"function\") {\n      throw new Error(\n        `ai-router: fallback.healthStore.${method} must be a function`\n      );\n    }\n  }\n  const deleteMethod = methods.delete as RouterHealthStore[\"delete\"];\n  const getMethod = methods.get as RouterHealthStore[\"get\"];\n  const setMethod = methods.set as RouterHealthStore[\"set\"];\n  const captured: RouterHealthStore = {\n    delete(key) {\n      return deleteMethod.call(store, key);\n    },\n    get(key) {\n      return getMethod.call(store, key);\n    },\n    set(key, value) {\n      return setMethod.call(store, key, value);\n    },\n  };\n  if (typeof methods.compareAndSet === \"function\") {\n    const compareAndSetMethod = methods.compareAndSet as NonNullable<\n      RouterHealthStore[\"compareAndSet\"]\n    >;\n    captured.compareAndSet = (key, expectedVersion, value) =>\n      compareAndSetMethod.call(store, key, expectedVersion, value);\n  }\n  if (typeof methods.entries === \"function\") {\n    const entriesMethod = methods.entries as NonNullable<\n      RouterHealthStore[\"entries\"]\n    >;\n    captured.entries = () => entriesMethod.call(store);\n  }\n  capturedHealthStores.set(storeObject, captured);\n  return captured;\n}\n\nexport function snapshotFallback(\n  fallback: FallbackOptions | undefined\n): FallbackOptions | undefined {\n  if (fallback === undefined) {\n    return;\n  }\n  if (consumeGenuinePromise(fallback)) {\n    throw new Error(\"ai-router: fallback must be synchronous\");\n  }\n  if (\n    typeof fallback !== \"object\" ||\n    fallback === null ||\n    Array.isArray(fallback)\n  ) {\n    throw new Error(\"ai-router: fallback must be an options object\");\n  }\n  const keys = [\n    \"attemptTimeout\",\n    \"backoff\",\n    \"classifyFailure\",\n    \"concurrencyWaitTimeout\",\n    \"cooldown\",\n    \"firstContentTimeout\",\n    \"health\",\n    \"healthNamespace\",\n    \"healthStore\",\n    \"maxAttempts\",\n    \"retryAfterOutput\",\n    \"retryBudget\",\n    \"selection\",\n    \"shouldRetry\",\n    \"strictStreamValidation\",\n    \"totalTimeout\",\n    \"validateResult\",\n  ] as const;\n  consumeOwnDataPromiseFields(fallback, keys);\n  const snapshot: FallbackOptions = {\n    attemptTimeout: fallback.attemptTimeout,\n    backoff: fallback.backoff,\n    classifyFailure: fallback.classifyFailure,\n    concurrencyWaitTimeout: fallback.concurrencyWaitTimeout,\n    cooldown: fallback.cooldown,\n    firstContentTimeout: fallback.firstContentTimeout,\n    health: fallback.health,\n    healthNamespace: fallback.healthNamespace,\n    healthStore: fallback.healthStore,\n    maxAttempts: fallback.maxAttempts,\n    retryAfterOutput: fallback.retryAfterOutput,\n    retryBudget: fallback.retryBudget,\n    selection: fallback.selection,\n    shouldRetry: fallback.shouldRetry,\n    strictStreamValidation: fallback.strictStreamValidation,\n    totalTimeout: fallback.totalTimeout,\n    validateResult: fallback.validateResult,\n  };\n  let asyncField = false;\n  for (const value of Object.values(snapshot)) {\n    if (consumeGenuinePromise(value)) {\n      asyncField = true;\n    }\n  }\n  if (asyncField) {\n    throw new Error(\"ai-router: fallback options must be synchronous\");\n  }\n  if (snapshot.healthStore !== undefined) {\n    snapshot.healthStore = captureHealthStore(snapshot.healthStore);\n  }\n  if (isPlainObjectValue(snapshot.retryBudget)) {\n    const budget = snapshot.retryBudget as RetryBudgetConfig;\n    snapshot.retryBudget = {\n      maxSamples: budget.maxSamples,\n      minSamples: budget.minSamples,\n      recoveryFailureRate: budget.recoveryFailureRate,\n      tripFailureRate: budget.tripFailureRate,\n      window: budget.window,\n    };\n  }\n  if (isPlainObjectValue(snapshot.cooldown)) {\n    const cooldown = snapshot.cooldown as { modelResetInterval?: number };\n    snapshot.cooldown = {\n      modelResetInterval: cooldown.modelResetInterval,\n    };\n  }\n  for (const [name, value] of [\n    [\"classifyFailure\", snapshot.classifyFailure],\n    [\"shouldRetry\", snapshot.shouldRetry],\n    [\"validateResult\", snapshot.validateResult],\n  ] as const) {\n    if (value !== undefined && typeof value !== \"function\") {\n      throw new Error(`ai-router: fallback.${name} must be a function`);\n    }\n  }\n  for (const [name, value] of [\n    [\"health\", snapshot.health],\n    [\"retryAfterOutput\", snapshot.retryAfterOutput],\n    [\"strictStreamValidation\", snapshot.strictStreamValidation],\n  ] as const) {\n    if (value !== undefined && typeof value !== \"boolean\") {\n      throw new Error(`ai-router: fallback.${name} must be a boolean`);\n    }\n  }\n  return snapshot;\n}\n","import {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n\ninterface AbortSignalOperations {\n  add: AbortSignal[\"addEventListener\"];\n  remove: AbortSignal[\"removeEventListener\"];\n}\n\nconst operationsBySignal = new WeakMap<object, AbortSignalOperations>();\n\nexport function captureAbortSignalOperations(\n  value: unknown\n): AbortSignalOperations | undefined {\n  if (value === undefined) {\n    return;\n  }\n  if (consumeGenuinePromise(value)) {\n    throw new Error(\"abortSignal must be synchronous\");\n  }\n  if (typeof value !== \"object\" || value === null) {\n    throw new Error(\"abortSignal must implement AbortSignal\");\n  }\n  const existing = operationsBySignal.get(value);\n  if (existing !== undefined) {\n    return existing;\n  }\n  consumeOwnDataPromiseFields(value, [\n    \"addEventListener\",\n    \"removeEventListener\",\n  ]);\n  const add = Reflect.get(value, \"addEventListener\");\n  const remove = Reflect.get(value, \"removeEventListener\");\n  const asyncAdd = consumeGenuinePromise(add);\n  const asyncRemove = consumeGenuinePromise(remove);\n  if (\n    asyncAdd ||\n    asyncRemove ||\n    typeof add !== \"function\" ||\n    typeof remove !== \"function\"\n  ) {\n    throw new Error(\"abortSignal must implement AbortSignal\");\n  }\n  const operations = { add, remove } as AbortSignalOperations;\n  operationsBySignal.set(value, operations);\n  return operations;\n}\n\nexport function addCapturedAbortListener(\n  signal: AbortSignal,\n  listener: () => void\n): () => void {\n  const operations = captureAbortSignalOperations(signal);\n  if (operations === undefined) {\n    return () => undefined;\n  }\n  let active = true;\n  let delivered = false;\n  const guardedListener = () => {\n    if (!active || delivered) {\n      return;\n    }\n    delivered = true;\n    listener();\n  };\n  const cleanup = () => {\n    if (!active) {\n      return;\n    }\n    active = false;\n    try {\n      consumeGenuinePromise(\n        operations.remove.call(signal, \"abort\", guardedListener)\n      );\n    } catch {\n      // Cleanup is best-effort and must not replace the operation outcome.\n    }\n  };\n  try {\n    const registration = operations.add.call(signal, \"abort\", guardedListener, {\n      once: true,\n    });\n    if (consumeGenuinePromise(registration)) {\n      throw new Error(\"abort listener registration must be synchronous\");\n    }\n  } catch (error) {\n    cleanup();\n    throw error;\n  }\n  return cleanup;\n}\n","import { boundedEnumerableOwnKeys } from \"./http-headers\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n\nconst MAX_JSON_DEPTH = 32;\nconst MAX_JSON_NODES = 10_000;\nconst MAX_JSON_OBJECT_KEYS = 1024;\nconst MAX_JSON_ARRAY_ITEMS = 10_000;\nconst MAX_JSON_CHARACTERS = 4_194_304;\n\nexport interface JsonSnapshot {\n  async?: boolean;\n  characters?: number;\n  containers?: number;\n  valid: boolean;\n  value?: unknown;\n}\n\ninterface JsonContext {\n  active: WeakSet<object>;\n  characters: number;\n  maximum: number;\n  maximumCharacters: number;\n  nodes: number;\n}\n\nclass AsyncJsonValueError extends Error {}\n\nfunction isJsonObjectContainer(value: object): boolean {\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === null || Object.getPrototypeOf(prototype) === null;\n}\n\nfunction visitJsonArray(\n  value: unknown[],\n  depth: number,\n  context: JsonContext\n): unknown[] {\n  const length = Reflect.get(value, \"length\");\n  if (\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > MAX_JSON_ARRAY_ITEMS\n  ) {\n    throw new Error(\"sparse or oversized JSON array\");\n  }\n  consumeOwnDataPromiseFields(\n    value,\n    Array.from({ length }, (_, index) => index)\n  );\n  const snapshot = new Array<unknown>(length);\n  let asyncFailure: AsyncJsonValueError | undefined;\n  for (let index = 0; index < length; index += 1) {\n    if (!Object.hasOwn(value, index)) {\n      throw new Error(\"sparse or oversized JSON array\");\n    }\n    try {\n      snapshot[index] = visitJson(\n        Reflect.get(value, index),\n        depth + 1,\n        context\n      );\n    } catch (error) {\n      if (!(error instanceof AsyncJsonValueError)) {\n        throw error;\n      }\n      asyncFailure ??= error;\n    }\n  }\n  if (asyncFailure !== undefined) {\n    throw asyncFailure;\n  }\n  return snapshot;\n}\n\nfunction visitJsonObject(\n  value: object,\n  depth: number,\n  context: JsonContext\n): Record<string, unknown> {\n  if (!isJsonObjectContainer(value)) {\n    throw new Error(\"JSON objects must use an ordinary object prototype\");\n  }\n  const keys = boundedEnumerableOwnKeys(value, MAX_JSON_OBJECT_KEYS);\n  if (keys === undefined) {\n    throw new Error(\"oversized JSON object\");\n  }\n  consumeOwnDataPromiseFields(value, keys);\n  const snapshot: Record<string, unknown> = {};\n  let asyncFailure: AsyncJsonValueError | undefined;\n  for (const key of keys) {\n    context.characters += key.length;\n    if (context.characters > context.maximumCharacters) {\n      throw new Error(\"oversized JSON object keys\");\n    }\n    try {\n      Object.defineProperty(snapshot, key, {\n        configurable: true,\n        enumerable: true,\n        value: visitJson(Reflect.get(value, key), depth + 1, context),\n        writable: true,\n      });\n    } catch (error) {\n      if (!(error instanceof AsyncJsonValueError)) {\n        throw error;\n      }\n      asyncFailure ??= error;\n    }\n  }\n  if (asyncFailure !== undefined) {\n    throw asyncFailure;\n  }\n  return snapshot;\n}\n\nfunction visitJson(\n  value: unknown,\n  depth: number,\n  context: JsonContext\n): unknown {\n  if (consumeGenuinePromise(value)) {\n    throw new AsyncJsonValueError(\"Promises are not JSON values\");\n  }\n  if (value === null || typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    context.characters += value.length;\n    if (context.characters > context.maximumCharacters) {\n      throw new Error(\"oversized JSON string content\");\n    }\n    return value;\n  }\n  if (typeof value === \"number\") {\n    if (!Number.isFinite(value)) {\n      throw new Error(\"non-finite JSON number\");\n    }\n    return value;\n  }\n  if (typeof value !== \"object\" || depth > MAX_JSON_DEPTH) {\n    throw new Error(\"invalid or excessively deep JSON value\");\n  }\n  context.nodes += 1;\n  if (context.nodes > context.maximum || context.active.has(value)) {\n    throw new Error(\"cyclic or oversized JSON value\");\n  }\n  context.active.add(value);\n  try {\n    if (Array.isArray(value)) {\n      return visitJsonArray(value, depth, context);\n    }\n    return visitJsonObject(value, depth, context);\n  } finally {\n    context.active.delete(value);\n  }\n}\n\n/** Validate and copy a JSON value without invoking any property more than once. */\nexport function snapshotJsonValue(\n  value: unknown,\n  maximumContainers = MAX_JSON_NODES,\n  maximumCharacters = MAX_JSON_CHARACTERS\n): JsonSnapshot {\n  try {\n    const maximum =\n      Number.isSafeInteger(maximumContainers) && maximumContainers >= 0\n        ? Math.min(MAX_JSON_NODES, maximumContainers)\n        : 0;\n    const characters =\n      Number.isSafeInteger(maximumCharacters) && maximumCharacters >= 0\n        ? Math.min(MAX_JSON_CHARACTERS, maximumCharacters)\n        : 0;\n    const context = {\n      active: new WeakSet<object>(),\n      characters: 0,\n      maximum,\n      maximumCharacters: characters,\n      nodes: 0,\n    };\n    const snapshot = visitJson(value, 0, context);\n    return {\n      characters: context.characters,\n      containers: context.nodes,\n      valid: true,\n      value: snapshot,\n    };\n  } catch (error) {\n    if (error instanceof AsyncJsonValueError) {\n      return { async: true, valid: false };\n    }\n    return { valid: false };\n  }\n}\n\n/** Count JSON object/array containers without walking past a caller's cap. */\nfunction pushContainerChildren(current: object, stack: object[]): boolean {\n  if (Array.isArray(current)) {\n    const length = Reflect.get(current, \"length\");\n    if (\n      !Number.isSafeInteger(length) ||\n      length < 0 ||\n      length > MAX_JSON_ARRAY_ITEMS\n    ) {\n      return false;\n    }\n    consumeOwnDataPromiseFields(\n      current,\n      Array.from({ length }, (_, index) => index)\n    );\n    for (let index = 0; index < length; index += 1) {\n      if (!Object.hasOwn(current, index)) {\n        return false;\n      }\n      const child = Reflect.get(current, index);\n      if (typeof child === \"object\" && child !== null) {\n        stack.push(child);\n      }\n    }\n    return true;\n  }\n  const keys = boundedEnumerableOwnKeys(current, MAX_JSON_OBJECT_KEYS);\n  if (keys === undefined) {\n    return false;\n  }\n  consumeOwnDataPromiseFields(current, keys);\n  for (const key of keys) {\n    const child = Reflect.get(current, key);\n    if (typeof child === \"object\" && child !== null) {\n      stack.push(child);\n    }\n  }\n  return true;\n}\n\nexport function countJsonContainersUpTo(\n  value: unknown,\n  maximum: number\n): number {\n  if (typeof value !== \"object\" || value === null) {\n    return 0;\n  }\n  const overflow =\n    Number.isSafeInteger(maximum) && maximum >= 0 ? maximum + 1 : 1;\n  if (!Number.isSafeInteger(maximum) || maximum < 0) {\n    return overflow;\n  }\n  const stack: object[] = [value];\n  let count = 0;\n  try {\n    while (stack.length > 0) {\n      const current = stack.pop();\n      if (current === undefined) {\n        break;\n      }\n      count += 1;\n      if (count > maximum) {\n        return count;\n      }\n      if (!pushContainerChildren(current, stack)) {\n        return overflow;\n      }\n    }\n  } catch {\n    return overflow;\n  }\n  return count;\n}\n","import type { LanguageModelV4CallOptions } from \"@ai-sdk/provider\";\nimport { snapshotJsonValue } from \"./json-value\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n\nexport const MAX_PROMPT_MESSAGES = 10_000;\nexport const MAX_MESSAGE_PARTS = 10_000;\nexport const MAX_TOOLS = 1024;\nexport const MAX_STOP_SEQUENCES = 1024;\nexport const MAX_STOP_SEQUENCE_LENGTH = 65_536;\nexport const MAX_STOP_SEQUENCE_CHARS = 1_048_576;\nexport const MAX_REQUEST_HEADERS = 1024;\nexport const MAX_REQUEST_HEADER_CHARS = 1_048_576;\nexport const MAX_CALL_JSON_CONTAINERS = 50_000;\nexport const MAX_CALL_JSON_CHARACTERS = 4_194_304;\nexport const MAX_CALL_METADATA_CHARACTERS = 4_194_304;\nexport const MAX_METADATA_FIELD_LENGTH = 65_536;\nexport const CALL_OPTION_FIELD_KEYS = [\n  \"frequencyPenalty\",\n  \"headers\",\n  \"includeRawChunks\",\n  \"maxOutputTokens\",\n  \"presencePenalty\",\n  \"prompt\",\n  \"providerOptions\",\n  \"reasoning\",\n  \"responseFormat\",\n  \"seed\",\n  \"stopSequences\",\n  \"temperature\",\n  \"toolChoice\",\n  \"tools\",\n  \"topK\",\n  \"topP\",\n] as const;\nexport const REASONING_VALUES = new Set([\n  \"provider-default\",\n  \"none\",\n  \"minimal\",\n  \"low\",\n  \"medium\",\n  \"high\",\n  \"xhigh\",\n]);\n\nexport function snapshotDenseBounded<T>(\n  value: unknown,\n  maximum: number,\n  name: string\n): T[] {\n  if (consumeGenuinePromise(value)) {\n    throw new Error(`${name} must be synchronous`);\n  }\n  if (!Array.isArray(value)) {\n    throw new Error(\n      `${name} must be a dense array with at most ${maximum} items`\n    );\n  }\n  const length = Reflect.get(value, \"length\");\n  if (!Number.isSafeInteger(length) || length < 0 || length > maximum) {\n    throw new Error(\n      `${name} must be a dense array with at most ${maximum} items`\n    );\n  }\n  consumeOwnDataPromiseFields(\n    value,\n    Array.from({ length }, (_, index) => index)\n  );\n  const snapshot = new Array<T>(length);\n  let asyncItem = false;\n  for (let index = 0; index < length; index += 1) {\n    if (!Object.hasOwn(value, index)) {\n      throw new Error(\n        `${name} must be a dense array with at most ${maximum} items`\n      );\n    }\n    const item = Reflect.get(value, index);\n    if (consumeGenuinePromise(item)) {\n      asyncItem = true;\n    } else {\n      snapshot[index] = item as T;\n    }\n  }\n  if (asyncItem) {\n    throw new Error(`${name} entries must be synchronous`);\n  }\n  return snapshot;\n}\n\nexport function consumeBoundedArrayPromiseItems(\n  value: unknown,\n  maximum: number\n): void {\n  try {\n    if (!Array.isArray(value)) {\n      return;\n    }\n    const descriptor = Object.getOwnPropertyDescriptor(value, \"length\");\n    const length =\n      descriptor !== undefined && \"value\" in descriptor\n        ? descriptor.value\n        : undefined;\n    if (\n      typeof length !== \"number\" ||\n      !Number.isSafeInteger(length) ||\n      length < 0 ||\n      length > maximum\n    ) {\n      return;\n    }\n    consumeOwnDataPromiseFields(\n      value,\n      Array.from({ length }, (_, index) => index)\n    );\n  } catch {\n    // Malformed Proxy arrays cannot prevent the main bounded validation.\n  }\n}\n\nexport interface CallJsonBudget {\n  remaining: number;\n  remainingCharacters: number;\n}\n\nexport function cloneRequiredJson<T>(\n  value: T,\n  name: string,\n  budget?: CallJsonBudget\n): T {\n  if (value === undefined) {\n    return value;\n  }\n  const snapshot = snapshotJsonValue(\n    value,\n    budget?.remaining,\n    budget?.remainingCharacters\n  );\n  if (!snapshot.valid) {\n    throw new Error(`${name} must be valid bounded JSON`);\n  }\n  if (budget !== undefined) {\n    budget.remaining -= snapshot.containers ?? 0;\n    budget.remainingCharacters -= snapshot.characters ?? 0;\n  }\n  return snapshot.value as T;\n}\n\nexport function clonePresentJson<T>(\n  value: T,\n  name: string,\n  budget: CallJsonBudget\n): T {\n  if (value === undefined) {\n    throw new Error(`${name} is required`);\n  }\n  return cloneRequiredJson(value, name, budget);\n}\n\nexport function validateOptionalFinite(value: unknown, name: string): void {\n  if (\n    value !== undefined &&\n    (typeof value !== \"number\" || !Number.isFinite(value))\n  ) {\n    throw new Error(`${name} must be a finite number`);\n  }\n}\n\nexport function validateScalarOptions(\n  options: LanguageModelV4CallOptions\n): void {\n  for (const name of [\n    \"temperature\",\n    \"topP\",\n    \"presencePenalty\",\n    \"frequencyPenalty\",\n  ] as const) {\n    validateOptionalFinite(options[name], name);\n  }\n  for (const name of [\"maxOutputTokens\", \"topK\", \"seed\"] as const) {\n    const value = options[name];\n    if (\n      value !== undefined &&\n      (typeof value !== \"number\" || !Number.isSafeInteger(value))\n    ) {\n      throw new Error(`${name} must be a safe integer`);\n    }\n  }\n  if (options.maxOutputTokens !== undefined && options.maxOutputTokens <= 0) {\n    throw new Error(\"maxOutputTokens must be positive\");\n  }\n  if (\n    options.includeRawChunks !== undefined &&\n    typeof options.includeRawChunks !== \"boolean\"\n  ) {\n    throw new Error(\"includeRawChunks must be a boolean\");\n  }\n  if (\n    options.reasoning !== undefined &&\n    !REASONING_VALUES.has(options.reasoning)\n  ) {\n    throw new Error(\"reasoning has an unknown value\");\n  }\n}\n","import type { LanguageModelV4Prompt } from \"@ai-sdk/provider\";\nimport {\n  cloneFileData,\n  cloneToolOutput,\n  synchronousCallField,\n} from \"./call-options-output\";\nimport {\n  type CallJsonBudget,\n  clonePresentJson,\n  cloneRequiredJson,\n  MAX_MESSAGE_PARTS,\n  MAX_PROMPT_MESSAGES,\n  snapshotDenseBounded,\n} from \"./call-options-primitives\";\nimport {\n  consumeOwnDataPromiseFields,\n  isBoundedIdentifier,\n  isDottedIdentifier,\n} from \"./runtime-types\";\nexport type PromptRole = \"assistant\" | \"tool\" | \"user\";\n\nexport function cloneTextOrReasoningPart<T>(\n  record: Record<string, unknown>,\n  role: PromptRole,\n  type: \"reasoning\" | \"text\",\n  providerOptions: unknown\n): T {\n  if (role === \"tool\" || (type === \"reasoning\" && role !== \"assistant\")) {\n    throw new Error(\"text or reasoning part is not allowed for this role\");\n  }\n  const text = synchronousCallField(record, \"text\", \"prompt part text\");\n  if (typeof text !== \"string\") {\n    throw new Error(\"text and reasoning content must be strings\");\n  }\n  return { providerOptions, text, type } as T;\n}\n\nexport function cloneFilePart<T>(\n  record: Record<string, unknown>,\n  role: PromptRole,\n  type: \"file\" | \"reasoning-file\",\n  providerOptions: unknown\n): T {\n  if (role === \"tool\" || (type === \"reasoning-file\" && role !== \"assistant\")) {\n    throw new Error(\"file part is not allowed for this role\");\n  }\n  const mediaType = synchronousCallField(\n    record,\n    \"mediaType\",\n    \"file part mediaType\"\n  );\n  const filename = synchronousCallField(\n    record,\n    \"filename\",\n    \"file part filename\"\n  );\n  if (\n    typeof mediaType !== \"string\" ||\n    (filename !== undefined && typeof filename !== \"string\")\n  ) {\n    throw new Error(\"file mediaType and filename are malformed\");\n  }\n  const data = cloneFileData(\n    synchronousCallField(record, \"data\", \"file part data\")\n  );\n  const dataType =\n    typeof data === \"object\" && data !== null\n      ? Reflect.get(data, \"type\")\n      : undefined;\n  if (type === \"reasoning-file\" && dataType !== \"data\" && dataType !== \"url\") {\n    throw new Error(\"reasoning files require data or URL payloads\");\n  }\n  return {\n    data,\n    filename,\n    mediaType,\n    providerOptions,\n    type,\n  } as T;\n}\n\nexport function cloneCustomPart<T>(\n  record: Record<string, unknown>,\n  role: PromptRole,\n  providerOptions: unknown\n): T {\n  const kind = synchronousCallField(record, \"kind\", \"custom part kind\");\n  if (role !== \"assistant\" || !isDottedIdentifier(kind)) {\n    throw new Error(\"custom parts require an assistant message and kind\");\n  }\n  return { kind, providerOptions, type: \"custom\" } as T;\n}\n\nexport function cloneToolCallPart<T>(\n  record: Record<string, unknown>,\n  role: PromptRole,\n  providerOptions: unknown,\n  budget: CallJsonBudget\n): T {\n  if (role !== \"assistant\") {\n    throw new Error(\"tool calls require an assistant message\");\n  }\n  const toolCallId = synchronousCallField(record, \"toolCallId\", \"tool call id\");\n  const toolName = synchronousCallField(record, \"toolName\", \"tool call name\");\n  const providerExecuted = synchronousCallField(\n    record,\n    \"providerExecuted\",\n    \"tool call providerExecuted\"\n  );\n  if (\n    !(isBoundedIdentifier(toolCallId) && isBoundedIdentifier(toolName)) ||\n    (providerExecuted !== undefined && typeof providerExecuted !== \"boolean\")\n  ) {\n    throw new Error(\"tool call fields are malformed\");\n  }\n  return {\n    input: clonePresentJson(\n      synchronousCallField(record, \"input\", \"tool call input\"),\n      \"tool call input\",\n      budget\n    ),\n    providerExecuted,\n    providerOptions,\n    toolCallId,\n    toolName,\n    type: \"tool-call\",\n  } as T;\n}\n\nexport function cloneToolResultPart<T>(\n  record: Record<string, unknown>,\n  role: PromptRole,\n  providerOptions: unknown,\n  budget: CallJsonBudget\n): T {\n  if (role === \"user\") {\n    throw new Error(\"tool results require assistant or tool messages\");\n  }\n  const toolCallId = synchronousCallField(\n    record,\n    \"toolCallId\",\n    \"tool result id\"\n  );\n  const toolName = synchronousCallField(record, \"toolName\", \"tool result name\");\n  if (!(isBoundedIdentifier(toolCallId) && isBoundedIdentifier(toolName))) {\n    throw new Error(\"tool result identifiers are malformed\");\n  }\n  return {\n    output: cloneToolOutput(\n      synchronousCallField(record, \"output\", \"tool result output\"),\n      budget\n    ),\n    providerOptions,\n    toolCallId,\n    toolName,\n    type: \"tool-result\",\n  } as T;\n}\n\nexport function cloneToolApprovalPart<T>(\n  record: Record<string, unknown>,\n  role: PromptRole,\n  providerOptions: unknown\n): T {\n  const approvalId = synchronousCallField(\n    record,\n    \"approvalId\",\n    \"tool approval id\"\n  );\n  const approved = synchronousCallField(\n    record,\n    \"approved\",\n    \"tool approval state\"\n  );\n  const reason = synchronousCallField(record, \"reason\", \"tool approval reason\");\n  if (\n    role !== \"tool\" ||\n    !isBoundedIdentifier(approvalId) ||\n    typeof approved !== \"boolean\" ||\n    (reason !== undefined && typeof reason !== \"string\")\n  ) {\n    throw new Error(\"tool approval response fields are malformed\");\n  }\n  return {\n    approvalId,\n    approved,\n    providerOptions,\n    reason,\n    type: \"tool-approval-response\",\n  } as T;\n}\n\nexport function clonePromptPart<T>(\n  part: T,\n  role: PromptRole,\n  budget: CallJsonBudget\n): T {\n  if (typeof part !== \"object\" || part === null) {\n    throw new Error(\"prompt content parts must be objects\");\n  }\n  const record = part as Record<string, unknown>;\n  consumeOwnDataPromiseFields(record, [\n    \"approvalId\",\n    \"approved\",\n    \"data\",\n    \"filename\",\n    \"input\",\n    \"kind\",\n    \"mediaType\",\n    \"output\",\n    \"providerExecuted\",\n    \"providerOptions\",\n    \"reason\",\n    \"text\",\n    \"toolCallId\",\n    \"toolName\",\n    \"type\",\n  ]);\n  const type = synchronousCallField(record, \"type\", \"prompt part type\");\n  const providerOptions = cloneRequiredJson(\n    synchronousCallField(record, \"providerOptions\", \"part.providerOptions\"),\n    \"part.providerOptions\",\n    budget\n  );\n  if (type === \"text\" || type === \"reasoning\") {\n    return cloneTextOrReasoningPart(record, role, type, providerOptions);\n  }\n  if (type === \"file\" || type === \"reasoning-file\") {\n    return cloneFilePart(record, role, type, providerOptions);\n  }\n  if (type === \"custom\") {\n    return cloneCustomPart(record, role, providerOptions);\n  }\n  if (type === \"tool-call\") {\n    return cloneToolCallPart(record, role, providerOptions, budget);\n  }\n  if (type === \"tool-result\") {\n    return cloneToolResultPart(record, role, providerOptions, budget);\n  }\n  if (type === \"tool-approval-response\") {\n    return cloneToolApprovalPart(record, role, providerOptions);\n  }\n  throw new Error(\"prompt content part has an unknown type\");\n}\n\nexport function clonePromptMessage(\n  message: LanguageModelV4Prompt[number],\n  budget: CallJsonBudget\n): LanguageModelV4Prompt[number] {\n  if (typeof message !== \"object\" || message === null) {\n    throw new Error(\"prompt messages must be objects\");\n  }\n  consumeOwnDataPromiseFields(message, [\"content\", \"providerOptions\", \"role\"]);\n  const role = synchronousCallField(message, \"role\", \"message role\");\n  const rawContent = synchronousCallField(\n    message,\n    \"content\",\n    \"message content\"\n  );\n  const providerOptions = cloneRequiredJson(\n    synchronousCallField(message, \"providerOptions\", \"message.providerOptions\"),\n    \"message.providerOptions\",\n    budget\n  );\n  if (role === \"system\") {\n    if (typeof rawContent !== \"string\") {\n      throw new Error(\"system message content must be a string\");\n    }\n    return {\n      content: rawContent,\n      providerOptions,\n      role,\n    } as LanguageModelV4Prompt[number];\n  }\n  if (role !== \"user\" && role !== \"assistant\" && role !== \"tool\") {\n    throw new Error(\"prompt message has an unknown role\");\n  }\n  const content = snapshotDenseBounded<unknown>(\n    rawContent,\n    MAX_MESSAGE_PARTS,\n    \"message content\"\n  );\n  return {\n    content: content.map((part) => clonePromptPart(part, role, budget)),\n    providerOptions,\n    role,\n  } as LanguageModelV4Prompt[number];\n}\n\nexport function clonePrompt(\n  prompt: LanguageModelV4Prompt,\n  budget: CallJsonBudget\n): LanguageModelV4Prompt {\n  return snapshotDenseBounded<LanguageModelV4Prompt[number]>(\n    prompt,\n    MAX_PROMPT_MESSAGES,\n    \"prompt\"\n  ).map((message) => clonePromptMessage(message, budget));\n}\n","import type { LanguageModelV4CallOptions } from \"@ai-sdk/provider\";\nimport { captureAbortSignalOperations } from \"./abort-signal\";\nimport {\n  type CallJsonBudget,\n  clonePresentJson,\n  cloneRequiredJson,\n  MAX_MESSAGE_PARTS,\n  snapshotDenseBounded,\n} from \"./call-options-primitives\";\nimport { clonePromptPart } from \"./call-options-prompt\";\nimport { boundedEnumerableOwnKeys } from \"./http-headers\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  isBoundedIdentifier,\n  isUint8ArrayValue,\n  isUrlValue,\n} from \"./runtime-types\";\nexport function cloneResponseFormat(\n  value: LanguageModelV4CallOptions[\"responseFormat\"],\n  budget: CallJsonBudget\n): typeof value {\n  if (value === undefined) {\n    return;\n  }\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    throw new Error(\"responseFormat must be an object\");\n  }\n  consumeOwnDataPromiseFields(value, [\"description\", \"name\", \"schema\", \"type\"]);\n  const type = Reflect.get(value, \"type\");\n  if (consumeGenuinePromise(type)) {\n    throw new Error(\"responseFormat must be synchronous\");\n  }\n  if (type === \"text\") {\n    return { type: \"text\" };\n  }\n  if (type !== \"json\") {\n    throw new Error(\"responseFormat has an unknown type\");\n  }\n  const name = Reflect.get(value, \"name\");\n  const description = Reflect.get(value, \"description\");\n  const schema = Reflect.get(value, \"schema\");\n  let asyncField = false;\n  for (const field of [name, description, schema]) {\n    if (consumeGenuinePromise(field)) {\n      asyncField = true;\n    }\n  }\n  if (asyncField) {\n    throw new Error(\"responseFormat fields must be synchronous\");\n  }\n  if (\n    (name !== undefined && typeof name !== \"string\") ||\n    (description !== undefined && typeof description !== \"string\")\n  ) {\n    throw new Error(\"responseFormat name and description must be strings\");\n  }\n  return {\n    description,\n    name,\n    schema: cloneRequiredJson(schema, \"responseFormat.schema\", budget),\n    type,\n  };\n}\n\nexport function cloneToolChoice(\n  value: LanguageModelV4CallOptions[\"toolChoice\"]\n): typeof value {\n  if (value === undefined) {\n    return;\n  }\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    throw new Error(\"toolChoice must be an object\");\n  }\n  consumeOwnDataPromiseFields(value, [\"toolName\", \"type\"]);\n  const type = Reflect.get(value, \"type\");\n  if (consumeGenuinePromise(type)) {\n    throw new Error(\"toolChoice must be synchronous\");\n  }\n  if (type === \"auto\" || type === \"none\" || type === \"required\") {\n    return { type };\n  }\n  const toolName = Reflect.get(value, \"toolName\");\n  if (consumeGenuinePromise(toolName)) {\n    throw new Error(\"toolChoice fields must be synchronous\");\n  }\n  if (type !== \"tool\" || !isBoundedIdentifier(toolName)) {\n    throw new Error(\"toolChoice has an invalid shape\");\n  }\n  return { toolName, type };\n}\n\nexport function validateAbortSignal(\n  value: unknown\n): asserts value is AbortSignal | undefined {\n  if (value === undefined) {\n    return;\n  }\n  captureAbortSignalOperations(value);\n  if (typeof value !== \"object\" || value === null) {\n    throw new Error(\"abortSignal must implement AbortSignal\");\n  }\n  const aborted = Reflect.get(value, \"aborted\");\n  if (consumeGenuinePromise(aborted) || typeof aborted !== \"boolean\") {\n    throw new Error(\"abortSignal must implement AbortSignal\");\n  }\n}\n\nexport function synchronousCallField(\n  value: object,\n  key: string | number,\n  name = \"call option field\"\n): unknown {\n  const field = Reflect.get(value, key);\n  if (consumeGenuinePromise(field)) {\n    throw new Error(`${name} must be synchronous`);\n  }\n  return field;\n}\n\nexport function cloneProviderReference(value: unknown): Record<string, string> {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    throw new Error(\"file reference must be an object\");\n  }\n  const keys = boundedEnumerableOwnKeys(value, 128);\n  if (keys === undefined) {\n    throw new Error(\"file reference has too many providers\");\n  }\n  consumeOwnDataPromiseFields(value, keys);\n  const reference: Record<string, string> = {};\n  for (const key of keys) {\n    const id = synchronousCallField(value, key, \"file reference value\");\n    if (key === \"type\" || typeof id !== \"string\") {\n      throw new Error(\"file reference values must be strings\");\n    }\n    Object.defineProperty(reference, key, {\n      configurable: true,\n      enumerable: true,\n      value: id,\n      writable: true,\n    });\n  }\n  return reference;\n}\n\nexport function cloneFileData(value: unknown): unknown {\n  if (typeof value !== \"object\" || value === null) {\n    throw new Error(\"file data must be a tagged object\");\n  }\n  consumeOwnDataPromiseFields(value, [\n    \"data\",\n    \"reference\",\n    \"text\",\n    \"type\",\n    \"url\",\n  ]);\n  const type = synchronousCallField(value, \"type\", \"file data type\");\n  if (type === \"data\") {\n    const data = synchronousCallField(value, \"data\", \"file data payload\");\n    if (typeof data !== \"string\" && !isUint8ArrayValue(data)) {\n      throw new Error(\"file data payload must be bytes or a string\");\n    }\n    return { data, type };\n  }\n  if (type === \"url\") {\n    const url = synchronousCallField(value, \"url\", \"file URL payload\");\n    if (!isUrlValue(url)) {\n      throw new Error(\"file URL payload must be a URL\");\n    }\n    return { type, url };\n  }\n  if (type === \"reference\") {\n    return {\n      reference: cloneProviderReference(\n        synchronousCallField(value, \"reference\", \"file reference\")\n      ),\n      type,\n    };\n  }\n  if (type === \"text\") {\n    const text = synchronousCallField(value, \"text\", \"inline file text\");\n    if (typeof text !== \"string\") {\n      throw new Error(\"inline file text must be a string\");\n    }\n    return { text, type };\n  }\n  throw new Error(\"file data has an unknown type\");\n}\n\nexport function cloneToolOutput(\n  value: unknown,\n  budget: CallJsonBudget\n): unknown {\n  if (typeof value !== \"object\" || value === null) {\n    throw new Error(\"tool output must be an object\");\n  }\n  consumeOwnDataPromiseFields(value, [\n    \"providerOptions\",\n    \"reason\",\n    \"type\",\n    \"value\",\n  ]);\n  const type = synchronousCallField(value, \"type\", \"tool output type\");\n  const providerOptions = cloneRequiredJson(\n    synchronousCallField(\n      value,\n      \"providerOptions\",\n      \"tool output providerOptions\"\n    ),\n    \"tool output providerOptions\",\n    budget\n  );\n  if (type === \"text\" || type === \"error-text\") {\n    const text = synchronousCallField(value, \"value\", \"tool output value\");\n    if (typeof text !== \"string\") {\n      throw new Error(\"text tool output value must be a string\");\n    }\n    return { providerOptions, type, value: text };\n  }\n  if (type === \"json\" || type === \"error-json\") {\n    return {\n      providerOptions,\n      type,\n      value: clonePresentJson(\n        synchronousCallField(value, \"value\", \"tool output value\"),\n        \"tool output value\",\n        budget\n      ),\n    };\n  }\n  if (type === \"execution-denied\") {\n    const reason = synchronousCallField(value, \"reason\", \"tool output reason\");\n    if (reason !== undefined && typeof reason !== \"string\") {\n      throw new Error(\"execution denial reason must be a string\");\n    }\n    return { providerOptions, reason, type };\n  }\n  if (type === \"content\") {\n    const content = snapshotDenseBounded<unknown>(\n      synchronousCallField(value, \"value\", \"tool output content\"),\n      MAX_MESSAGE_PARTS,\n      \"tool output content\"\n    );\n    return {\n      providerOptions,\n      type,\n      value: content.map((part) => cloneToolOutputContentPart(part, budget)),\n    };\n  }\n  throw new Error(\"tool output has an unknown type\");\n}\n\nexport function cloneToolOutputContentPart(\n  part: unknown,\n  budget: CallJsonBudget\n): unknown {\n  if (typeof part !== \"object\" || part === null) {\n    throw new Error(\"tool output content parts must be objects\");\n  }\n  consumeOwnDataPromiseFields(part, [\"providerOptions\", \"type\"]);\n  const type = synchronousCallField(part, \"type\", \"tool output content type\");\n  if (type === \"text\" || type === \"file\") {\n    return clonePromptPart(part, \"user\", budget);\n  }\n  if (type === \"custom\") {\n    return {\n      providerOptions: cloneRequiredJson(\n        synchronousCallField(\n          part,\n          \"providerOptions\",\n          \"tool output custom providerOptions\"\n        ),\n        \"tool output custom providerOptions\",\n        budget\n      ),\n      type,\n    };\n  }\n  throw new Error(\"tool output content part has an unknown type\");\n}\n","import type { LanguageModelV4CallOptions } from \"@ai-sdk/provider\";\nimport { synchronousCallField } from \"./call-options-output\";\nimport {\n  type CallJsonBudget,\n  clonePresentJson,\n  cloneRequiredJson,\n  MAX_CALL_METADATA_CHARACTERS,\n  MAX_METADATA_FIELD_LENGTH,\n  MAX_REQUEST_HEADER_CHARS,\n  MAX_REQUEST_HEADERS,\n} from \"./call-options-primitives\";\nimport {\n  boundedEnumerableOwnKeys,\n  hasInvalidHttpHeaderValueCharacter,\n  isValidHttpHeaderName,\n} from \"./http-headers\";\nimport {\n  consumeOwnDataPromiseFields,\n  isBoundedIdentifier,\n  isDottedIdentifier,\n} from \"./runtime-types\";\nexport function cloneHeaders(\n  value: LanguageModelV4CallOptions[\"headers\"]\n): typeof value {\n  if (value === undefined) {\n    return;\n  }\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    throw new Error(\"headers must be an object\");\n  }\n  const keys = boundedEnumerableOwnKeys(value, MAX_REQUEST_HEADERS);\n  if (keys === undefined) {\n    throw new Error(\n      `headers must contain at most ${MAX_REQUEST_HEADERS} entries`\n    );\n  }\n  consumeOwnDataPromiseFields(value, keys);\n  const headers: Record<string, string | undefined> = {};\n  let totalChars = 0;\n  for (const key of keys) {\n    if (!isValidHttpHeaderName(key)) {\n      throw new Error(\"header names and values must use valid HTTP syntax\");\n    }\n    const item = synchronousCallField(value, key, \"header value\");\n    if (\n      item !== undefined &&\n      (typeof item !== \"string\" ||\n        item.length > 65_536 ||\n        hasInvalidHttpHeaderValueCharacter(item))\n    ) {\n      throw new Error(\"header names and values must use valid HTTP syntax\");\n    }\n    totalChars += key.length + (item?.length ?? 0);\n    if (totalChars > MAX_REQUEST_HEADER_CHARS) {\n      throw new Error(\"request headers exceed the aggregate size limit\");\n    }\n    Object.defineProperty(headers, key, {\n      configurable: true,\n      enumerable: true,\n      value: item,\n      writable: true,\n    });\n  }\n  return headers;\n}\n\nexport function cloneTool(\n  tool: NonNullable<LanguageModelV4CallOptions[\"tools\"]>[number],\n  budget: CallJsonBudget\n): typeof tool {\n  consumeOwnDataPromiseFields(tool, [\n    \"args\",\n    \"description\",\n    \"id\",\n    \"inputExamples\",\n    \"inputSchema\",\n    \"name\",\n    \"providerOptions\",\n    \"strict\",\n    \"type\",\n  ]);\n  const type = synchronousCallField(tool, \"type\", \"tool type\");\n  const name = synchronousCallField(tool, \"name\", \"tool name\");\n  if (type === \"function\") {\n    const description = synchronousCallField(\n      tool,\n      \"description\",\n      \"tool description\"\n    );\n    const strict = synchronousCallField(tool, \"strict\", \"tool strict\");\n    if (\n      !isBoundedIdentifier(name) ||\n      (description !== undefined && typeof description !== \"string\") ||\n      (strict !== undefined && typeof strict !== \"boolean\")\n    ) {\n      throw new Error(\"function tool has an invalid shape\");\n    }\n    return {\n      description,\n      inputExamples: cloneRequiredJson(\n        synchronousCallField(tool, \"inputExamples\", \"tool inputExamples\"),\n        \"tool.inputExamples\",\n        budget\n      ),\n      inputSchema: clonePresentJson(\n        synchronousCallField(tool, \"inputSchema\", \"tool inputSchema\"),\n        \"tool.inputSchema\",\n        budget\n      ),\n      name,\n      providerOptions: cloneRequiredJson(\n        synchronousCallField(tool, \"providerOptions\", \"tool providerOptions\"),\n        \"tool.providerOptions\",\n        budget\n      ),\n      strict,\n      type,\n    } as typeof tool;\n  }\n  const id = synchronousCallField(tool, \"id\", \"provider tool id\");\n  const args = synchronousCallField(tool, \"args\", \"provider tool args\");\n  if (\n    type !== \"provider\" ||\n    !isDottedIdentifier(id) ||\n    !isBoundedIdentifier(name) ||\n    typeof args !== \"object\" ||\n    args === null ||\n    Array.isArray(args)\n  ) {\n    throw new Error(\"provider tool has an invalid shape\");\n  }\n  return {\n    args: cloneRequiredJson(args, \"provider tool args\", budget),\n    id,\n    name,\n    type,\n  } as typeof tool;\n}\n\nexport function validateToolConfiguration(\n  tools: LanguageModelV4CallOptions[\"tools\"],\n  toolChoice: LanguageModelV4CallOptions[\"toolChoice\"]\n): void {\n  if (tools === undefined) {\n    if (toolChoice?.type === \"tool\") {\n      throw new Error(\"toolChoice requires a matching tool definition\");\n    }\n    return;\n  }\n  const names = new Set<string>();\n  for (const tool of tools) {\n    if (names.has(tool.name)) {\n      throw new Error(\"tool names must be unique within a call\");\n    }\n    names.add(tool.name);\n  }\n  if (toolChoice?.type === \"tool\" && !names.has(toolChoice.toolName)) {\n    throw new Error(\"toolChoice requires a matching tool definition\");\n  }\n}\n\nexport function validateCallMetadataStrings(\n  options: LanguageModelV4CallOptions\n): void {\n  let remaining = MAX_CALL_METADATA_CHARACTERS;\n  const consume = (\n    value: unknown,\n    maximum = MAX_METADATA_FIELD_LENGTH,\n    allowEmpty = true\n  ) => {\n    if (value === undefined) {\n      return;\n    }\n    if (\n      typeof value !== \"string\" ||\n      (!allowEmpty && value.length === 0) ||\n      value.length > maximum\n    ) {\n      throw new Error(\"call metadata strings must be non-empty and bounded\");\n    }\n    remaining -= value.length;\n    if (remaining < 0) {\n      throw new Error(\"call metadata strings exceed the aggregate size limit\");\n    }\n  };\n  const consumeFileData = (value: unknown) => {\n    if (typeof value !== \"object\" || value === null) {\n      return;\n    }\n    const record = value as Record<string, unknown>;\n    if (record.type !== \"reference\") {\n      return;\n    }\n    const reference = record.reference;\n    if (typeof reference !== \"object\" || reference === null) {\n      return;\n    }\n    for (const [provider, id] of Object.entries(reference)) {\n      consume(provider, 256, false);\n      consume(id, MAX_METADATA_FIELD_LENGTH, false);\n    }\n  };\n  const consumeToolOutput = (value: unknown) => {\n    if (typeof value !== \"object\" || value === null) {\n      return;\n    }\n    const output = value as Record<string, unknown>;\n    if (output.type === \"execution-denied\") {\n      consume(output.reason);\n      return;\n    }\n    if (output.type !== \"content\" || !Array.isArray(output.value)) {\n      return;\n    }\n    for (const nested of output.value) {\n      if (typeof nested !== \"object\" || nested === null) {\n        continue;\n      }\n      const part = nested as Record<string, unknown>;\n      if (part.type === \"file\") {\n        consume(part.mediaType, 256, false);\n        consume(part.filename);\n        consumeFileData(part.data);\n      }\n    }\n  };\n  if (options.responseFormat?.type === \"json\") {\n    consume(options.responseFormat.name, 4096);\n    consume(options.responseFormat.description);\n  }\n  for (const tool of options.tools ?? []) {\n    consume(tool.name, 4096);\n    if (tool.type === \"function\") {\n      consume(tool.description);\n    } else {\n      consume(tool.id, 4096);\n    }\n  }\n  if (options.toolChoice?.type === \"tool\") {\n    consume(options.toolChoice.toolName, 4096);\n  }\n  for (const message of options.prompt) {\n    if (message.role === \"system\") {\n      continue;\n    }\n    for (const part of message.content) {\n      const record = part as unknown as Record<string, unknown>;\n      switch (part.type) {\n        case \"file\":\n        case \"reasoning-file\":\n          consume(record.mediaType, 256, false);\n          consume(record.filename);\n          consumeFileData(record.data);\n          break;\n        case \"custom\":\n          consume(record.kind, 4096);\n          break;\n        case \"tool-call\":\n          consume(record.toolCallId, 4096);\n          consume(record.toolName, 4096);\n          break;\n        case \"tool-result\":\n          consume(record.toolCallId, 4096);\n          consume(record.toolName, 4096);\n          consumeToolOutput(record.output);\n          break;\n        case \"tool-approval-response\":\n          consume(record.approvalId, 4096);\n          consume(record.reason);\n          break;\n        default:\n          break;\n      }\n    }\n  }\n}\n","import type { LanguageModelV4CallOptions } from \"@ai-sdk/provider\";\nimport {\n  cloneHeaders,\n  cloneTool,\n  validateCallMetadataStrings,\n  validateToolConfiguration,\n} from \"./call-options-extras\";\nimport {\n  cloneResponseFormat,\n  cloneToolChoice,\n  synchronousCallField,\n  validateAbortSignal,\n} from \"./call-options-output\";\nimport {\n  CALL_OPTION_FIELD_KEYS,\n  cloneRequiredJson,\n  consumeBoundedArrayPromiseItems,\n  MAX_CALL_JSON_CHARACTERS,\n  MAX_CALL_JSON_CONTAINERS,\n  MAX_PROMPT_MESSAGES,\n  MAX_STOP_SEQUENCE_CHARS,\n  MAX_STOP_SEQUENCE_LENGTH,\n  MAX_STOP_SEQUENCES,\n  MAX_TOOLS,\n  snapshotDenseBounded,\n  validateScalarOptions,\n} from \"./call-options-primitives\";\nimport { clonePrompt } from \"./call-options-prompt\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nexport class CallOptionsContractError extends Error {\n  readonly code = \"call_options_contract_error\";\n\n  constructor(cause: unknown) {\n    super(\"ai-router: call options could not be safely copied\", { cause });\n    this.name = \"CallOptionsContractError\";\n  }\n}\n\nfunction consumeCallOptionPromiseFields(\n  source: LanguageModelV4CallOptions\n): void {\n  consumeBoundedArrayPromiseItems(source.prompt, MAX_PROMPT_MESSAGES);\n  consumeBoundedArrayPromiseItems(source.stopSequences, MAX_STOP_SEQUENCES);\n  consumeBoundedArrayPromiseItems(source.tools, MAX_TOOLS);\n  if (\n    typeof source.responseFormat === \"object\" &&\n    source.responseFormat !== null\n  ) {\n    consumeOwnDataPromiseFields(source.responseFormat, [\n      \"description\",\n      \"name\",\n      \"schema\",\n      \"type\",\n    ]);\n  }\n  if (typeof source.toolChoice === \"object\" && source.toolChoice !== null) {\n    consumeOwnDataPromiseFields(source.toolChoice, [\"toolName\", \"type\"]);\n  }\n  let asyncField = false;\n  for (const value of Object.values(source)) {\n    if (consumeGenuinePromise(value)) {\n      asyncField = true;\n    }\n  }\n  if (asyncField) {\n    throw new Error(\"call options fields must be synchronous\");\n  }\n}\n\nfunction cloneCallOptionsUnsafe(\n  options: LanguageModelV4CallOptions,\n  abortSignal: AbortSignal | undefined\n): LanguageModelV4CallOptions {\n  if (consumeGenuinePromise(options)) {\n    throw new Error(\"call options must be synchronous\");\n  }\n  consumeOwnDataPromiseFields(options, CALL_OPTION_FIELD_KEYS);\n  const source: LanguageModelV4CallOptions = {\n    abortSignal,\n    frequencyPenalty: Reflect.get(options, \"frequencyPenalty\"),\n    headers: Reflect.get(options, \"headers\"),\n    includeRawChunks: Reflect.get(options, \"includeRawChunks\"),\n    maxOutputTokens: Reflect.get(options, \"maxOutputTokens\"),\n    presencePenalty: Reflect.get(options, \"presencePenalty\"),\n    prompt: Reflect.get(options, \"prompt\"),\n    providerOptions: Reflect.get(options, \"providerOptions\"),\n    reasoning: Reflect.get(options, \"reasoning\"),\n    responseFormat: Reflect.get(options, \"responseFormat\"),\n    seed: Reflect.get(options, \"seed\"),\n    stopSequences: Reflect.get(options, \"stopSequences\"),\n    temperature: Reflect.get(options, \"temperature\"),\n    toolChoice: Reflect.get(options, \"toolChoice\"),\n    tools: Reflect.get(options, \"tools\"),\n    topK: Reflect.get(options, \"topK\"),\n    topP: Reflect.get(options, \"topP\"),\n  };\n  consumeCallOptionPromiseFields(source);\n  validateAbortSignal(abortSignal);\n  validateScalarOptions(source);\n  const jsonBudget = {\n    remaining: MAX_CALL_JSON_CONTAINERS,\n    remainingCharacters: MAX_CALL_JSON_CHARACTERS,\n  };\n  const stopSequences =\n    source.stopSequences === undefined\n      ? undefined\n      : snapshotDenseBounded<unknown>(\n          source.stopSequences,\n          MAX_STOP_SEQUENCES,\n          \"stopSequences\"\n        );\n  if (stopSequences !== undefined) {\n    let totalChars = 0;\n    for (const value of stopSequences) {\n      if (\n        typeof value !== \"string\" ||\n        value.length === 0 ||\n        value.length > MAX_STOP_SEQUENCE_LENGTH\n      ) {\n        throw new Error(\"stopSequences must contain bounded non-empty strings\");\n      }\n      totalChars += value.length;\n      if (totalChars > MAX_STOP_SEQUENCE_CHARS) {\n        throw new Error(\"stopSequences exceed the aggregate size limit\");\n      }\n    }\n  }\n  const rawTools =\n    source.tools === undefined\n      ? undefined\n      : snapshotDenseBounded<unknown>(source.tools, MAX_TOOLS, \"tools\");\n  if (\n    rawTools !== undefined &&\n    !rawTools.every((tool) => typeof tool === \"object\" && tool !== null)\n  ) {\n    throw new Error(\"tools must contain objects\");\n  }\n  const tools = rawTools?.map((tool) =>\n    cloneTool(\n      tool as NonNullable<LanguageModelV4CallOptions[\"tools\"]>[number],\n      jsonBudget\n    )\n  );\n  const toolChoice = cloneToolChoice(source.toolChoice);\n  validateToolConfiguration(tools, toolChoice);\n  const cloned = {\n    ...source,\n    abortSignal,\n    headers: cloneHeaders(source.headers),\n    prompt: clonePrompt(source.prompt, jsonBudget),\n    providerOptions: cloneRequiredJson(\n      source.providerOptions,\n      \"providerOptions\",\n      jsonBudget\n    ),\n    responseFormat: cloneResponseFormat(source.responseFormat, jsonBudget),\n    stopSequences: stopSequences as string[] | undefined,\n    toolChoice,\n    tools,\n  };\n  validateCallMetadataStrings(cloned);\n  return cloned;\n}\n\n/** Isolate mutable option containers for one provider attempt. */\nexport function cloneCallOptions(\n  options: LanguageModelV4CallOptions,\n  abortSignal: AbortSignal | undefined\n): LanguageModelV4CallOptions {\n  try {\n    return cloneCallOptionsUnsafe(options, abortSignal);\n  } catch (error) {\n    throw new CallOptionsContractError(error);\n  }\n}\n\n/** Capture the caller-owned signal inside the same contract-error boundary. */\nexport function cloneInitialCallOptions(\n  options: LanguageModelV4CallOptions\n): LanguageModelV4CallOptions {\n  try {\n    if (consumeGenuinePromise(options)) {\n      throw new Error(\"call options must be synchronous\");\n    }\n    consumeOwnDataPromiseFields(options, [\n      \"abortSignal\",\n      ...CALL_OPTION_FIELD_KEYS,\n    ]);\n    return cloneCallOptionsUnsafe(\n      options,\n      synchronousCallField(options, \"abortSignal\", \"abortSignal\") as\n        | AbortSignal\n        | undefined\n    );\n  } catch (error) {\n    if (error instanceof CallOptionsContractError) {\n      throw error;\n    }\n    throw new CallOptionsContractError(error);\n  }\n}\n","import {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  isUint8ArrayValue,\n  isUrlValue,\n} from \"./runtime-types\";\n\nexport const MAX_FILE_PAYLOAD_BYTES = 67_108_864;\n\nexport interface FilePayloadBudget {\n  remainingFileBytes: number;\n}\n\nconst NativeUint8Array = Uint8Array;\nconst nativeUint8ArraySet = Uint8Array.prototype.set;\nconst typedArrayByteLengthGetter = Object.getOwnPropertyDescriptor(\n  Object.getPrototypeOf(Uint8Array.prototype),\n  \"byteLength\"\n)?.get;\nconst NativeURL = URL;\nconst nativeUrlToString = URL.prototype.toString;\n\nexport class AsyncFilePayloadError extends Error {}\n\nfunction synchronousFileValue(value: unknown): unknown {\n  if (consumeGenuinePromise(value)) {\n    throw new AsyncFilePayloadError(\n      \"async file payload fields are unsupported\"\n    );\n  }\n  return value;\n}\n\nfunction consumeFileBytes(budget: FilePayloadBudget, amount: number): void {\n  budget.remainingFileBytes -= amount;\n  if (budget.remainingFileBytes < 0) {\n    throw new Error(\n      `file payloads exceed ${MAX_FILE_PAYLOAD_BYTES} aggregate bytes`\n    );\n  }\n}\n\nexport function snapshotFileData(\n  value: unknown,\n  budget: FilePayloadBudget\n): unknown {\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  consumeOwnDataPromiseFields(value, [\"type\", \"data\", \"url\"]);\n  const type = synchronousFileValue(Reflect.get(value, \"type\"));\n  if (type === \"data\") {\n    const data = synchronousFileValue(Reflect.get(value, \"data\"));\n    if (typeof data === \"string\") {\n      consumeFileBytes(budget, data.length * 2);\n      return { data, type };\n    }\n    if (typedArrayByteLengthGetter === undefined) {\n      throw new Error(\"Uint8Array byte-length intrinsic is unavailable\");\n    }\n    if (!isUint8ArrayValue(data)) {\n      return { data, type };\n    }\n    const byteLength = Reflect.apply(typedArrayByteLengthGetter, data, []);\n    consumeFileBytes(budget, byteLength);\n    const snapshot = new NativeUint8Array(byteLength);\n    Reflect.apply(nativeUint8ArraySet, snapshot, [data]);\n    return { data: snapshot, type };\n  }\n  if (type === \"url\") {\n    const url = synchronousFileValue(Reflect.get(value, \"url\"));\n    if (!isUrlValue(url)) {\n      return { type, url };\n    }\n    const serialized = Reflect.apply(nativeUrlToString, url, []);\n    consumeFileBytes(budget, serialized.length * 2);\n    return { type, url: new NativeURL(serialized) };\n  }\n  return { type };\n}\n","import { snapshotJsonValue } from \"./json-value\";\n\nexport interface ProviderBodyJsonBudget {\n  remaining: number;\n  remainingCharacters: number;\n}\n\n/**\n * Copy JSON telemetry bodies when possible, but preserve values from the\n * provider-spec's intentionally opaque `unknown` body contract.\n */\nexport function snapshotProviderBody(\n  value: unknown,\n  budget?: ProviderBodyJsonBudget\n): unknown {\n  const snapshot = snapshotJsonValue(\n    value,\n    budget?.remaining,\n    budget?.remainingCharacters\n  );\n  if (!snapshot.valid) {\n    return value;\n  }\n  if (budget !== undefined) {\n    budget.remaining -= snapshot.containers ?? 0;\n    budget.remainingCharacters -= snapshot.characters ?? 0;\n  }\n  return snapshot.value;\n}\n","import {\n  boundedEnumerableOwnKeys,\n  hasInvalidHttpHeaderValueCharacter,\n  isValidHttpHeaderName,\n} from \"./http-headers\";\nimport {\n  isBoundedIdentifier,\n  isDateValue,\n  isDenseArray,\n  isDottedIdentifier,\n  isUint8ArrayValue,\n  isUrlValue,\n} from \"./runtime-types\";\n\nexport class EmptyModelResponseError extends Error {\n  readonly code = \"empty_model_response\";\n\n  constructor() {\n    super(\"ai-router: provider returned an empty model response\");\n    this.name = \"EmptyModelResponseError\";\n  }\n}\n\nexport class InvalidModelResponseError extends Error {\n  readonly code = \"invalid_model_response\";\n\n  constructor(message: string) {\n    super(`ai-router: provider response rejected: ${message}`);\n    this.name = \"InvalidModelResponseError\";\n  }\n}\n\nexport class ValidatorContractError extends Error {\n  readonly code = \"validator_contract_error\";\n\n  constructor(message: string, cause?: unknown) {\n    super(`ai-router: validateResult ${message}`, { cause });\n    this.name = \"ValidatorContractError\";\n  }\n}\n\nexport const CONTENT_TYPES = new Set([\n  \"text\",\n  \"reasoning\",\n  \"custom\",\n  \"reasoning-file\",\n  \"file\",\n  \"tool-approval-request\",\n  \"source\",\n  \"tool-call\",\n  \"tool-result\",\n]);\nexport const FINISH_REASONS = new Set([\n  \"stop\",\n  \"length\",\n  \"content-filter\",\n  \"tool-calls\",\n  \"error\",\n  \"other\",\n]);\nexport const MAX_GENERATE_CONTENT_PARTS = 10_000;\nexport const MAX_GENERATE_JSON_CONTAINERS = 50_000;\nexport const MAX_GENERATE_JSON_CHARACTERS = 4_194_304;\nexport const MAX_GENERATE_METADATA_CHARACTERS = 4_194_304;\nexport const MAX_METADATA_FIELD_LENGTH = 65_536;\nexport const MAX_RESULT_WARNINGS = 1024;\nexport const MAX_RESULT_WARNING_CHARS = 1_048_576;\nexport const MAX_RESULT_WARNING_FIELD_LENGTH = 65_536;\nexport const MAX_RESULT_HEADERS = 1024;\nexport const MAX_RESULT_HEADER_LENGTH = 65_536;\nexport const MAX_RESULT_HEADER_CHARS = 1_048_576;\nexport function validUsageNumber(value: unknown): boolean {\n  return (\n    value === undefined ||\n    (typeof value === \"number\" && Number.isFinite(value) && value >= 0)\n  );\n}\n\nexport function validOptionalBoolean(value: unknown): boolean {\n  return value === undefined || typeof value === \"boolean\";\n}\n\nexport function validOptionalString(value: unknown): boolean {\n  return value === undefined || typeof value === \"string\";\n}\n\nexport function validWarningString(value: unknown): boolean {\n  return (\n    typeof value === \"string\" && value.length <= MAX_RESULT_WARNING_FIELD_LENGTH\n  );\n}\n\nexport function validOptionalWarningString(value: unknown): boolean {\n  return value === undefined || validWarningString(value);\n}\n\nexport function validWarning(value: unknown): boolean {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  const warning = value as Record<string, unknown>;\n  if (warning.type === \"unsupported\" || warning.type === \"compatibility\") {\n    return (\n      validWarningString(warning.feature) &&\n      validOptionalWarningString(warning.details)\n    );\n  }\n  if (warning.type === \"deprecated\") {\n    return (\n      validWarningString(warning.setting) && validWarningString(warning.message)\n    );\n  }\n  return warning.type === \"other\" && validWarningString(warning.message);\n}\n\nexport function validResultHeaders(value: unknown): boolean {\n  if (value === undefined) {\n    return true;\n  }\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return false;\n  }\n  const keys = boundedEnumerableOwnKeys(value, MAX_RESULT_HEADERS);\n  if (keys === undefined) {\n    return false;\n  }\n  return keys.every((key) => {\n    if (!isValidHttpHeaderName(key)) {\n      return false;\n    }\n    const header = Reflect.get(value, key);\n    return (\n      typeof header === \"string\" &&\n      header.length <= MAX_RESULT_HEADER_LENGTH &&\n      !hasInvalidHttpHeaderValueCharacter(header)\n    );\n  });\n}\n\nexport function validGenerateMetadata(\n  result: Record<string, unknown>\n): boolean {\n  const providerMetadata = Reflect.get(result, \"providerMetadata\");\n  if (\n    providerMetadata !== undefined &&\n    (typeof providerMetadata !== \"object\" ||\n      providerMetadata === null ||\n      Array.isArray(providerMetadata))\n  ) {\n    return false;\n  }\n  const request = Reflect.get(result, \"request\");\n  if (request !== undefined) {\n    if (\n      typeof request !== \"object\" ||\n      request === null ||\n      Array.isArray(request)\n    ) {\n      return false;\n    }\n    Reflect.get(request, \"body\");\n  }\n  const response = Reflect.get(result, \"response\");\n  if (response === undefined) {\n    return true;\n  }\n  if (\n    typeof response !== \"object\" ||\n    response === null ||\n    Array.isArray(response)\n  ) {\n    return false;\n  }\n  const id = Reflect.get(response, \"id\");\n  const modelId = Reflect.get(response, \"modelId\");\n  const timestamp = Reflect.get(response, \"timestamp\");\n  Reflect.get(response, \"body\");\n  return (\n    (id === undefined || typeof id === \"string\") &&\n    (modelId === undefined || typeof modelId === \"string\") &&\n    (timestamp === undefined || isDateValue(timestamp)) &&\n    validResultHeaders(Reflect.get(response, \"headers\"))\n  );\n}\n\nexport function validateUsage(value: unknown): boolean {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  const usage = value as Record<string, unknown>;\n  const input = usage.inputTokens;\n  const output = usage.outputTokens;\n  if (\n    typeof input !== \"object\" ||\n    input === null ||\n    typeof output !== \"object\" ||\n    output === null\n  ) {\n    return false;\n  }\n  const inputRecord = input as Record<string, unknown>;\n  const outputRecord = output as Record<string, unknown>;\n  return (\n    [\"total\", \"noCache\", \"cacheRead\", \"cacheWrite\"].every((key) =>\n      validUsageNumber(inputRecord[key])\n    ) &&\n    [\"total\", \"text\", \"reasoning\"].every((key) =>\n      validUsageNumber(outputRecord[key])\n    )\n  );\n}\n\nexport function validGeneratedFileData(value: unknown): boolean {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  const data = value as Record<string, unknown>;\n  if (data.type === \"data\") {\n    return typeof data.data === \"string\" || isUint8ArrayValue(data.data);\n  }\n  return data.type === \"url\" && isUrlValue(data.url);\n}\n\nexport function validContentPart(record: Record<string, unknown>): boolean {\n  // Provider metadata is forwarded downstream. Trigger its accessor while the\n  // result can still fall back instead of letting a hostile getter fail later\n  // in the AI SDK after the candidate has been accepted.\n  const providerMetadata = Reflect.get(record, \"providerMetadata\");\n  if (\n    providerMetadata !== undefined &&\n    (typeof providerMetadata !== \"object\" ||\n      providerMetadata === null ||\n      Array.isArray(providerMetadata))\n  ) {\n    return false;\n  }\n  switch (record.type) {\n    case \"text\":\n    case \"reasoning\":\n      return typeof record.text === \"string\";\n    case \"custom\":\n      return isDottedIdentifier(record.kind);\n    case \"file\":\n    case \"reasoning-file\":\n      return (\n        typeof record.mediaType === \"string\" &&\n        validGeneratedFileData(record.data)\n      );\n    case \"tool-approval-request\":\n      return (\n        isBoundedIdentifier(record.approvalId) &&\n        isBoundedIdentifier(record.toolCallId)\n      );\n    case \"tool-call\":\n      return (\n        isBoundedIdentifier(record.toolCallId) &&\n        isBoundedIdentifier(record.toolName) &&\n        typeof record.input === \"string\" &&\n        validOptionalBoolean(record.providerExecuted) &&\n        validOptionalBoolean(record.dynamic)\n      );\n    case \"tool-result\":\n      return (\n        isBoundedIdentifier(record.toolCallId) &&\n        isBoundedIdentifier(record.toolName) &&\n        record.result !== undefined &&\n        record.result !== null &&\n        validOptionalBoolean(record.isError) &&\n        validOptionalBoolean(record.preliminary) &&\n        validOptionalBoolean(record.dynamic)\n      );\n    case \"source\":\n      return (\n        isBoundedIdentifier(record.id) &&\n        ((record.sourceType === \"url\" &&\n          typeof record.url === \"string\" &&\n          validOptionalString(record.title)) ||\n          (record.sourceType === \"document\" &&\n            typeof record.mediaType === \"string\" &&\n            typeof record.title === \"string\" &&\n            validOptionalString(record.filename)))\n      );\n    default:\n      return false;\n  }\n}\n\nexport function validateContent(value: unknown): string | undefined {\n  if (!Array.isArray(value)) {\n    return \"content must be an array\";\n  }\n  if (value.length > MAX_GENERATE_CONTENT_PARTS) {\n    return `content exceeds ${MAX_GENERATE_CONTENT_PARTS} parts`;\n  }\n  const toolCallIds = new Set<string>();\n  for (const part of value) {\n    const type =\n      typeof part === \"object\" && part !== null\n        ? (part as Record<string, unknown>).type\n        : undefined;\n    if (\n      typeof part !== \"object\" ||\n      part === null ||\n      typeof type !== \"string\" ||\n      !CONTENT_TYPES.has(type) ||\n      !validContentPart(part as Record<string, unknown>)\n    ) {\n      return \"content contains an unknown or malformed part\";\n    }\n    const record = part as Record<string, unknown>;\n    if (record.type === \"tool-call\") {\n      const id = record.toolCallId as string;\n      if (toolCallIds.has(id)) {\n        return \"content contains duplicate tool-call ids\";\n      }\n      toolCallIds.add(id);\n    }\n  }\n  return;\n}\n\nexport function validateGenerateEnvelope(value: unknown): string | undefined {\n  try {\n    if (typeof value !== \"object\" || value === null) {\n      return \"result must be an object\";\n    }\n    const result = value as Record<string, unknown>;\n    const contentError = validateContent(result.content);\n    if (contentError !== undefined) {\n      return contentError;\n    }\n    const finishReason = result.finishReason;\n    if (typeof finishReason !== \"object\" || finishReason === null) {\n      return \"finishReason must be an object\";\n    }\n    const finish = finishReason as Record<string, unknown>;\n    if (\n      !(\n        typeof finish.unified === \"string\" &&\n        FINISH_REASONS.has(finish.unified) &&\n        (finish.raw === undefined || typeof finish.raw === \"string\")\n      )\n    ) {\n      return \"finishReason is malformed\";\n    }\n    if (!validateUsage(result.usage)) {\n      return \"usage is malformed\";\n    }\n    if (!Array.isArray(result.warnings)) {\n      return \"warnings are malformed\";\n    }\n    if (result.warnings.length > MAX_RESULT_WARNINGS) {\n      return `warnings exceed ${MAX_RESULT_WARNINGS} entries`;\n    }\n    if (\n      !(isDenseArray(result.warnings) && result.warnings.every(validWarning))\n    ) {\n      return \"warnings are malformed\";\n    }\n    if (!validGenerateMetadata(result)) {\n      return \"optional metadata is malformed\";\n    }\n    return;\n  } catch {\n    return \"result properties could not be read\";\n  }\n}\n","import {\n  AsyncFilePayloadError,\n  MAX_FILE_PAYLOAD_BYTES,\n  snapshotFileData,\n} from \"./file-data\";\nimport {\n  boundedEnumerableOwnKeys,\n  isValidHttpHeaderName,\n} from \"./http-headers\";\nimport { snapshotJsonValue } from \"./json-value\";\nimport { snapshotProviderBody } from \"./provider-body\";\nimport {\n  MAX_GENERATE_JSON_CHARACTERS,\n  MAX_GENERATE_JSON_CONTAINERS,\n  MAX_RESULT_HEADER_CHARS,\n  MAX_RESULT_HEADERS,\n} from \"./router-generate-validation\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  isDateValue,\n} from \"./runtime-types\";\n\nexport function snapshotFinishReason(value: unknown): unknown {\n  synchronousGenerateValue(value);\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  return captureGenerateFields(value, [\"raw\", \"unified\"]);\n}\n\nexport interface GenerateJsonBudget {\n  remaining: number;\n  remainingCharacters: number;\n  remainingFileBytes: number;\n}\n\nexport function createGenerateJsonBudget(): GenerateJsonBudget {\n  return {\n    remainingFileBytes: MAX_FILE_PAYLOAD_BYTES,\n    remaining: MAX_GENERATE_JSON_CONTAINERS,\n    remainingCharacters: MAX_GENERATE_JSON_CHARACTERS,\n  };\n}\n\nexport class AsyncGenerateFieldError extends Error {\n  constructor() {\n    super(\"async provider result fields are unsupported\");\n    this.name = \"AsyncGenerateFieldError\";\n  }\n}\n\nexport function synchronousGenerateValue(value: unknown): unknown {\n  if (consumeGenuinePromise(value)) {\n    throw new AsyncGenerateFieldError();\n  }\n  return value;\n}\n\nexport function generateField(value: object, key: string | number): unknown {\n  return synchronousGenerateValue(Reflect.get(value, key));\n}\n\nexport function generateOpaqueField(\n  value: object,\n  key: string | number\n): unknown {\n  consumeOwnDataPromiseFields(value, [key]);\n  const captured = Reflect.get(value, key);\n  consumeGenuinePromise(captured);\n  return captured;\n}\n\nexport function generateDiscriminant(\n  value: object,\n  key: string,\n  siblingKeys: readonly string[]\n): unknown {\n  consumeOwnDataPromiseFields(value, [key, ...siblingKeys]);\n  try {\n    return generateField(value, key);\n  } catch (error) {\n    if (error instanceof AsyncGenerateFieldError) {\n      consumeOwnDataPromiseFields(value, siblingKeys);\n    }\n    throw error;\n  }\n}\n\nexport function captureGenerateFields(\n  value: object,\n  keys: readonly string[]\n): Record<string, unknown> {\n  consumeOwnDataPromiseFields(value, keys);\n  const fields: Record<string, unknown> = {};\n  let asyncFailure: AsyncGenerateFieldError | undefined;\n  for (const key of keys) {\n    try {\n      fields[key] = generateField(value, key);\n    } catch (error) {\n      if (!(error instanceof AsyncGenerateFieldError)) {\n        throw error;\n      }\n      asyncFailure ??= error;\n    }\n  }\n  if (asyncFailure !== undefined) {\n    throw asyncFailure;\n  }\n  return fields;\n}\n\nexport function captureGenerateSiblings(tasks: readonly (() => void)[]): void {\n  let asyncFailure: AsyncGenerateFieldError | undefined;\n  for (const task of tasks) {\n    try {\n      task();\n    } catch (error) {\n      if (!(error instanceof AsyncGenerateFieldError)) {\n        throw error;\n      }\n      asyncFailure ??= error;\n    }\n  }\n  if (asyncFailure !== undefined) {\n    throw asyncFailure;\n  }\n}\n\nexport const ASYNC_GENERATE_FIELD = Symbol(\"async generate field\");\n\nexport function captureGenerateSiblingValue(\n  task: () => unknown,\n  failure: { error?: AsyncGenerateFieldError }\n): unknown | typeof ASYNC_GENERATE_FIELD {\n  try {\n    return task();\n  } catch (error) {\n    if (!(error instanceof AsyncGenerateFieldError)) {\n      throw error;\n    }\n    failure.error ??= error;\n    return ASYNC_GENERATE_FIELD;\n  }\n}\n\nexport function snapshotRequiredJson(\n  value: unknown,\n  budget?: GenerateJsonBudget\n): unknown {\n  synchronousGenerateValue(value);\n  const snapshot = snapshotJsonValue(\n    value,\n    budget?.remaining,\n    budget?.remainingCharacters\n  );\n  if (!snapshot.valid) {\n    if (snapshot.async) {\n      throw new AsyncGenerateFieldError();\n    }\n    throw new Error(\"malformed provider JSON value\");\n  }\n  if (budget !== undefined) {\n    budget.remaining -= snapshot.containers ?? 0;\n    budget.remainingCharacters -= snapshot.characters ?? 0;\n  }\n  return snapshot.value;\n}\n\nexport function snapshotGenerateFileData(\n  value: unknown,\n  budget: GenerateJsonBudget\n): unknown {\n  try {\n    return snapshotFileData(value, budget);\n  } catch (error) {\n    if (error instanceof AsyncFilePayloadError) {\n      throw new AsyncGenerateFieldError();\n    }\n    throw error;\n  }\n}\n\nexport function snapshotProviderMetadata(\n  value: unknown,\n  budget?: GenerateJsonBudget\n): unknown {\n  if (value === undefined) {\n    return;\n  }\n  const snapshot = snapshotRequiredJson(value, budget);\n  if (\n    typeof snapshot !== \"object\" ||\n    snapshot === null ||\n    Array.isArray(snapshot)\n  ) {\n    throw new Error(\"malformed provider metadata\");\n  }\n  return snapshot;\n}\n\nexport function snapshotUsage(\n  value: unknown,\n  budget?: GenerateJsonBudget\n): unknown {\n  synchronousGenerateValue(value);\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  const fields = captureGenerateFields(value, [\n    \"inputTokens\",\n    \"outputTokens\",\n    \"raw\",\n  ]);\n  const input = fields.inputTokens;\n  const output = fields.outputTokens;\n  const raw = fields.raw;\n  let inputFields: Record<string, unknown> | undefined;\n  let outputFields: Record<string, unknown> | undefined;\n  let rawSnapshot: unknown;\n  captureGenerateSiblings([\n    () => {\n      if (typeof input === \"object\" && input !== null) {\n        inputFields = captureGenerateFields(input, [\n          \"cacheRead\",\n          \"cacheWrite\",\n          \"noCache\",\n          \"total\",\n        ]);\n      }\n    },\n    () => {\n      if (typeof output === \"object\" && output !== null) {\n        outputFields = captureGenerateFields(output, [\n          \"reasoning\",\n          \"text\",\n          \"total\",\n        ]);\n      }\n    },\n    () => {\n      rawSnapshot =\n        raw === undefined ? undefined : snapshotRequiredJson(raw, budget);\n    },\n  ]);\n  return {\n    inputTokens:\n      inputFields === undefined\n        ? input\n        : {\n            cacheRead: inputFields.cacheRead,\n            cacheWrite: inputFields.cacheWrite,\n            noCache: inputFields.noCache,\n            total: inputFields.total,\n          },\n    outputTokens:\n      outputFields === undefined\n        ? output\n        : {\n            reasoning: outputFields.reasoning,\n            text: outputFields.text,\n            total: outputFields.total,\n          },\n    raw: rawSnapshot,\n  };\n}\n\nexport function snapshotGenerateRequest(\n  value: unknown,\n  budget: GenerateJsonBudget\n): unknown {\n  synchronousGenerateValue(value);\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return value;\n  }\n  const body = generateOpaqueField(value, \"body\");\n  return {\n    body: body === undefined ? undefined : snapshotProviderBody(body, budget),\n  };\n}\n\nexport function snapshotGenerateHeaders(value: unknown): unknown {\n  synchronousGenerateValue(value);\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return value;\n  }\n  const keys = boundedEnumerableOwnKeys(value, MAX_RESULT_HEADERS);\n  // Use a safe malformed sentinel so a Proxy cannot change its ownKeys result\n  // when the validator runs, and avoid reading oversized header accessors.\n  if (keys === undefined) {\n    return [];\n  }\n  consumeOwnDataPromiseFields(value, keys);\n  if (keys.some((key) => !isValidHttpHeaderName(key))) {\n    return [];\n  }\n  const snapshot: Record<string, unknown> = {};\n  let totalChars = 0;\n  let asyncFailure: AsyncGenerateFieldError | undefined;\n  for (const key of keys) {\n    let item: unknown;\n    try {\n      item = generateField(value, key);\n    } catch (error) {\n      if (!(error instanceof AsyncGenerateFieldError)) {\n        throw error;\n      }\n      asyncFailure ??= error;\n      continue;\n    }\n    if (typeof item === \"string\") {\n      totalChars += key.length + item.length;\n      if (totalChars > MAX_RESULT_HEADER_CHARS) {\n        return [];\n      }\n    }\n    Object.defineProperty(snapshot, key, {\n      configurable: true,\n      enumerable: true,\n      value: item,\n      writable: true,\n    });\n  }\n  if (asyncFailure !== undefined) {\n    throw asyncFailure;\n  }\n  return snapshot;\n}\n\nexport function snapshotGenerateResponse(\n  value: unknown,\n  budget: GenerateJsonBudget\n): unknown {\n  synchronousGenerateValue(value);\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return value;\n  }\n  consumeOwnDataPromiseFields(value, [\"body\"]);\n  const fields = captureGenerateFields(value, [\n    \"timestamp\",\n    \"headers\",\n    \"id\",\n    \"modelId\",\n  ]);\n  const timestamp = fields.timestamp;\n  const body = generateOpaqueField(value, \"body\");\n  let bodySnapshot: unknown;\n  let headersSnapshot: unknown;\n  captureGenerateSiblings([\n    () => {\n      bodySnapshot =\n        body === undefined ? undefined : snapshotProviderBody(body, budget);\n    },\n    () => {\n      headersSnapshot = snapshotGenerateHeaders(fields.headers);\n    },\n  ]);\n  return {\n    body: bodySnapshot,\n    headers: headersSnapshot,\n    id: fields.id,\n    modelId: fields.modelId,\n    timestamp: isDateValue(timestamp)\n      ? new Date(Date.prototype.getTime.call(timestamp))\n      : timestamp,\n  };\n}\n","import {\n  ASYNC_GENERATE_FIELD,\n  type AsyncGenerateFieldError,\n  captureGenerateFields,\n  captureGenerateSiblings,\n  captureGenerateSiblingValue,\n  type GenerateJsonBudget,\n  generateDiscriminant,\n  generateField,\n  snapshotGenerateFileData,\n  snapshotProviderMetadata,\n  snapshotRequiredJson,\n  synchronousGenerateValue,\n} from \"./router-generate-snapshot\";\nimport { MAX_GENERATE_CONTENT_PARTS } from \"./router-generate-validation\";\nimport { consumeOwnDataPromiseFields } from \"./runtime-types\";\n\nexport function snapshotContentPart(\n  value: unknown,\n  budget: GenerateJsonBudget\n): unknown {\n  synchronousGenerateValue(value);\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  const type = generateDiscriminant(value, \"type\", [\n    \"approvalId\",\n    \"data\",\n    \"dynamic\",\n    \"filename\",\n    \"id\",\n    \"input\",\n    \"isError\",\n    \"kind\",\n    \"mediaType\",\n    \"preliminary\",\n    \"providerExecuted\",\n    \"providerMetadata\",\n    \"result\",\n    \"sourceType\",\n    \"text\",\n    \"title\",\n    \"toolCallId\",\n    \"toolName\",\n    \"url\",\n  ]);\n  const keys = (() => {\n    switch (type) {\n      case \"text\":\n      case \"reasoning\":\n        return [\"providerMetadata\", \"text\"];\n      case \"custom\":\n        return [\"kind\", \"providerMetadata\"];\n      case \"file\":\n      case \"reasoning-file\":\n        return [\"data\", \"mediaType\", \"providerMetadata\"];\n      case \"tool-approval-request\":\n        return [\"approvalId\", \"providerMetadata\", \"toolCallId\"];\n      case \"tool-call\":\n        return [\n          \"dynamic\",\n          \"input\",\n          \"providerExecuted\",\n          \"providerMetadata\",\n          \"toolCallId\",\n          \"toolName\",\n        ];\n      case \"tool-result\":\n        return [\n          \"dynamic\",\n          \"isError\",\n          \"preliminary\",\n          \"providerMetadata\",\n          \"result\",\n          \"toolCallId\",\n          \"toolName\",\n        ];\n      case \"source\":\n        return [\"providerMetadata\", \"sourceType\"];\n      default:\n        return [\"providerMetadata\"];\n    }\n  })();\n  const fields = captureGenerateFields(value, keys);\n  let providerMetadata: unknown;\n  let fileData: unknown;\n  let toolResult: unknown;\n  let sourceFields: Record<string, unknown> | undefined;\n  const transformations: (() => void)[] = [\n    () => {\n      providerMetadata = snapshotProviderMetadata(\n        fields.providerMetadata,\n        budget\n      );\n    },\n  ];\n  if (type === \"file\" || type === \"reasoning-file\") {\n    transformations.push(() => {\n      fileData = snapshotGenerateFileData(fields.data, budget);\n    });\n  } else if (type === \"tool-result\") {\n    transformations.push(() => {\n      toolResult = snapshotRequiredJson(fields.result, budget);\n    });\n  } else if (type === \"source\") {\n    transformations.push(() => {\n      sourceFields =\n        fields.sourceType === \"url\"\n          ? captureGenerateFields(value, [\"id\", \"title\", \"url\"])\n          : captureGenerateFields(value, [\n              \"filename\",\n              \"id\",\n              \"mediaType\",\n              \"title\",\n            ]);\n    });\n  }\n  captureGenerateSiblings(transformations);\n  switch (type) {\n    case \"text\":\n    case \"reasoning\":\n      return { providerMetadata, text: fields.text, type };\n    case \"custom\":\n      return { kind: fields.kind, providerMetadata, type };\n    case \"file\":\n    case \"reasoning-file\":\n      return {\n        data: fileData,\n        mediaType: fields.mediaType,\n        providerMetadata,\n        type,\n      };\n    case \"tool-approval-request\":\n      return {\n        approvalId: fields.approvalId,\n        providerMetadata,\n        toolCallId: fields.toolCallId,\n        type,\n      };\n    case \"tool-call\":\n      return {\n        dynamic: fields.dynamic,\n        input: fields.input,\n        providerExecuted: fields.providerExecuted,\n        providerMetadata,\n        toolCallId: fields.toolCallId,\n        toolName: fields.toolName,\n        type,\n      };\n    case \"tool-result\":\n      return {\n        dynamic: fields.dynamic,\n        isError: fields.isError,\n        preliminary: fields.preliminary,\n        providerMetadata,\n        result: toolResult,\n        toolCallId: fields.toolCallId,\n        toolName: fields.toolName,\n        type,\n      };\n    case \"source\": {\n      const sourceType = fields.sourceType;\n      if (sourceFields === undefined) {\n        throw new Error(\"source fields are unavailable\");\n      }\n      if (sourceType === \"url\") {\n        return {\n          id: sourceFields.id,\n          providerMetadata,\n          sourceType,\n          title: sourceFields.title,\n          type,\n          url: sourceFields.url,\n        };\n      }\n      return {\n        filename: sourceFields.filename,\n        id: sourceFields.id,\n        mediaType: sourceFields.mediaType,\n        providerMetadata,\n        sourceType,\n        title: sourceFields.title,\n        type,\n      };\n    }\n    default:\n      return { providerMetadata, type };\n  }\n}\n\nexport function snapshotGenerateContent(\n  value: unknown,\n  budget: GenerateJsonBudget\n): unknown {\n  synchronousGenerateValue(value);\n  if (!Array.isArray(value)) {\n    return value;\n  }\n  const length = generateField(value, \"length\");\n  if (\n    typeof length !== \"number\" ||\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > MAX_GENERATE_CONTENT_PARTS\n  ) {\n    return new Array(MAX_GENERATE_CONTENT_PARTS + 1);\n  }\n  consumeOwnDataPromiseFields(\n    value,\n    Array.from({ length }, (_, index) => index)\n  );\n  const snapshot = new Array<unknown>(length);\n  const failure: { error?: AsyncGenerateFieldError } = {};\n  for (let index = 0; index < length; index += 1) {\n    if (!Object.hasOwn(value, index)) {\n      return new Array(length);\n    }\n    const part = captureGenerateSiblingValue(\n      () => snapshotContentPart(generateField(value, index), budget),\n      failure\n    );\n    if (part !== ASYNC_GENERATE_FIELD) {\n      snapshot[index] = part;\n    }\n  }\n  if (failure.error !== undefined) {\n    throw failure.error;\n  }\n  return snapshot;\n}\n","import type { LanguageModelV4GenerateResult } from \"@ai-sdk/provider\";\nimport {\n  MAX_GENERATE_CONTENT_PARTS,\n  MAX_RESULT_WARNINGS,\n} from \"./router-generate-validation\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n\nexport const GENERATE_ENVELOPE_FIELDS = [\n  \"content\",\n  \"finishReason\",\n  \"providerMetadata\",\n  \"request\",\n  \"response\",\n  \"usage\",\n  \"warnings\",\n] as const;\n\nexport const GENERATE_CONTENT_MUTATION_FIELDS = [\n  \"approvalId\",\n  \"data\",\n  \"dynamic\",\n  \"filename\",\n  \"id\",\n  \"input\",\n  \"isError\",\n  \"kind\",\n  \"mediaType\",\n  \"preliminary\",\n  \"providerExecuted\",\n  \"providerMetadata\",\n  \"result\",\n  \"sourceType\",\n  \"text\",\n  \"title\",\n  \"toolCallId\",\n  \"toolName\",\n  \"type\",\n  \"url\",\n] as const;\nexport const MAX_VALIDATOR_MUTATION_FIELDS = 200_000;\n\nexport interface ValidatorMutationTarget {\n  keys: string[];\n  value: object;\n}\n\nexport function validatorMutationKeys(\n  value: object,\n  remainingFields: number\n): string[] | undefined {\n  try {\n    if (Array.isArray(value)) {\n      const length = validatorOwnDataValue(value, \"length\");\n      if (\n        typeof length !== \"number\" ||\n        !Number.isSafeInteger(length) ||\n        length < 0 ||\n        length > remainingFields\n      ) {\n        return;\n      }\n      return Array.from({ length }, (_, index) => String(index));\n    }\n    const prototype = Object.getPrototypeOf(value);\n    if (prototype !== Object.prototype && prototype !== null) {\n      return;\n    }\n    const keys = Object.keys(value);\n    return keys.length <= remainingFields ? keys : undefined;\n  } catch {\n    return;\n  }\n}\n\nexport function validatorOwnDataValue(\n  value: object,\n  key: string | number\n): unknown {\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(value, key);\n    return descriptor !== undefined && \"value\" in descriptor\n      ? descriptor.value\n      : undefined;\n  } catch {\n    return;\n  }\n}\n\nexport function consumeValidatorArrayItemPromises(\n  value: unknown,\n  maximum: number,\n  itemFields: readonly string[]\n): void {\n  if (!Array.isArray(value)) {\n    return;\n  }\n  const length = validatorOwnDataValue(value, \"length\");\n  if (\n    typeof length !== \"number\" ||\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > maximum\n  ) {\n    return;\n  }\n  for (let index = 0; index < length; index += 1) {\n    const item = validatorOwnDataValue(value, index);\n    if (consumeGenuinePromise(item)) {\n      continue;\n    }\n    if (typeof item === \"object\" && item !== null) {\n      consumeOwnDataPromiseFields(item, itemFields);\n    }\n  }\n}\n\nexport function consumeNestedValidatorInputPromiseMutations(\n  input: LanguageModelV4GenerateResult\n): void {\n  consumeValidatorArrayItemPromises(\n    validatorOwnDataValue(input, \"content\"),\n    MAX_GENERATE_CONTENT_PARTS,\n    GENERATE_CONTENT_MUTATION_FIELDS\n  );\n  consumeValidatorArrayItemPromises(\n    validatorOwnDataValue(input, \"warnings\"),\n    MAX_RESULT_WARNINGS,\n    [\"details\", \"feature\", \"message\", \"setting\", \"type\"]\n  );\n  const finishReason = validatorOwnDataValue(input, \"finishReason\");\n  if (typeof finishReason === \"object\" && finishReason !== null) {\n    consumeOwnDataPromiseFields(finishReason, [\"raw\", \"unified\"]);\n  }\n  const request = validatorOwnDataValue(input, \"request\");\n  if (typeof request === \"object\" && request !== null) {\n    consumeOwnDataPromiseFields(request, [\"body\"]);\n  }\n  const response = validatorOwnDataValue(input, \"response\");\n  if (typeof response === \"object\" && response !== null) {\n    consumeOwnDataPromiseFields(response, [\n      \"body\",\n      \"headers\",\n      \"id\",\n      \"modelId\",\n      \"timestamp\",\n    ]);\n  }\n  const usage = validatorOwnDataValue(input, \"usage\");\n  if (typeof usage === \"object\" && usage !== null) {\n    consumeOwnDataPromiseFields(usage, [\"inputTokens\", \"outputTokens\", \"raw\"]);\n    const inputTokens = validatorOwnDataValue(usage, \"inputTokens\");\n    if (typeof inputTokens === \"object\" && inputTokens !== null) {\n      consumeOwnDataPromiseFields(inputTokens, [\n        \"cacheRead\",\n        \"cacheWrite\",\n        \"noCache\",\n        \"total\",\n      ]);\n    }\n    const outputTokens = validatorOwnDataValue(usage, \"outputTokens\");\n    if (typeof outputTokens === \"object\" && outputTokens !== null) {\n      consumeOwnDataPromiseFields(outputTokens, [\"reasoning\", \"text\", \"total\"]);\n    }\n  }\n}\n\nexport function captureValidatorMutationTargets(\n  root: LanguageModelV4GenerateResult\n): ValidatorMutationTarget[] {\n  const targets: ValidatorMutationTarget[] = [];\n  const pending: object[] = [root];\n  const seen = new WeakSet<object>();\n  let remainingFields = MAX_VALIDATOR_MUTATION_FIELDS;\n  while (pending.length > 0 && remainingFields > 0) {\n    const value = pending.pop();\n    if (value === undefined || seen.has(value)) {\n      continue;\n    }\n    seen.add(value);\n    const keys = validatorMutationKeys(value, remainingFields);\n    if (keys === undefined) {\n      continue;\n    }\n    remainingFields -= keys.length;\n    targets.push({ keys, value });\n    for (const key of keys) {\n      const item = validatorOwnDataValue(value, key);\n      if (typeof item === \"object\" && item !== null) {\n        pending.push(item);\n      }\n    }\n  }\n  return targets;\n}\n\nexport function consumeCapturedValidatorMutationPromises(\n  targets: ValidatorMutationTarget[]\n): void {\n  for (const target of targets) {\n    consumeOwnDataPromiseFields(target.value, target.keys);\n  }\n}\n\nexport class InvalidProviderModelError extends Error {\n  readonly code = \"invalid_provider_model\";\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"InvalidProviderModelError\";\n  }\n}\n\n/** A successful generate call must contain something usable by the caller. */\nexport function hasOutputContent(\n  result: LanguageModelV4GenerateResult\n): boolean {\n  return result.content.some((part) => {\n    if (part.type === \"text\" || part.type === \"reasoning\") {\n      return part.text.trim().length > 0;\n    }\n    // Tool calls and future non-text output types are meaningful payloads.\n    return true;\n  });\n}\n","import type { LanguageModelV4GenerateResult } from \"@ai-sdk/provider\";\nimport { snapshotGenerateContent } from \"./router-generate-content\";\nimport {\n  ASYNC_GENERATE_FIELD,\n  type AsyncGenerateFieldError,\n  captureGenerateFields,\n  captureGenerateSiblings,\n  captureGenerateSiblingValue,\n  createGenerateJsonBudget,\n  generateDiscriminant,\n  generateField,\n  snapshotFinishReason,\n  snapshotGenerateRequest,\n  snapshotGenerateResponse,\n  snapshotProviderMetadata,\n  snapshotUsage,\n  synchronousGenerateValue,\n} from \"./router-generate-snapshot\";\nimport {\n  MAX_GENERATE_METADATA_CHARACTERS,\n  MAX_METADATA_FIELD_LENGTH,\n  MAX_RESULT_WARNING_CHARS,\n  MAX_RESULT_WARNINGS,\n} from \"./router-generate-validation\";\nimport { GENERATE_ENVELOPE_FIELDS } from \"./router-generate-validator\";\nimport { consumeOwnDataPromiseFields } from \"./runtime-types\";\n\nexport function snapshotGenerateWarning(value: unknown): unknown {\n  synchronousGenerateValue(value);\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  const type = generateDiscriminant(value, \"type\", [\n    \"details\",\n    \"feature\",\n    \"message\",\n    \"setting\",\n  ]);\n  if (type === \"unsupported\" || type === \"compatibility\") {\n    const fields = captureGenerateFields(value, [\"details\", \"feature\"]);\n    return {\n      details: fields.details,\n      feature: fields.feature,\n      type,\n    };\n  }\n  if (type === \"deprecated\") {\n    const fields = captureGenerateFields(value, [\"message\", \"setting\"]);\n    return {\n      message: fields.message,\n      setting: fields.setting,\n      type,\n    };\n  }\n  return { message: generateField(value, \"message\"), type };\n}\n\nexport function generateWarningCharacters(value: unknown): number {\n  if (typeof value !== \"object\" || value === null) {\n    return 0;\n  }\n  let characters = 0;\n  for (const field of [\"feature\", \"details\", \"setting\", \"message\"]) {\n    const item = Reflect.get(value, field);\n    if (typeof item === \"string\") {\n      characters += item.length;\n    }\n  }\n  return characters;\n}\n\nexport function snapshotGenerateWarnings(value: unknown): unknown {\n  synchronousGenerateValue(value);\n  if (!Array.isArray(value)) {\n    return value;\n  }\n  const length = generateField(value, \"length\");\n  if (\n    typeof length !== \"number\" ||\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > MAX_RESULT_WARNINGS\n  ) {\n    return new Array(MAX_RESULT_WARNINGS + 1);\n  }\n  consumeOwnDataPromiseFields(\n    value,\n    Array.from({ length }, (_, index) => index)\n  );\n  const snapshot = new Array<unknown>(length);\n  let totalChars = 0;\n  const failure: { error?: AsyncGenerateFieldError } = {};\n  for (let index = 0; index < length; index += 1) {\n    if (!Object.hasOwn(value, index)) {\n      return new Array(length);\n    }\n    const warning = captureGenerateSiblingValue(\n      () => snapshotGenerateWarning(generateField(value, index)),\n      failure\n    );\n    if (warning === ASYNC_GENERATE_FIELD) {\n      continue;\n    }\n    snapshot[index] = warning;\n    totalChars += generateWarningCharacters(warning);\n    if (totalChars > MAX_RESULT_WARNING_CHARS) {\n      return [null];\n    }\n  }\n  if (failure.error !== undefined) {\n    throw failure.error;\n  }\n  return snapshot;\n}\n\nexport function validateGenerateMetadataStrings(\n  result: LanguageModelV4GenerateResult\n): void {\n  let remaining = MAX_GENERATE_METADATA_CHARACTERS;\n  const consume = (\n    value: unknown,\n    maximum = MAX_METADATA_FIELD_LENGTH,\n    allowEmpty = true\n  ) => {\n    if (value === undefined) {\n      return;\n    }\n    if (\n      typeof value !== \"string\" ||\n      (!allowEmpty && value.length === 0) ||\n      value.length > maximum\n    ) {\n      throw new Error(\n        \"generate metadata strings must be non-empty and bounded\"\n      );\n    }\n    remaining -= value.length;\n    if (remaining < 0) {\n      throw new Error(\"generate metadata exceeds the aggregate string limit\");\n    }\n  };\n  consume(result.finishReason.raw);\n  consume(result.response?.id, 4096);\n  consume(result.response?.modelId, 4096);\n  for (const part of result.content) {\n    const record = part as unknown as Record<string, unknown>;\n    switch (part.type) {\n      case \"file\":\n      case \"reasoning-file\":\n        consume(record.mediaType, 256, false);\n        break;\n      case \"custom\":\n        consume(record.kind, 4096);\n        break;\n      case \"tool-call\":\n      case \"tool-result\":\n        consume(record.toolCallId, 4096);\n        consume(record.toolName, 4096);\n        break;\n      case \"tool-approval-request\":\n        consume(record.approvalId, 4096);\n        consume(record.toolCallId, 4096);\n        break;\n      case \"source\":\n        consume(record.id, 4096);\n        consume(record.url);\n        consume(record.title);\n        consume(record.mediaType, 256, false);\n        consume(record.filename);\n        break;\n      default:\n        break;\n    }\n  }\n}\n\nexport function snapshotGenerateEnvelope(\n  value: LanguageModelV4GenerateResult\n): LanguageModelV4GenerateResult {\n  const record = value as unknown as Record<string, unknown>;\n  const fields = captureGenerateFields(record, GENERATE_ENVELOPE_FIELDS);\n  const budget = createGenerateJsonBudget();\n  const snapshot = {} as LanguageModelV4GenerateResult;\n  captureGenerateSiblings([\n    () => {\n      snapshot.content = snapshotGenerateContent(\n        fields.content,\n        budget\n      ) as LanguageModelV4GenerateResult[\"content\"];\n    },\n    () => {\n      snapshot.finishReason = snapshotFinishReason(\n        fields.finishReason\n      ) as LanguageModelV4GenerateResult[\"finishReason\"];\n    },\n    () => {\n      snapshot.providerMetadata = snapshotProviderMetadata(\n        fields.providerMetadata,\n        budget\n      ) as LanguageModelV4GenerateResult[\"providerMetadata\"];\n    },\n    () => {\n      snapshot.request = snapshotGenerateRequest(\n        fields.request,\n        budget\n      ) as LanguageModelV4GenerateResult[\"request\"];\n    },\n    () => {\n      snapshot.response = snapshotGenerateResponse(\n        fields.response,\n        budget\n      ) as LanguageModelV4GenerateResult[\"response\"];\n    },\n    () => {\n      snapshot.usage = snapshotUsage(\n        fields.usage,\n        budget\n      ) as LanguageModelV4GenerateResult[\"usage\"];\n    },\n    () => {\n      snapshot.warnings = snapshotGenerateWarnings(\n        fields.warnings\n      ) as LanguageModelV4GenerateResult[\"warnings\"];\n    },\n  ]);\n  validateGenerateMetadataStrings(snapshot);\n  return snapshot;\n}\n\nexport function discardLateGenerateResult(\n  result: LanguageModelV4GenerateResult\n): void {\n  const record = result as unknown as Record<string, unknown>;\n  consumeOwnDataPromiseFields(record, GENERATE_ENVELOPE_FIELDS);\n  const cleanups = [\n    () =>\n      snapshotGenerateContent(\n        Reflect.get(record, \"content\"),\n        createGenerateJsonBudget()\n      ),\n    () => snapshotFinishReason(Reflect.get(record, \"finishReason\")),\n    () =>\n      snapshotProviderMetadata(\n        Reflect.get(record, \"providerMetadata\"),\n        createGenerateJsonBudget()\n      ),\n    () =>\n      snapshotGenerateRequest(\n        Reflect.get(record, \"request\"),\n        createGenerateJsonBudget()\n      ),\n    () =>\n      snapshotGenerateResponse(\n        Reflect.get(record, \"response\"),\n        createGenerateJsonBudget()\n      ),\n    () =>\n      snapshotUsage(Reflect.get(record, \"usage\"), createGenerateJsonBudget()),\n    () => snapshotGenerateWarnings(Reflect.get(record, \"warnings\")),\n  ];\n  for (const cleanup of cleanups) {\n    try {\n      cleanup();\n    } catch {\n      // Late-result fields are independent best-effort cleanup boundaries.\n    }\n  }\n}\n","import { consumeGenuinePromise } from \"./runtime-types\";\nimport type { RetryBudgetConfig } from \"./types\";\n\nconst WINDOW_COMPACTION_PREFIX = 1024;\n\nexport interface RetryBudgetState {\n  available: boolean;\n  failureRate: number;\n  failures: number;\n  samples: number;\n  tripped: boolean;\n  windowMs: number;\n}\n\nexport class RetryBudget {\n  private readonly window: Array<{ at: number; success: boolean }> = [];\n  private windowStart = 0;\n  private failures = 0;\n  private tripped = false;\n  private readonly now: () => number;\n  private readonly windowMs: number;\n  private readonly maxSamples: number;\n  private readonly minSamples: number;\n  private readonly recoveryFailureRate: number;\n  private readonly tripFailureRate: number;\n  private lastNow?: number;\n\n  constructor(\n    now: () => number = Date.now,\n    windowMs = 60_000,\n    config: Omit<RetryBudgetConfig, \"window\"> = {}\n  ) {\n    const maxSamples = config.maxSamples ?? 20;\n    const minSamples = config.minSamples ?? 5;\n    const tripFailureRate = config.tripFailureRate ?? 0.8;\n    const recoveryFailureRate = config.recoveryFailureRate ?? 0.4;\n    if (!Number.isSafeInteger(windowMs) || windowMs <= 0) {\n      throw new Error(\n        \"ai-router: retry budget window must be a positive safe integer\"\n      );\n    }\n    if (\n      !(Number.isInteger(minSamples) && Number.isInteger(maxSamples)) ||\n      minSamples < 1 ||\n      maxSamples < minSamples ||\n      maxSamples > 10_000\n    ) {\n      throw new Error(\n        \"ai-router: retry budget samples require 1 <= minSamples <= maxSamples <= 10000\"\n      );\n    }\n    if (\n      !(\n        Number.isFinite(recoveryFailureRate) && Number.isFinite(tripFailureRate)\n      ) ||\n      recoveryFailureRate < 0 ||\n      tripFailureRate <= 0 ||\n      recoveryFailureRate > tripFailureRate ||\n      tripFailureRate > 1\n    ) {\n      throw new Error(\n        \"ai-router: retry budget rates require 0 <= recoveryFailureRate <= tripFailureRate <= 1 and tripFailureRate > 0\"\n      );\n    }\n    this.now = now;\n    this.windowMs = windowMs;\n    this.maxSamples = maxSamples;\n    this.minSamples = minSamples;\n    this.recoveryFailureRate = recoveryFailureRate;\n    this.tripFailureRate = tripFailureRate;\n  }\n\n  available(): boolean {\n    this.refresh();\n    return !this.tripped;\n  }\n\n  observe(success: boolean): void {\n    const now = this.currentTime();\n    this.prune(now);\n    this.window.push({ at: now, success });\n    if (!success) {\n      this.failures += 1;\n    }\n    if (this.sampleCount() > this.maxSamples) {\n      this.removeOldest();\n      this.compactWindow();\n    }\n    if (this.sampleCount() < this.minSamples) {\n      return;\n    }\n    const failureRate = this.failureRate();\n    this.tripped = this.tripped\n      ? this.remainsTripped(failureRate)\n      : failureRate >= this.tripFailureRate;\n  }\n\n  snapshot(): RetryBudgetState {\n    this.refresh();\n    const samples = this.sampleCount();\n    return {\n      available: !this.tripped,\n      failureRate: samples === 0 ? 0 : this.failures / samples,\n      failures: this.failures,\n      samples,\n      tripped: this.tripped,\n      windowMs: this.windowMs,\n    };\n  }\n\n  private prune(now: number): void {\n    const cutoff = now - this.windowMs;\n    while (this.window[this.windowStart]?.at < cutoff) {\n      this.removeOldest();\n    }\n    this.compactWindow();\n  }\n\n  private failureRate(): number {\n    return this.failures / this.sampleCount();\n  }\n\n  private sampleCount(): number {\n    return this.window.length - this.windowStart;\n  }\n\n  private removeOldest(): void {\n    const oldest = this.window[this.windowStart];\n    if (oldest === undefined) {\n      return;\n    }\n    if (!oldest.success) {\n      this.failures -= 1;\n    }\n    this.windowStart += 1;\n  }\n\n  private compactWindow(): void {\n    if (\n      this.windowStart < WINDOW_COMPACTION_PREFIX ||\n      this.windowStart * 2 < this.window.length\n    ) {\n      return;\n    }\n    this.window.splice(0, this.windowStart);\n    this.windowStart = 0;\n  }\n\n  private remainsTripped(failureRate: number): boolean {\n    return this.recoveryFailureRate === 0\n      ? failureRate > 0\n      : failureRate >= this.recoveryFailureRate;\n  }\n\n  private refresh(): void {\n    this.prune(this.currentTime());\n    if (this.sampleCount() < this.minSamples) {\n      this.tripped = false;\n      return;\n    }\n    const failureRate = this.failureRate();\n    this.tripped = this.tripped\n      ? this.remainsTripped(failureRate)\n      : failureRate >= this.tripFailureRate;\n  }\n\n  private currentTime(): number {\n    let current: number;\n    try {\n      current = this.now();\n      if (consumeGenuinePromise(current)) {\n        throw new Error(\"async retry-budget clock is unsupported\");\n      }\n    } catch {\n      return this.lastNow ?? 0;\n    }\n    if (!Number.isSafeInteger(current) || current < 0) {\n      return this.lastNow ?? 0;\n    }\n    if (this.lastNow !== undefined && current < this.lastNow) {\n      const adjustment = current - this.lastNow;\n      for (let index = this.windowStart; index < this.window.length; index++) {\n        const sample = this.window[index];\n        if (sample !== undefined) {\n          sample.at += adjustment;\n        }\n      }\n    }\n    this.lastNow = current;\n    return current;\n  }\n}\n","import { consumeGenuinePromise } from \"./runtime-types\";\nimport type { RouterOrderingToken } from \"./types\";\n\nconst MAX_DATE_TIMESTAMP_MS = 8_640_000_000_000_000;\nlet fallbackOrderingIdCounter = 0;\n\nfunction createOrderingId(): string {\n  try {\n    const value = crypto.randomUUID();\n    if (consumeGenuinePromise(value)) {\n      throw new Error(\"async UUID entropy is unsupported\");\n    }\n    if (typeof value === \"string\" && value.length >= 16) {\n      return value.replaceAll(\"-\", \"\").slice(0, 16);\n    }\n  } catch {\n    // Continue to process-local entropy and finally a deterministic counter.\n  }\n  try {\n    const first = Math.random();\n    const second = Math.random();\n    const asyncFirst = consumeGenuinePromise(first);\n    const asyncSecond = consumeGenuinePromise(second);\n    if (\n      !(asyncFirst || asyncSecond) &&\n      Number.isFinite(first) &&\n      first >= 0 &&\n      first < 1 &&\n      Number.isFinite(second) &&\n      second >= 0 &&\n      second < 1\n    ) {\n      return `${first.toString(36).slice(2, 10)}${second\n        .toString(36)\n        .slice(2, 10)}`.padEnd(16, \"0\");\n    }\n  } catch {\n    // A hostile random source cannot prevent ordering-source construction.\n  }\n  fallbackOrderingIdCounter =\n    fallbackOrderingIdCounter >= Number.MAX_SAFE_INTEGER\n      ? 1\n      : fallbackOrderingIdCounter + 1;\n  return `local${fallbackOrderingIdCounter.toString(36)}`.padEnd(16, \"0\");\n}\n\nexport class OrderingTokenSource {\n  readonly orderingId = createOrderingId();\n  lastOrderingMs = 0;\n  orderingCounter = 0;\n\n  next(): RouterOrderingToken {\n    let wallClock = this.lastOrderingMs;\n    try {\n      const sampled = Date.now();\n      if (consumeGenuinePromise(sampled)) {\n        throw new Error(\"async ordering clock is unsupported\");\n      }\n      if (\n        Number.isSafeInteger(sampled) &&\n        sampled >= 0 &&\n        sampled <= MAX_DATE_TIMESTAMP_MS\n      ) {\n        wallClock = sampled;\n      }\n    } catch {\n      // Continue the logical counter when the wall clock is unavailable.\n    }\n    if (wallClock > this.lastOrderingMs) {\n      this.lastOrderingMs = wallClock;\n      this.orderingCounter = 0;\n    } else if (this.orderingCounter >= 999_999) {\n      this.lastOrderingMs += 1;\n      this.orderingCounter = 0;\n    } else {\n      this.orderingCounter += 1;\n    }\n    return [\n      \"v1\",\n      String(this.lastOrderingMs).padStart(13, \"0\"),\n      this.orderingId,\n      String(this.orderingCounter).padStart(6, \"0\"),\n    ].join(\":\");\n  }\n}\n","import {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  isPlainObjectValue,\n} from \"./runtime-types\";\nimport type { CooldownOption } from \"./types\";\n\nconst DEFAULT_RESET_INTERVAL = 180_000; // 3 minutes\n\nconst DURATION_RE = /^(\\d+(?:\\.\\d+)?)(ms|s|m|h)$/;\nconst UNIT_MS: Record<string, number> = {\n  ms: 1,\n  s: 1000,\n  m: 60_000,\n  h: 3_600_000,\n};\n\nfunction validInterval(value: number): number {\n  const rounded = Math.ceil(value);\n  if (!Number.isFinite(value) || value <= 0 || !Number.isSafeInteger(rounded)) {\n    throw new Error(\n      \"ai-router: invalid cooldown interval (must be a positive safe duration)\"\n    );\n  }\n  // JavaScript timers truncate fractional milliseconds. Preserve the meaning\n  // of every positive configured interval instead of silently turning values\n  // such as `0.1ms` into an immediate (0ms) timer.\n  return rounded;\n}\n\n/** Parse a duration string like `'500ms'`, `'30s'`, `'1m'`, `'2h'` to milliseconds. */\nexport function parseDuration(value: string): number {\n  const match = DURATION_RE.exec(value.trim());\n  if (match === null) {\n    throw new Error(\n      `ai-router: invalid duration \"${value}\" (use e.g. '500ms', '30s', '1m', '2h')`\n    );\n  }\n  return Number(match[1]) * UNIT_MS[match[2]];\n}\n\n/**\n * Per-logical-id sticky+reset state. Disabled by default — a {@link CooldownState}\n * is only constructed when `createRouter`'s `cooldown` option is set.\n *\n * It tracks an absolute index into the FULL (unfiltered) candidate array. After\n * the router switches away from the primary, that survivor stays sticky so the\n * next request skips the known-down primary; once `modelResetInterval` ms have\n * elapsed since the switch, the next request re-probes the primary.\n *\n * The `now` clock is injectable so tests can advance time deterministically.\n */\nexport class CooldownState {\n  private activeFullIndex = 0;\n  private lastReset: number;\n  private readonly cfg: { modelResetInterval: number };\n  private readonly now: () => number;\n  private lastValidNow = 0;\n\n  constructor(\n    cfg: { modelResetInterval: number },\n    now: () => number = Date.now\n  ) {\n    this.cfg = cfg;\n    this.now = now;\n    this.lastReset = this.clockNow();\n  }\n\n  /** Reset to the primary if the sticky window has elapsed. Call once per selection. */\n  checkAndReset(): void {\n    const now = this.clockNow();\n    if (now < this.lastReset) {\n      // Wall-clock rollback must not extend a local sticky window by the size\n      // of the clock correction. Restart the interval from the new clock.\n      this.lastReset = now;\n    }\n    if (\n      this.activeFullIndex !== 0 &&\n      now - this.lastReset >= this.cfg.modelResetInterval\n    ) {\n      this.activeFullIndex = 0;\n      this.lastReset = now;\n    }\n  }\n\n  /** The full-array index the next request should start probing from. */\n  current(): number {\n    return this.activeFullIndex;\n  }\n\n  /**\n   * Commit a survivor. Starting the reset window only when leaving the primary\n   * means a healthy primary keeps serving and the interval is measured from the\n   * last real switch away from it.\n   */\n  advanceTo(fullIndex: number): void {\n    if (fullIndex !== this.activeFullIndex) {\n      this.activeFullIndex = fullIndex;\n      if (fullIndex !== 0) {\n        this.lastReset = this.clockNow();\n      }\n    }\n  }\n\n  private clockNow(): number {\n    try {\n      const value = this.now();\n      if (consumeGenuinePromise(value)) {\n        throw new Error(\"async cooldown clock is unsupported\");\n      }\n      if (\n        Number.isFinite(value) &&\n        value >= 0 &&\n        value <= Number.MAX_SAFE_INTEGER\n      ) {\n        this.lastValidNow = value;\n        return value;\n      }\n    } catch {\n      // Optional sticky routing must not fail when its clock is unavailable.\n    }\n    return this.lastValidNow;\n  }\n}\n\n/** Normalize the `cooldown` option to a concrete config, or `undefined` when off. */\nexport function resolveCooldown(\n  opt?: CooldownOption\n): { modelResetInterval: number } | undefined {\n  if (consumeGenuinePromise(opt)) {\n    throw new Error(\"ai-router: cooldown must be synchronous\");\n  }\n  if (opt === undefined || opt === false || opt === 0) {\n    return; // false / undefined / 0\n  }\n  if (opt === true) {\n    return { modelResetInterval: DEFAULT_RESET_INTERVAL };\n  }\n  if (typeof opt === \"number\") {\n    return { modelResetInterval: validInterval(opt) };\n  }\n  if (typeof opt === \"string\") {\n    return { modelResetInterval: validInterval(parseDuration(opt)) };\n  }\n  if (!isPlainObjectValue(opt)) {\n    throw new Error(\n      \"ai-router: cooldown must be a boolean, duration, or config object\"\n    );\n  }\n  consumeOwnDataPromiseFields(opt, [\"modelResetInterval\"]);\n  const modelResetInterval = opt.modelResetInterval;\n  if (consumeGenuinePromise(modelResetInterval)) {\n    throw new Error(\"ai-router: cooldown must be synchronous\");\n  }\n  return {\n    modelResetInterval: validInterval(\n      modelResetInterval ?? DEFAULT_RESET_INTERVAL\n    ),\n  };\n}\n","import { addCapturedAbortListener } from \"./abort-signal\";\nimport { parseDuration } from \"./cooldown\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\n\nconst MAX_TIMEOUT_MS = 86_400_000;\nconst MAX_MONOTONIC_MS = Number.MAX_SAFE_INTEGER - MAX_TIMEOUT_MS;\n\nimport type { Duration } from \"./types\";\n\nexport function isSignalAborted(signal: AbortSignal | undefined): boolean {\n  try {\n    const aborted = signal?.aborted;\n    return !consumeGenuinePromise(aborted) && aborted === true;\n  } catch {\n    return false;\n  }\n}\n\nexport function signalAbortReason(signal: AbortSignal | undefined): unknown {\n  try {\n    const reason = signal?.reason;\n    return consumeGenuinePromise(reason)\n      ? new DOMException(\"aborted\", \"AbortError\")\n      : (reason ?? new DOMException(\"aborted\", \"AbortError\"));\n  } catch {\n    return new DOMException(\"aborted\", \"AbortError\");\n  }\n}\n\n/** Monotonic clock for elapsed-time budgets; wall-clock jumps must not alter them. */\nexport function monotonicNow(): number {\n  try {\n    const value = globalThis.performance?.now();\n    if (consumeGenuinePromise(value)) {\n      throw new Error(\"async performance clock is unsupported\");\n    }\n    if (\n      typeof value === \"number\" &&\n      Number.isFinite(value) &&\n      value >= 0 &&\n      value <= MAX_MONOTONIC_MS\n    ) {\n      return value;\n    }\n  } catch {\n    // Older/embedded runtimes may not expose a usable Performance clock.\n  }\n  try {\n    const value = Date.now();\n    if (consumeGenuinePromise(value)) {\n      throw new Error(\"async wall clock is unsupported\");\n    }\n    if (Number.isFinite(value) && value >= 0 && value <= MAX_MONOTONIC_MS) {\n      return value;\n    }\n  } catch {\n    // A hostile clock must not make timeout bookkeeping throw.\n  }\n  return 0;\n}\n\nexport function clearTimerSafely(\n  timer: ReturnType<typeof setTimeout> | undefined\n): void {\n  if (timer === undefined) {\n    return;\n  }\n  try {\n    consumeGenuinePromise(clearTimeout(timer));\n  } catch {\n    // Platform cleanup must not replace an operation's settled outcome.\n  }\n}\n\nexport class RouterTimerError extends Error {\n  readonly code = \"timer_unavailable\";\n\n  constructor(cause: unknown) {\n    super(\"ai-router: platform timer is unavailable\", { cause });\n    this.name = \"RouterTimerError\";\n  }\n}\n\nexport class RouterCancellationError extends Error {\n  readonly code = \"cancellation_unavailable\";\n\n  constructor(cause: unknown) {\n    super(\"ai-router: cancellation infrastructure is unavailable\", { cause });\n    this.name = \"RouterCancellationError\";\n  }\n}\n\nexport function createAbortControllerSafely(): AbortController {\n  try {\n    return new AbortController();\n  } catch (error) {\n    throw new RouterCancellationError(error);\n  }\n}\n\nexport function abortControllerSafely(\n  controller: AbortController,\n  reason: unknown\n): void {\n  try {\n    const abort = Reflect.get(controller, \"abort\");\n    if (consumeGenuinePromise(abort) || typeof abort !== \"function\") {\n      return;\n    }\n    consumeGenuinePromise(Reflect.apply(abort, controller, [reason]));\n  } catch {\n    // A broken cancellation primitive must not prevent promise settlement.\n  }\n}\n\nexport function scheduleTimer(\n  callback: () => void,\n  delay: number\n): ReturnType<typeof setTimeout> {\n  try {\n    const timer = setTimeout(callback, delay);\n    if (consumeGenuinePromise(timer)) {\n      throw new Error(\"timer registration returned a Promise\");\n    }\n    return timer;\n  } catch (error) {\n    throw new RouterTimerError(error);\n  }\n}\n\nfunction randomUnit(): number {\n  try {\n    const value = Math.random();\n    if (consumeGenuinePromise(value)) {\n      return 0;\n    }\n    return Number.isFinite(value) && value >= 0 && value < 1 ? value : 0;\n  } catch {\n    return 0;\n  }\n}\n\nexport class RouterTimeoutError extends Error {\n  readonly code: \"attempt_timeout\" | \"first_content_timeout\" | \"total_timeout\";\n  readonly durationMs: number;\n\n  constructor(code: RouterTimeoutError[\"code\"], durationMs: number) {\n    super(`ai-router: ${code.replaceAll(\"_\", \" \")} after ${durationMs}ms`);\n    this.code = code;\n    this.durationMs = durationMs;\n    this.name = \"RouterTimeoutError\";\n  }\n}\n\nexport function durationMs(\n  value: Duration | number | undefined\n): number | undefined {\n  if (value === undefined) {\n    return;\n  }\n  const resolved = typeof value === \"number\" ? value : parseDuration(value);\n  if (\n    !Number.isFinite(resolved) ||\n    resolved <= 0 ||\n    resolved > MAX_TIMEOUT_MS\n  ) {\n    throw new Error(\n      \"ai-router: timeout durations must be positive and at most 24h\"\n    );\n  }\n  // Node and browsers truncate fractional timer delays. Round up so a\n  // positive timeout can never become an accidental immediate timeout.\n  return Math.ceil(resolved);\n}\n\nexport function effectiveTimeout(\n  attemptTimeout: number | undefined,\n  remaining: number | undefined\n): number | undefined {\n  if (attemptTimeout === undefined) {\n    return remaining;\n  }\n  if (remaining === undefined) {\n    return attemptTimeout;\n  }\n  return Math.min(attemptTimeout, remaining);\n}\n\nexport async function jitteredBackoff(\n  maximumMs: number | undefined,\n  signal?: AbortSignal\n): Promise<void> {\n  if (maximumMs === undefined || maximumMs <= 0) {\n    return;\n  }\n  if (isSignalAborted(signal)) {\n    throw signalAbortReason(signal);\n  }\n  const delay = Math.floor(randomUnit() * maximumMs);\n  await new Promise<void>((resolve, reject) => {\n    let settled = false;\n    let removeSignalAbort: (() => void) | undefined;\n    const onAbort = () => {\n      if (settled) {\n        return;\n      }\n      settled = true;\n      clearTimerSafely(timer);\n      removeSignalAbort?.();\n      reject(signalAbortReason(signal));\n    };\n    const timer = scheduleTimer(() => {\n      if (settled) {\n        return;\n      }\n      settled = true;\n      removeSignalAbort?.();\n      resolve();\n    }, delay);\n    if (settled) {\n      return;\n    }\n    try {\n      if (signal !== undefined) {\n        removeSignalAbort = addCapturedAbortListener(signal, onAbort);\n        if (settled) {\n          removeSignalAbort();\n          return;\n        }\n      }\n      if (isSignalAborted(signal)) {\n        onAbort();\n      }\n    } catch (error) {\n      if (settled) {\n        return;\n      }\n      settled = true;\n      clearTimerSafely(timer);\n      removeSignalAbort?.();\n      reject(error);\n    }\n  });\n}\n","import { RetryBudget } from \"./budget\";\nimport { OrderingTokenSource } from \"./ordering\";\nimport type { NormalizedEntry } from \"./router-entry\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  isDenseArray,\n  isPlainObjectValue,\n} from \"./runtime-types\";\nimport { durationMs } from \"./timeout\";\nimport type { Modality, RetryBudgetConfig, RouterHealthStore } from \"./types\";\n\nexport function validateAdaptiveConcurrency(entry: NormalizedEntry): void {\n  const value = entry.adaptiveConcurrency;\n  if (value === undefined || value === false || value === true) {\n    return;\n  }\n  if (!isPlainObjectValue(value)) {\n    throw new Error(\n      \"ai-router: adaptiveConcurrency must be a boolean or config object\"\n    );\n  }\n  const min = value.min ?? 1;\n  const max = value.max ?? Math.max(entry.maxConcurrency ?? 1, 16);\n  const initial = value.initial ?? entry.maxConcurrency ?? min;\n  const increase = value.increaseAfterSuccesses ?? 10;\n  if (\n    ![min, max, initial, increase].every(\n      (item) => Number.isSafeInteger(item) && item > 0\n    ) ||\n    min > initial ||\n    initial > max\n  ) {\n    throw new Error(\n      \"ai-router: adaptiveConcurrency requires positive integers with min <= initial <= max\"\n    );\n  }\n}\n\nexport const VALID_MODALITIES = new Set<Modality>([\n  \"text\",\n  \"image\",\n  \"video\",\n  \"audio\",\n  \"pdf\",\n  \"file\",\n]);\nexport const MAX_HEALTH_IDENTITY_LENGTH = 256;\n\nexport function validateHealthIdentity(value: string, name: string): void {\n  if (value.trim().length === 0) {\n    throw new Error(`ai-router: ${name} must not be empty`);\n  }\n  if (value.length > MAX_HEALTH_IDENTITY_LENGTH) {\n    throw new Error(\n      `ai-router: ${name} must be at most ${MAX_HEALTH_IDENTITY_LENGTH} characters`\n    );\n  }\n}\n\nexport function validateEntryConfiguration(entry: NormalizedEntry): void {\n  validateAdaptiveConcurrency(entry);\n  if (entry.healthKey !== undefined && typeof entry.healthKey !== \"string\") {\n    throw new Error(\"ai-router: healthKey must be a string\");\n  }\n  if (\n    entry.providerFamily !== undefined &&\n    typeof entry.providerFamily !== \"string\"\n  ) {\n    throw new Error(\"ai-router: providerFamily must be a string\");\n  }\n  if (entry.healthKey !== undefined) {\n    validateHealthIdentity(entry.healthKey, \"healthKey\");\n  }\n  if (entry.providerFamily !== undefined) {\n    validateHealthIdentity(entry.providerFamily, \"providerFamily\");\n  }\n  if (\n    entry.supports !== undefined &&\n    !(\n      Array.isArray(entry.supports) &&\n      entry.supports.length <= VALID_MODALITIES.size &&\n      isDenseArray(entry.supports) &&\n      entry.supports.every((modality) => VALID_MODALITIES.has(modality))\n    )\n  ) {\n    throw new Error(\"ai-router: supports contains an unknown modality\");\n  }\n}\n\nexport function admissionSignature(entry: NormalizedEntry): string {\n  if (\n    entry.adaptiveConcurrency === undefined ||\n    entry.adaptiveConcurrency === false\n  ) {\n    return `fixed:${entry.maxConcurrency ?? \"unbounded\"}`;\n  }\n  const config =\n    typeof entry.adaptiveConcurrency === \"object\"\n      ? entry.adaptiveConcurrency\n      : {};\n  const min = config.min ?? 1;\n  const max = config.max ?? Math.max(entry.maxConcurrency ?? 1, 16);\n  return [\n    \"adaptive\",\n    config.initial ?? entry.maxConcurrency ?? min,\n    min,\n    max,\n    config.increaseAfterSuccesses ?? 10,\n  ].join(\":\");\n}\n\nexport function validateSharedAdmission(entries: NormalizedEntry[]): void {\n  const signatures = new Map<string, string>();\n  for (const entry of entries) {\n    if (entry.healthKey === undefined) {\n      continue;\n    }\n    const signature = admissionSignature(entry);\n    const existing = signatures.get(entry.healthKey);\n    if (existing !== undefined && existing !== signature) {\n      throw new Error(\n        `ai-router: candidates sharing healthKey \"${entry.healthKey}\" must use identical concurrency settings`\n      );\n    }\n    signatures.set(entry.healthKey, signature);\n  }\n}\n\nexport function resolveHealthNamespace(\n  logicalId: string,\n  namespace: string | undefined\n): string {\n  if (namespace !== undefined) {\n    if (typeof namespace !== \"string\") {\n      throw new Error(\"ai-router: healthNamespace must be a string\");\n    }\n    validateHealthIdentity(namespace, \"healthNamespace\");\n  }\n  const logicalSegment = encodeURIComponent(logicalId);\n  return namespace === undefined\n    ? `logical:${logicalSegment}`\n    : `scoped:${encodeURIComponent(namespace)}:${logicalSegment}`;\n}\n\nexport function resolveSharedHealthNamespace(\n  logicalId: string,\n  namespace: string | undefined\n): string {\n  return namespace === undefined\n    ? `logical:${encodeURIComponent(logicalId)}`\n    : `scope:${encodeURIComponent(namespace)}`;\n}\n\nexport function createOrderingTokenSource(): OrderingTokenSource {\n  return new OrderingTokenSource();\n}\n\nexport const orderingSources = new WeakMap<\n  RouterHealthStore,\n  OrderingTokenSource\n>();\n\nexport function orderingTokenSourceFor(\n  healthStore: RouterHealthStore\n): OrderingTokenSource {\n  const existing = orderingSources.get(healthStore);\n  if (existing !== undefined) {\n    return existing;\n  }\n  const source = createOrderingTokenSource();\n  orderingSources.set(healthStore, source);\n  return source;\n}\n\nexport function isSignalAborted(signal: AbortSignal | undefined): boolean {\n  try {\n    const aborted = signal?.aborted;\n    return !consumeGenuinePromise(aborted) && aborted === true;\n  } catch {\n    // An unreadable synthetic signal cannot prove that cancellation occurred.\n    return false;\n  }\n}\n\nexport function throwIfAborted(signal: AbortSignal | undefined): void {\n  if (!isSignalAborted(signal)) {\n    return;\n  }\n  let reason: unknown;\n  try {\n    reason = signal?.reason;\n    if (consumeGenuinePromise(reason)) {\n      throw new DOMException(\"aborted\", \"AbortError\");\n    }\n  } catch {\n    // Accessing a hostile reason may itself throw. Preserve cancellation with\n    // a stable AbortError instead of leaking the accessor failure.\n    throw new DOMException(\"aborted\", \"AbortError\");\n  }\n  throw reason ?? new DOMException(\"aborted\", \"AbortError\");\n}\n\nexport function createRetryBudget(\n  config: boolean | RetryBudgetConfig | undefined\n): RetryBudget | undefined {\n  if (config === undefined || config === false) {\n    return;\n  }\n  if (config === true) {\n    return new RetryBudget();\n  }\n  if (consumeGenuinePromise(config)) {\n    throw new Error(\"ai-router: retryBudget must be synchronous\");\n  }\n  if (!isPlainObjectValue(config)) {\n    throw new Error(\n      \"ai-router: retryBudget must be a boolean or config object\"\n    );\n  }\n  const keys = [\n    \"maxSamples\",\n    \"minSamples\",\n    \"recoveryFailureRate\",\n    \"tripFailureRate\",\n    \"window\",\n  ] as const;\n  consumeOwnDataPromiseFields(config, keys);\n  const snapshot = {\n    maxSamples: config.maxSamples,\n    minSamples: config.minSamples,\n    recoveryFailureRate: config.recoveryFailureRate,\n    tripFailureRate: config.tripFailureRate,\n    window: config.window,\n  };\n  for (const field of Object.values(snapshot)) {\n    if (consumeGenuinePromise(field)) {\n      throw new Error(\"ai-router: retryBudget must be synchronous\");\n    }\n  }\n  return new RetryBudget(\n    Date.now,\n    durationMs(snapshot.window as RetryBudgetConfig[\"window\"]) ?? 60_000,\n    snapshot as RetryBudgetConfig\n  );\n}\n","import { addCapturedAbortListener } from \"./abort-signal\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\nimport {\n  abortControllerSafely,\n  clearTimerSafely,\n  createAbortControllerSafely,\n  isSignalAborted,\n  RouterTimeoutError,\n  scheduleTimer,\n  signalAbortReason,\n} from \"./timeout\";\n\nexport async function withTimeout<T>(\n  operation: (signal: AbortSignal | undefined) => PromiseLike<T>,\n  timeoutMs: number | undefined,\n  callerSignal: AbortSignal | undefined,\n  code: RouterTimeoutError[\"code\"] = \"attempt_timeout\",\n  diagnosticDurationMs: number | undefined = timeoutMs,\n  onLateResolve?: (value: T) => unknown\n): Promise<T> {\n  if (isSignalAborted(callerSignal)) {\n    throw signalAbortReason(callerSignal);\n  }\n  const invoke = (signal: AbortSignal | undefined): Promise<T> =>\n    new Promise<T>((resolve, reject) => {\n      try {\n        resolve(operation(signal));\n      } catch (error) {\n        reject(error);\n      }\n    });\n  if (timeoutMs === undefined && callerSignal === undefined) {\n    return await invoke(undefined);\n  }\n  const controller = createAbortControllerSafely();\n  const signal = controller.signal;\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  let removeCallerAbort: (() => void) | undefined;\n  let callerAbortReason: unknown;\n  let callerAbortObserved = false;\n  let rejectTimeout: ((error: unknown) => void) | undefined;\n  const timeout = new Promise<never>((_, reject) => {\n    rejectTimeout = reject;\n  });\n  if (timeoutMs !== undefined) {\n    timer = scheduleTimer(() => {\n      const error = new RouterTimeoutError(\n        code,\n        diagnosticDurationMs ?? timeoutMs\n      );\n      abortControllerSafely(controller, error);\n      rejectTimeout?.(error);\n    }, timeoutMs);\n  }\n  const callerAbort =\n    callerSignal === undefined\n      ? new Promise<never>(() => undefined)\n      : new Promise<never>((_, reject) => {\n          const onAbort = () => {\n            if (callerAbortObserved) {\n              return;\n            }\n            callerAbortObserved = true;\n            callerAbortReason = signalAbortReason(callerSignal);\n            abortControllerSafely(controller, callerAbortReason);\n            reject(callerAbortReason);\n          };\n          try {\n            removeCallerAbort = addCapturedAbortListener(callerSignal, onAbort);\n            if (isSignalAborted(callerSignal)) {\n              onAbort();\n            }\n          } catch (error) {\n            abortControllerSafely(controller, error);\n            reject(error);\n          }\n        });\n  let raceSettled = false;\n  const operationPromise = Promise.resolve()\n    .then(() => {\n      if (isSignalAborted(signal)) {\n        throw signalAbortReason(signal);\n      }\n      return invoke(signal);\n    })\n    .then((value) => {\n      if (raceSettled) {\n        try {\n          consumeGenuinePromise(onLateResolve?.(value));\n        } catch {\n          // Cleanup is best-effort and must never become an unhandled rejection.\n        }\n      }\n      return value;\n    });\n  try {\n    return await Promise.race([operationPromise, timeout, callerAbort]);\n  } catch (error) {\n    if (callerAbortObserved) {\n      throw callerAbortReason;\n    }\n    if (isSignalAborted(callerSignal)) {\n      callerAbortObserved = true;\n      callerAbortReason = signalAbortReason(callerSignal);\n      throw callerAbortReason;\n    }\n    throw error;\n  } finally {\n    raceSettled = true;\n    clearTimerSafely(timer);\n    removeCallerAbort?.();\n  }\n}\n","import { OrderingTokenSource } from \"./ordering\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\n\nexport const FRAMING_PARTS: ReadonlySet<string> = new Set([\n  \"stream-start\",\n  \"response-metadata\",\n  \"text-start\",\n  \"text-end\",\n  \"reasoning-start\",\n  \"reasoning-end\",\n  \"tool-input-start\",\n  \"tool-input-end\",\n  \"raw\",\n]);\n\nexport function streamSignalAborted(signal: AbortSignal | undefined): boolean {\n  try {\n    const aborted = signal?.aborted;\n    return !consumeGenuinePromise(aborted) && aborted === true;\n  } catch {\n    return false;\n  }\n}\n\nexport function streamAbortReason(signal: AbortSignal | undefined): unknown {\n  try {\n    const reason = signal?.reason;\n    return consumeGenuinePromise(reason)\n      ? new DOMException(\"aborted\", \"AbortError\")\n      : (reason ?? new DOMException(\"aborted\", \"AbortError\"));\n  } catch {\n    return new DOMException(\"aborted\", \"AbortError\");\n  }\n}\n\nexport function streamCancelReason(reason: unknown): unknown {\n  return consumeGenuinePromise(reason)\n    ? new DOMException(\"aborted\", \"AbortError\")\n    : reason;\n}\nexport const MAX_PRELUDE_PARTS = 1024;\nexport const MAX_PRELUDE_TEXT_CHARS = 1_048_576;\nexport const MAX_PRELUDE_METADATA_NODES = 10_000;\nexport const MAX_STREAM_WARNINGS = 1024;\nexport const MAX_STREAM_WARNING_CHARS = 1_048_576;\nexport const MAX_STREAM_WARNING_FIELD_LENGTH = 65_536;\nexport const MAX_STREAM_JSON_CONTAINERS = 50_000;\nexport const MAX_STREAM_JSON_CHARACTERS = 4_194_304;\nexport const MAX_STREAM_METADATA_CHARACTERS = 4_194_304;\nexport const MAX_STREAM_METADATA_FIELD_LENGTH = 65_536;\nexport const MAX_STRICT_TRACKED_IDS = 1024;\nexport const MAX_STREAM_CANDIDATES = 10_000;\nexport const MAX_STREAM_DURATION_MS = 86_400_000;\nexport const fallbackOrderingTokens = new OrderingTokenSource();\nexport const ORDERING_TOKEN_RE = /^v1:(\\d{13,}):([^:]+):(\\d{6})$/;\nexport const FINISH_REASONS = new Set([\n  \"stop\",\n  \"length\",\n  \"content-filter\",\n  \"tool-calls\",\n  \"error\",\n  \"other\",\n]);\nexport const PROVIDER_METADATA_PARTS = new Set([\n  \"text-start\",\n  \"text-delta\",\n  \"text-end\",\n  \"reasoning-start\",\n  \"reasoning-delta\",\n  \"reasoning-end\",\n  \"tool-input-start\",\n  \"tool-input-delta\",\n  \"tool-input-end\",\n  \"tool-call\",\n  \"tool-result\",\n  \"tool-approval-request\",\n  \"custom\",\n  \"file\",\n  \"reasoning-file\",\n  \"source\",\n  \"finish\",\n]);\nexport const STREAM_PART_FIELDS: Readonly<Record<string, readonly string[]>> = {\n  \"text-start\": [\"id\", \"providerMetadata\"],\n  \"text-delta\": [\"id\", \"delta\", \"providerMetadata\"],\n  \"text-end\": [\"id\", \"providerMetadata\"],\n  \"reasoning-start\": [\"id\", \"providerMetadata\"],\n  \"reasoning-delta\": [\"id\", \"delta\", \"providerMetadata\"],\n  \"reasoning-end\": [\"id\", \"providerMetadata\"],\n  \"tool-input-start\": [\n    \"id\",\n    \"toolName\",\n    \"providerMetadata\",\n    \"providerExecuted\",\n    \"dynamic\",\n    \"title\",\n  ],\n  \"tool-input-delta\": [\"id\", \"delta\", \"providerMetadata\"],\n  \"tool-input-end\": [\"id\", \"providerMetadata\"],\n  \"tool-call\": [\n    \"toolCallId\",\n    \"toolName\",\n    \"input\",\n    \"providerExecuted\",\n    \"dynamic\",\n    \"providerMetadata\",\n  ],\n  \"tool-result\": [\n    \"toolCallId\",\n    \"toolName\",\n    \"result\",\n    \"isError\",\n    \"preliminary\",\n    \"dynamic\",\n    \"providerMetadata\",\n  ],\n  \"tool-approval-request\": [\"approvalId\", \"toolCallId\", \"providerMetadata\"],\n  custom: [\"kind\", \"providerMetadata\"],\n  file: [\"mediaType\", \"data\", \"providerMetadata\"],\n  \"reasoning-file\": [\"mediaType\", \"data\", \"providerMetadata\"],\n  source: [\n    \"sourceType\",\n    \"id\",\n    \"url\",\n    \"title\",\n    \"mediaType\",\n    \"filename\",\n    \"providerMetadata\",\n  ],\n  \"stream-start\": [\"warnings\"],\n  \"response-metadata\": [\"id\", \"timestamp\", \"modelId\"],\n  finish: [\"usage\", \"finishReason\", \"providerMetadata\"],\n  raw: [\"rawValue\"],\n  error: [\"error\"],\n};\n\nexport class AsyncStreamFieldError extends Error {}\n\nexport function streamField(value: object, key: string | number): unknown {\n  const field = Reflect.get(value, key);\n  if (consumeGenuinePromise(field)) {\n    throw new AsyncStreamFieldError(\"async stream part fields are unsupported\");\n  }\n  return field;\n}\n\nexport function streamDiscriminant(\n  value: object,\n  key: string,\n  siblingKeys: readonly string[]\n): unknown {\n  try {\n    return streamField(value, key);\n  } catch (error) {\n    consumeOwnDataPromiseFields(value, [key, ...siblingKeys]);\n    throw error;\n  }\n}\n\nexport function captureStreamSiblings(tasks: readonly (() => void)[]): void {\n  let asyncFailure: AsyncStreamFieldError | undefined;\n  for (const task of tasks) {\n    try {\n      task();\n    } catch (error) {\n      if (!(error instanceof AsyncStreamFieldError)) {\n        throw error;\n      }\n      asyncFailure ??= error;\n    }\n  }\n  if (asyncFailure !== undefined) {\n    throw asyncFailure;\n  }\n}\n\nexport const ASYNC_STREAM_FIELD = Symbol(\"async stream field\");\n\nexport function captureStreamSiblingValue(\n  task: () => unknown,\n  failure: { error?: AsyncStreamFieldError }\n): unknown | typeof ASYNC_STREAM_FIELD {\n  try {\n    return task();\n  } catch (error) {\n    if (!(error instanceof AsyncStreamFieldError)) {\n      throw error;\n    }\n    failure.error ??= error;\n    return ASYNC_STREAM_FIELD;\n  }\n}\n\nexport function snapshotRecordFields(\n  value: object,\n  type: unknown,\n  fields: readonly string[],\n  failure?: { error?: AsyncStreamFieldError }\n): Record<string, unknown> {\n  consumeOwnDataPromiseFields(value, fields);\n  const snapshot: Record<string, unknown> = { type };\n  const capturedFailure = failure ?? {};\n  for (const field of fields) {\n    try {\n      snapshot[field] = streamField(value, field);\n    } catch (error) {\n      if (!(error instanceof AsyncStreamFieldError)) {\n        throw error;\n      }\n      capturedFailure.error ??= error;\n    }\n  }\n  if (failure === undefined && capturedFailure.error !== undefined) {\n    throw capturedFailure.error;\n  }\n  return snapshot;\n}\n\nexport function snapshotStreamFinishReason(value: unknown): unknown {\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  const snapshot = snapshotRecordFields(value, undefined, [\"raw\", \"unified\"]);\n  return { raw: snapshot.raw, unified: snapshot.unified };\n}\n","import type { LanguageModelV4 } from \"@ai-sdk/provider\";\nimport type { HealthProbeLease, HealthTransition } from \"./health-store\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\nimport { MAX_STREAM_CANDIDATES } from \"./stream-part-fields\";\nimport type { ResolvedEntry } from \"./stream-types\";\nimport type { FailureClassification, ProviderEntry } from \"./types\";\n\nexport function snapshotResolvedEntries(value: unknown): ResolvedEntry[] {\n  let array = false;\n  try {\n    array = Array.isArray(value);\n  } catch {\n    // A revoked Proxy is not a usable candidate container.\n  }\n  if (!array) {\n    throw new TypeError(\"ai-router: stream candidates must be an array\");\n  }\n  let length: unknown;\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(value, \"length\");\n    length =\n      descriptor !== undefined && \"value\" in descriptor\n        ? descriptor.value\n        : undefined;\n  } catch {\n    throw new TypeError(\"ai-router: stream candidates length is unavailable\");\n  }\n  if (\n    typeof length !== \"number\" ||\n    !Number.isSafeInteger(length) ||\n    length < 1 ||\n    length > MAX_STREAM_CANDIDATES\n  ) {\n    throw new TypeError(\n      `ai-router: stream candidates must contain 1-${MAX_STREAM_CANDIDATES} entries`\n    );\n  }\n  const snapshot: ResolvedEntry[] = [];\n  for (let index = 0; index < length; index++) {\n    let candidate: unknown;\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n      candidate =\n        descriptor !== undefined && \"value\" in descriptor\n          ? descriptor.value\n          : undefined;\n    } catch {\n      throw new TypeError(\n        `ai-router: stream candidate ${index} is unavailable`\n      );\n    }\n    snapshot.push(snapshotResolvedEntry(candidate, index));\n  }\n  return snapshot;\n}\n\nexport function ownCandidateField(value: object, key: string): unknown {\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(value, key);\n    return descriptor !== undefined && \"value\" in descriptor\n      ? descriptor.value\n      : undefined;\n  } catch {\n    return;\n  }\n}\n\nexport function snapshotCandidateProbeLease(\n  value: unknown,\n  index: number\n): HealthProbeLease | undefined {\n  if (value === undefined) {\n    return;\n  }\n  if (consumeGenuinePromise(value)) {\n    throw new TypeError(\n      `ai-router: stream candidate ${index} probe lease is invalid`\n    );\n  }\n  if (typeof value !== \"object\" || value === null) {\n    throw new TypeError(\n      `ai-router: stream candidate ${index} probe lease is invalid`\n    );\n  }\n  const key = ownCandidateField(value, \"key\");\n  const probingUntil = ownCandidateField(value, \"probingUntil\");\n  const source = ownCandidateField(value, \"source\");\n  const asyncKey = consumeGenuinePromise(key);\n  const asyncProbingUntil = consumeGenuinePromise(probingUntil);\n  const asyncSource = consumeGenuinePromise(source);\n  if (\n    asyncKey ||\n    asyncProbingUntil ||\n    asyncSource ||\n    typeof key !== \"string\" ||\n    key.length < 1 ||\n    key.length > 4096 ||\n    typeof probingUntil !== \"number\" ||\n    !Number.isFinite(probingUntil) ||\n    probingUntil < 0 ||\n    (source !== undefined && source !== \"local\")\n  ) {\n    throw new TypeError(\n      `ai-router: stream candidate ${index} probe lease is invalid`\n    );\n  }\n  return {\n    key,\n    probingUntil,\n    ...(source === \"local\" ? { source } : {}),\n  };\n}\n\nexport function consumeCandidateSnapshotPromiseMutations(\n  candidate: ResolvedEntry\n): void {\n  consumeGenuinePromise(ownCandidateField(candidate, \"entry\"));\n  consumeGenuinePromise(ownCandidateField(candidate, \"fullIndex\"));\n  consumeGenuinePromise(ownCandidateField(candidate, \"model\"));\n  try {\n    snapshotCandidateProbeLease(ownCandidateField(candidate, \"probeLease\"), 0);\n  } catch {\n    // Snapshot mutations are discarded; only native Promise consumption matters.\n  }\n}\n\nexport function consumeFailureClassificationPromiseMutations(\n  classification: FailureClassification\n): void {\n  consumeGenuinePromise(ownCandidateField(classification, \"cooldownMs\"));\n  consumeGenuinePromise(ownCandidateField(classification, \"retryAfterMs\"));\n  consumeGenuinePromise(ownCandidateField(classification, \"retryable\"));\n  consumeGenuinePromise(ownCandidateField(classification, \"scope\"));\n  consumeGenuinePromise(ownCandidateField(classification, \"statusCode\"));\n}\n\nexport function validHealthTransitionHookResult(\n  value: unknown\n): HealthTransition | undefined {\n  if (consumeGenuinePromise(value)) {\n    return;\n  }\n  switch (value) {\n    case \"cas-exhausted\":\n    case \"cooling\":\n    case \"deduplicated\":\n    case \"ignored-stale\":\n    case \"recovered\":\n      return value;\n    default:\n      return;\n  }\n}\n\nexport function snapshotResolvedEntry(\n  value: unknown,\n  index: number\n): ResolvedEntry {\n  if (typeof value !== \"object\" || value === null) {\n    throw new TypeError(`ai-router: stream candidate ${index} is invalid`);\n  }\n  const entry = ownCandidateField(value, \"entry\");\n  const fullIndex = ownCandidateField(value, \"fullIndex\");\n  const probeLease = snapshotCandidateProbeLease(\n    ownCandidateField(value, \"probeLease\"),\n    index\n  );\n  let modelDescriptor: PropertyDescriptor | undefined;\n  try {\n    modelDescriptor = Object.getOwnPropertyDescriptor(value, \"model\");\n  } catch {\n    // The common validation below reports a stable candidate error.\n  }\n  const modelValue =\n    modelDescriptor !== undefined && \"value\" in modelDescriptor\n      ? modelDescriptor.value\n      : undefined;\n  const modelGetter = modelDescriptor?.get;\n  if (consumeGenuinePromise(modelValue)) {\n    throw new TypeError(\n      `ai-router: stream candidate ${index} model must be synchronous`\n    );\n  }\n  if (\n    !(\n      ((typeof entry === \"object\" && entry !== null) ||\n        typeof entry === \"function\") &&\n      Number.isSafeInteger(fullIndex)\n    ) ||\n    (fullIndex as number) < 0 ||\n    !(\n      (typeof modelValue === \"object\" && modelValue !== null) ||\n      typeof modelValue === \"function\" ||\n      typeof modelGetter === \"function\"\n    )\n  ) {\n    throw new TypeError(`ai-router: stream candidate ${index} is invalid`);\n  }\n  const snapshot = {\n    entry: entry as ProviderEntry,\n    fullIndex: fullIndex as number,\n    ...(probeLease === undefined ? {} : { probeLease }),\n  } as ResolvedEntry;\n  if (typeof modelGetter === \"function\") {\n    let captured: LanguageModelV4 | undefined;\n    let resolved = false;\n    Object.defineProperty(snapshot, \"model\", {\n      configurable: false,\n      enumerable: true,\n      get() {\n        if (!resolved) {\n          const candidateModel = Reflect.apply(modelGetter, value, []);\n          if (consumeGenuinePromise(candidateModel)) {\n            throw new TypeError(\n              `ai-router: stream candidate ${index} model must be synchronous`\n            );\n          }\n          captured = candidateModel as LanguageModelV4;\n          resolved = true;\n        }\n        return captured as LanguageModelV4;\n      },\n    });\n  } else {\n    Object.defineProperty(snapshot, \"model\", {\n      configurable: false,\n      enumerable: true,\n      value: modelValue as LanguageModelV4,\n      writable: false,\n    });\n  }\n  return snapshot;\n}\n\nexport function snapshotPriorErrors(value: unknown): unknown[] {\n  if (value === undefined) {\n    return [];\n  }\n  let array = false;\n  try {\n    array = Array.isArray(value);\n  } catch {\n    // A revoked Proxy is not a usable prior-error container.\n  }\n  if (!array) {\n    throw new TypeError(\"ai-router: prior stream errors must be an array\");\n  }\n  let length: unknown;\n  try {\n    const lengthDescriptor = Object.getOwnPropertyDescriptor(value, \"length\");\n    length =\n      lengthDescriptor !== undefined && \"value\" in lengthDescriptor\n        ? lengthDescriptor.value\n        : undefined;\n  } catch {\n    throw new TypeError(\"ai-router: prior stream errors length is unavailable\");\n  }\n  if (\n    typeof length !== \"number\" ||\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > MAX_STREAM_CANDIDATES\n  ) {\n    throw new TypeError(\n      `ai-router: prior stream errors must contain at most ${MAX_STREAM_CANDIDATES} entries`\n    );\n  }\n  const snapshot: unknown[] = [];\n  for (let index = 0; index < length; index++) {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n      snapshot[index] =\n        descriptor !== undefined && \"value\" in descriptor\n          ? descriptor.value\n          : undefined;\n    } catch {\n      snapshot[index] = undefined;\n    }\n  }\n  return snapshot;\n}\n","import { consumeGenuinePromise } from \"./runtime-types\";\nimport { consumeCandidateSnapshotPromiseMutations } from \"./stream-candidate-snapshot\";\nimport { ORDERING_TOKEN_RE } from \"./stream-part-fields\";\nimport type { ResolvedEntry } from \"./stream-types\";\nimport type { RouterOrderingToken } from \"./types\";\n\nexport function isValidOrderingToken(\n  value: unknown\n): value is RouterOrderingToken {\n  return (\n    (typeof value === \"number\" && Number.isFinite(value) && value >= 0) ||\n    (typeof value === \"string\" &&\n      value.length <= 256 &&\n      ORDERING_TOKEN_RE.test(value))\n  );\n}\n\nexport function requireOptionalBooleanHookResult(\n  value: unknown,\n  name: string\n): boolean {\n  if (consumeGenuinePromise(value)) {\n    throw new TypeError(`ai-router: ${name} hook must return synchronously`);\n  }\n  if (value === undefined) {\n    return true;\n  }\n  if (typeof value !== \"boolean\") {\n    throw new TypeError(`ai-router: ${name} hook must return a boolean`);\n  }\n  return value;\n}\n\nexport function optionalMetricHookValue(\n  hook: ((candidate: ResolvedEntry) => number | undefined) | undefined,\n  candidate: ResolvedEntry\n): number | undefined {\n  try {\n    const value = invokeReadOnlyCandidateHook(hook, candidate);\n    if (consumeGenuinePromise(value)) {\n      return;\n    }\n    return Number.isSafeInteger(value) && (value as number) >= 0\n      ? (value as number)\n      : undefined;\n  } catch {\n    return;\n  }\n}\n\nexport function snapshotCandidateForStateHook(\n  candidate: ResolvedEntry\n): ResolvedEntry {\n  const snapshot = {\n    entry: candidate.entry,\n    fullIndex: candidate.fullIndex,\n    ...(candidate.probeLease === undefined\n      ? {}\n      : { probeLease: { ...candidate.probeLease } }),\n  } as ResolvedEntry;\n  Object.defineProperty(snapshot, \"model\", {\n    configurable: true,\n    enumerable: true,\n    get: () => candidate.model,\n  });\n  return snapshot;\n}\n\nexport function invokeReadOnlyCandidateHook<Args extends unknown[], Result>(\n  hook: ((candidate: ResolvedEntry, ...args: Args) => Result) | undefined,\n  candidate: ResolvedEntry,\n  ...args: Args\n): Result | undefined {\n  if (hook === undefined) {\n    return;\n  }\n  const hookCandidate = snapshotCandidateForStateHook(candidate);\n  try {\n    return hook(hookCandidate, ...args);\n  } finally {\n    consumeCandidateSnapshotPromiseMutations(hookCandidate);\n  }\n}\n\nexport function captureOptionalHook<T>(\n  source: object,\n  key: string\n): T | undefined {\n  const hook = Reflect.get(source, key);\n  if (hook === undefined) {\n    return;\n  }\n  if (typeof hook !== \"function\") {\n    throw new TypeError(`ai-router: ${key} hook must be a function`);\n  }\n  return ((...args: unknown[]) => Reflect.apply(hook, source, args)) as T;\n}\n\nexport function captureRequiredHook<T>(source: object, key: string): T {\n  const hook = captureOptionalHook<T>(source, key);\n  if (hook === undefined) {\n    throw new TypeError(`ai-router: ${key} hook must be a function`);\n  }\n  return hook;\n}\n\nexport function tryCaptureOptionalHook<T>(\n  source: object,\n  key: string\n): { error?: unknown; value?: T } {\n  try {\n    return { value: captureOptionalHook<T>(source, key) };\n  } catch (error) {\n    return { error };\n  }\n}\n","import { consumeGenuinePromise } from \"./runtime-types\";\nimport { snapshotCandidateForStateHook } from \"./stream-candidate-hooks\";\nimport {\n  consumeCandidateSnapshotPromiseMutations,\n  ownCandidateField,\n  snapshotCandidateProbeLease,\n  snapshotResolvedEntry,\n} from \"./stream-candidate-snapshot\";\nimport type { FallbackStreamArgs, ResolvedEntry } from \"./stream-types\";\n\nexport function runCandidateCleanup(\n  cleanup: ((candidate: ResolvedEntry) => void) | undefined,\n  candidate: ResolvedEntry | undefined\n): void {\n  try {\n    consumeGenuinePromise(cleanup?.(candidate as ResolvedEntry));\n  } catch {\n    // Capacity and probe release are independent best-effort cleanup hooks.\n  }\n}\n\nexport function runIsolatedCandidateCleanup(\n  cleanup: ((candidate: ResolvedEntry) => void) | undefined,\n  candidate: ResolvedEntry | undefined\n): void {\n  if (candidate === undefined) {\n    runCandidateCleanup(cleanup, candidate);\n    return;\n  }\n  const hookCandidate = snapshotCandidateForStateHook(candidate);\n  runCandidateCleanup(cleanup, hookCandidate);\n  consumeCandidateSnapshotPromiseMutations(hookCandidate);\n}\n\nexport function runProbeCandidateCleanup(\n  cleanup: ((candidate: ResolvedEntry) => void) | undefined,\n  candidate: ResolvedEntry | undefined\n): void {\n  if (candidate === undefined) {\n    runCandidateCleanup(cleanup, candidate);\n    return;\n  }\n  let hookCandidate: ResolvedEntry;\n  try {\n    hookCandidate = snapshotCandidateForStateHook(candidate);\n  } catch {\n    runCandidateCleanup(cleanup, candidate);\n    return;\n  }\n  runCandidateCleanup(cleanup, hookCandidate);\n  consumeCandidateSnapshotPromiseMutations(hookCandidate);\n  try {\n    candidate.probeLease = snapshotCandidateProbeLease(\n      ownCandidateField(hookCandidate, \"probeLease\"),\n      candidate.fullIndex\n    );\n  } catch {\n    // Keep the last validated canonical lease after malformed cleanup mutation.\n  }\n}\n\nexport function setupCleanupCandidate(\n  args: FallbackStreamArgs\n): ResolvedEntry | undefined {\n  try {\n    const candidatesDescriptor = Object.getOwnPropertyDescriptor(\n      args,\n      \"candidates\"\n    );\n    const indexDescriptor = Object.getOwnPropertyDescriptor(args, \"startIndex\");\n    if (\n      candidatesDescriptor === undefined ||\n      !(\"value\" in candidatesDescriptor) ||\n      indexDescriptor === undefined ||\n      !(\"value\" in indexDescriptor) ||\n      !Number.isSafeInteger(indexDescriptor.value) ||\n      indexDescriptor.value < 0\n    ) {\n      return;\n    }\n    const candidateDescriptor = Object.getOwnPropertyDescriptor(\n      candidatesDescriptor.value,\n      String(indexDescriptor.value)\n    );\n    const candidate =\n      candidateDescriptor !== undefined && \"value\" in candidateDescriptor\n        ? candidateDescriptor.value\n        : undefined;\n    return snapshotResolvedEntry(candidate, indexDescriptor.value);\n  } catch {\n    return;\n  }\n}\n\nexport function runSetupCandidateCleanup(\n  args: FallbackStreamArgs,\n  releaseCandidate: FallbackStreamArgs[\"releaseCandidate\"],\n  releaseProbeCandidate: FallbackStreamArgs[\"releaseProbeCandidate\"]\n): void {\n  const candidate = setupCleanupCandidate(args);\n  runIsolatedCandidateCleanup(releaseCandidate, candidate);\n  runProbeCandidateCleanup(releaseProbeCandidate, candidate);\n}\n","import type {\n  LanguageModelV4StreamPart,\n  LanguageModelV4StreamResult,\n} from \"@ai-sdk/provider\";\nimport {\n  captureGenuinePromise,\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  requireGenuinePromise,\n} from \"./runtime-types\";\nimport {\n  MAX_PRELUDE_PARTS,\n  MAX_PRELUDE_TEXT_CHARS,\n  streamField,\n} from \"./stream-part-fields\";\nimport { clearTimerSafely, scheduleTimer } from \"./timeout\";\n\nexport class IncompleteModelStreamError extends Error {\n  readonly code = \"incomplete_model_stream\";\n\n  constructor() {\n    super(\"ai-router: provider stream closed without a finish part\");\n    this.name = \"IncompleteModelStreamError\";\n  }\n}\n\nexport class EmptyModelStreamError extends Error {\n  readonly code = \"empty_model_response\";\n\n  constructor() {\n    super(\"ai-router: provider returned an empty model stream\");\n    this.name = \"EmptyModelStreamError\";\n  }\n}\n\nexport class StreamPreludeOverflowError extends Error {\n  readonly code = \"stream_prelude_overflow\";\n\n  constructor() {\n    super(\n      `ai-router: provider exceeded the pre-output framing limit (${MAX_PRELUDE_PARTS} parts or ${MAX_PRELUDE_TEXT_CHARS} text characters)`\n    );\n    this.name = \"StreamPreludeOverflowError\";\n  }\n}\n\nexport class InvalidModelStreamError extends Error {\n  readonly code = \"invalid_model_stream\";\n\n  constructor(message: string, cause?: unknown) {\n    super(`ai-router: invalid provider stream: ${message}`, {\n      ...(cause === undefined ? {} : { cause }),\n    });\n    this.name = \"InvalidModelStreamError\";\n  }\n}\n\nexport class RouterStreamError extends Error {\n  readonly code = \"stream_unavailable\";\n\n  constructor(cause: unknown) {\n    super(\"ai-router: stream infrastructure is unavailable\", { cause });\n    this.name = \"RouterStreamError\";\n  }\n}\n\nexport class CleanedStreamSetupError extends Error {\n  constructor(cause: unknown) {\n    super(\"stream setup failed after cleanup\", { cause });\n    this.name = \"CleanedStreamSetupError\";\n  }\n}\n\nexport interface CapturedReader {\n  cancel(reason?: unknown): Promise<void>;\n  read(): Promise<ReadableStreamReadResult<LanguageModelV4StreamPart>>;\n  releaseLock(): void;\n}\n\nexport function snapshotReadResult(\n  value: unknown\n): ReadableStreamReadResult<LanguageModelV4StreamPart> {\n  if (typeof value !== \"object\" || value === null) {\n    throw new InvalidModelStreamError(\"stream read result is malformed\");\n  }\n  consumeOwnDataPromiseFields(value, [\"done\", \"value\"]);\n  const done = streamField(value, \"done\");\n  if (typeof done !== \"boolean\") {\n    throw new InvalidModelStreamError(\"stream read result is malformed\");\n  }\n  return done\n    ? { done: true, value: undefined }\n    : {\n        done: false,\n        value: streamField(value, \"value\") as LanguageModelV4StreamPart,\n      };\n}\n\nexport function tryReaderMethod(\n  reader: object,\n  method: \"cancel\" | \"read\" | \"releaseLock\"\n): { error?: unknown; value?: unknown } {\n  try {\n    const value = Reflect.get(reader, method);\n    if (consumeGenuinePromise(value)) {\n      return {\n        error: new Error(`stream reader ${method} must be synchronous`),\n      };\n    }\n    return { value };\n  } catch (error) {\n    return { error };\n  }\n}\n\nexport function cleanupPartialReader(\n  reader: object,\n  cancel: unknown,\n  releaseLock: unknown\n): void {\n  try {\n    if (typeof cancel === \"function\") {\n      consumeGenuinePromise(\n        Reflect.apply(cancel, reader, [\"stream reader capture failed\"])\n      );\n    }\n  } catch {\n    // Partial reader cleanup is best-effort.\n  }\n  try {\n    if (typeof releaseLock === \"function\") {\n      consumeGenuinePromise(Reflect.apply(releaseLock, reader, []));\n    }\n  } catch {\n    // Partial reader cleanup is best-effort.\n  }\n}\n\nexport function cleanupUnreadableStream(stream: object, reason: unknown): void {\n  try {\n    const cancel = Reflect.get(stream, \"cancel\");\n    if (consumeGenuinePromise(cancel) || typeof cancel !== \"function\") {\n      return;\n    }\n    consumeGenuinePromise(Reflect.apply(cancel, stream, [reason]));\n  } catch {\n    // A stream that cannot expose a reader is detached from routing; cleanup is\n    // best-effort and must not replace the reader-capture failure.\n  }\n}\n\nexport function captureReader(\n  result: LanguageModelV4StreamResult\n): CapturedReader {\n  const stream = Reflect.get(result as object, \"stream\");\n  if (consumeGenuinePromise(stream)) {\n    throw new Error(\"stream must be synchronous\");\n  }\n  if (typeof stream !== \"object\" || stream === null) {\n    throw new Error(\"stream is unavailable\");\n  }\n  let reader: unknown;\n  try {\n    const getReader = Reflect.get(stream, \"getReader\");\n    if (consumeGenuinePromise(getReader)) {\n      throw new Error(\"stream.getReader must be synchronous\");\n    }\n    if (typeof getReader !== \"function\") {\n      throw new Error(\"stream.getReader is unavailable\");\n    }\n    reader = Reflect.apply(getReader, stream, []);\n    if (consumeGenuinePromise(reader)) {\n      throw new Error(\"stream reader must be synchronous\");\n    }\n    if (typeof reader !== \"object\" || reader === null) {\n      throw new Error(\"stream reader is unavailable\");\n    }\n  } catch (error) {\n    cleanupUnreadableStream(stream, error);\n    throw error;\n  }\n  const cancelResult = tryReaderMethod(reader, \"cancel\");\n  const releaseResult = tryReaderMethod(reader, \"releaseLock\");\n  const readResult = tryReaderMethod(reader, \"read\");\n  const cancel = cancelResult.value;\n  const read = readResult.value;\n  const releaseLock = releaseResult.value;\n  const methodError =\n    cancelResult.error ?? releaseResult.error ?? readResult.error;\n  if (\n    methodError !== undefined ||\n    typeof cancel !== \"function\" ||\n    typeof read !== \"function\" ||\n    typeof releaseLock !== \"function\"\n  ) {\n    cleanupPartialReader(reader, cancel, releaseLock);\n    if (methodError !== undefined) {\n      throw methodError;\n    }\n    throw new Error(\"stream reader methods are unavailable\");\n  }\n  return {\n    cancel(reason) {\n      return Reflect.apply(cancel, reader, [reason]) as Promise<void>;\n    },\n    read() {\n      return requireGenuinePromise(\n        Reflect.apply(read, reader, []),\n        (error) =>\n          new InvalidModelStreamError(\n            \"reader.read must return a genuine Promise\",\n            error\n          )\n      );\n    },\n    releaseLock() {\n      consumeGenuinePromise(Reflect.apply(releaseLock, reader, []));\n    },\n  };\n}\n\n/** Cancel an upstream reader, swallowing a sync throw or async rejection. */\nexport const cancelledReaders = new WeakSet<CapturedReader>();\n\nexport function cancelQuietly(\n  reader: CapturedReader | null,\n  reason: unknown\n): void {\n  cancelAndReleaseReaderQuietly(reader, reason);\n}\n\nexport const releasedReaderLocks = new WeakSet<CapturedReader>();\n\nexport function releaseReaderLockQuietly(reader: CapturedReader): void {\n  if (releasedReaderLocks.has(reader)) {\n    return;\n  }\n  try {\n    reader.releaseLock();\n    releasedReaderLocks.add(reader);\n  } catch {\n    // A pending read or already-released reader has no additional safe action.\n  }\n}\n\nexport function cancelAndReleaseReaderQuietly(\n  reader: CapturedReader | null,\n  reason: unknown\n): void {\n  if (reader === null) {\n    return;\n  }\n  if (cancelledReaders.has(reader)) {\n    return;\n  }\n  cancelledReaders.add(reader);\n  let cancellation: unknown;\n  try {\n    cancellation = reader.cancel(reason);\n  } catch {\n    // Lock release below remains independently best-effort.\n  }\n  const promise = captureGenuinePromise(cancellation);\n  if (promise === undefined) {\n    releaseReaderLockQuietly(reader);\n    return;\n  }\n  let pendingReader: CapturedReader | undefined = reader;\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  const finish = () => {\n    if (pendingReader !== undefined) {\n      releaseReaderLockQuietly(pendingReader);\n      pendingReader = undefined;\n    }\n    clearTimerSafely(timer);\n  };\n  try {\n    timer = scheduleTimer(finish, 1000);\n  } catch {\n    finish();\n  }\n  promise.then(finish, finish);\n}\n","import type { LanguageModelV4StreamPart } from \"@ai-sdk/provider\";\nimport { isBoundedIdentifier } from \"./runtime-types\";\nimport { MAX_STRICT_TRACKED_IDS } from \"./stream-part-fields\";\nimport { InvalidModelStreamError } from \"./stream-reader\";\n\nexport class StreamLifecycleValidator {\n  private finished = false;\n  private readonly open = new Set<string>();\n  private readonly pendingToolCalls = new Set<string>();\n  private readonly seenToolCalls = new Set<string>();\n  private responseMetadataSeen = false;\n  private streamStarted = false;\n\n  validate(part: LanguageModelV4StreamPart): void {\n    if (this.finished) {\n      throw new InvalidModelStreamError(\"part emitted after finish\");\n    }\n    if (this.validateSpecialPart(part)) {\n      return;\n    }\n    if (!this.streamStarted) {\n      throw new InvalidModelStreamError(\n        `${part.type} emitted before stream-start`\n      );\n    }\n    const record = part as unknown as Record<string, unknown>;\n    const id = isBoundedIdentifier(record.id) ? record.id : undefined;\n    const family = part.type.split(\"-\")[0];\n    const key = id === undefined ? undefined : `${family}:${id}`;\n    if (part.type.endsWith(\"-start\") && key !== undefined) {\n      if (this.open.has(key)) {\n        throw new InvalidModelStreamError(`duplicate ${part.type}`);\n      }\n      this.assertTrackingCapacity(\n        this.open,\n        key,\n        \"too many open stream blocks\"\n      );\n      this.open.add(key);\n    } else if (part.type.endsWith(\"-delta\") && key !== undefined) {\n      if (!this.open.has(key)) {\n        throw new InvalidModelStreamError(`${part.type} without start`);\n      }\n    } else if (\n      part.type.endsWith(\"-end\") &&\n      key !== undefined &&\n      !this.open.delete(key)\n    ) {\n      throw new InvalidModelStreamError(`${part.type} without start`);\n    }\n    if (part.type === \"tool-input-end\") {\n      this.assertTrackingCapacity(\n        this.pendingToolCalls,\n        part.id,\n        \"too many pending tool calls\"\n      );\n      this.pendingToolCalls.add(part.id);\n    }\n  }\n\n  private assertTrackingCapacity(\n    values: Set<string>,\n    value: string,\n    message: string\n  ): void {\n    if (!values.has(value) && values.size >= MAX_STRICT_TRACKED_IDS) {\n      throw new InvalidModelStreamError(message);\n    }\n  }\n\n  private validateSpecialPart(part: LanguageModelV4StreamPart): boolean {\n    if (part.type === \"finish\") {\n      if (!this.streamStarted) {\n        throw new InvalidModelStreamError(\"finish emitted before stream-start\");\n      }\n      if (this.open.size > 0) {\n        throw new InvalidModelStreamError(\"finish emitted with open blocks\");\n      }\n      if (this.pendingToolCalls.size > 0) {\n        throw new InvalidModelStreamError(\n          \"finish emitted before completed tool inputs produced tool calls\"\n        );\n      }\n      this.finished = true;\n      return true;\n    }\n    if (part.type === \"stream-start\") {\n      if (this.streamStarted) {\n        throw new InvalidModelStreamError(\"duplicate stream-start\");\n      }\n      this.streamStarted = true;\n      return true;\n    }\n    if (part.type === \"tool-call\") {\n      if (!this.streamStarted) {\n        throw new InvalidModelStreamError(\n          \"tool-call emitted before stream-start\"\n        );\n      }\n      if (this.seenToolCalls.has(part.toolCallId)) {\n        throw new InvalidModelStreamError(\"duplicate tool-call id\");\n      }\n      this.assertTrackingCapacity(\n        this.seenToolCalls,\n        part.toolCallId,\n        \"too many tool-call ids\"\n      );\n      this.seenToolCalls.add(part.toolCallId);\n      this.pendingToolCalls.delete(part.toolCallId);\n      return true;\n    }\n    if (part.type === \"response-metadata\") {\n      if (!this.streamStarted) {\n        throw new InvalidModelStreamError(\n          \"response-metadata emitted before stream-start\"\n        );\n      }\n      if (this.responseMetadataSeen) {\n        throw new InvalidModelStreamError(\"duplicate response-metadata\");\n      }\n      this.responseMetadataSeen = true;\n      return true;\n    }\n    return false;\n  }\n}\n","import { AsyncFilePayloadError, snapshotFileData } from \"./file-data\";\nimport { snapshotJsonValue } from \"./json-value\";\nimport {\n  consumeOwnDataPromiseFields,\n  isUint8ArrayValue,\n  isUrlValue,\n} from \"./runtime-types\";\n\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\n\nimport {\n  ASYNC_STREAM_FIELD,\n  AsyncStreamFieldError,\n  captureStreamSiblings,\n  captureStreamSiblingValue,\n  MAX_STREAM_WARNING_CHARS,\n  MAX_STREAM_WARNINGS,\n  snapshotRecordFields,\n  streamDiscriminant,\n  streamField,\n} from \"./stream-part-fields\";\nexport interface StreamJsonBudget {\n  remaining: number;\n  remainingCharacters: number;\n  remainingFileBytes: number;\n  remainingMetadataCharacters: number;\n}\n\nexport function snapshotStreamFileData(\n  value: unknown,\n  budget: StreamJsonBudget\n): unknown {\n  try {\n    return snapshotFileData(value, budget);\n  } catch (error) {\n    if (error instanceof AsyncFilePayloadError) {\n      throw new AsyncStreamFieldError(\n        \"async stream file payload fields are unsupported\"\n      );\n    }\n    throw error;\n  }\n}\n\nexport function snapshotStreamRequiredJson(\n  value: unknown,\n  budget: StreamJsonBudget\n): unknown {\n  const snapshot = snapshotJsonValue(\n    value,\n    budget.remaining,\n    budget.remainingCharacters\n  );\n  if (!snapshot.valid) {\n    if (snapshot.async) {\n      throw new AsyncStreamFieldError(\n        \"async stream JSON fields are unsupported\"\n      );\n    }\n    throw new Error(\"malformed provider JSON value\");\n  }\n  budget.remaining -= snapshot.containers ?? 0;\n  budget.remainingCharacters -= snapshot.characters ?? 0;\n  return snapshot.value;\n}\n\nexport function isOrdinaryJsonContainer(value: unknown): value is object {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  if (Array.isArray(value)) {\n    return true;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === null || Object.getPrototypeOf(prototype) === null;\n}\n\nexport function snapshotStreamRawValue(\n  value: unknown,\n  budget: StreamJsonBudget\n): unknown {\n  // Parsed provider chunks are normally JSON. Copy and charge those values to\n  // the request-wide budget so a prelude cannot retain an unbounded object\n  // graph, and so later provider mutation cannot change an emitted chunk.\n  // Preserve opaque runtime values (Response, Uint8Array, class instances,\n  // etc.) because LanguageModelV4 deliberately types rawValue as unknown.\n  if (isOrdinaryJsonContainer(value)) {\n    return snapshotStreamRequiredJson(value, budget);\n  }\n  if (isUint8ArrayValue(value)) {\n    const snapshot = snapshotStreamFileData(\n      { data: value, type: \"data\" },\n      budget\n    );\n    return Reflect.get(snapshot as object, \"data\");\n  }\n  if (isUrlValue(value)) {\n    const snapshot = snapshotStreamFileData(\n      { type: \"url\", url: value },\n      budget\n    );\n    return Reflect.get(snapshot as object, \"url\");\n  }\n  return value;\n}\n\nexport function snapshotStreamProviderMetadata(\n  value: unknown,\n  budget: StreamJsonBudget\n): unknown {\n  if (value === undefined) {\n    return;\n  }\n  const snapshot = snapshotStreamRequiredJson(value, budget);\n  if (\n    typeof snapshot !== \"object\" ||\n    snapshot === null ||\n    Array.isArray(snapshot)\n  ) {\n    throw new Error(\"malformed provider metadata\");\n  }\n  return snapshot;\n}\n\nexport function snapshotStreamUsage(\n  value: unknown,\n  budget: StreamJsonBudget\n): unknown {\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  const fields = snapshotRecordFields(value, undefined, [\n    \"inputTokens\",\n    \"outputTokens\",\n    \"raw\",\n  ]);\n  const input = fields.inputTokens;\n  const output = fields.outputTokens;\n  const raw = fields.raw;\n  let inputFields: Record<string, unknown> | undefined;\n  let outputFields: Record<string, unknown> | undefined;\n  let rawSnapshot: unknown;\n  captureStreamSiblings([\n    () => {\n      if (typeof input === \"object\" && input !== null) {\n        inputFields = snapshotRecordFields(input, undefined, [\n          \"cacheRead\",\n          \"cacheWrite\",\n          \"noCache\",\n          \"total\",\n        ]);\n      }\n    },\n    () => {\n      if (typeof output === \"object\" && output !== null) {\n        outputFields = snapshotRecordFields(output, undefined, [\n          \"reasoning\",\n          \"text\",\n          \"total\",\n        ]);\n      }\n    },\n    () => {\n      rawSnapshot =\n        raw === undefined ? undefined : snapshotStreamRequiredJson(raw, budget);\n    },\n  ]);\n  return {\n    inputTokens:\n      inputFields === undefined\n        ? input\n        : {\n            cacheRead: inputFields.cacheRead,\n            cacheWrite: inputFields.cacheWrite,\n            noCache: inputFields.noCache,\n            total: inputFields.total,\n          },\n    outputTokens:\n      outputFields === undefined\n        ? output\n        : {\n            reasoning: outputFields.reasoning,\n            text: outputFields.text,\n            total: outputFields.total,\n          },\n    raw: rawSnapshot,\n  };\n}\n\nexport function snapshotStreamWarning(value: unknown): unknown {\n  if (typeof value !== \"object\" || value === null) {\n    return value;\n  }\n  const type = streamDiscriminant(value, \"type\", [\n    \"details\",\n    \"feature\",\n    \"message\",\n    \"setting\",\n  ]);\n  let fields: string[];\n  if (type === \"unsupported\" || type === \"compatibility\") {\n    fields = [\"feature\", \"details\"];\n  } else if (type === \"deprecated\") {\n    fields = [\"setting\", \"message\"];\n  } else {\n    fields = [\"message\"];\n  }\n  return snapshotRecordFields(value, type, fields);\n}\n\nexport function streamWarningCharacters(value: unknown): number {\n  if (typeof value !== \"object\" || value === null) {\n    return 0;\n  }\n  let characters = 0;\n  for (const field of [\"feature\", \"details\", \"setting\", \"message\"]) {\n    const item = Reflect.get(value, field);\n    if (typeof item === \"string\") {\n      characters += item.length;\n    }\n  }\n  return characters;\n}\n\nexport function snapshotStreamWarnings(value: unknown): unknown {\n  if (!Array.isArray(value)) {\n    return value;\n  }\n  const length = Reflect.get(value, \"length\");\n  if (\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > MAX_STREAM_WARNINGS\n  ) {\n    return new Array(MAX_STREAM_WARNINGS + 1);\n  }\n  consumeOwnDataPromiseFields(\n    value,\n    Array.from({ length }, (_, index) => index)\n  );\n  const snapshot = new Array<unknown>(length);\n  let totalChars = 0;\n  const failure: { error?: AsyncStreamFieldError } = {};\n  for (let index = 0; index < length; index += 1) {\n    if (!Object.hasOwn(value, index)) {\n      return new Array(length);\n    }\n    const warning = captureStreamSiblingValue(\n      () => snapshotStreamWarning(streamField(value, index)),\n      failure\n    );\n    if (warning === ASYNC_STREAM_FIELD) {\n      continue;\n    }\n    snapshot[index] = warning;\n    totalChars += streamWarningCharacters(warning);\n    if (totalChars > MAX_STREAM_WARNING_CHARS) {\n      return [null];\n    }\n  }\n  if (failure.error !== undefined) {\n    throw failure.error;\n  }\n  return snapshot;\n}\n","import type { LanguageModelV4StreamPart } from \"@ai-sdk/provider\";\nimport { isDateValue } from \"./runtime-types\";\n\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\n\nimport {\n  type AsyncStreamFieldError,\n  captureStreamSiblings,\n  PROVIDER_METADATA_PARTS,\n  STREAM_PART_FIELDS,\n  snapshotRecordFields,\n  snapshotStreamFinishReason,\n  streamDiscriminant,\n} from \"./stream-part-fields\";\nimport {\n  type StreamJsonBudget,\n  snapshotStreamFileData,\n  snapshotStreamProviderMetadata,\n  snapshotStreamRawValue,\n  snapshotStreamRequiredJson,\n  snapshotStreamUsage,\n  snapshotStreamWarnings,\n} from \"./stream-part-json\";\nexport interface SnapshottedStreamPart {\n  known: boolean;\n  part: LanguageModelV4StreamPart;\n  type: unknown;\n}\n\nexport function snapshotKnownStreamPart(\n  value: LanguageModelV4StreamPart,\n  budget: StreamJsonBudget\n): SnapshottedStreamPart {\n  const type = streamDiscriminant(value as object, \"type\", [\n    \"approvalId\",\n    \"data\",\n    \"delta\",\n    \"dynamic\",\n    \"error\",\n    \"filename\",\n    \"finishReason\",\n    \"id\",\n    \"input\",\n    \"isError\",\n    \"kind\",\n    \"mediaType\",\n    \"modelId\",\n    \"preliminary\",\n    \"providerExecuted\",\n    \"providerMetadata\",\n    \"rawValue\",\n    \"result\",\n    \"sourceType\",\n    \"timestamp\",\n    \"title\",\n    \"toolCallId\",\n    \"toolName\",\n    \"url\",\n    \"usage\",\n    \"warnings\",\n  ]);\n  if (typeof type !== \"string\") {\n    return { known: false, part: value, type };\n  }\n  const fields = STREAM_PART_FIELDS[type];\n  if (fields === undefined) {\n    // Unknown future part types remain opaque pass-through values.\n    return { known: false, part: value, type };\n  }\n  let sourceType: unknown;\n  let selectedFields = fields;\n  if (type === \"source\") {\n    sourceType = streamDiscriminant(value as object, \"sourceType\", [\n      \"filename\",\n      \"id\",\n      \"mediaType\",\n      \"providerMetadata\",\n      \"title\",\n      \"url\",\n    ]);\n    if (sourceType === \"url\") {\n      selectedFields = [\"id\", \"url\", \"title\", \"providerMetadata\"];\n    } else if (sourceType === \"document\") {\n      selectedFields = [\n        \"id\",\n        \"mediaType\",\n        \"filename\",\n        \"title\",\n        \"providerMetadata\",\n      ];\n    } else {\n      selectedFields = [\"id\", \"title\", \"providerMetadata\"];\n    }\n  }\n  const directFailure: { error?: AsyncStreamFieldError } = {};\n  const snapshot = snapshotRecordFields(\n    value as object,\n    type,\n    selectedFields,\n    directFailure\n  );\n  if (type === \"source\") {\n    snapshot.sourceType = sourceType;\n  }\n  const tasks: (() => void)[] = [];\n  const directError = directFailure.error;\n  if (directError !== undefined) {\n    tasks.push(() => {\n      throw directError;\n    });\n  }\n  if (PROVIDER_METADATA_PARTS.has(type)) {\n    tasks.push(() => {\n      snapshot.providerMetadata = snapshotStreamProviderMetadata(\n        snapshot.providerMetadata,\n        budget\n      );\n    });\n  }\n  if (type === \"file\" || type === \"reasoning-file\") {\n    tasks.push(() => {\n      snapshot.data = snapshotStreamFileData(snapshot.data, budget);\n    });\n  } else if (type === \"finish\") {\n    tasks.push(\n      () => {\n        snapshot.finishReason = snapshotStreamFinishReason(\n          snapshot.finishReason\n        );\n      },\n      () => {\n        snapshot.usage = snapshotStreamUsage(snapshot.usage, budget);\n      }\n    );\n  } else if (type === \"tool-result\") {\n    tasks.push(() => {\n      snapshot.result = snapshotStreamRequiredJson(snapshot.result, budget);\n    });\n  } else if (type === \"stream-start\") {\n    tasks.push(() => {\n      snapshot.warnings = snapshotStreamWarnings(snapshot.warnings);\n    });\n  } else if (type === \"raw\") {\n    tasks.push(() => {\n      snapshot.rawValue = snapshotStreamRawValue(snapshot.rawValue, budget);\n    });\n  } else if (type === \"response-metadata\" && isDateValue(snapshot.timestamp)) {\n    tasks.push(() => {\n      snapshot.timestamp = new Date(\n        Date.prototype.getTime.call(snapshot.timestamp)\n      );\n    });\n  }\n  captureStreamSiblings(tasks);\n  return {\n    known: true,\n    part: snapshot as unknown as LanguageModelV4StreamPart,\n    type,\n  };\n}\n","import type { LanguageModelV4StreamPart } from \"@ai-sdk/provider\";\nimport {\n  isBoundedIdentifier,\n  isDateValue,\n  isDottedIdentifier,\n  isUint8ArrayValue,\n  isUrlValue,\n} from \"./runtime-types\";\n\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\n\nimport {\n  FINISH_REASONS,\n  MAX_STREAM_METADATA_FIELD_LENGTH,\n  MAX_STREAM_WARNING_FIELD_LENGTH,\n  PROVIDER_METADATA_PARTS,\n} from \"./stream-part-fields\";\nimport type { StreamJsonBudget } from \"./stream-part-json\";\nexport function validStreamFileData(value: unknown): boolean {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  const data = value as Record<string, unknown>;\n  if (data.type === \"data\") {\n    return typeof data.data === \"string\" || isUint8ArrayValue(data.data);\n  }\n  return data.type === \"url\" && isUrlValue(data.url);\n}\n\nexport function validUsageNumber(value: unknown): boolean {\n  return (\n    value === undefined ||\n    (typeof value === \"number\" && Number.isFinite(value) && value >= 0)\n  );\n}\n\nexport function validOptionalDate(value: unknown): boolean {\n  return value === undefined || isDateValue(value);\n}\n\nexport function validOptionalString(value: unknown): boolean {\n  return value === undefined || typeof value === \"string\";\n}\n\nexport function validOptionalBoolean(value: unknown): boolean {\n  return value === undefined || typeof value === \"boolean\";\n}\n\nexport function validStreamWarningString(value: unknown): boolean {\n  return (\n    typeof value === \"string\" && value.length <= MAX_STREAM_WARNING_FIELD_LENGTH\n  );\n}\n\nexport function validWarning(value: unknown): boolean {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  const warning = value as Record<string, unknown>;\n  if (warning.type === \"unsupported\" || warning.type === \"compatibility\") {\n    return (\n      validStreamWarningString(warning.feature) &&\n      (warning.details === undefined ||\n        validStreamWarningString(warning.details))\n    );\n  }\n  if (warning.type === \"deprecated\") {\n    return (\n      validStreamWarningString(warning.setting) &&\n      validStreamWarningString(warning.message)\n    );\n  }\n  return warning.type === \"other\" && validStreamWarningString(warning.message);\n}\n\nexport function validFinishPart(part: LanguageModelV4StreamPart): boolean {\n  if (part.type !== \"finish\") {\n    return true;\n  }\n  const finish = part.finishReason;\n  const usage = part.usage;\n  if (\n    typeof finish !== \"object\" ||\n    finish === null ||\n    typeof finish.unified !== \"string\" ||\n    !FINISH_REASONS.has(finish.unified) ||\n    !(finish.raw === undefined || typeof finish.raw === \"string\") ||\n    typeof usage !== \"object\" ||\n    usage === null ||\n    typeof usage.inputTokens !== \"object\" ||\n    usage.inputTokens === null ||\n    typeof usage.outputTokens !== \"object\" ||\n    usage.outputTokens === null\n  ) {\n    return false;\n  }\n  return (\n    [\"total\", \"noCache\", \"cacheRead\", \"cacheWrite\"].every((key) =>\n      validUsageNumber(\n        (usage.inputTokens as unknown as Record<string, unknown>)[key]\n      )\n    ) &&\n    [\"total\", \"text\", \"reasoning\"].every((key) =>\n      validUsageNumber(\n        (usage.outputTokens as unknown as Record<string, unknown>)[key]\n      )\n    )\n  );\n}\n\nexport function validKnownStreamPartShape(\n  part: LanguageModelV4StreamPart\n): boolean {\n  const record = part as unknown as Record<string, unknown>;\n  if (!isBoundedIdentifier(record.type, 256)) {\n    return false;\n  }\n  if (PROVIDER_METADATA_PARTS.has(part.type)) {\n    const providerMetadata = Reflect.get(record, \"providerMetadata\");\n    if (\n      providerMetadata !== undefined &&\n      (typeof providerMetadata !== \"object\" ||\n        providerMetadata === null ||\n        Array.isArray(providerMetadata))\n    ) {\n      return false;\n    }\n  }\n  switch (part.type) {\n    case \"text-start\":\n    case \"text-end\":\n    case \"reasoning-start\":\n    case \"reasoning-end\":\n    case \"tool-input-end\":\n      return isBoundedIdentifier(record.id);\n    case \"text-delta\":\n    case \"reasoning-delta\":\n    case \"tool-input-delta\":\n      return isBoundedIdentifier(record.id) && typeof record.delta === \"string\";\n    case \"tool-input-start\":\n      return (\n        isBoundedIdentifier(record.id) &&\n        isBoundedIdentifier(record.toolName) &&\n        validOptionalBoolean(record.providerExecuted) &&\n        validOptionalBoolean(record.dynamic) &&\n        validOptionalString(record.title)\n      );\n    case \"tool-call\":\n      return (\n        isBoundedIdentifier(record.toolCallId) &&\n        isBoundedIdentifier(record.toolName) &&\n        typeof record.input === \"string\" &&\n        validOptionalBoolean(record.providerExecuted) &&\n        validOptionalBoolean(record.dynamic)\n      );\n    case \"tool-result\":\n      return (\n        isBoundedIdentifier(record.toolCallId) &&\n        isBoundedIdentifier(record.toolName) &&\n        record.result !== undefined &&\n        record.result !== null &&\n        validOptionalBoolean(record.isError) &&\n        validOptionalBoolean(record.preliminary) &&\n        validOptionalBoolean(record.dynamic)\n      );\n    case \"tool-approval-request\":\n      return (\n        isBoundedIdentifier(record.approvalId) &&\n        isBoundedIdentifier(record.toolCallId)\n      );\n    case \"custom\":\n      return isDottedIdentifier(record.kind);\n    case \"file\":\n    case \"reasoning-file\":\n      return (\n        typeof record.mediaType === \"string\" && validStreamFileData(record.data)\n      );\n    case \"source\":\n      return (\n        isBoundedIdentifier(record.id) &&\n        ((record.sourceType === \"url\" &&\n          typeof record.url === \"string\" &&\n          validOptionalString(record.title)) ||\n          (record.sourceType === \"document\" &&\n            typeof record.mediaType === \"string\" &&\n            typeof record.title === \"string\" &&\n            validOptionalString(record.filename)))\n      );\n    case \"response-metadata\":\n      return (\n        validOptionalString(record.id) &&\n        validOptionalString(record.modelId) &&\n        validOptionalDate(record.timestamp)\n      );\n    default:\n      // Unknown future part types remain pass-through compatible.\n      return true;\n  }\n}\n\nexport function consumeStreamMetadataStrings(\n  part: LanguageModelV4StreamPart,\n  budget: StreamJsonBudget\n): void {\n  const record = part as unknown as Record<string, unknown>;\n  const consume = (\n    value: unknown,\n    maximum = MAX_STREAM_METADATA_FIELD_LENGTH,\n    allowEmpty = true\n  ) => {\n    if (value === undefined) {\n      return;\n    }\n    if (\n      typeof value !== \"string\" ||\n      (!allowEmpty && value.length === 0) ||\n      value.length > maximum\n    ) {\n      throw new Error(\"stream metadata strings must be non-empty and bounded\");\n    }\n    budget.remainingMetadataCharacters -= value.length;\n    if (budget.remainingMetadataCharacters < 0) {\n      throw new Error(\"stream metadata exceeds the aggregate string limit\");\n    }\n  };\n  switch (part.type) {\n    case \"text-start\":\n    case \"text-delta\":\n    case \"text-end\":\n    case \"reasoning-start\":\n    case \"reasoning-delta\":\n    case \"reasoning-end\":\n    case \"tool-input-delta\":\n    case \"tool-input-end\":\n      consume(record.id, 4096);\n      break;\n    case \"tool-input-start\":\n      consume(record.id, 4096);\n      consume(record.toolName, 4096);\n      consume(record.title);\n      break;\n    case \"tool-call\":\n    case \"tool-result\":\n      consume(record.toolCallId, 4096);\n      consume(record.toolName, 4096);\n      break;\n    case \"tool-approval-request\":\n      consume(record.approvalId, 4096);\n      consume(record.toolCallId, 4096);\n      break;\n    case \"custom\":\n      consume(record.kind, 4096);\n      break;\n    case \"file\":\n    case \"reasoning-file\":\n      consume(record.mediaType, 256, false);\n      break;\n    case \"source\":\n      consume(record.id, 4096);\n      consume(record.url);\n      consume(record.title);\n      consume(record.mediaType, 256, false);\n      consume(record.filename);\n      break;\n    case \"response-metadata\":\n      consume(record.id, 4096);\n      consume(record.modelId, 4096);\n      break;\n    case \"finish\": {\n      const reason = record.finishReason;\n      if (typeof reason === \"object\" && reason !== null) {\n        consume(Reflect.get(reason, \"raw\"));\n      }\n      break;\n    }\n    default:\n      break;\n  }\n}\n","import { consumeGenuinePromise } from \"./runtime-types\";\n\nconst ATTEMPT_PAYLOAD_KEYS = [\n  \"attempt\",\n  \"concurrencyLimit\",\n  \"durationMs\",\n  \"entry\",\n  \"error\",\n  \"failure\",\n  \"healthTransition\",\n  \"index\",\n  \"inFlight\",\n  \"logicalId\",\n  \"outcome\",\n  \"phase\",\n  \"reason\",\n  \"willRetry\",\n] as const;\n\nconst FAILURE_PAYLOAD_KEYS = [\n  \"cooldownMs\",\n  \"retryAfterMs\",\n  \"retryable\",\n  \"scope\",\n  \"statusCode\",\n] as const;\n\nconst ERROR_PAYLOAD_KEYS = [\n  \"entry\",\n  \"error\",\n  \"index\",\n  \"logicalId\",\n  \"phase\",\n  \"willRetry\",\n] as const;\n\nfunction ownDataValue(value: object, key: string): unknown {\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(value, key);\n    return descriptor !== undefined && \"value\" in descriptor\n      ? descriptor.value\n      : undefined;\n  } catch {\n    return;\n  }\n}\n\nfunction consumeKnownPayloadPromises(\n  payload: object,\n  keys: readonly string[]\n): void {\n  for (const key of keys) {\n    consumeGenuinePromise(ownDataValue(payload, key));\n  }\n}\n\n/** Observability hooks must never affect routing or create unhandled rejections. */\nexport function runObservabilityHook(hook: () => unknown): void {\n  try {\n    const result = hook();\n    consumeGenuinePromise(result);\n  } catch {\n    // Sync hook failures are intentionally isolated.\n  }\n}\n\n/** Isolate an attempt hook and consume Promise mutations on its bounded payload. */\nexport function runAttemptObservabilityHook<T extends object>(\n  payload: T,\n  hook: (payload: T) => unknown\n): void {\n  try {\n    runObservabilityHook(() => hook(payload));\n  } finally {\n    const failure = ownDataValue(payload, \"failure\");\n    consumeKnownPayloadPromises(payload, ATTEMPT_PAYLOAD_KEYS);\n    if (typeof failure === \"object\" && failure !== null) {\n      consumeKnownPayloadPromises(failure, FAILURE_PAYLOAD_KEYS);\n    }\n  }\n}\n\n/** Isolate an error hook and consume Promise mutations on its bounded payload. */\nexport function runErrorObservabilityHook<T extends object>(\n  payload: T,\n  hook: (payload: T) => unknown\n): void {\n  try {\n    runObservabilityHook(() => hook(payload));\n  } finally {\n    consumeKnownPayloadPromises(payload, ERROR_PAYLOAD_KEYS);\n  }\n}\n","import type { LanguageModelV4StreamResult } from \"@ai-sdk/provider\";\nimport { cloneInitialCallOptions } from \"./call-options\";\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\nimport { MAX_STREAM_DURATION_MS } from \"./stream-part-fields\";\nimport type { FallbackStreamArgs } from \"./stream-types\";\n\nexport type FallbackPumpConfig = Pick<\n  FallbackStreamArgs,\n  | \"attemptsStarted\"\n  | \"attemptTimeout\"\n  | \"backoff\"\n  | \"budgetFailureObserved\"\n  | \"budgetSuppressed\"\n  | \"firstContentTimeout\"\n  | \"firstResult\"\n  | \"logicalId\"\n  | \"maxAttempts\"\n  | \"options\"\n  | \"priorErrors\"\n  | \"retryAfterOutput\"\n  | \"startAttemptStartedAt\"\n  | \"startIndex\"\n  | \"startInFlight\"\n  | \"startOrderingToken\"\n  | \"strictStreamValidation\"\n  | \"totalDeadline\"\n  | \"totalTimeout\"\n>;\n\nexport function snapshotFallbackPumpConfig(\n  source: FallbackStreamArgs,\n  candidateCount: number,\n  firstResult: LanguageModelV4StreamResult\n): FallbackPumpConfig {\n  const config = {\n    attemptsStarted: Reflect.get(source, \"attemptsStarted\"),\n    attemptTimeout: Reflect.get(source, \"attemptTimeout\"),\n    backoff: Reflect.get(source, \"backoff\"),\n    budgetFailureObserved: Reflect.get(source, \"budgetFailureObserved\"),\n    budgetSuppressed: Reflect.get(source, \"budgetSuppressed\"),\n    firstContentTimeout: Reflect.get(source, \"firstContentTimeout\"),\n    firstResult,\n    logicalId: Reflect.get(source, \"logicalId\"),\n    maxAttempts: Reflect.get(source, \"maxAttempts\"),\n    options: Reflect.get(source, \"options\"),\n    priorErrors: Reflect.get(source, \"priorErrors\"),\n    retryAfterOutput: Reflect.get(source, \"retryAfterOutput\"),\n    startAttemptStartedAt: Reflect.get(source, \"startAttemptStartedAt\"),\n    startIndex: Reflect.get(source, \"startIndex\"),\n    startInFlight: Reflect.get(source, \"startInFlight\"),\n    startOrderingToken: Reflect.get(source, \"startOrderingToken\"),\n    strictStreamValidation: Reflect.get(source, \"strictStreamValidation\"),\n    totalDeadline: Reflect.get(source, \"totalDeadline\"),\n    totalTimeout: Reflect.get(source, \"totalTimeout\"),\n  } as FallbackPumpConfig;\n  const optionalDuration = (name: string, value: unknown): void => {\n    if (\n      value !== undefined &&\n      (typeof value !== \"number\" ||\n        !Number.isFinite(value) ||\n        value <= 0 ||\n        value > MAX_STREAM_DURATION_MS)\n    ) {\n      throw new TypeError(\n        `ai-router: stream ${name} must be positive and at most 24h`\n      );\n    }\n  };\n  for (const [name, value] of [\n    [\"attemptTimeout\", config.attemptTimeout],\n    [\"backoff\", config.backoff],\n    [\"firstContentTimeout\", config.firstContentTimeout],\n    [\"totalTimeout\", config.totalTimeout],\n  ] as const) {\n    optionalDuration(name, value);\n  }\n  const positiveSafeInteger = (name: string, value: unknown): void => {\n    if (\n      value !== undefined &&\n      (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 1)\n    ) {\n      throw new TypeError(\n        `ai-router: stream ${name} must be a positive safe integer`\n      );\n    }\n  };\n  positiveSafeInteger(\"attemptsStarted\", config.attemptsStarted);\n  positiveSafeInteger(\"maxAttempts\", config.maxAttempts);\n  positiveSafeInteger(\"startInFlight\", config.startInFlight);\n  if (\n    typeof config.startIndex !== \"number\" ||\n    !Number.isSafeInteger(config.startIndex) ||\n    config.startIndex < 0 ||\n    config.startIndex >= candidateCount\n  ) {\n    throw new TypeError(\n      \"ai-router: stream startIndex must identify a candidate\"\n    );\n  }\n  for (const [name, value] of [\n    [\"budgetFailureObserved\", config.budgetFailureObserved],\n    [\"budgetSuppressed\", config.budgetSuppressed],\n    [\"strictStreamValidation\", config.strictStreamValidation],\n  ] as const) {\n    if (value !== undefined && typeof value !== \"boolean\") {\n      throw new TypeError(`ai-router: stream ${name} must be a boolean`);\n    }\n  }\n  if (typeof config.retryAfterOutput !== \"boolean\") {\n    throw new TypeError(\"ai-router: stream retryAfterOutput must be a boolean\");\n  }\n  if (\n    typeof config.logicalId !== \"string\" ||\n    config.logicalId.length < 1 ||\n    config.logicalId.length > 256\n  ) {\n    throw new TypeError(\n      \"ai-router: stream logicalId must contain 1-256 characters\"\n    );\n  }\n  for (const [name, value] of [\n    [\"firstResult\", config.firstResult],\n    [\"options\", config.options],\n  ] as const) {\n    if (typeof value !== \"object\" || value === null) {\n      throw new TypeError(`ai-router: stream ${name} must be an object`);\n    }\n  }\n  config.options = cloneInitialCallOptions(config.options);\n  for (const [name, value] of [\n    [\"startAttemptStartedAt\", config.startAttemptStartedAt],\n    [\"totalDeadline\", config.totalDeadline],\n  ] as const) {\n    if (\n      value !== undefined &&\n      (typeof value !== \"number\" || !Number.isFinite(value))\n    ) {\n      throw new TypeError(`ai-router: stream ${name} must be a finite number`);\n    }\n  }\n  return config;\n}\n\n/**\n * Wrap a stream result so a mid-stream failure transparently falls back to the\n * next candidate. The `request`/`response` metadata getters track whichever\n * candidate is producing the live stream — best-effort, since a consumer that\n * snapshots them at stream-open (as the AI SDK does) keeps the first candidate's\n * values across a later fallback.\n */\n","import type {\n  LanguageModelV4StreamPart,\n  LanguageModelV4StreamResult,\n} from \"@ai-sdk/provider\";\nimport { addCapturedAbortListener } from \"./abort-signal\";\nimport { MAX_FILE_PAYLOAD_BYTES } from \"./file-data\";\nimport type { HealthTransition } from \"./health-store\";\nimport { copyFailureRecord } from \"./retry\";\nimport { discardLateStreamResult } from \"./stream\";\nimport { runSetupCandidateCleanup } from \"./stream-candidate-cleanup\";\nimport {\n  captureOptionalHook,\n  captureRequiredHook,\n  isValidOrderingToken,\n  tryCaptureOptionalHook,\n} from \"./stream-candidate-hooks\";\nimport {\n  snapshotPriorErrors,\n  snapshotResolvedEntries,\n} from \"./stream-candidate-snapshot\";\nimport {\n  type FallbackPumpConfig,\n  snapshotFallbackPumpConfig,\n} from \"./stream-config\";\nimport { StreamLifecycleValidator } from \"./stream-lifecycle-validator\";\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\nimport {\n  fallbackOrderingTokens,\n  MAX_STREAM_JSON_CHARACTERS,\n  MAX_STREAM_JSON_CONTAINERS,\n  MAX_STREAM_METADATA_CHARACTERS,\n  streamSignalAborted,\n} from \"./stream-part-fields\";\nimport type { StreamJsonBudget } from \"./stream-part-json\";\nimport { type CapturedReader, CleanedStreamSetupError } from \"./stream-reader\";\nimport type { FallbackStreamArgs, ResolvedEntry } from \"./stream-types\";\nimport {\n  abortControllerSafely,\n  createAbortControllerSafely,\n  monotonicNow,\n} from \"./timeout\";\nimport type {\n  FailureClassification,\n  OnRouterAttempt,\n  RouterOrderingToken,\n} from \"./types\";\n\nexport abstract class FallbackPumpContext {\n  protected committed = false; // has any candidate emitted output to the consumer?\n  protected candidateCommitted = false; // has the live candidate emitted content / finished?\n  protected finished = false; // a `finish` part was emitted; the stream is complete\n  protected readonly metadataNodeCounts = new WeakMap<object, number>();\n  protected readonly opaquePartTypes = new WeakMap<object, string>();\n  protected readonly streamJsonBudget = {\n    remainingFileBytes: MAX_FILE_PAYLOAD_BYTES,\n    remaining: MAX_STREAM_JSON_CONTAINERS,\n    remainingCharacters: MAX_STREAM_JSON_CHARACTERS,\n    remainingMetadataCharacters: MAX_STREAM_METADATA_CHARACTERS,\n  };\n  protected candidateBudgetCheckpoint: StreamJsonBudget = {\n    ...this.streamJsonBudget,\n  };\n  protected prelude: LanguageModelV4StreamPart[] = []; // buffered framing of the live candidate\n  protected preludeMetadataNodes = 0;\n  protected preludeTextChars = 0;\n  protected cancelled = false;\n  protected cancelReason: unknown;\n  protected readonly errors: unknown[];\n  protected activeReader: CapturedReader | null = null;\n  protected resumeDemand?: () => void;\n\n  protected readonly candidates: ResolvedEntry[];\n  protected readonly config: FallbackPumpConfig;\n  protected readonly acquireCandidate: FallbackStreamArgs[\"acquireCandidate\"];\n  protected readonly candidateAvailable: FallbackStreamArgs[\"candidateAvailable\"];\n  protected readonly candidateInFlight: FallbackStreamArgs[\"candidateInFlight\"];\n  protected readonly concurrencyLimit: FallbackStreamArgs[\"concurrencyLimit\"];\n  protected readonly prepareCandidate: FallbackStreamArgs[\"prepareCandidate\"];\n  protected readonly releaseCandidate: FallbackStreamArgs[\"releaseCandidate\"];\n  protected readonly releaseProbeCandidate: FallbackStreamArgs[\"releaseProbeCandidate\"];\n  protected readonly waitForCandidate: FallbackStreamArgs[\"waitForCandidate\"];\n  protected readonly classifyFailure: FallbackStreamArgs[\"classifyFailure\"];\n  protected readonly isBudgetFailure: FallbackStreamArgs[\"isBudgetFailure\"];\n  protected readonly nextOrderingToken: FallbackStreamArgs[\"nextOrderingToken\"];\n  protected readonly onAdvance: FallbackStreamArgs[\"onAdvance\"];\n  protected readonly onAttempt: FallbackStreamArgs[\"onAttempt\"];\n  protected readonly onCandidateFailure: FallbackStreamArgs[\"onCandidateFailure\"];\n  protected readonly onCandidateSuccess: FallbackStreamArgs[\"onCandidateSuccess\"];\n  protected readonly onError: FallbackStreamArgs[\"onError\"];\n  protected readonly onRequestOutcome: FallbackStreamArgs[\"onRequestOutcome\"];\n  protected readonly shouldRetry: FallbackStreamArgs[\"shouldRetry\"];\n  protected readonly setActive: (result: LanguageModelV4StreamResult) => void;\n  protected readonly controller: ReadableStreamDefaultController<LanguageModelV4StreamPart>;\n  protected attemptsStarted: number;\n  protected attemptStartedAt: number;\n  protected attemptOrderingToken: RouterOrderingToken;\n  protected validator = new StreamLifecycleValidator();\n  protected activeInFlight?: number;\n  protected activeIndex?: number;\n  protected pendingFallbackIndex?: number;\n  protected waitingIndex?: number;\n  protected cancelledPendingIndex?: number;\n  protected budgetFailureObserved: boolean;\n  protected budgetSuppressed: boolean;\n  protected deferSkippedAttemptEvents = false;\n  protected readonly deferredSkippedAttemptEvents: Parameters<OnRouterAttempt>[0][] =\n    [];\n  protected requestOutcomeObserved = false;\n  protected readonly operationAbort = createAbortControllerSafely();\n  protected removeCallerAbort?: () => void;\n  protected callerAbortObserved = false;\n  protected callerAbortReason: unknown;\n\n  protected abstract captureCallerAbortReason(\n    signal: AbortSignal | undefined\n  ): unknown;\n\n  protected abstract cleanupAbortForwarding(): void;\n\n  protected abstract emitAttempt(\n    idx: number,\n    outcome: \"success\" | \"failure\" | \"cancelled\",\n    error?: unknown,\n    failure?: FailureClassification,\n    willRetry?: boolean,\n    healthTransition?: HealthTransition,\n    inFlight?: number\n  ): void;\n\n  protected abstract finishRequest(success: boolean): void;\n\n  protected abstract pump(\n    result: LanguageModelV4StreamResult,\n    idx: number\n  ): Promise<void>;\n\n  protected abstract releaseActiveCandidate(): void;\n\n  constructor(\n    args: FallbackStreamArgs,\n    setActive: (result: LanguageModelV4StreamResult) => void,\n    controller: ReadableStreamDefaultController<LanguageModelV4StreamPart>,\n    firstResult: LanguageModelV4StreamResult\n  ) {\n    const releaseCandidate = tryCaptureOptionalHook<\n      FallbackStreamArgs[\"releaseCandidate\"]\n    >(args, \"releaseCandidate\");\n    const releaseProbeCandidate = tryCaptureOptionalHook<\n      FallbackStreamArgs[\"releaseProbeCandidate\"]\n    >(args, \"releaseProbeCandidate\");\n    this.releaseCandidate = releaseCandidate.value;\n    this.releaseProbeCandidate = releaseProbeCandidate.value;\n    try {\n      if (releaseCandidate.error !== undefined) {\n        throw releaseCandidate.error;\n      }\n      if (releaseProbeCandidate.error !== undefined) {\n        throw releaseProbeCandidate.error;\n      }\n      this.acquireCandidate = captureOptionalHook(args, \"acquireCandidate\");\n      this.candidateAvailable = captureOptionalHook(args, \"candidateAvailable\");\n      this.candidateInFlight = captureOptionalHook(args, \"candidateInFlight\");\n      this.concurrencyLimit = captureOptionalHook(args, \"concurrencyLimit\");\n      this.prepareCandidate = captureOptionalHook(args, \"prepareCandidate\");\n      this.waitForCandidate = captureOptionalHook(args, \"waitForCandidate\");\n      this.classifyFailure = captureOptionalHook(args, \"classifyFailure\");\n      this.isBudgetFailure = captureOptionalHook(args, \"isBudgetFailure\");\n      this.nextOrderingToken = captureOptionalHook(args, \"nextOrderingToken\");\n      this.onAdvance = captureOptionalHook(args, \"onAdvance\");\n      this.onAttempt = captureOptionalHook(args, \"onAttempt\");\n      this.onCandidateFailure = captureOptionalHook(args, \"onCandidateFailure\");\n      this.onCandidateSuccess = captureOptionalHook(args, \"onCandidateSuccess\");\n      this.onError = captureOptionalHook(args, \"onError\");\n      this.onRequestOutcome = captureOptionalHook(args, \"onRequestOutcome\");\n      this.shouldRetry = captureRequiredHook(args, \"shouldRetry\");\n      this.candidates = snapshotResolvedEntries(args.candidates);\n      this.config = snapshotFallbackPumpConfig(\n        args,\n        this.candidates.length,\n        firstResult\n      );\n    } catch (error) {\n      try {\n        discardLateStreamResult(firstResult);\n      } catch {\n        // Hostile result access cannot suppress the available lease cleanup.\n      }\n      try {\n        runSetupCandidateCleanup(\n          args,\n          this.releaseCandidate,\n          this.releaseProbeCandidate\n        );\n      } catch {\n        // Malformed candidate access leaves no additional safe cleanup path.\n      }\n      throw new CleanedStreamSetupError(error);\n    }\n    this.setActive = setActive;\n    this.controller = controller;\n    this.errors = snapshotPriorErrors(this.config.priorErrors);\n    if (this.config.priorErrors !== undefined) {\n      copyFailureRecord(this.config.priorErrors, this.errors);\n    }\n    this.attemptsStarted = this.config.attemptsStarted ?? 1;\n    this.attemptStartedAt = this.config.startAttemptStartedAt ?? monotonicNow();\n    this.activeInFlight = this.config.startInFlight;\n    this.activeIndex = this.config.startIndex;\n    this.budgetFailureObserved = this.config.budgetFailureObserved ?? false;\n    this.budgetSuppressed = this.config.budgetSuppressed ?? false;\n    this.attemptOrderingToken = isValidOrderingToken(\n      this.config.startOrderingToken\n    )\n      ? this.config.startOrderingToken\n      : fallbackOrderingTokens.next();\n    const callerSignal = this.config.options.abortSignal;\n    if (streamSignalAborted(callerSignal)) {\n      abortControllerSafely(\n        this.operationAbort,\n        this.captureCallerAbortReason(callerSignal)\n      );\n    } else if (callerSignal !== undefined) {\n      const onAbort = () => {\n        if (streamSignalAborted(this.operationAbort.signal)) {\n          return;\n        }\n        abortControllerSafely(\n          this.operationAbort,\n          this.captureCallerAbortReason(callerSignal)\n        );\n      };\n      try {\n        this.removeCallerAbort = addCapturedAbortListener(\n          callerSignal,\n          onAbort\n        );\n        if (streamSignalAborted(callerSignal)) {\n          onAbort();\n        }\n      } catch (error) {\n        abortControllerSafely(this.operationAbort, error);\n      }\n    }\n  }\n}\n","import type { LanguageModelV4StreamPart } from \"@ai-sdk/provider\";\nimport type { HealthTransition } from \"./health-store\";\nimport { runErrorObservabilityHook } from \"./observability\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\nimport {\n  invokeReadOnlyCandidateHook,\n  isValidOrderingToken,\n} from \"./stream-candidate-hooks\";\nimport {\n  consumeFailureClassificationPromiseMutations,\n  validHealthTransitionHookResult,\n} from \"./stream-candidate-snapshot\";\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\nimport {\n  fallbackOrderingTokens,\n  streamCancelReason,\n  streamSignalAborted,\n} from \"./stream-part-fields\";\nimport { FallbackPumpContext } from \"./stream-pump-context\";\nimport { cancelAndReleaseReaderQuietly, cancelQuietly } from \"./stream-reader\";\nimport { abortControllerSafely } from \"./timeout\";\nimport type { FailureClassification, RouterOrderingToken } from \"./types\";\n\nexport abstract class FallbackPumpState extends FallbackPumpContext {\n  run(): Promise<void> {\n    return this.pump(this.config.firstResult, this.config.startIndex);\n  }\n\n  cancel(reason: unknown): void {\n    const callerSignal = this.config.options.abortSignal;\n    const callerAborted =\n      this.callerAbortObserved || streamSignalAborted(callerSignal);\n    const safeReason = callerAborted\n      ? this.captureCallerAbortReason(callerSignal)\n      : streamCancelReason(reason);\n    this.cancelled = true;\n    this.cancelReason = safeReason;\n    abortControllerSafely(this.operationAbort, safeReason);\n    this.cleanupAbortForwarding();\n    const reader = this.activeReader;\n    this.activeReader = null;\n    cancelAndReleaseReaderQuietly(reader, safeReason);\n    this.resume();\n    if (!callerAborted) {\n      if (this.activeIndex === undefined) {\n        this.cancelledPendingIndex =\n          this.waitingIndex ?? this.pendingFallbackIndex;\n      } else {\n        this.emitAttempt(this.activeIndex, \"cancelled\");\n      }\n    }\n    this.releaseActiveCandidate();\n  }\n\n  resume(): void {\n    const resume = this.resumeDemand;\n    this.resumeDemand = undefined;\n    resume?.();\n  }\n\n  failUnexpected(error: unknown): void {\n    cancelQuietly(this.activeReader, error);\n    this.releaseActiveCandidate();\n    this.safeError(error);\n    this.finishRequest(false);\n    this.resume();\n  }\n\n  protected safeEnqueue(part: LanguageModelV4StreamPart): void {\n    try {\n      this.controller.enqueue(part);\n    } catch {\n      // Controller already closed/errored (e.g. after cancel).\n    }\n  }\n\n  protected safeClose(): void {\n    try {\n      this.controller.close();\n    } catch {\n      // Already closed.\n    }\n  }\n\n  protected safeError(error: unknown): void {\n    try {\n      this.controller.error(error);\n    } catch {\n      // Already closed/errored.\n    }\n  }\n\n  protected flushPrelude(): void {\n    for (const part of this.prelude) {\n      this.safeEnqueue(part);\n    }\n    this.prelude = [];\n    this.preludeMetadataNodes = 0;\n    this.preludeTextChars = 0;\n  }\n\n  protected emitOnError(error: unknown, idx: number, willRetry: boolean): void {\n    const payload = {\n      logicalId: this.config.logicalId,\n      entry: this.candidates[idx].entry,\n      index: this.candidates[idx].fullIndex,\n      error,\n      phase: this.committed\n        ? (\"stream-mid\" as const)\n        : (\"stream-open\" as const),\n      willRetry,\n    };\n    runErrorObservabilityHook(payload, (event) => this.onError?.(event));\n  }\n\n  protected recordCandidateFailure(\n    idx: number,\n    classification: FailureClassification\n  ): HealthTransition | undefined {\n    const hookClassification = { ...classification };\n    try {\n      const result = invokeReadOnlyCandidateHook(\n        this.onCandidateFailure,\n        this.candidates[idx],\n        hookClassification,\n        this.attemptOrderingToken,\n        this.attemptStartedAt\n      );\n      return validHealthTransitionHookResult(result);\n    } catch {\n      return;\n    } finally {\n      consumeFailureClassificationPromiseMutations(hookClassification);\n    }\n  }\n\n  protected recordCandidateSuccess(idx: number): HealthTransition | undefined {\n    try {\n      const result = invokeReadOnlyCandidateHook(\n        this.onCandidateSuccess,\n        this.candidates[idx],\n        this.attemptOrderingToken,\n        this.attemptStartedAt\n      );\n      return validHealthTransitionHookResult(result);\n    } catch {\n      return;\n    }\n  }\n\n  protected nextAttemptOrderingToken(): RouterOrderingToken {\n    try {\n      const token = this.nextOrderingToken?.();\n      if (consumeGenuinePromise(token)) {\n        throw new TypeError(\n          \"ai-router: nextOrderingToken hook must return synchronously\"\n        );\n      }\n      if (isValidOrderingToken(token)) {\n        return token;\n      }\n    } catch {\n      // An optional token source cannot prevent a provider attempt.\n    }\n    return fallbackOrderingTokens.next();\n  }\n}\n","import { consumeGenuinePromise, requireGenuinePromise } from \"./runtime-types\";\nimport {\n  runIsolatedCandidateCleanup,\n  runProbeCandidateCleanup,\n} from \"./stream-candidate-cleanup\";\nimport {\n  invokeReadOnlyCandidateHook,\n  requireOptionalBooleanHookResult,\n  snapshotCandidateForStateHook,\n} from \"./stream-candidate-hooks\";\nimport {\n  consumeCandidateSnapshotPromiseMutations,\n  ownCandidateField,\n  snapshotCandidateProbeLease,\n} from \"./stream-candidate-snapshot\";\nimport { FallbackPumpState } from \"./stream-pump-state\";\nimport type { ResolvedEntry } from \"./stream-types\";\nimport { jitteredBackoff, monotonicNow, RouterTimeoutError } from \"./timeout\";\n\nexport abstract class FallbackPumpAdmission extends FallbackPumpState {\n  protected abstract discardDeferredConcurrencySkip(idx: number): void;\n\n  protected abstract emitSkippedAttempt(\n    idx: number,\n    reason: \"concurrency\" | \"cooldown\"\n  ): void;\n\n  protected async admitNext(\n    retry: boolean,\n    withinAttemptBudget: boolean,\n    nextIndex: number\n  ): Promise<{\n    acquired?: { index: number; inFlight?: number };\n    error?: unknown;\n  }> {\n    if (\n      !(retry && withinAttemptBudget) ||\n      nextIndex >= this.candidates.length ||\n      this.cancelled\n    ) {\n      return {};\n    }\n    try {\n      await this.backoffBeforeAdmission();\n      return { acquired: await this.acquireNext(nextIndex) };\n    } catch (error) {\n      return { error };\n    }\n  }\n\n  protected backoffBeforeAdmission(): Promise<void> {\n    const remaining =\n      this.config.totalDeadline === undefined\n        ? undefined\n        : this.config.totalDeadline - monotonicNow();\n    if (remaining !== undefined && remaining <= 0) {\n      return Promise.reject(\n        new RouterTimeoutError(\"total_timeout\", this.config.totalTimeout ?? 0)\n      );\n    }\n    const maximum =\n      remaining === undefined || this.config.backoff === undefined\n        ? this.config.backoff\n        : Math.min(this.config.backoff, remaining);\n    return jitteredBackoff(maximum, this.operationAbort.signal);\n  }\n\n  protected nextAvailableIndex(startIndex: number): number {\n    let index = startIndex;\n    while (\n      index < this.candidates.length &&\n      !requireOptionalBooleanHookResult(\n        invokeReadOnlyCandidateHook(\n          this.candidateAvailable,\n          this.candidates[index]\n        ),\n        \"candidateAvailable\"\n      )\n    ) {\n      this.emitSkippedAttempt(index, \"cooldown\");\n      index += 1;\n    }\n    return index;\n  }\n\n  protected prepareCandidateBeforeAdmission(candidate: ResolvedEntry): boolean {\n    try {\n      const prepared = requireOptionalBooleanHookResult(\n        this.invokePrepareCandidate(candidate),\n        \"prepareCandidate\"\n      );\n      if (!prepared) {\n        runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      }\n      return prepared;\n    } catch (error) {\n      runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      throw error;\n    }\n  }\n\n  protected prepareOwnedCandidate(candidate: ResolvedEntry): boolean {\n    try {\n      const prepared = requireOptionalBooleanHookResult(\n        this.invokePrepareCandidate(candidate),\n        \"prepareCandidate\"\n      );\n      if (!prepared) {\n        runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      }\n      return prepared;\n    } catch (error) {\n      runIsolatedCandidateCleanup(this.releaseCandidate, candidate);\n      runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      throw error;\n    }\n  }\n\n  protected invokePrepareCandidate(candidate: ResolvedEntry): unknown {\n    if (this.prepareCandidate === undefined) {\n      return;\n    }\n    const hookCandidate = snapshotCandidateForStateHook(candidate);\n    let didThrow = false;\n    let thrown: unknown;\n    let result: unknown;\n    try {\n      result = this.prepareCandidate(hookCandidate);\n    } catch (error) {\n      didThrow = true;\n      thrown = error;\n    }\n    consumeCandidateSnapshotPromiseMutations(hookCandidate);\n    try {\n      candidate.probeLease = snapshotCandidateProbeLease(\n        ownCandidateField(hookCandidate, \"probeLease\"),\n        candidate.fullIndex\n      );\n    } catch (error) {\n      if (!didThrow) {\n        didThrow = true;\n        thrown = error;\n      }\n    }\n    if (didThrow) {\n      throw thrown;\n    }\n    return result;\n  }\n\n  protected acquirePreparedCandidate(\n    candidate: ResolvedEntry\n  ): number | undefined {\n    try {\n      const inFlight = invokeReadOnlyCandidateHook(\n        this.acquireCandidate,\n        candidate\n      );\n      if (consumeGenuinePromise(inFlight)) {\n        throw new TypeError(\n          \"ai-router: admission acquire hook must return synchronously\"\n        );\n      }\n      if (\n        inFlight !== undefined &&\n        (!Number.isSafeInteger(inFlight) || inFlight < 1)\n      ) {\n        throw new Error(\n          \"ai-router: admission acquire hook must return a positive safe in-flight count or undefined\"\n        );\n      }\n      return inFlight;\n    } catch (error) {\n      runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      throw error;\n    }\n  }\n\n  protected availableAfterAdmission(candidate: ResolvedEntry): boolean {\n    try {\n      return requireOptionalBooleanHookResult(\n        invokeReadOnlyCandidateHook(this.candidateAvailable, candidate),\n        \"candidateAvailable\"\n      );\n    } catch (error) {\n      runIsolatedCandidateCleanup(this.releaseCandidate, candidate);\n      runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      throw error;\n    }\n  }\n\n  protected async acquireNext(\n    startIndex: number\n  ): Promise<{ index: number; inFlight?: number } | undefined> {\n    if (this.acquireCandidate === undefined) {\n      return { index: startIndex };\n    }\n    let lastCapacityIndex: number | undefined;\n    for (let index = startIndex; index < this.candidates.length; index++) {\n      if (\n        !requireOptionalBooleanHookResult(\n          invokeReadOnlyCandidateHook(\n            this.candidateAvailable,\n            this.candidates[index]\n          ),\n          \"candidateAvailable\"\n        )\n      ) {\n        this.emitSkippedAttempt(index, \"cooldown\");\n        continue;\n      }\n      if (!this.prepareCandidateBeforeAdmission(this.candidates[index])) {\n        this.emitSkippedAttempt(index, \"cooldown\");\n        continue;\n      }\n      const inFlight = this.acquirePreparedCandidate(this.candidates[index]);\n      if (inFlight !== undefined) {\n        if (!this.availableAfterAdmission(this.candidates[index])) {\n          runIsolatedCandidateCleanup(\n            this.releaseCandidate,\n            this.candidates[index]\n          );\n          runProbeCandidateCleanup(\n            this.releaseProbeCandidate,\n            this.candidates[index]\n          );\n          this.emitSkippedAttempt(index, \"cooldown\");\n          continue;\n        }\n        return { index, inFlight };\n      }\n      lastCapacityIndex = index;\n      runProbeCandidateCleanup(\n        this.releaseProbeCandidate,\n        this.candidates[index]\n      );\n      this.emitSkippedAttempt(index, \"concurrency\");\n    }\n    if (\n      this.waitForCandidate !== undefined &&\n      lastCapacityIndex !== undefined\n    ) {\n      try {\n        const acquired = await this.waitForCapacity(lastCapacityIndex);\n        if (acquired !== undefined) {\n          this.discardDeferredConcurrencySkip(lastCapacityIndex);\n        }\n        return acquired;\n      } catch (error) {\n        this.discardDeferredConcurrencySkip(lastCapacityIndex);\n        throw error;\n      }\n    }\n    return;\n  }\n\n  protected async waitForCapacity(\n    index: number\n  ): Promise<{ index: number; inFlight?: number } | undefined> {\n    const candidate = this.candidates[index];\n    this.waitingIndex = index;\n    let inFlight: number | undefined;\n    try {\n      const pending = invokeReadOnlyCandidateHook(\n        this.waitForCandidate,\n        candidate,\n        this.operationAbort.signal\n      );\n      inFlight = await requireGenuinePromise<number | undefined>(\n        pending,\n        (error) =>\n          new Error(\n            \"ai-router: admission wait hook must return a genuine Promise\",\n            { cause: error }\n          )\n      );\n    } finally {\n      this.waitingIndex = undefined;\n    }\n    if (inFlight === undefined) {\n      this.assertWaitDeadline();\n      return;\n    }\n    if (!Number.isSafeInteger(inFlight) || inFlight < 1) {\n      throw new Error(\n        \"ai-router: admission wait hook must resolve to a positive safe in-flight count or undefined\"\n      );\n    }\n    if (!this.prepareOwnedCandidate(candidate)) {\n      runIsolatedCandidateCleanup(this.releaseCandidate, candidate);\n      this.emitSkippedAttempt(index, \"cooldown\");\n      return;\n    }\n    if (!this.availableAfterAdmission(candidate)) {\n      runIsolatedCandidateCleanup(this.releaseCandidate, candidate);\n      runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      this.emitSkippedAttempt(index, \"cooldown\");\n      return;\n    }\n    return { index, inFlight };\n  }\n\n  protected assertWaitDeadline(): void {\n    if (\n      this.config.totalDeadline !== undefined &&\n      monotonicNow() >= this.config.totalDeadline\n    ) {\n      throw new RouterTimeoutError(\n        \"total_timeout\",\n        this.config.totalTimeout ?? 0\n      );\n    }\n  }\n}\n","import {\n  isTerminalRequestFailure,\n  normalizeFailureClassification,\n} from \"./failure\";\nimport type { HealthTransition } from \"./health-store\";\nimport { runAttemptObservabilityHook } from \"./observability\";\nimport { safeShouldRetry } from \"./retry\";\nimport {\n  runIsolatedCandidateCleanup,\n  runProbeCandidateCleanup,\n} from \"./stream-candidate-cleanup\";\nimport { optionalMetricHookValue } from \"./stream-candidate-hooks\";\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\nimport { streamSignalAborted } from \"./stream-part-fields\";\nimport { FallbackPumpAdmission } from \"./stream-pump-admission\";\nimport { monotonicNow } from \"./timeout\";\nimport type { FailureClassification, OnRouterAttempt } from \"./types\";\n\nexport abstract class FallbackPumpObservability extends FallbackPumpAdmission {\n  protected classifyError(error: unknown): FailureClassification {\n    if (\n      streamSignalAborted(this.config.options.abortSignal) ||\n      (this.classifyFailure === undefined && isTerminalRequestFailure(error))\n    ) {\n      return { retryable: false, scope: \"request\" };\n    }\n    try {\n      return normalizeFailureClassification(\n        this.classifyFailure === undefined\n          ? {\n              retryable: safeShouldRetry(this.shouldRetry, error),\n              scope: \"transient\" as const,\n            }\n          : this.classifyFailure(error)\n      );\n    } catch {\n      return { retryable: false, scope: \"request\" };\n    }\n  }\n\n  protected emitAttempt(\n    idx: number,\n    outcome: \"success\" | \"failure\" | \"cancelled\",\n    error?: unknown,\n    failure?: FailureClassification,\n    willRetry?: boolean,\n    healthTransition?: HealthTransition,\n    inFlight: number | undefined = this.activeInFlight\n  ): void {\n    const payload = {\n      attempt: this.attemptsStarted,\n      durationMs: Math.max(0, monotonicNow() - this.attemptStartedAt),\n      entry: this.candidates[idx].entry,\n      ...(error === undefined ? {} : { error }),\n      ...(failure === undefined ? {} : { failure: { ...failure } }),\n      ...(healthTransition === undefined ? {} : { healthTransition }),\n      index: this.candidates[idx].fullIndex,\n      inFlight,\n      concurrencyLimit: optionalMetricHookValue(\n        this.concurrencyLimit,\n        this.candidates[idx]\n      ),\n      logicalId: this.config.logicalId,\n      outcome,\n      phase: this.committed\n        ? (\"stream-mid\" as const)\n        : (\"stream-open\" as const),\n      ...(willRetry === undefined ? {} : { willRetry }),\n    };\n    runAttemptObservabilityHook(payload, (event) => this.onAttempt?.(event));\n  }\n\n  protected emitSkippedAttempt(\n    idx: number,\n    reason: \"concurrency\" | \"cooldown\"\n  ): void {\n    const payload = {\n      durationMs: 0,\n      entry: this.candidates[idx].entry,\n      index: this.candidates[idx].fullIndex,\n      concurrencyLimit: optionalMetricHookValue(\n        this.concurrencyLimit,\n        this.candidates[idx]\n      ),\n      ...(reason === \"concurrency\"\n        ? {\n            inFlight: optionalMetricHookValue(\n              this.candidateInFlight,\n              this.candidates[idx]\n            ),\n          }\n        : {}),\n      logicalId: this.config.logicalId,\n      outcome: \"skipped\" as const,\n      phase: this.committed\n        ? (\"stream-mid\" as const)\n        : (\"stream-open\" as const),\n      reason,\n    };\n    this.emitOrDeferSkippedAttempt(payload);\n  }\n\n  protected releaseActiveCandidate(): void {\n    if (this.activeIndex === undefined) {\n      return;\n    }\n    const candidate = this.candidates[this.activeIndex];\n    this.activeIndex = undefined;\n    this.activeInFlight = undefined;\n    runIsolatedCandidateCleanup(this.releaseCandidate, candidate);\n    runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n  }\n\n  protected emitMaxAttemptSkips(startIndex: number): void {\n    for (let idx = startIndex; idx < this.candidates.length; idx++) {\n      const payload = {\n        durationMs: 0,\n        entry: this.candidates[idx].entry,\n        index: this.candidates[idx].fullIndex,\n        concurrencyLimit: optionalMetricHookValue(\n          this.concurrencyLimit,\n          this.candidates[idx]\n        ),\n        logicalId: this.config.logicalId,\n        outcome: \"skipped\" as const,\n        phase: this.committed\n          ? (\"stream-mid\" as const)\n          : (\"stream-open\" as const),\n        reason: \"max-attempts\" as const,\n      };\n      this.emitOrDeferSkippedAttempt(payload);\n    }\n  }\n\n  protected emitOrDeferSkippedAttempt(\n    payload: Parameters<OnRouterAttempt>[0]\n  ): void {\n    if (this.deferSkippedAttemptEvents) {\n      this.deferredSkippedAttemptEvents.push(payload);\n      return;\n    }\n    runAttemptObservabilityHook(payload, (event) => this.onAttempt?.(event));\n  }\n\n  protected flushDeferredSkippedAttemptEvents(): void {\n    for (const payload of this.deferredSkippedAttemptEvents) {\n      runAttemptObservabilityHook(payload, (event) => this.onAttempt?.(event));\n    }\n    this.deferredSkippedAttemptEvents.length = 0;\n  }\n\n  protected discardDeferredConcurrencySkip(idx: number): void {\n    const index = this.candidates[idx].fullIndex;\n    for (\n      let position = this.deferredSkippedAttemptEvents.length - 1;\n      position >= 0;\n      position--\n    ) {\n      const payload = this.deferredSkippedAttemptEvents[position];\n      if (\n        payload.index === index &&\n        payload.outcome === \"skipped\" &&\n        payload.reason === \"concurrency\"\n      ) {\n        this.deferredSkippedAttemptEvents.splice(position, 1);\n        return;\n      }\n    }\n  }\n\n  protected emitCancelledPendingAttempt(): void {\n    const idx = this.cancelledPendingIndex;\n    this.cancelledPendingIndex = undefined;\n    if (idx === undefined) {\n      return;\n    }\n    const payload = {\n      durationMs: 0,\n      entry: this.candidates[idx].entry,\n      index: this.candidates[idx].fullIndex,\n      concurrencyLimit: optionalMetricHookValue(\n        this.concurrencyLimit,\n        this.candidates[idx]\n      ),\n      inFlight: optionalMetricHookValue(\n        this.candidateInFlight,\n        this.candidates[idx]\n      ),\n      logicalId: this.config.logicalId,\n      outcome: \"cancelled\" as const,\n      phase: this.committed\n        ? (\"stream-mid\" as const)\n        : (\"stream-open\" as const),\n    };\n    runAttemptObservabilityHook(payload, (event) => this.onAttempt?.(event));\n  }\n\n  protected beginDeferredAdmission(\n    retry: boolean,\n    withinAttemptBudget: boolean,\n    nextIdx: number\n  ): void {\n    this.deferSkippedAttemptEvents = true;\n    this.pendingFallbackIndex =\n      retry && withinAttemptBudget && nextIdx < this.candidates.length\n        ? nextIdx\n        : undefined;\n  }\n\n  protected endDeferredAdmission(): void {\n    this.deferSkippedAttemptEvents = false;\n    this.pendingFallbackIndex = undefined;\n  }\n\n  // Buffer framing pre-commit, else commit + forward. Returns whether this\n  // candidate has been committed to cooldown yet.\n}\n","import type { LanguageModelV4StreamResult } from \"@ai-sdk/provider\";\nimport { cloneCallOptions } from \"./call-options\";\nimport { recordFailure, surfaceFailure } from \"./retry\";\nimport { discardLateStreamResult } from \"./stream\";\nimport {\n  runIsolatedCandidateCleanup,\n  runProbeCandidateCleanup,\n} from \"./stream-candidate-cleanup\";\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\nimport { streamAbortReason, streamSignalAborted } from \"./stream-part-fields\";\nimport { FallbackPumpObservability } from \"./stream-pump-observability\";\nimport { cancelQuietly } from \"./stream-reader\";\nimport { effectiveTimeout, monotonicNow, RouterTimeoutError } from \"./timeout\";\nimport { withTimeout } from \"./timeout-operation\";\nimport type { FailureClassification } from \"./types\";\n\nexport abstract class FallbackPumpFailure extends FallbackPumpObservability {\n  protected abstract observeFailureForBudget(\n    failure: FailureClassification\n  ): void;\n\n  protected async onFailure(error: unknown, idx: number): Promise<void> {\n    const failedInFlight = this.activeInFlight;\n    if (this.terminateForCallerAbort()) {\n      return;\n    }\n    // Once this candidate has failed, it must not keep producing an unread\n    // body while a fallback is opening. This also releases provider-side\n    // sockets and generation work promptly.\n    cancelQuietly(this.activeReader, error);\n    this.rollbackDiscardedCandidateBudget();\n    // The failed candidate's buffered framing is dropped — it never streams.\n    this.prelude = [];\n    this.preludeMetadataNodes = 0;\n    this.preludeTextChars = 0;\n    recordFailure(this.errors, error);\n    const classification = this.classifyError(error);\n    this.observeFailureForBudget(classification);\n    const healthTransition = this.recordCandidateFailure(idx, classification);\n    this.releaseActiveCandidate();\n    const blockedByOutput = this.committed && !this.config.retryAfterOutput;\n    const retry = !blockedByOutput && classification.retryable;\n    let nextIdx = this.nextAvailableIndex(idx + 1);\n    const withinAttemptBudget =\n      this.attemptsStarted <\n      (this.config.maxAttempts ?? this.candidates.length);\n    this.beginDeferredAdmission(retry, withinAttemptBudget, nextIdx);\n    let admission: Awaited<ReturnType<FallbackPumpFailure[\"admitNext\"]>>;\n    try {\n      this.emitMaxAttemptSkipsWhenNeeded(retry, nextIdx, withinAttemptBudget);\n      admission = await this.admitNext(retry, withinAttemptBudget, nextIdx);\n    } finally {\n      this.endDeferredAdmission();\n    }\n    const { acquired, error: admissionError } = admission;\n    const willRetry = acquired !== undefined;\n    this.emitOnError(error, idx, willRetry);\n    this.emitAttempt(\n      idx,\n      \"failure\",\n      error,\n      classification,\n      willRetry,\n      healthTransition,\n      failedInFlight\n    );\n    this.flushDeferredSkippedAttemptEvents();\n    this.emitCancelledPendingAttempt();\n\n    if (blockedByOutput) {\n      this.finishRequest(false);\n      this.safeError(error);\n      return;\n    }\n    if (admissionError !== undefined) {\n      // Admission/backoff control failures terminate the request without\n      // turning an earlier provider failure into a retry-budget sample. In\n      // particular, a total deadline or caller abort while queued is censored\n      // just like the same control error during provider opening.\n      this.budgetSuppressed = true;\n      this.finishRequest(false);\n      this.safeError(admissionError);\n      return;\n    }\n    if (!retry) {\n      this.finishRequest(false);\n      this.safeError(this.terminalFailure(error, classification));\n      return;\n    }\n    if (!willRetry) {\n      this.finishRequest(false);\n      this.safeError(surfaceFailure(this.errors, this.config.logicalId));\n      return;\n    }\n    if (this.cancelled) {\n      const candidate = this.candidates[acquired.index];\n      runIsolatedCandidateCleanup(this.releaseCandidate, candidate);\n      runProbeCandidateCleanup(this.releaseProbeCandidate, candidate);\n      return;\n    }\n\n    let nextResult: LanguageModelV4StreamResult;\n    nextIdx = acquired.index;\n    this.activeIndex = nextIdx;\n    this.activeInFlight = acquired.inFlight;\n    try {\n      this.attemptsStarted += 1;\n      this.attemptStartedAt = monotonicNow();\n      this.attemptOrderingToken = this.nextAttemptOrderingToken();\n      const remaining =\n        this.config.totalDeadline === undefined\n          ? undefined\n          : this.config.totalDeadline - monotonicNow();\n      if (remaining !== undefined && remaining <= 0) {\n        throw new RouterTimeoutError(\n          \"total_timeout\",\n          this.config.totalTimeout ?? 0\n        );\n      }\n      const timeout = effectiveTimeout(this.config.attemptTimeout, remaining);\n      nextResult = await withTimeout(\n        (signal) =>\n          this.candidates[nextIdx].model.doStream(\n            cloneCallOptions(this.config.options, signal)\n          ),\n        timeout,\n        this.operationAbort.signal,\n        remaining !== undefined && timeout === remaining\n          ? \"total_timeout\"\n          : \"attempt_timeout\",\n        remaining !== undefined && timeout === remaining\n          ? this.config.totalTimeout\n          : this.config.attemptTimeout,\n        discardLateStreamResult\n      );\n    } catch (openErr) {\n      return this.handleFallbackOpenFailure(openErr, nextIdx);\n    }\n    return this.pump(nextResult, nextIdx);\n  }\n\n  protected emitMaxAttemptSkipsWhenNeeded(\n    retry: boolean,\n    nextIndex: number,\n    withinAttemptBudget: boolean\n  ): void {\n    if (retry && nextIndex < this.candidates.length && !withinAttemptBudget) {\n      this.emitMaxAttemptSkips(nextIndex);\n    }\n  }\n\n  protected terminateForCallerAbort(): boolean {\n    const callerSignal = this.config.options.abortSignal;\n    if (!streamSignalAborted(callerSignal)) {\n      return false;\n    }\n    const reason = this.captureCallerAbortReason(callerSignal);\n    cancelQuietly(this.activeReader, reason);\n    this.rollbackDiscardedCandidateBudget();\n    this.prelude = [];\n    this.preludeMetadataNodes = 0;\n    this.preludeTextChars = 0;\n    this.budgetSuppressed = true;\n    this.releaseActiveCandidate();\n    this.finishRequest(false);\n    this.safeError(reason);\n    return true;\n  }\n\n  protected captureCallerAbortReason(signal: AbortSignal | undefined): unknown {\n    if (!this.callerAbortObserved) {\n      this.callerAbortObserved = true;\n      this.callerAbortReason = streamAbortReason(signal);\n    }\n    return this.callerAbortReason;\n  }\n\n  protected rollbackDiscardedCandidateBudget(): void {\n    if (!this.candidateCommitted) {\n      Object.assign(this.streamJsonBudget, this.candidateBudgetCheckpoint);\n    }\n  }\n\n  protected handleFallbackOpenFailure(\n    error: unknown,\n    index: number\n  ): Promise<void> | undefined {\n    return this.cancelled ? undefined : this.onFailure(error, index);\n  }\n\n  protected terminalFailure(\n    error: unknown,\n    classification: FailureClassification\n  ): unknown {\n    return classification.scope === \"request\" &&\n      classification.statusCode === undefined\n      ? error\n      : surfaceFailure(this.errors, this.config.logicalId);\n  }\n}\n","import type { LanguageModelV4StreamPart } from \"@ai-sdk/provider\";\nimport { countJsonContainersUpTo } from \"./json-value\";\nimport { isBoundedIdentifier, isDenseArray } from \"./runtime-types\";\n/**\n * A modality-filtered candidate, resolved to a concrete v4 model. `fullIndex` is\n * the candidate's position in the original (unfiltered) entries array — used to\n * drive cooldown stickiness.\n */\nimport {\n  FRAMING_PARTS,\n  MAX_PRELUDE_METADATA_NODES,\n  MAX_PRELUDE_PARTS,\n  MAX_PRELUDE_TEXT_CHARS,\n  MAX_STREAM_WARNINGS,\n  PROVIDER_METADATA_PARTS,\n} from \"./stream-part-fields\";\nimport {\n  type SnapshottedStreamPart,\n  snapshotKnownStreamPart,\n} from \"./stream-part-snapshot\";\nimport {\n  consumeStreamMetadataStrings,\n  validFinishPart,\n  validKnownStreamPartShape,\n  validWarning,\n} from \"./stream-part-validation\";\nimport { FallbackPumpFailure } from \"./stream-pump-failure\";\nimport { InvalidModelStreamError } from \"./stream-reader\";\n\nexport abstract class FallbackPumpParts extends FallbackPumpFailure {\n  protected isEmptyFinish(\n    value: LanguageModelV4StreamPart,\n    candidateHasOutput: boolean\n  ): boolean {\n    return this.partType(value) === \"finish\" && !candidateHasOutput;\n  }\n\n  protected preludeWouldOverflow(value: LanguageModelV4StreamPart): boolean {\n    return (\n      !this.candidateCommitted &&\n      this.shouldBufferPart(value) &&\n      (this.prelude.length >= MAX_PRELUDE_PARTS ||\n        this.preludeMetadataNodes + this.bufferedMetadataNodes(value) >\n          MAX_PRELUDE_METADATA_NODES ||\n        this.preludeTextChars + this.bufferedTextLength(value) >\n          MAX_PRELUDE_TEXT_CHARS)\n    );\n  }\n\n  protected bufferedMetadataNodes(value: LanguageModelV4StreamPart): number {\n    if (!PROVIDER_METADATA_PARTS.has(value.type)) {\n      return 0;\n    }\n    const cached = this.metadataNodeCounts.get(value as object);\n    if (cached !== undefined) {\n      return cached;\n    }\n    const count = countJsonContainersUpTo(\n      Reflect.get(value as object, \"providerMetadata\"),\n      MAX_PRELUDE_METADATA_NODES + 1\n    );\n    this.metadataNodeCounts.set(value as object, count);\n    return count;\n  }\n\n  protected bufferedTextLength(value: LanguageModelV4StreamPart): number {\n    const type = this.partType(value);\n    if (\n      type === \"text-delta\" ||\n      type === \"reasoning-delta\" ||\n      type === \"tool-input-delta\"\n    ) {\n      return (Reflect.get(value as object, \"delta\") as string).length;\n    }\n    if (type === \"raw\") {\n      const rawValue = Reflect.get(value as object, \"rawValue\");\n      return typeof rawValue === \"string\" ? rawValue.length : 0;\n    }\n    return 0;\n  }\n\n  protected isOutputPart(value: LanguageModelV4StreamPart): boolean {\n    return !this.shouldBufferPart(value) && this.partType(value) !== \"finish\";\n  }\n\n  protected shouldBufferPart(value: LanguageModelV4StreamPart): boolean {\n    const type = this.partType(value);\n    if (this.config.strictStreamValidation && type === \"tool-input-delta\") {\n      // Strict mode waits for the final tool-call before exposing partial tool\n      // input, so a malformed lifecycle can still fall back transparently.\n      return true;\n    }\n    if (type === \"text-delta\" || type === \"reasoning-delta\") {\n      return (\n        (Reflect.get(value as object, \"delta\") as string).trim().length === 0\n      );\n    }\n    return FRAMING_PARTS.has(type);\n  }\n\n  protected partType(value: LanguageModelV4StreamPart): string {\n    return this.opaquePartTypes.get(value as object) ?? value.type;\n  }\n\n  protected validatePart(\n    value: LanguageModelV4StreamPart\n  ): unknown | undefined {\n    try {\n      if (!validKnownStreamPartShape(value)) {\n        return new InvalidModelStreamError(\"stream part shape is malformed\");\n      }\n      if (\n        value.type === \"stream-start\" &&\n        (!Array.isArray(value.warnings) ||\n          value.warnings.length > MAX_STREAM_WARNINGS ||\n          !isDenseArray(value.warnings) ||\n          !value.warnings.every(validWarning))\n      ) {\n        return new InvalidModelStreamError(\"stream warnings are malformed\");\n      }\n      if (!validFinishPart(value)) {\n        return new InvalidModelStreamError(\"finish metadata is malformed\");\n      }\n      if (this.config.strictStreamValidation) {\n        this.validator.validate(value);\n      }\n      return;\n    } catch (validationError) {\n      return validationError instanceof InvalidModelStreamError\n        ? validationError\n        : new InvalidModelStreamError(\"stream metadata could not be read\");\n    }\n  }\n\n  protected async snapshotAndValidatePart(\n    value: LanguageModelV4StreamPart,\n    index: number\n  ): Promise<LanguageModelV4StreamPart | undefined> {\n    let snapshot: SnapshottedStreamPart;\n    try {\n      snapshot = snapshotKnownStreamPart(value, this.streamJsonBudget);\n      if (snapshot.known) {\n        consumeStreamMetadataStrings(snapshot.part, this.streamJsonBudget);\n      } else if (isBoundedIdentifier(snapshot.type, 256)) {\n        this.opaquePartTypes.set(\n          snapshot.part as object,\n          snapshot.type as string\n        );\n      } else {\n        throw new Error(\"unknown stream part type is malformed\");\n      }\n    } catch (error) {\n      await this.onFailure(\n        new InvalidModelStreamError(\n          \"stream part properties could not be read\",\n          error\n        ),\n        index\n      );\n      return;\n    }\n    const validationError = snapshot.known\n      ? this.validatePart(snapshot.part)\n      : undefined;\n    if (validationError !== undefined) {\n      await this.onFailure(validationError, index);\n      return;\n    }\n    return snapshot.part;\n  }\n}\n","import type {\n  LanguageModelV4StreamPart,\n  LanguageModelV4StreamResult,\n} from \"@ai-sdk/provider\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\nimport { consumeFailureClassificationPromiseMutations } from \"./stream-candidate-snapshot\";\nimport { StreamLifecycleValidator } from \"./stream-lifecycle-validator\";\nimport { FallbackPumpParts } from \"./stream-pump-parts\";\nimport {\n  type CapturedReader,\n  cancelAndReleaseReaderQuietly,\n  cancelQuietly,\n  captureReader,\n  EmptyModelStreamError,\n  IncompleteModelStreamError,\n  InvalidModelStreamError,\n  releaseReaderLockQuietly,\n  StreamPreludeOverflowError,\n  snapshotReadResult,\n} from \"./stream-reader\";\nimport { monotonicNow, RouterTimeoutError } from \"./timeout\";\nimport { withTimeout } from \"./timeout-operation\";\nimport type { FailureClassification } from \"./types\";\n\nexport class FallbackPump extends FallbackPumpParts {\n  protected forwardPart(\n    value: LanguageModelV4StreamPart,\n    idx: number,\n    advanced: boolean\n  ): boolean {\n    if (this.shouldBufferPart(value)) {\n      if (this.candidateCommitted) {\n        this.safeEnqueue(value); // post-commit framing passes through\n      } else {\n        this.prelude.push(value); // pre-commit framing is buffered\n        this.preludeMetadataNodes += this.bufferedMetadataNodes(value);\n        this.preludeTextChars += this.bufferedTextLength(value);\n      }\n      return advanced;\n    }\n    // A commit part: real content, or a `finish` terminal.\n    if (!this.candidateCommitted) {\n      this.candidateCommitted = true;\n      this.committed = true;\n      this.flushPrelude();\n    }\n    this.safeEnqueue(value);\n    if (this.partType(value) === \"finish\") {\n      this.finished = true;\n      const healthTransition = this.recordCandidateSuccess(idx);\n      this.finishRequest(true);\n      this.emitAttempt(\n        idx,\n        \"success\",\n        undefined,\n        undefined,\n        undefined,\n        healthTransition\n      );\n      this.releaseActiveCandidate();\n    }\n    if (advanced) {\n      return true;\n    }\n    try {\n      consumeGenuinePromise(this.onAdvance?.(idx, this.errors.length > 0));\n    } catch {\n      // Optional cooldown bookkeeping cannot alter an emitted stream.\n    }\n    return true;\n  }\n\n  protected cleanupReader(reader: CapturedReader): void {\n    if (this.cancelled) {\n      // Propagate the consumer's cancel to the live upstream (this may be a\n      // survivor opened during the fallback race) so its transport closes.\n      if (this.activeReader === reader) {\n        this.activeReader = null;\n        cancelAndReleaseReaderQuietly(reader, this.cancelReason);\n      }\n    } else {\n      releaseReaderLockQuietly(reader);\n    }\n    if (this.activeReader === reader) {\n      this.activeReader = null;\n    }\n  }\n\n  // A read rejection after the stream already finished is just the connection\n  // closing — nothing to fall back to; otherwise route it through onFailure.\n  protected handleReadError(readErr: unknown, idx: number): Promise<void> {\n    if (this.finished) {\n      this.safeClose();\n      return Promise.resolve();\n    }\n    return this.onFailure(readErr, idx);\n  }\n\n  // An in-band error part: ignore after finish; forward verbatim if content\n  // already streamed and we won't retry; otherwise fall back (swallowing it).\n  protected handleErrorPart(\n    value: Extract<LanguageModelV4StreamPart, { type: \"error\" }>,\n    idx: number\n  ): Promise<void> {\n    if (this.finished) {\n      this.safeClose();\n      return Promise.resolve();\n    }\n    if (this.committed && !this.config.retryAfterOutput) {\n      const classification = this.classifyError(value.error);\n      this.observeFailureForBudget(classification);\n      const healthTransition = this.recordCandidateFailure(idx, classification);\n      this.emitOnError(value.error, idx, false);\n      this.emitAttempt(\n        idx,\n        \"failure\",\n        value.error,\n        classification,\n        false,\n        healthTransition\n      );\n      this.flushPrelude();\n      this.safeEnqueue(value);\n      cancelQuietly(this.activeReader, value.error);\n      this.releaseActiveCandidate();\n      this.finishRequest(false);\n      this.safeClose();\n      return Promise.resolve();\n    }\n    return this.onFailure(value.error, idx);\n  }\n\n  protected async pump(\n    result: LanguageModelV4StreamResult,\n    idx: number\n  ): Promise<void> {\n    this.candidateCommitted = false;\n    this.candidateBudgetCheckpoint = { ...this.streamJsonBudget };\n    this.validator = new StreamLifecycleValidator();\n    let reader: CapturedReader | undefined;\n    try {\n      reader = captureReader(result);\n      this.setActive(result);\n    } catch (error) {\n      cancelQuietly(reader ?? null, error);\n      await this.onFailure(\n        new InvalidModelStreamError(\n          \"stream result does not expose a readable stream\",\n          error\n        ),\n        idx\n      );\n      return;\n    }\n    return this.pumpReader(reader, idx);\n  }\n\n  protected async pumpReader(\n    reader: CapturedReader,\n    idx: number\n  ): Promise<void> {\n    this.activeReader = reader;\n    let advanced = false; // commit this candidate to cooldown once, on first commit part\n    let candidateHasOutput = false;\n    const firstContentDeadline =\n      this.config.firstContentTimeout === undefined\n        ? undefined\n        : monotonicNow() + this.config.firstContentTimeout;\n    try {\n      if (this.cancelled) {\n        return;\n      }\n      for (;;) {\n        await this.waitForDemand();\n        let res: ReadableStreamReadResult<LanguageModelV4StreamPart>;\n        try {\n          res = snapshotReadResult(\n            await this.readNext(reader, firstContentDeadline)\n          );\n        } catch (readErr) {\n          await this.handleReadRejection(readErr, reader, idx);\n          return;\n        }\n        if (this.cancelled) {\n          return;\n        }\n        if (res.done) {\n          if (this.finished) {\n            this.flushPrelude();\n            this.safeClose();\n          } else {\n            await this.onFailure(new IncompleteModelStreamError(), idx);\n          }\n          return;\n        }\n        const value = await this.snapshotAndValidatePart(res.value, idx);\n        if (!this.snapshotCanContinue(value)) {\n          return;\n        }\n        const type = this.partType(value);\n        if (type === \"error\") {\n          await this.handleErrorPart(\n            value as Extract<LanguageModelV4StreamPart, { type: \"error\" }>,\n            idx\n          );\n          return;\n        }\n        if (this.preludeWouldOverflow(value)) {\n          await this.onFailure(new StreamPreludeOverflowError(), idx);\n          return;\n        }\n        if (this.isEmptyFinish(value, candidateHasOutput)) {\n          await this.onFailure(new EmptyModelStreamError(), idx);\n          return;\n        }\n        if (this.isOutputPart(value)) {\n          candidateHasOutput = true;\n        }\n        advanced = this.forwardPart(value, idx, advanced);\n        if (type === \"finish\") {\n          cancelQuietly(reader, \"model stream finished\");\n          this.safeClose();\n          return;\n        }\n      }\n    } finally {\n      this.cleanupReader(reader);\n    }\n  }\n\n  protected snapshotCanContinue(\n    value: LanguageModelV4StreamPart | undefined\n  ): value is LanguageModelV4StreamPart {\n    return !this.cancelled && value !== undefined;\n  }\n\n  protected waitForDemand(): Promise<void> {\n    if (this.cancelled || (this.controller.desiredSize ?? 0) > 0) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve) => {\n      this.resumeDemand = resolve;\n    });\n  }\n\n  protected observeFailureForBudget(failure: FailureClassification): void {\n    const hookFailure = { ...failure };\n    try {\n      const result = this.isBudgetFailure?.(hookFailure);\n      this.budgetFailureObserved ||=\n        !consumeGenuinePromise(result) && result === true;\n    } catch {\n      // Optional retry-budget classification cannot interrupt fallback.\n    } finally {\n      consumeFailureClassificationPromiseMutations(hookFailure);\n    }\n    this.budgetSuppressed ||= !failure.retryable && failure.scope === \"request\";\n  }\n\n  protected finishRequest(success: boolean): void {\n    if (this.requestOutcomeObserved || this.cancelled) {\n      return;\n    }\n    this.requestOutcomeObserved = true;\n    this.cleanupAbortForwarding();\n    try {\n      consumeGenuinePromise(\n        this.onRequestOutcome?.(\n          success,\n          this.budgetFailureObserved,\n          this.budgetSuppressed\n        )\n      );\n    } catch {\n      // Optional retry-budget accounting cannot alter stream settlement.\n    }\n  }\n\n  protected cleanupAbortForwarding(): void {\n    try {\n      this.removeCallerAbort?.();\n    } catch {\n      // Defensive: custom cleanup extensions cannot alter stream completion.\n    }\n    this.removeCallerAbort = undefined;\n  }\n\n  protected handleReadRejection(\n    error: unknown,\n    reader: CapturedReader,\n    index: number\n  ): Promise<void> {\n    if (this.cancelled) {\n      return Promise.resolve();\n    }\n    cancelAndReleaseReaderQuietly(reader, error);\n    return this.handleReadError(error, index);\n  }\n\n  protected readNext(\n    reader: CapturedReader,\n    firstContentDeadline: number | undefined\n  ): Promise<ReadableStreamReadResult<LanguageModelV4StreamPart>> {\n    const timeoutMs =\n      this.candidateCommitted || firstContentDeadline === undefined\n        ? undefined\n        : Math.max(0, firstContentDeadline - monotonicNow());\n    if (timeoutMs === 0) {\n      throw new RouterTimeoutError(\n        \"first_content_timeout\",\n        this.config.firstContentTimeout ?? 0\n      );\n    }\n    return withTimeout(\n      () => reader.read(),\n      timeoutMs,\n      this.operationAbort.signal,\n      \"first_content_timeout\",\n      this.config.firstContentTimeout\n    );\n  }\n}\n","import type { LanguageModelV4StreamResult } from \"@ai-sdk/provider\";\nimport {\n  boundedEnumerableOwnKeys,\n  hasInvalidHttpHeaderValueCharacter,\n  isValidHttpHeaderName,\n} from \"./http-headers\";\nimport { snapshotProviderBody } from \"./provider-body\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\n\nexport const MAX_STREAM_RESULT_HEADERS = 1024;\nexport const MAX_STREAM_RESULT_HEADER_LENGTH = 65_536;\nexport const MAX_STREAM_RESULT_HEADER_CHARS = 1_048_576;\n\nexport function safeStreamRequest(\n  result: LanguageModelV4StreamResult\n): LanguageModelV4StreamResult[\"request\"] {\n  try {\n    const request = result.request;\n    if (request === undefined) {\n      return;\n    }\n    if (consumeGenuinePromise(request)) {\n      return;\n    }\n    if (\n      typeof request !== \"object\" ||\n      request === null ||\n      Array.isArray(request)\n    ) {\n      return;\n    }\n    const body = Reflect.get(request, \"body\");\n    if (body === undefined) {\n      return {};\n    }\n    return { body: snapshotProviderBody(body) };\n  } catch {\n    return;\n  }\n}\n\nexport function safeStreamResponse(\n  result: LanguageModelV4StreamResult\n): LanguageModelV4StreamResult[\"response\"] {\n  try {\n    const response = result.response;\n    if (response === undefined) {\n      return;\n    }\n    if (consumeGenuinePromise(response)) {\n      return;\n    }\n    if (\n      typeof response !== \"object\" ||\n      response === null ||\n      Array.isArray(response)\n    ) {\n      return;\n    }\n    const headers = Reflect.get(response, \"headers\");\n    if (headers === undefined) {\n      return {};\n    }\n    if (consumeGenuinePromise(headers)) {\n      return {};\n    }\n    if (\n      typeof headers !== \"object\" ||\n      headers === null ||\n      Array.isArray(headers)\n    ) {\n      return;\n    }\n    const keys = boundedEnumerableOwnKeys(headers, MAX_STREAM_RESULT_HEADERS);\n    if (keys === undefined) {\n      return;\n    }\n    consumeOwnDataPromiseFields(headers, keys);\n    if (keys.some((key) => !isValidHttpHeaderName(key))) {\n      return;\n    }\n    const sanitized: Record<string, string> = {};\n    let totalChars = 0;\n    let asyncFailure = false;\n    for (const key of keys) {\n      const value = Reflect.get(headers, key);\n      if (consumeGenuinePromise(value)) {\n        asyncFailure = true;\n        continue;\n      }\n      if (\n        typeof value !== \"string\" ||\n        value.length > MAX_STREAM_RESULT_HEADER_LENGTH ||\n        hasInvalidHttpHeaderValueCharacter(value)\n      ) {\n        return;\n      }\n      totalChars += key.length + value.length;\n      if (totalChars > MAX_STREAM_RESULT_HEADER_CHARS) {\n        return;\n      }\n      Object.defineProperty(sanitized, key, {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true,\n      });\n    }\n    if (asyncFailure) {\n      return;\n    }\n    return { headers: sanitized };\n  } catch {\n    return;\n  }\n}\n\nexport interface StreamMetadataSnapshot {\n  request: LanguageModelV4StreamResult[\"request\"];\n  response: LanguageModelV4StreamResult[\"response\"];\n}\n\nexport function snapshotStreamResultMetadata(\n  result: LanguageModelV4StreamResult\n): StreamMetadataSnapshot {\n  return {\n    request: safeStreamRequest(result),\n    response: safeStreamResponse(result),\n  };\n}\n\nexport function copyStreamRequest(\n  request: LanguageModelV4StreamResult[\"request\"]\n): LanguageModelV4StreamResult[\"request\"] {\n  if (request === undefined) {\n    return;\n  }\n  if (request.body === undefined) {\n    return {};\n  }\n  return { body: snapshotProviderBody(request.body) };\n}\n\nexport function copyStreamResponse(\n  response: LanguageModelV4StreamResult[\"response\"]\n): LanguageModelV4StreamResult[\"response\"] {\n  if (response === undefined) {\n    return;\n  }\n  if (response.headers === undefined) {\n    return {};\n  }\n  const headers: Record<string, string> = {};\n  for (const key of Object.keys(response.headers)) {\n    Object.defineProperty(headers, key, {\n      configurable: true,\n      enumerable: true,\n      value: response.headers[key],\n      writable: true,\n    });\n  }\n  return { headers };\n}\n","import type {\n  LanguageModelV4StreamPart,\n  LanguageModelV4StreamResult,\n} from \"@ai-sdk/provider\";\nimport { isTerminalRequestFailure } from \"./failure\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nimport { runSetupCandidateCleanup } from \"./stream-candidate-cleanup\";\nimport { tryCaptureOptionalHook } from \"./stream-candidate-hooks\";\nimport { FallbackPump } from \"./stream-pump\";\nimport { CleanedStreamSetupError, RouterStreamError } from \"./stream-reader\";\nimport {\n  copyStreamRequest,\n  copyStreamResponse,\n  type StreamMetadataSnapshot,\n  snapshotStreamResultMetadata,\n} from \"./stream-result\";\nimport type { FallbackStreamArgs } from \"./stream-types\";\n\nexport type { FallbackStreamArgs, ResolvedEntry } from \"./stream-types\";\n\nexport const FALLBACK_STREAM_ARG_KEYS = [\n  \"acquireCandidate\",\n  \"attemptsStarted\",\n  \"attemptTimeout\",\n  \"backoff\",\n  \"budgetFailureObserved\",\n  \"budgetSuppressed\",\n  \"candidateAvailable\",\n  \"candidateInFlight\",\n  \"candidates\",\n  \"classifyFailure\",\n  \"concurrencyLimit\",\n  \"firstContentTimeout\",\n  \"firstResult\",\n  \"isBudgetFailure\",\n  \"logicalId\",\n  \"maxAttempts\",\n  \"nextOrderingToken\",\n  \"onAdvance\",\n  \"onAttempt\",\n  \"onCandidateFailure\",\n  \"onCandidateSuccess\",\n  \"onError\",\n  \"onRequestOutcome\",\n  \"options\",\n  \"prepareCandidate\",\n  \"priorErrors\",\n  \"releaseCandidate\",\n  \"releaseProbeCandidate\",\n  \"retryAfterOutput\",\n  \"shouldRetry\",\n  \"startAttemptStartedAt\",\n  \"startIndex\",\n  \"startInFlight\",\n  \"startOrderingToken\",\n  \"strictStreamValidation\",\n  \"totalDeadline\",\n  \"totalTimeout\",\n  \"waitForCandidate\",\n] as const;\n\nexport function captureFallbackStreamArgPromises(\n  value: unknown\n): asserts value is FallbackStreamArgs {\n  if (consumeGenuinePromise(value)) {\n    throw new TypeError(\"ai-router: stream arguments must be synchronous\");\n  }\n  if (typeof value !== \"object\" || value === null) {\n    throw new TypeError(\"ai-router: stream arguments must be an object\");\n  }\n  consumeOwnDataPromiseFields(value, FALLBACK_STREAM_ARG_KEYS);\n}\n\nexport function fallbackStreamArgField(\n  source: FallbackStreamArgs,\n  key: (typeof FALLBACK_STREAM_ARG_KEYS)[number]\n): unknown {\n  const value = Reflect.get(source, key);\n  if (consumeGenuinePromise(value)) {\n    throw new TypeError(`ai-router: stream ${key} must be synchronous`);\n  }\n  return value;\n}\n\nexport function cancelLateStreamResult(\n  result: LanguageModelV4StreamResult\n): void {\n  try {\n    const stream = Reflect.get(result as object, \"stream\");\n    if (consumeGenuinePromise(stream)) {\n      return;\n    }\n    if (typeof stream !== \"object\" || stream === null) {\n      return;\n    }\n    const cancel = Reflect.get(stream, \"cancel\");\n    if (consumeGenuinePromise(cancel)) {\n      return;\n    }\n    if (typeof cancel !== \"function\") {\n      return;\n    }\n    consumeGenuinePromise(\n      Reflect.apply(cancel, stream, [\"late stream result discarded\"])\n    );\n  } catch {\n    // Hostile/malformed late results are already detached from routing.\n  }\n}\n\n/** Cancel a stream result that arrived after its opening attempt was abandoned. */\nexport function discardLateStreamResult(\n  result: LanguageModelV4StreamResult\n): void {\n  consumeOwnDataPromiseFields(result as object, [\n    \"request\",\n    \"response\",\n    \"stream\",\n  ]);\n  cancelLateStreamResult(result);\n  // A late result bypasses the normal wrapper snapshot. Start transport\n  // cancellation first, then reuse the bounded metadata traversal so a large\n  // discarded body cannot delay cleanup of the live upstream.\n  snapshotStreamResultMetadata(result);\n}\n\n/**\n * Framing / metadata stream parts that carry NO visible model output. Before a\n * candidate \"commits\" (emits real content or a `finish`), these are BUFFERED:\n * if the candidate then fails pre-commit they are discarded (so the failed\n * candidate contributes nothing to the consumer), and if it commits they are\n * flushed ahead of the content. This is what lets a fallback be transparent —\n * the openai-compatible provider emits `response-metadata` (and often\n * `text-start`) on its first chunk before any `text-delta`, so a pre-content\n * error after them must still discard them and fall back cleanly, not leak a\n * half-open text block. `finish` is NOT framing — it is a commit + terminal.\n *\n * A conservative denylist: an unknown future part type is treated as content\n * (committing), so we never risk re-emitting it across a fallback.\n */\nexport function wrapStreamResult(\n  args: FallbackStreamArgs\n): LanguageModelV4StreamResult {\n  let firstResult: LanguageModelV4StreamResult | undefined;\n  let active: StreamMetadataSnapshot = {\n    request: undefined,\n    response: undefined,\n  };\n  let initialActivation = true;\n  let stream: ReadableStream<LanguageModelV4StreamPart>;\n  try {\n    captureFallbackStreamArgPromises(args);\n    firstResult = fallbackStreamArgField(\n      args,\n      \"firstResult\"\n    ) as LanguageModelV4StreamResult;\n    active = snapshotStreamResultMetadata(firstResult);\n    stream = createFallbackStream(\n      args,\n      (result) => {\n        if (initialActivation && result === firstResult) {\n          initialActivation = false;\n          return;\n        }\n        initialActivation = false;\n        active = snapshotStreamResultMetadata(result);\n      },\n      firstResult\n    );\n  } catch (error) {\n    const cause =\n      error instanceof CleanedStreamSetupError ? error.cause : error;\n    if (!(error instanceof CleanedStreamSetupError)) {\n      if (firstResult !== undefined) {\n        discardLateStreamResult(firstResult);\n      }\n      const releaseCandidate = tryCaptureOptionalHook<\n        FallbackStreamArgs[\"releaseCandidate\"]\n      >(args, \"releaseCandidate\").value;\n      const releaseProbeCandidate = tryCaptureOptionalHook<\n        FallbackStreamArgs[\"releaseProbeCandidate\"]\n      >(args, \"releaseProbeCandidate\").value;\n      try {\n        runSetupCandidateCleanup(args, releaseCandidate, releaseProbeCandidate);\n      } catch {\n        // Preserve the infrastructure failure across hostile candidate access.\n      }\n    }\n    throw isTerminalRequestFailure(cause)\n      ? cause\n      : new RouterStreamError(cause);\n  }\n  return {\n    stream,\n    get request() {\n      return copyStreamRequest(active.request);\n    },\n    get response() {\n      return copyStreamResponse(active.response);\n    },\n  };\n}\n\n/**\n * Build the wrapped `ReadableStream`. We own the reader lifecycle (rather than\n * using a `TransformStream`) so the underlying source can be swapped mid-flight.\n *\n * Failure is detected two ways, both routed through `onFailure`:\n *  1. An in-band `{ type: 'error' }` part (the openai-compatible provider does\n *     NOT reject the stream — it enqueues this and closes normally).\n *  2. A rejected `reader.read()` (transport abort / connection drop).\n *\n * Each candidate's leading framing parts are BUFFERED until it \"commits\" (emits\n * real content or a `finish`). A candidate that fails before committing has its\n * buffered framing DISCARDED and contributes nothing to the consumer — so a\n * fallback emits exactly one clean lifecycle (one stream-start, one text block),\n * never duplicate/half-open parts. Fallback only happens pre-commit unless\n * `retryAfterOutput` is set.\n */\nexport function createFallbackStream(\n  args: FallbackStreamArgs,\n  setActive: (result: LanguageModelV4StreamResult) => void,\n  firstResult?: LanguageModelV4StreamResult\n): ReadableStream<LanguageModelV4StreamPart> {\n  captureFallbackStreamArgPromises(args);\n  const capturedFirstResult =\n    firstResult === undefined\n      ? (fallbackStreamArgField(\n          args,\n          \"firstResult\"\n        ) as LanguageModelV4StreamResult)\n      : firstResult;\n  let pump: FallbackPump | null = null;\n  return new ReadableStream<LanguageModelV4StreamPart>({\n    start(controller) {\n      pump = new FallbackPump(args, setActive, controller, capturedFirstResult);\n      pump.run().catch((error: unknown) => pump?.failUnexpected(error));\n    },\n    pull() {\n      pump?.resume();\n    },\n    cancel(reason) {\n      pump?.cancel(reason);\n    },\n  });\n}\n\n/**\n * Drives one wrapped stream: pumps the active candidate, buffers its framing\n * until it commits, and falls back to the next candidate on a pre-commit\n * failure. Extracted to a class so each step is a small method (rather than one\n * deeply-nested closure).\n */\n","import type { LanguageModelV4 } from \"@ai-sdk/provider\";\nimport type { NormalizedEntry } from \"./router-entry\";\nimport { VALID_MODALITIES } from \"./router-options\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n  isPlainObjectValue,\n} from \"./runtime-types\";\nimport type { Modality } from \"./types\";\n\nexport const STABLE_MODELS = new WeakSet<object>();\n\n/** Snapshot callable model operations once while preserving their original `this`. */\nexport function snapshotLanguageModelV4(\n  value: unknown\n): LanguageModelV4 | undefined {\n  if (typeof value !== \"object\" || value === null) {\n    return;\n  }\n  if (STABLE_MODELS.has(value)) {\n    return value as LanguageModelV4;\n  }\n  if (consumeGenuinePromise(value)) {\n    return;\n  }\n  consumeOwnDataPromiseFields(value, [\n    \"doGenerate\",\n    \"doStream\",\n    \"modelId\",\n    \"provider\",\n    \"specificationVersion\",\n  ]);\n  // Accessor throws are intentionally allowed to escape: unlike a stable\n  // non-v4 shape, a factory/model getter failure can be transient and must not\n  // be memoized in the permanent invalid-model cache.\n  const specificationVersion = Reflect.get(value, \"specificationVersion\");\n  if (\n    consumeGenuinePromise(specificationVersion) ||\n    specificationVersion !== \"v4\"\n  ) {\n    return;\n  }\n  const doGenerate = Reflect.get(value, \"doGenerate\");\n  const doStream = Reflect.get(value, \"doStream\");\n  const modelId = Reflect.get(value, \"modelId\", value);\n  const provider = Reflect.get(value, \"provider\", value);\n  let asyncRequiredSlot = false;\n  for (const slot of [doGenerate, doStream, modelId, provider]) {\n    if (consumeGenuinePromise(slot)) {\n      asyncRequiredSlot = true;\n    }\n  }\n  if (\n    asyncRequiredSlot ||\n    typeof doGenerate !== \"function\" ||\n    typeof doStream !== \"function\" ||\n    (modelId !== undefined && typeof modelId !== \"string\") ||\n    (provider !== undefined && typeof provider !== \"string\")\n  ) {\n    return;\n  }\n  let supportedUrls: LanguageModelV4[\"supportedUrls\"];\n  let supportedUrlsRead = false;\n  const model: LanguageModelV4 = {\n    doGenerate: (options) => Reflect.apply(doGenerate, value, [options]),\n    doStream: (options) => Reflect.apply(doStream, value, [options]),\n    modelId: modelId as string,\n    provider: provider as string,\n    specificationVersion: \"v4\",\n    get supportedUrls() {\n      if (!supportedUrlsRead) {\n        supportedUrlsRead = true;\n        try {\n          supportedUrls = Reflect.get(value, \"supportedUrls\", value);\n        } catch {\n          supportedUrls = {};\n        }\n      }\n      return supportedUrls;\n    },\n  };\n  STABLE_MODELS.add(model);\n  return model;\n}\n\nexport function snapshotAdaptiveConcurrency(\n  value: unknown\n): NormalizedEntry[\"adaptiveConcurrency\"] {\n  if (consumeGenuinePromise(value)) {\n    throw new Error(\"ai-router: adaptiveConcurrency must be synchronous\");\n  }\n  if (!isPlainObjectValue(value)) {\n    return value as NormalizedEntry[\"adaptiveConcurrency\"];\n  }\n  const config = value as import(\"./types\").AdaptiveConcurrencyConfig;\n  const keys = [\"increaseAfterSuccesses\", \"initial\", \"max\", \"min\"] as const;\n  consumeOwnDataPromiseFields(config, keys);\n  const snapshot = {\n    increaseAfterSuccesses: config.increaseAfterSuccesses,\n    initial: config.initial,\n    max: config.max,\n    min: config.min,\n  };\n  let asyncField = false;\n  for (const field of Object.values(snapshot)) {\n    if (consumeGenuinePromise(field)) {\n      asyncField = true;\n    }\n  }\n  if (asyncField) {\n    throw new Error(\"ai-router: adaptiveConcurrency must be synchronous\");\n  }\n  return snapshot;\n}\n\nexport function snapshotSupports(value: unknown): Modality[] | undefined {\n  if (value === undefined) {\n    return;\n  }\n  if (consumeGenuinePromise(value)) {\n    throw new Error(\"ai-router: supports must be synchronous\");\n  }\n  if (!Array.isArray(value)) {\n    throw new Error(\"ai-router: supports contains an unknown modality\");\n  }\n  let length: number;\n  try {\n    length = Reflect.get(value, \"length\");\n  } catch {\n    throw new Error(\"ai-router: supports contains an unknown modality\");\n  }\n  if (\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > VALID_MODALITIES.size\n  ) {\n    throw new Error(\"ai-router: supports contains an unknown modality\");\n  }\n  consumeOwnDataPromiseFields(\n    value,\n    Array.from({ length }, (_, index) => index)\n  );\n  const snapshot: Modality[] = [];\n  for (let index = 0; index < length; index += 1) {\n    if (!Object.hasOwn(value, index)) {\n      throw new Error(\"ai-router: supports contains an unknown modality\");\n    }\n    let modality: unknown;\n    try {\n      modality = Reflect.get(value, index);\n    } catch {\n      throw new Error(\"ai-router: supports contains an unknown modality\");\n    }\n    if (!VALID_MODALITIES.has(modality as Modality)) {\n      throw new Error(\"ai-router: supports contains an unknown modality\");\n    }\n    snapshot.push(modality as Modality);\n  }\n  return snapshot;\n}\n","import { boundedEnumerableOwnKeys } from \"./http-headers\";\nimport { consumeOwnDataPromiseFields } from \"./runtime-types\";\nimport { clearTimerSafely, scheduleTimer } from \"./timeout\";\n\nexport const MAX_SUPPORTED_URL_MEDIA_TYPES = 128;\nexport const MAX_SUPPORTED_URL_PATTERNS = 128;\nexport const MAX_SUPPORTED_URL_TOTAL_PATTERNS = 1024;\nexport const MAX_SUPPORTED_URL_PATTERN_CHARS = 1_048_576;\nexport const MAX_SUPPORTED_URL_PATTERN_LENGTH = 4096;\nexport const SUPPORTED_URLS_DISCOVERY_TIMEOUT_MS = 1000;\n\nexport function cloneSupportedUrlPattern(value: unknown): RegExp | undefined {\n  try {\n    const sourceGetter = Object.getOwnPropertyDescriptor(\n      RegExp.prototype,\n      \"source\"\n    )?.get;\n    if (sourceGetter === undefined) {\n      return;\n    }\n    const source = Reflect.apply(sourceGetter, value, []);\n    if (\n      typeof source !== \"string\" ||\n      source.length > MAX_SUPPORTED_URL_PATTERN_LENGTH\n    ) {\n      return;\n    }\n    let flags = \"\";\n    for (const [property, flag] of [\n      [\"hasIndices\", \"d\"],\n      [\"global\", \"g\"],\n      [\"ignoreCase\", \"i\"],\n      [\"multiline\", \"m\"],\n      [\"dotAll\", \"s\"],\n      [\"unicode\", \"u\"],\n      [\"unicodeSets\", \"v\"],\n      [\"sticky\", \"y\"],\n    ] as const) {\n      const getter = Object.getOwnPropertyDescriptor(\n        RegExp.prototype,\n        property\n      )?.get;\n      if (getter !== undefined && Reflect.apply(getter, value, []) === true) {\n        flags += flag;\n      }\n    }\n    return new RegExp(source, flags);\n  } catch {\n    return;\n  }\n}\n\nexport function cloneSupportedUrlPatterns(\n  value: unknown\n): { chars: number; patterns: RegExp[] } | undefined {\n  if (!Array.isArray(value)) {\n    return;\n  }\n  const length = Reflect.get(value, \"length\");\n  if (\n    typeof length !== \"number\" ||\n    !Number.isSafeInteger(length) ||\n    length < 0 ||\n    length > MAX_SUPPORTED_URL_PATTERNS\n  ) {\n    return;\n  }\n  consumeOwnDataPromiseFields(\n    value,\n    Array.from({ length }, (_, index) => index)\n  );\n  const patterns = new Array<RegExp>(length);\n  let chars = 0;\n  for (let index = 0; index < length; index += 1) {\n    if (!Object.hasOwn(value, index)) {\n      return;\n    }\n    const pattern = cloneSupportedUrlPattern(Reflect.get(value, index));\n    if (pattern === undefined) {\n      return;\n    }\n    chars += pattern.source.length;\n    patterns[index] = pattern;\n  }\n  return { chars, patterns };\n}\n\nexport function consumeSupportedUrlPromiseFields(\n  value: object,\n  keys: readonly string[]\n): void {\n  consumeOwnDataPromiseFields(value, keys);\n  for (const key of keys) {\n    try {\n      const descriptor = Object.getOwnPropertyDescriptor(value, key);\n      if (descriptor === undefined || !(\"value\" in descriptor)) {\n        continue;\n      }\n      const patterns = descriptor.value;\n      if (!Array.isArray(patterns)) {\n        continue;\n      }\n      const lengthDescriptor = Object.getOwnPropertyDescriptor(\n        patterns,\n        \"length\"\n      );\n      const length =\n        lengthDescriptor !== undefined && \"value\" in lengthDescriptor\n          ? lengthDescriptor.value\n          : undefined;\n      if (\n        typeof length === \"number\" &&\n        Number.isSafeInteger(length) &&\n        length >= 0 &&\n        length <= MAX_SUPPORTED_URL_PATTERNS\n      ) {\n        consumeOwnDataPromiseFields(\n          patterns,\n          Array.from({ length }, (_, index) => index)\n        );\n      }\n    } catch {\n      // Malformed Proxy containers cannot prevent later bounded cleanup.\n    }\n  }\n}\n\nexport function sanitizeSupportedUrls(\n  value: unknown\n): Record<string, RegExp[]> {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    return {};\n  }\n  try {\n    const keys = boundedEnumerableOwnKeys(value, MAX_SUPPORTED_URL_MEDIA_TYPES);\n    if (keys === undefined) {\n      return {};\n    }\n    consumeSupportedUrlPromiseFields(value, keys);\n    const result: Record<string, RegExp[]> = {};\n    let totalPatterns = 0;\n    let totalPatternChars = 0;\n    for (const key of keys) {\n      if (key === \"then\" || key.length === 0 || key.length > 256) {\n        return {};\n      }\n      const cloned = cloneSupportedUrlPatterns(Reflect.get(value, key));\n      if (cloned === undefined) {\n        return {};\n      }\n      totalPatterns += cloned.patterns.length;\n      totalPatternChars += cloned.chars;\n      if (totalPatterns > MAX_SUPPORTED_URL_TOTAL_PATTERNS) {\n        return {};\n      }\n      if (totalPatternChars > MAX_SUPPORTED_URL_PATTERN_CHARS) {\n        return {};\n      }\n      Object.defineProperty(result, key, {\n        configurable: true,\n        enumerable: true,\n        value: cloned.patterns,\n        writable: true,\n      });\n    }\n    return result;\n  } catch {\n    return {};\n  }\n}\n\nexport function settleSupportedUrls(\n  supported: Promise<unknown>\n): Promise<Record<string, RegExp[]>> {\n  return new Promise((resolve) => {\n    let settled = false;\n    let timeout: ReturnType<typeof setTimeout> | undefined;\n    const finish = (value: Record<string, RegExp[]>) => {\n      if (settled) {\n        return;\n      }\n      settled = true;\n      clearTimerSafely(timeout);\n      resolve(value);\n    };\n    try {\n      timeout = scheduleTimer(\n        () => finish({}),\n        SUPPORTED_URLS_DISCOVERY_TIMEOUT_MS\n      );\n    } catch {\n      finish({});\n      return;\n    }\n    try {\n      const chained = Promise.prototype.then.call(\n        supported,\n        (value: unknown) => finish(sanitizeSupportedUrls(value)),\n        () => finish({})\n      );\n      try {\n        Promise.prototype.then.call(\n          chained,\n          () => undefined,\n          () => undefined\n        );\n      } catch {\n        // A custom PromiseLike may return a non-Promise value.\n      }\n    } catch {\n      finish({});\n    }\n  });\n}\n","import {\n  type AdaptiveState,\n  type AdmissionEntry,\n  AdmissionRegistry,\n  MAX_WAITERS_PER_KEY,\n  normalizedAdaptiveState,\n  type Waiter,\n} from \"./admission-utils\";\n\nexport class AdmissionStorage {\n  protected readonly entries: AdmissionEntry[];\n  protected readonly scope: string;\n  protected readonly waitTimeout?: number;\n  protected readonly registry: AdmissionRegistry;\n  protected readonly roundRobinCursors = new Map<string, number>();\n  protected roundRobinPoolKeyChars = 0;\n\n  constructor(\n    entries: AdmissionEntry[],\n    waitTimeout?: number,\n    scope = \"default\",\n    registry = new AdmissionRegistry()\n  ) {\n    if (\n      waitTimeout !== undefined &&\n      (!Number.isSafeInteger(waitTimeout) ||\n        waitTimeout <= 0 ||\n        waitTimeout > 86_400_000)\n    ) {\n      throw new Error(\n        \"ai-router: admission wait timeout must be a positive safe duration at most 24h\"\n      );\n    }\n    this.entries = entries;\n    this.waitTimeout = waitTimeout;\n    this.scope = scope;\n    this.registry = registry;\n    this.registerSharedConfigurations();\n  }\n\n  protected key(index: number): string {\n    return this.entries[index].healthKey === undefined\n      ? `${this.scope}:unit:${index}`\n      : `credential:${this.entries[index].healthKey}`;\n  }\n\n  protected normalizedInFlight(key: string): number {\n    const value = this.registry.inFlightCounts.get(key);\n    if (value === undefined) {\n      return 0;\n    }\n    if (!Number.isSafeInteger(value) || value < 0) {\n      this.registry.inFlightCounts.delete(key);\n      return 0;\n    }\n    return value;\n  }\n\n  protected normalizedWaiters(key: string): Waiter[] | undefined {\n    const value = this.registry.waiters.get(key);\n    if (value === undefined) {\n      return;\n    }\n    try {\n      if (!Array.isArray(value)) {\n        this.registry.waiters.delete(key);\n        return;\n      }\n      const length = Reflect.get(value, \"length\");\n      if (\n        !Number.isSafeInteger(length) ||\n        length < 0 ||\n        length > MAX_WAITERS_PER_KEY\n      ) {\n        this.registry.waiters.delete(key);\n        return;\n      }\n      const snapshot = new Array<Waiter>(length);\n      for (let index = 0; index < length; index += 1) {\n        snapshot[index] = Reflect.get(value, index);\n      }\n      this.registry.waiters.set(key, snapshot);\n      return snapshot;\n    } catch {\n      this.registry.waiters.delete(key);\n      return;\n    }\n  }\n\n  protected adaptiveState(index: number): AdaptiveState {\n    const key = this.key(index);\n    const existing = this.registry.adaptiveStates.get(key);\n    const normalized = normalizedAdaptiveState(existing);\n    if (normalized !== undefined) {\n      if (normalized !== existing) {\n        this.registry.adaptiveStates.set(key, normalized);\n      }\n      return normalized;\n    }\n    if (existing !== undefined) {\n      this.registry.adaptiveStates.delete(key);\n    }\n    const entry = this.entries[index];\n    const config =\n      typeof entry.adaptiveConcurrency === \"object\"\n        ? entry.adaptiveConcurrency\n        : {};\n    const min = config.min ?? 1;\n    const max = config.max ?? Math.max(entry.maxConcurrency ?? 1, 16);\n    const state: AdaptiveState = {\n      increaseAfterSuccesses: config.increaseAfterSuccesses ?? 10,\n      limit: Math.min(\n        max,\n        Math.max(min, config.initial ?? entry.maxConcurrency ?? min)\n      ),\n      max,\n      min,\n      successes: 0,\n    };\n    this.registry.adaptiveStates.set(key, state);\n    return state;\n  }\n\n  protected registerSharedConfigurations(): void {\n    for (const [index, entry] of this.entries.entries()) {\n      if (entry.healthKey === undefined) {\n        continue;\n      }\n      const key = this.key(index);\n      const signature = this.configurationSignature(entry);\n      const existing = this.registry.configurations.get(key);\n      if (existing !== undefined && existing !== signature) {\n        throw new Error(\n          `ai-router: candidates sharing healthKey \"${entry.healthKey}\" must use identical concurrency settings`\n        );\n      }\n      this.registry.configurations.set(key, signature);\n    }\n  }\n\n  protected configurationSignature(entry: AdmissionEntry): string {\n    if (\n      entry.adaptiveConcurrency === undefined ||\n      entry.adaptiveConcurrency === false\n    ) {\n      return `fixed:${entry.maxConcurrency ?? \"unbounded\"}`;\n    }\n    const config =\n      typeof entry.adaptiveConcurrency === \"object\"\n        ? entry.adaptiveConcurrency\n        : {};\n    const min = config.min ?? 1;\n    const max = config.max ?? Math.max(entry.maxConcurrency ?? 1, 16);\n    return [\n      \"adaptive\",\n      config.initial ?? entry.maxConcurrency ?? min,\n      min,\n      max,\n      config.increaseAfterSuccesses ?? 10,\n    ].join(\":\");\n  }\n}\n","import { addCapturedAbortListener } from \"./abort-signal\";\nimport { AdmissionStorage } from \"./admission-storage\";\nimport {\n  abortReason,\n  captureUsableWaiter,\n  isSignalAborted,\n  isValidWaiterSlot,\n  MAX_WAITERS_PER_KEY,\n  type Waiter,\n} from \"./admission-utils\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\nimport { clearTimerSafely, monotonicNow, scheduleTimer } from \"./timeout\";\n\nexport class AdmissionCapacity extends AdmissionStorage {\n  acquire(index: number): number | undefined {\n    const limit = this.limit(index);\n    const key = this.key(index);\n    const current = this.normalizedInFlight(key);\n    if (\n      current >= Number.MAX_SAFE_INTEGER ||\n      (limit !== undefined && current >= limit)\n    ) {\n      return;\n    }\n    const next = current + 1;\n    this.registry.inFlightCounts.set(key, next);\n    return next;\n  }\n\n  canAcquire(index: number): boolean {\n    return this.canAcquireWithCurrent(index, this.inFlight(index));\n  }\n\n  canAcquireAfterRelease(index: number, releasingIndex: number): boolean {\n    const current = this.inFlight(index);\n    const effectiveCurrent =\n      this.key(index) === this.key(releasingIndex) && current > 0\n        ? current - 1\n        : current;\n    return this.canAcquireWithCurrent(index, effectiveCurrent);\n  }\n\n  protected canAcquireWithCurrent(index: number, current: number): boolean {\n    const limit = this.limit(index);\n    return (\n      current < Number.MAX_SAFE_INTEGER &&\n      (limit === undefined || current < limit)\n    );\n  }\n\n  release(index: number): void {\n    const key = this.key(index);\n    const current = this.normalizedInFlight(key);\n    if (current === 0) {\n      return;\n    }\n    const next = current - 1;\n    if (next === 0) {\n      this.registry.inFlightCounts.delete(key);\n    } else {\n      this.registry.inFlightCounts.set(key, next);\n    }\n\n    this.drainWaiters(key);\n  }\n\n  protected drainWaiters(key: string): void {\n    let queue = this.normalizedWaiters(key);\n    while (queue !== undefined) {\n      if (queue.length === 0) {\n        if (this.registry.waiters.get(key) !== queue) {\n          queue = this.normalizedWaiters(key);\n          continue;\n        }\n        break;\n      }\n      const waiter = queue[0] as unknown;\n      const capturedWaiter = captureUsableWaiter(waiter);\n      if (capturedWaiter === undefined) {\n        queue.shift();\n        continue;\n      }\n      let slot: number | undefined;\n      const beforeAcquire = this.normalizedInFlight(key);\n      try {\n        slot = capturedWaiter.acquire();\n      } catch {\n        this.rollbackWaiterAcquire(key, beforeAcquire);\n        queue.shift();\n        continue;\n      }\n      if (slot === undefined) {\n        this.rollbackWaiterAcquire(key, beforeAcquire);\n        break;\n      }\n      if (!isValidWaiterSlot(slot)) {\n        this.rollbackWaiterAcquire(key, beforeAcquire);\n        queue.shift();\n        continue;\n      }\n      queue.shift();\n      try {\n        const result = capturedWaiter.resolve(slot);\n        if (result !== undefined) {\n          consumeGenuinePromise(result);\n          this.rollbackWaiterAcquire(key, beforeAcquire);\n        }\n      } catch {\n        this.rollbackWaiterAcquire(key, beforeAcquire);\n      }\n    }\n    if (queue?.length === 0 && this.registry.waiters.get(key) === queue) {\n      this.registry.waiters.delete(key);\n    }\n  }\n\n  protected rollbackWaiterAcquire(key: string, beforeAcquire: number): void {\n    const current = this.normalizedInFlight(key);\n    if (current <= beforeAcquire) {\n      return;\n    }\n    const next = current - 1;\n    if (next === 0) {\n      this.registry.inFlightCounts.delete(key);\n    } else {\n      this.registry.inFlightCounts.set(key, next);\n    }\n  }\n\n  waitFor(\n    index: number,\n    signal: AbortSignal | undefined,\n    deadline: number | undefined\n  ): Promise<number | undefined> {\n    if (this.waitTimeout === undefined) {\n      return Promise.resolve(undefined);\n    }\n    if (deadline !== undefined && Number.isNaN(deadline)) {\n      return Promise.resolve(undefined);\n    }\n    const remaining =\n      deadline === undefined || deadline === Number.POSITIVE_INFINITY\n        ? this.waitTimeout\n        : deadline - monotonicNow();\n    // Node and browsers truncate fractional timer delays. Round up so a wait\n    // bounded by the total deadline cannot wake a fraction early and surface\n    // the preceding provider error instead of the deadline timeout.\n    const waitMs = Math.ceil(\n      Math.max(0, Math.min(this.waitTimeout, remaining))\n    );\n    if (isSignalAborted(signal)) {\n      return Promise.reject(abortReason(signal));\n    }\n    if (waitMs === 0) {\n      return Promise.resolve(undefined);\n    }\n    const key = this.key(index);\n    const queue = this.normalizedWaiters(key) ?? [];\n    if (queue.length >= MAX_WAITERS_PER_KEY) {\n      return Promise.resolve(undefined);\n    }\n    return new Promise((resolve, reject) => {\n      let settled = false;\n      let removeSignalAbort: (() => void) | undefined;\n      let timer: ReturnType<typeof setTimeout> | undefined;\n      const entry: Waiter = {\n        acquire: () => this.acquire(index),\n        resolve: (value) => {\n          if (settled) {\n            return;\n          }\n          settled = true;\n          clearTimerSafely(timer);\n          removeSignalAbort?.();\n          resolve(value);\n        },\n      };\n      const remove = () => {\n        const currentQueue = this.normalizedWaiters(key);\n        if (currentQueue === undefined) {\n          return;\n        }\n        const position = currentQueue.indexOf(entry);\n        if (position !== -1) {\n          currentQueue.splice(position, 1);\n        }\n        if (currentQueue.length === 0) {\n          this.registry.waiters.delete(key);\n        }\n      };\n      const onAbort = () => {\n        remove();\n        if (settled) {\n          return;\n        }\n        settled = true;\n        clearTimerSafely(timer);\n        removeSignalAbort?.();\n        reject(abortReason(signal));\n      };\n      timer = scheduleTimer(() => {\n        remove();\n        entry.resolve(undefined);\n      }, waitMs);\n      if (settled) {\n        return;\n      }\n      queue.push(entry);\n      this.registry.waiters.set(key, queue);\n      try {\n        if (signal !== undefined) {\n          removeSignalAbort = addCapturedAbortListener(signal, onAbort);\n          if (settled) {\n            removeSignalAbort();\n            return;\n          }\n        }\n        if (isSignalAborted(signal)) {\n          onAbort();\n        }\n      } catch (error) {\n        remove();\n        removeSignalAbort?.();\n        if (!settled) {\n          settled = true;\n          clearTimerSafely(timer);\n          reject(error);\n        }\n      }\n    });\n  }\n\n  inFlight(index: number): number {\n    return this.normalizedInFlight(this.key(index));\n  }\n\n  limit(index: number): number | undefined {\n    const entry = this.entries[index];\n    if (\n      entry.adaptiveConcurrency === undefined ||\n      entry.adaptiveConcurrency === false\n    ) {\n      return entry.maxConcurrency;\n    }\n    return this.adaptiveState(index).limit;\n  }\n}\n","import { AdmissionCapacity } from \"./admission-capacity\";\nimport {\n  type AdmissionSnapshot,\n  isCongestionFailure,\n  MAX_ROUND_ROBIN_POOL_KEY_CHARS,\n  MAX_ROUND_ROBIN_POOLS,\n  retainAdaptiveOutcomeOrder,\n  roundRobinPoolKey,\n  staleAdaptiveOutcome,\n} from \"./admission-utils\";\nimport type { FailureClassification, RouterOrderingToken } from \"./types\";\n\nexport class AdmissionController extends AdmissionCapacity {\n  observe(\n    index: number,\n    success: boolean,\n    failure?: FailureClassification,\n    attemptStartedAt?: number,\n    orderingToken?: RouterOrderingToken\n  ): void {\n    const adaptive = this.entries[index].adaptiveConcurrency;\n    if (adaptive === undefined || adaptive === false) {\n      return;\n    }\n    const state = this.adaptiveState(index);\n    if (!success) {\n      if (failure?.scope === \"request\") {\n        return;\n      }\n      if (staleAdaptiveOutcome(state, attemptStartedAt, orderingToken)) {\n        return;\n      }\n      retainAdaptiveOutcomeOrder(state, attemptStartedAt, orderingToken);\n      state.successes = 0;\n      if (isCongestionFailure(failure)) {\n        state.limit = Math.max(state.min, Math.floor(state.limit / 2));\n      }\n      return;\n    }\n    if (staleAdaptiveOutcome(state, attemptStartedAt, orderingToken)) {\n      return;\n    }\n    retainAdaptiveOutcomeOrder(state, attemptStartedAt, orderingToken);\n    state.successes += 1;\n    if (state.successes >= state.increaseAfterSuccesses) {\n      state.limit = Math.min(state.max, state.limit + 1);\n      state.successes = 0;\n    }\n  }\n\n  snapshot(index: number): AdmissionSnapshot {\n    const entry = this.entries[index];\n    const key = this.key(index);\n    const base = {\n      inFlight: this.normalizedInFlight(key),\n      index,\n      waiting: this.normalizedWaiters(key)?.length ?? 0,\n    };\n    if (\n      entry.adaptiveConcurrency === undefined ||\n      entry.adaptiveConcurrency === false\n    ) {\n      return {\n        ...base,\n        adaptive: false,\n        ...(entry.maxConcurrency === undefined\n          ? {}\n          : { limit: entry.maxConcurrency }),\n      };\n    }\n    const state = this.adaptiveState(index);\n    return {\n      ...base,\n      adaptive: true,\n      increaseAfterSuccesses: state.increaseAfterSuccesses,\n      limit: state.limit,\n      max: state.max,\n      min: state.min,\n      successes: state.successes,\n    };\n  }\n\n  reorder<T extends { fullIndex: number }>(\n    candidates: T[],\n    selection: \"least-inflight\" | \"ordered\" | \"round-robin\"\n  ): void {\n    if (candidates.length < 2) {\n      return;\n    }\n    if (selection === \"least-inflight\") {\n      candidates.sort(\n        (left, right) =>\n          this.inFlight(left.fullIndex) - this.inFlight(right.fullIndex)\n      );\n      return;\n    }\n    if (selection === \"round-robin\") {\n      const pool = roundRobinPoolKey(candidates);\n      const cursor = this.roundRobinCursors.get(pool) ?? 0;\n      const offset = cursor % candidates.length;\n      // Refresh insertion order for bounded LRU-style retention. Candidate\n      // pools can vary with modality and health filtering in long-lived routers.\n      const existed = this.roundRobinCursors.delete(pool);\n      if (!existed) {\n        this.roundRobinPoolKeyChars += pool.length;\n      }\n      this.roundRobinCursors.set(pool, (offset + 1) % candidates.length);\n      while (\n        this.roundRobinCursors.size > MAX_ROUND_ROBIN_POOLS ||\n        this.roundRobinPoolKeyChars > MAX_ROUND_ROBIN_POOL_KEY_CHARS\n      ) {\n        const oldest = this.roundRobinCursors.keys().next().value;\n        if (oldest === undefined) {\n          break;\n        }\n        this.roundRobinCursors.delete(oldest);\n        this.roundRobinPoolKeyChars -= oldest.length;\n      }\n      candidates.push(...candidates.splice(0, offset));\n    }\n  }\n}\n","import type { RouterHealthRecord, RouterHealthStore } from \"./types\";\n\nexport interface LocalWriteFailureOverlay {\n  expirations: Array<{ deadline: number; key: string }>;\n  inactive: Map<string, true>;\n  records: Map<string, RouterHealthRecord>;\n}\n\nexport function probeExpiryBefore(\n  left: { deadline: number; key: string },\n  right: { deadline: number; key: string }\n): boolean {\n  return (\n    left.deadline < right.deadline ||\n    (left.deadline === right.deadline && left.key < right.key)\n  );\n}\n\nexport function pushProbeExpiry(\n  heap: Array<{ deadline: number; key: string }>,\n  expiry: { deadline: number; key: string }\n): void {\n  heap.push(expiry);\n  let index = heap.length - 1;\n  while (index > 0) {\n    const parent = Math.floor((index - 1) / 2);\n    if (!probeExpiryBefore(expiry, heap[parent])) {\n      break;\n    }\n    heap[index] = heap[parent];\n    index = parent;\n  }\n  heap[index] = expiry;\n}\n\nexport function popProbeExpiry(\n  heap: Array<{ deadline: number; key: string }>\n): { deadline: number; key: string } | undefined {\n  const first = heap[0];\n  const last = heap.pop();\n  if (first === undefined || last === undefined || heap.length === 0) {\n    return first;\n  }\n  let index = 0;\n  while (true) {\n    const left = index * 2 + 1;\n    const right = left + 1;\n    if (left >= heap.length) {\n      break;\n    }\n    const child =\n      right < heap.length && probeExpiryBefore(heap[right], heap[left])\n        ? right\n        : left;\n    if (!probeExpiryBefore(heap[child], last)) {\n      break;\n    }\n    heap[index] = heap[child];\n    index = child;\n  }\n  heap[index] = last;\n  return first;\n}\n\nexport const localWriteFailuresByStore = new WeakMap<\n  RouterHealthStore,\n  LocalWriteFailureOverlay\n>();\n","import {\n  localWriteFailuresByStore,\n  popProbeExpiry,\n  pushProbeExpiry,\n} from \"./health-overlay\";\nimport {\n  MAX_LOCAL_WRITE_FAILURES,\n  sharedRecordSupersedesLocal,\n} from \"./health-record\";\nimport { type HealthProbeLease, MemoryRouterHealthStore } from \"./health-store\";\nimport type { RouterHealthRecord, RouterHealthStore } from \"./types\";\n\nexport abstract class CandidateHealthStoreContext {\n  protected abstract clockNow(): number;\n\n  protected abstract read(\n    key: string,\n    decisionNow?: number\n  ): RouterHealthRecord | undefined;\n\n  protected readonly now: () => number;\n  protected readonly namespace: string;\n  protected readonly pruneStaleRecords: boolean;\n  protected readonly sharedNamespace: string;\n  protected readonly store: RouterHealthStore;\n  protected readonly knownKeys = new Set<string>();\n  protected readonly claimedProbes = new Map<string, HealthProbeLease>();\n  protected readonly localWriteFailures: Map<string, RouterHealthRecord>;\n  protected readonly inactiveLocalWriteFailures: Map<string, true>;\n  protected readonly localProbeExpirations: Array<{\n    deadline: number;\n    key: string;\n  }>;\n  protected lastValidNow: number | undefined;\n\n  constructor(\n    namespace: string,\n    store: RouterHealthStore = new MemoryRouterHealthStore(),\n    now: () => number = Date.now,\n    sharedNamespace = namespace\n  ) {\n    this.namespace = namespace;\n    this.sharedNamespace = sharedNamespace;\n    this.store = store;\n    const existingOverlay = localWriteFailuresByStore.get(store);\n    const localOverlay = existingOverlay ?? {\n      expirations: [],\n      inactive: new Map<string, true>(),\n      records: new Map<string, RouterHealthRecord>(),\n    };\n    this.localWriteFailures = localOverlay.records;\n    this.inactiveLocalWriteFailures = localOverlay.inactive;\n    this.localProbeExpirations = localOverlay.expirations;\n    if (existingOverlay === undefined) {\n      localWriteFailuresByStore.set(store, localOverlay);\n    }\n    this.pruneStaleRecords = store instanceof MemoryRouterHealthStore;\n    this.now = now;\n  }\n\n  protected keys(index: number, healthKey?: string, family?: string): string[] {\n    const shared = [\n      ...(healthKey === undefined\n        ? []\n        : [`${this.sharedNamespace}:credential:${healthKey}`]),\n      ...(family === undefined\n        ? []\n        : [`${this.sharedNamespace}:family:${family}`]),\n    ];\n    const keys = [`${this.namespace}:unit:${index}`, ...shared];\n    for (const key of keys) {\n      this.knownKeys.add(key);\n    }\n    return keys;\n  }\n\n  protected recordForKey(\n    key: string,\n    now: number\n  ): RouterHealthRecord | undefined {\n    const shared = this.read(key, now);\n    const local = this.localWriteFailures.get(key);\n    if (local === undefined) {\n      return shared;\n    }\n    if (sharedRecordSupersedesLocal(shared, local)) {\n      this.deleteLocalWriteFailure(key);\n      return shared;\n    }\n    if (local.lastSuccessAt !== undefined) {\n      this.localWriteFailures.delete(key);\n      this.localWriteFailures.set(key, local);\n      this.inactiveLocalWriteFailures.delete(key);\n      this.inactiveLocalWriteFailures.set(key, true);\n      return local;\n    }\n    this.localWriteFailures.delete(key);\n    this.localWriteFailures.set(key, local);\n    if ((local.probingUntil ?? 0) <= now) {\n      this.inactiveLocalWriteFailures.delete(key);\n      this.inactiveLocalWriteFailures.set(key, true);\n    }\n    return local;\n  }\n\n  protected deleteLocalWriteFailure(key: string): void {\n    this.localWriteFailures.delete(key);\n    this.inactiveLocalWriteFailures.delete(key);\n    this.claimedProbes.delete(key);\n  }\n\n  protected setLocalWriteFailure(\n    key: string,\n    record: RouterHealthRecord,\n    decisionNow = this.clockNow()\n  ): void {\n    this.promoteExpiredLocalProbes(decisionNow);\n    this.deleteLocalWriteFailure(key);\n    this.localWriteFailures.set(key, record);\n    if ((record.probingUntil ?? 0) <= decisionNow) {\n      this.inactiveLocalWriteFailures.set(key, true);\n    } else if (record.probingUntil !== undefined) {\n      pushProbeExpiry(this.localProbeExpirations, {\n        deadline: record.probingUntil,\n        key,\n      });\n    }\n    if (this.localWriteFailures.size > MAX_LOCAL_WRITE_FAILURES) {\n      const inactive = this.inactiveLocalWriteFailures.keys().next().value;\n      if (inactive !== undefined) {\n        this.deleteLocalWriteFailure(inactive);\n        this.compactLocalProbeExpirations();\n        return;\n      }\n      // Every retained record owns an active probe. Refuse retention of the\n      // newest lease rather than revoking an older owner's cleanup identity.\n      this.deleteLocalWriteFailure(key);\n    }\n    this.compactLocalProbeExpirations();\n  }\n\n  protected promoteExpiredLocalProbes(now: number): void {\n    while (\n      (this.localProbeExpirations[0]?.deadline ?? Number.POSITIVE_INFINITY) <=\n      now\n    ) {\n      const expiry = popProbeExpiry(this.localProbeExpirations);\n      if (expiry === undefined) {\n        return;\n      }\n      const record = this.localWriteFailures.get(expiry.key);\n      if (record?.probingUntil === expiry.deadline) {\n        this.inactiveLocalWriteFailures.delete(expiry.key);\n        this.inactiveLocalWriteFailures.set(expiry.key, true);\n      }\n    }\n  }\n\n  protected compactLocalProbeExpirations(): void {\n    if (\n      this.localProbeExpirations.length <=\n      this.localWriteFailures.size * 2 + 1024\n    ) {\n      return;\n    }\n    this.localProbeExpirations.length = 0;\n    for (const [key, record] of this.localWriteFailures) {\n      if (record.probingUntil !== undefined) {\n        pushProbeExpiry(this.localProbeExpirations, {\n          deadline: record.probingUntil,\n          key,\n        });\n      }\n    }\n  }\n}\n","import { CandidateHealthStoreContext } from \"./candidate-health-store-context\";\nimport {\n  consumeAsyncResult,\n  HEALTH_CLOCK_SKEW_MS,\n  HEALTH_STALE_AFTER_MS,\n  invalidStoreMutationResult,\n  MAX_COOLDOWN_MS,\n  normalizedRecord,\n  PROBE_LEASE_MS,\n  stringTokenTooFarInFuture,\n  validHealthNow,\n} from \"./health-record\";\nimport { resolveCasResult } from \"./health-store\";\nimport { consumeGenuinePromise } from \"./runtime-types\";\nimport type { FailureClassification, RouterHealthRecord } from \"./types\";\n\nexport class CandidateHealthStore extends CandidateHealthStoreContext {\n  protected claimLocalLease(\n    key: string,\n    current: RouterHealthRecord,\n    now: number\n  ): boolean {\n    if (current.cooldownUntil > now || (current.probingUntil ?? 0) > now) {\n      return false;\n    }\n    const probingUntil = now + PROBE_LEASE_MS;\n    this.setLocalWriteFailure(key, { ...current, probingUntil }, now);\n    this.claimedProbes.set(key, { key, probingUntil, source: \"local\" });\n    return true;\n  }\n\n  protected claimLease(\n    key: string,\n    current: RouterHealthRecord,\n    now = this.clockNow()\n  ): boolean {\n    if (current.version === Number.MAX_SAFE_INTEGER) {\n      // The numeric CAS contract cannot represent another distinct version.\n      // Coordinate a process-local probe without corrupting the shared record\n      // with an unsafe integer.\n      return this.claimLocalLease(key, current, now);\n    }\n    const next = {\n      ...current,\n      probingUntil: now + PROBE_LEASE_MS,\n      version: (current.version ?? 0) + 1,\n    };\n    const compareAndSet = this.compareAndSet();\n    if (compareAndSet !== undefined) {\n      try {\n        const claimed = compareAndSet(key, current.version, next);\n        if (\n          invalidStoreMutationResult(claimed) ||\n          (claimed !== true && claimed !== false)\n        ) {\n          return this.claimLocalLease(key, current, now);\n        }\n        if (claimed === true) {\n          this.claimedProbes.set(key, {\n            key,\n            probingUntil: next.probingUntil,\n          });\n        }\n        // A malformed synchronous result cannot prove lease ownership. Keep\n        // routing fail-open, but do not retain a lease that we cannot safely\n        // release later.\n        return claimed !== false;\n      } catch {\n        // Preserve fail-open routing while preventing a same-process probe\n        // stampede when shared reads work but lease writes do not.\n        return this.claimLocalLease(key, current, now);\n      }\n    }\n    try {\n      const result = this.store.set(key, next);\n      if (invalidStoreMutationResult(result)) {\n        return this.claimLocalLease(key, current, now);\n      }\n      this.claimedProbes.set(key, { key, probingUntil: next.probingUntil });\n    } catch {\n      return this.claimLocalLease(key, current, now);\n    }\n    return true;\n  }\n\n  protected pruneExpiredClaimedProbes(keys: string[], now: number): void {\n    for (const key of keys) {\n      const lease = this.claimedProbes.get(key);\n      if (lease !== undefined && lease.probingUntil <= now) {\n        this.claimedProbes.delete(key);\n      }\n    }\n  }\n\n  protected update<T>(\n    key: string,\n    updater: (current: RouterHealthRecord | undefined) => {\n      record?: RouterHealthRecord;\n      result: T;\n    },\n    decisionNow?: number\n  ): T | \"cas-exhausted\" {\n    const compareAndSet = this.compareAndSet();\n    for (let attempt = 0; attempt < 5; attempt++) {\n      const current = this.readForDecision(key, decisionNow);\n      const update = updater(current);\n      if (update.record === undefined) {\n        return update.result;\n      }\n      if (current?.version === Number.MAX_SAFE_INTEGER) {\n        return \"cas-exhausted\";\n      }\n      const next = {\n        ...update.record,\n        version: (current?.version ?? 0) + 1,\n      };\n      if (compareAndSet === undefined) {\n        try {\n          const result = this.store.set(key, next);\n          if (invalidStoreMutationResult(result)) {\n            return \"cas-exhausted\";\n          }\n          return update.result;\n        } catch {\n          return \"cas-exhausted\";\n        }\n      }\n      try {\n        const result = compareAndSet(key, current?.version, next);\n        if (invalidStoreMutationResult(result)) {\n          return \"cas-exhausted\";\n        }\n        const outcome = resolveCasResult(result, update.result);\n        if (outcome !== undefined) {\n          return outcome;\n        }\n      } catch {\n        return \"cas-exhausted\";\n      }\n    }\n    return \"cas-exhausted\";\n  }\n\n  protected readForDecision(\n    key: string,\n    decisionNow: number | undefined\n  ): RouterHealthRecord | undefined {\n    return decisionNow === undefined\n      ? this.read(key)\n      : this.read(key, decisionNow);\n  }\n\n  protected compareAndSet():\n    | ((\n        key: string,\n        expectedVersion: number | undefined,\n        value: RouterHealthRecord\n      ) => boolean)\n    | undefined {\n    try {\n      const method = this.store.compareAndSet;\n      return method === undefined ? undefined : method.bind(this.store);\n    } catch {\n      return;\n    }\n  }\n\n  protected read(\n    key: string,\n    decisionNow = this.clockNow()\n  ): RouterHealthRecord | undefined {\n    let raw: unknown;\n    try {\n      raw = this.store.get(key);\n      if (consumeAsyncResult(raw)) {\n        return;\n      }\n    } catch {\n      return;\n    }\n    const record = normalizedRecord(raw);\n    if (record === undefined) {\n      return;\n    }\n    const now = decisionNow;\n    if (\n      !Number.isFinite(now) ||\n      (record.observedAtMs !== undefined &&\n        record.observedAtMs > now + HEALTH_CLOCK_SKEW_MS) ||\n      record.cooldownUntil > now + MAX_COOLDOWN_MS + HEALTH_CLOCK_SKEW_MS ||\n      (record.probingUntil ?? 0) >\n        now + PROBE_LEASE_MS + HEALTH_CLOCK_SKEW_MS ||\n      stringTokenTooFarInFuture(record.lastFailureAt, now) ||\n      stringTokenTooFarInFuture(record.lastSuccessAt, now)\n    ) {\n      // A malformed or badly skewed shared record must not permanently remove\n      // a candidate from routing. Fail open; a later valid write can replace it.\n      return;\n    }\n    if (\n      record.observedAtMs !== undefined &&\n      now - record.observedAtMs > HEALTH_STALE_AFTER_MS &&\n      record.cooldownUntil <= now &&\n      (record.probingUntil ?? 0) <= now\n    ) {\n      if (this.pruneStaleRecords) {\n        try {\n          consumeAsyncResult(this.store.delete(key));\n        } catch {\n          // Lazy cleanup is best-effort.\n        }\n      }\n      return;\n    }\n    return record;\n  }\n\n  protected clockNow(): number {\n    try {\n      const value = this.now();\n      if (consumeGenuinePromise(value)) {\n        throw new Error(\"async health clock is unsupported\");\n      }\n      if (validHealthNow(value)) {\n        this.lastValidNow = value;\n        return value;\n      }\n    } catch {\n      // Freeze health time rather than letting an optional clock break routing.\n    }\n    if (this.lastValidNow !== undefined) {\n      return this.lastValidNow;\n    }\n    try {\n      const fallback = Date.now();\n      if (consumeGenuinePromise(fallback)) {\n        throw new Error(\"async fallback clock is unsupported\");\n      }\n      if (validHealthNow(fallback)) {\n        this.lastValidNow = fallback;\n        return fallback;\n      }\n    } catch {\n      // A fully unavailable clock still fails open at the Unix epoch.\n    }\n    this.lastValidNow = 0;\n    return 0;\n  }\n\n  protected failureKey(\n    index: number,\n    classification: FailureClassification,\n    healthKey?: string,\n    family?: string\n  ): string {\n    if (classification.scope === \"credential\" && healthKey !== undefined) {\n      return `${this.sharedNamespace}:credential:${healthKey}`;\n    }\n    if (classification.scope === \"provider-family\" && family !== undefined) {\n      return `${this.sharedNamespace}:family:${family}`;\n    }\n    return `${this.namespace}:unit:${index}`;\n  }\n}\n","import { CandidateHealthStore } from \"./candidate-health-store\";\nimport {\n  compareTokens,\n  DEFAULT_CREDENTIAL_MS,\n  DEFAULT_TRANSIENT_MS,\n  effectiveHealthRecord,\n  failureAtOrAfterAttempt,\n  MAX_COOLDOWN_MS,\n  newestToken,\n  successCanSupersede,\n  successSupersedesFailure,\n} from \"./health-record\";\nimport type { HealthTransition } from \"./health-store\";\nimport type {\n  FailureClassification,\n  RouterHealthRecord,\n  RouterOrderingToken,\n} from \"./types\";\n\nexport class CandidateHealthTransitions extends CandidateHealthStore {\n  failure(\n    index: number,\n    classification: FailureClassification,\n    healthKey?: string,\n    family?: string,\n    attemptStartedAt?: RouterOrderingToken\n  ): HealthTransition {\n    if (classification.scope === \"request\") {\n      return \"ignored-stale\";\n    }\n    const key = this.failureKey(index, classification, healthKey, family);\n    this.knownKeys.add(key);\n    const observedAt = this.clockNow();\n    const orderingToken = attemptStartedAt ?? observedAt;\n    const localPrevious = this.localWriteFailures.get(key);\n    let attemptedRecord: RouterHealthRecord | undefined;\n    const transition = this.update(\n      key,\n      (sharedPrevious) => {\n        const previous = effectiveHealthRecord(sharedPrevious, localPrevious);\n        if (successSupersedesFailure(previous?.lastSuccessAt, orderingToken)) {\n          return { result: \"ignored-stale\" as const };\n        }\n        if (\n          previous?.lastFailureAt !== undefined &&\n          previous.cooldownUntil <= observedAt &&\n          compareTokens(previous.lastFailureAt, orderingToken) >= 0\n        ) {\n          return { result: \"ignored-stale\" as const };\n        }\n        const requestedCooldown = Math.min(\n          Math.max(\n            classification.retryAfterMs ?? 0,\n            classification.cooldownMs ?? 0\n          ),\n          MAX_COOLDOWN_MS\n        );\n        if (previous !== undefined && previous.cooldownUntil > observedAt) {\n          const incomingIsNewest =\n            compareTokens(orderingToken, previous.lastFailureAt) >= 0;\n          attemptedRecord = {\n            ...previous,\n            cooldownUntil: Math.max(\n              previous.cooldownUntil,\n              observedAt + requestedCooldown\n            ),\n            lastFailureAt: newestToken(previous.lastFailureAt, orderingToken),\n            ...(classification.statusCode === undefined || !incomingIsNewest\n              ? {}\n              : { lastStatus: classification.statusCode }),\n            observedAtMs: observedAt,\n          };\n          return {\n            record: attemptedRecord,\n            result: \"deduplicated\" as const,\n          };\n        }\n        const failures = Math.min(\n          (previous?.failures ?? 0) + 1,\n          Number.MAX_SAFE_INTEGER\n        );\n        const base =\n          classification.scope === \"credential\"\n            ? DEFAULT_CREDENTIAL_MS\n            : DEFAULT_TRANSIENT_MS;\n        const exponential = Math.min(\n          base * 2 ** Math.min(failures - 1, 8),\n          MAX_COOLDOWN_MS\n        );\n        const duration = Math.min(\n          Math.max(exponential, requestedCooldown),\n          MAX_COOLDOWN_MS\n        );\n        attemptedRecord = {\n          cooldownUntil: observedAt + duration,\n          failures,\n          lastFailureAt: orderingToken,\n          ...(classification.statusCode === undefined\n            ? {}\n            : { lastStatus: classification.statusCode }),\n          observedAtMs: observedAt,\n        };\n        return {\n          record: attemptedRecord,\n          result: \"cooling\" as const,\n        };\n      },\n      observedAt\n    );\n    if (transition === \"cas-exhausted\" && attemptedRecord !== undefined) {\n      this.setLocalWriteFailure(key, attemptedRecord, observedAt);\n    } else if (\n      transition !== \"cas-exhausted\" &&\n      transition !== \"ignored-stale\"\n    ) {\n      this.deleteLocalWriteFailure(key);\n    }\n    return transition;\n  }\n\n  success(\n    index: number,\n    healthKey?: string,\n    family?: string,\n    attemptStartedAt?: RouterOrderingToken\n  ): HealthTransition | undefined {\n    let transition: HealthTransition | undefined;\n    const observedAt = this.clockNow();\n    const orderingToken = attemptStartedAt ?? observedAt;\n    for (const key of this.keys(index, healthKey, family)) {\n      const localFailure = this.localWriteFailures.get(key);\n      let attemptedRecord: RouterHealthRecord | undefined;\n      const result = this.update(\n        key,\n        (previous) => {\n          const newestFailure = newestToken(\n            localFailure?.lastFailureAt,\n            previous?.lastFailureAt ?? orderingToken\n          );\n          if (\n            (localFailure?.lastFailureAt !== undefined ||\n              previous?.lastFailureAt !== undefined) &&\n            !successCanSupersede(newestFailure, orderingToken)\n          ) {\n            return { result: { recovered: false, written: false } };\n          }\n          attemptedRecord = {\n            cooldownUntil: 0,\n            failures: 0,\n            lastSuccessAt: orderingToken,\n            observedAtMs: observedAt,\n          };\n          return {\n            record: attemptedRecord,\n            result: {\n              recovered:\n                (previous !== undefined &&\n                  (previous.failures > 0 ||\n                    previous.probingUntil !== undefined)) ||\n                (localFailure !== undefined && localFailure.failures > 0),\n              written: true,\n            },\n          };\n        },\n        observedAt\n      );\n      if (result === \"cas-exhausted\") {\n        if (attemptedRecord !== undefined) {\n          this.setLocalWriteFailure(key, attemptedRecord, observedAt);\n        }\n        transition = \"cas-exhausted\";\n      } else if (!result.written && transition !== \"cas-exhausted\") {\n        transition = \"ignored-stale\";\n      } else if (result.written) {\n        this.deleteLocalWriteFailure(key);\n        if (result.recovered && transition === undefined) {\n          transition = \"recovered\";\n        }\n      }\n    }\n    return transition;\n  }\n\n  unavailableSince(\n    index: number,\n    selectedAt: RouterOrderingToken,\n    healthKey?: string,\n    family?: string\n  ): boolean {\n    const now = this.clockNow();\n    return this.keys(index, healthKey, family).some((key) => {\n      const local = this.localWriteFailures.get(key);\n      if (\n        local !== undefined &&\n        local.cooldownUntil > now &&\n        failureAtOrAfterAttempt(local.lastFailureAt, selectedAt)\n      ) {\n        return true;\n      }\n      const record = this.read(key, now);\n      return (\n        record !== undefined &&\n        record.cooldownUntil > now &&\n        failureAtOrAfterAttempt(record.lastFailureAt, selectedAt)\n      );\n    });\n  }\n}\n","import { CandidateHealthTransitions } from \"./candidate-health-transitions\";\nimport { compareTokens, redactHealthKey } from \"./health-record\";\nimport { cloneHealthRecord, type HealthProbeLease } from \"./health-store\";\nimport type { RouterHealthRecord, RouterHealthSnapshot } from \"./types\";\n\nexport class CandidateHealthState extends CandidateHealthTransitions {\n  register(index: number, healthKey?: string, family?: string): void {\n    this.keys(index, healthKey, family);\n  }\n\n  available(index: number, healthKey?: string, family?: string): boolean {\n    const now = this.clockNow();\n    const keys = this.keys(index, healthKey, family);\n    const records = keys\n      .map((key) => ({ key, health: this.recordForKey(key, now) }))\n      .filter(\n        (item): item is { key: string; health: RouterHealthRecord } =>\n          item.health !== undefined\n      );\n    if (\n      records.some(\n        ({ health }) =>\n          (health.failures > 0 && health.cooldownUntil > now) ||\n          (health.probingUntil ?? 0) > now\n      )\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  claimProbe(index: number, healthKey?: string, family?: string): boolean {\n    const now = this.clockNow();\n    const keys = this.keys(index, healthKey, family);\n    this.pruneExpiredClaimedProbes(keys, now);\n    const records = keys\n      .map((key) => ({ key, record: this.recordForKey(key, now) }))\n      .filter(\n        (item): item is { key: string; record: RouterHealthRecord } =>\n          item.record !== undefined && item.record.failures > 0\n      );\n    if (records.length === 0) {\n      return true;\n    }\n    if (\n      records.some(\n        ({ record }) =>\n          record.cooldownUntil > now || (record.probingUntil ?? 0) > now\n      )\n    ) {\n      return false;\n    }\n    const probe = records.sort((left, right) =>\n      compareTokens(right.record.lastFailureAt, left.record.lastFailureAt)\n    )[0];\n    if (this.localWriteFailures.has(probe.key)) {\n      return this.claimLocalLease(probe.key, probe.record, now);\n    }\n    return this.claimLease(probe.key, probe.record, now);\n  }\n\n  probe(index: number, healthKey?: string, family?: string): boolean {\n    const now = this.clockNow();\n    const keys = this.keys(index, healthKey, family);\n    this.pruneExpiredClaimedProbes(keys, now);\n    const records = keys\n      .map((key) => ({ key, record: this.recordForKey(key, now) }))\n      .filter(\n        (item): item is { key: string; record: RouterHealthRecord } =>\n          item.record !== undefined && item.record.failures > 0\n      );\n    if (\n      records.some(\n        ({ record }) =>\n          record.cooldownUntil > now || (record.probingUntil ?? 0) > now\n      )\n    ) {\n      return false;\n    }\n    const probe = records.sort((left, right) =>\n      compareTokens(right.record.lastFailureAt, left.record.lastFailureAt)\n    )[0];\n    if (probe === undefined) {\n      return false;\n    }\n    if (this.localWriteFailures.has(probe.key)) {\n      return this.claimLocalLease(probe.key, probe.record, now);\n    }\n    return this.claimLease(probe.key, probe.record, now);\n  }\n\n  takeProbeLease(\n    index: number,\n    healthKey?: string,\n    family?: string\n  ): HealthProbeLease | undefined {\n    for (const key of this.keys(index, healthKey, family)) {\n      const lease = this.claimedProbes.get(key);\n      if (lease !== undefined) {\n        this.claimedProbes.delete(key);\n        if (\n          lease.source === \"local\" &&\n          this.localWriteFailures.get(key)?.probingUntil !== lease.probingUntil\n        ) {\n          continue;\n        }\n        return lease;\n      }\n    }\n    return;\n  }\n\n  releaseProbe(lease: HealthProbeLease | undefined): void {\n    if (lease === undefined) {\n      return;\n    }\n    if (lease.source === \"local\") {\n      const local = this.localWriteFailures.get(lease.key);\n      if (local?.probingUntil === lease.probingUntil) {\n        const { probingUntil: _, ...released } = local;\n        this.setLocalWriteFailure(lease.key, released);\n      }\n      return;\n    }\n    const local = this.localWriteFailures.get(lease.key);\n    if (local?.probingUntil === lease.probingUntil) {\n      const { probingUntil: _, ...released } = local;\n      this.setLocalWriteFailure(lease.key, released);\n    }\n    this.update(lease.key, (current) => {\n      if (current?.probingUntil !== lease.probingUntil) {\n        return { result: false };\n      }\n      const { probingUntil: _, ...record } = current;\n      return { record, result: true };\n    });\n  }\n\n  snapshot(): RouterHealthSnapshot[] {\n    const now = this.clockNow();\n    return [...this.knownKeys].flatMap((key) => {\n      const record = this.recordForKey(key, now);\n      return record === undefined || record.failures === 0\n        ? []\n        : [{ key: redactHealthKey(key), record: cloneHealthRecord(record) }];\n    });\n  }\n}\n","import type { LanguageModelV4 } from \"@ai-sdk/provider\";\nimport type { LanguageModel } from \"ai\";\nimport {\n  snapshotAdaptiveConcurrency,\n  snapshotLanguageModelV4,\n  snapshotSupports,\n} from \"./router-model-options\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nimport type {\n  Modality,\n  ProviderEntry,\n  ProviderEntryFactory,\n  ProviderEntryInstance,\n} from \"./types\";\n\nexport interface NormalizedEntry {\n  adaptiveConcurrency?: boolean | import(\"./types\").AdaptiveConcurrencyConfig;\n  healthKey?: string;\n  /** Model id for the fail-fast error message (factory form only). */\n  label?: string;\n  maxConcurrency?: number;\n  /** The user's original entry — surfaced verbatim on `onError`. */\n  original: ProviderEntry;\n  providerFamily?: string;\n  /** Produce the raw model (calls the factory, or returns the captured instance). */\n  raw: () => LanguageModel;\n  /** Declared modalities, or `undefined` for a universal (catch-all) candidate. */\n  supports?: Modality[];\n}\n\nexport function assertSynchronousEntryFields(values: readonly unknown[]): void {\n  let asyncField = false;\n  for (const value of values) {\n    if (consumeGenuinePromise(value)) {\n      asyncField = true;\n    }\n  }\n  if (asyncField) {\n    throw new Error(\"ai-router: provider entry fields must be synchronous\");\n  }\n}\n\n/** Collapse any of the three `ProviderEntry` shapes into a {@link NormalizedEntry}. */\nexport function normalizeEntry(entry: ProviderEntry): NormalizedEntry {\n  if (typeof entry !== \"object\" || entry === null) {\n    throw new Error(\"ai-router: each provider entry must be an object\");\n  }\n  consumeOwnDataPromiseFields(entry, [\n    \"adaptiveConcurrency\",\n    \"healthKey\",\n    \"maxConcurrency\",\n    \"model\",\n    \"provider\",\n    \"providerFamily\",\n    \"supports\",\n  ]);\n  // Wrapper entries are identified without evaluating either their `model`\n  // getter or unrelated bare-model fields. This keeps extension getters out of\n  // the alternate shape's validation path.\n  if (!Reflect.has(entry, \"model\")) {\n    const bareModel = snapshotLanguageModelV4(entry);\n    if (bareModel !== undefined) {\n      return { original: entry, raw: () => bareModel };\n    }\n    throw new Error(\"ai-router: each bare provider entry must be a v4 model\");\n  }\n  // (2) Instance-object form: `{ model: <v4 model>, supports? }`.\n  const candidate = entry as ProviderEntryFactory | ProviderEntryInstance;\n  const candidateModel = Reflect.get(candidate, \"model\");\n  if (consumeGenuinePromise(candidateModel)) {\n    throw new Error(\"ai-router: provider entry model must be synchronous\");\n  }\n  if (candidateModel !== null && typeof candidateModel === \"object\") {\n    const instance = candidate as ProviderEntryInstance;\n    const model = candidateModel as LanguageModelV4;\n    const adaptiveConcurrency = instance.adaptiveConcurrency;\n    const healthKey = instance.healthKey;\n    const maxConcurrency = instance.maxConcurrency;\n    const supports = instance.supports;\n    const providerFamily = instance.providerFamily;\n    assertSynchronousEntryFields([\n      adaptiveConcurrency,\n      healthKey,\n      maxConcurrency,\n      supports,\n      providerFamily,\n    ]);\n    return {\n      adaptiveConcurrency: snapshotAdaptiveConcurrency(adaptiveConcurrency),\n      healthKey,\n      maxConcurrency,\n      supports: snapshotSupports(supports),\n      original: entry,\n      providerFamily,\n      raw: () => model,\n    };\n  }\n  // (3) Factory form: `{ provider, model: string, supports? }`.\n  const factory = candidate as ProviderEntryFactory;\n  const provider = factory.provider;\n  const adaptiveConcurrency = factory.adaptiveConcurrency;\n  const healthKey = factory.healthKey;\n  const maxConcurrency = factory.maxConcurrency;\n  const supports = factory.supports;\n  const providerFamily = factory.providerFamily;\n  assertSynchronousEntryFields([\n    provider,\n    adaptiveConcurrency,\n    healthKey,\n    maxConcurrency,\n    supports,\n    providerFamily,\n  ]);\n  if (typeof provider !== \"function\" || typeof candidateModel !== \"string\") {\n    throw new Error(\n      \"ai-router: a factory entry requires a `provider` function and a string `model`\"\n    );\n  }\n  const model = candidateModel;\n  return {\n    adaptiveConcurrency: snapshotAdaptiveConcurrency(adaptiveConcurrency),\n    healthKey,\n    maxConcurrency,\n    supports: snapshotSupports(supports),\n    original: entry,\n    providerFamily,\n    label: model,\n    raw: () => Reflect.apply(provider, factory, [model]),\n  };\n}\n\n/**\n * A delegating `LanguageModelV4` for one logical id.\n *\n * For every request it:\n *  1. Detects the input modalities from the prompt.\n *  2. Keeps the candidate entries whose `supports` covers them, in order.\n *  3. Tries each candidate; on failure it classifies the error (retry vs stop),\n *     calls `onError`, and falls through to the next one when retryable.\n *  4. On `doStream`, wraps the live stream so a mid-stream failure also falls\n *     back transparently (before any content has been emitted).\n *  5. Surfaces the original error for a single failure, or an `AggregateError`\n *     of all candidate errors when several fail.\n *\n * It forwards an attempt-isolated copy of the V4 call options so one provider\n * cannot mutate the prompt or policy observed by later fallback candidates.\n */\n","import type { LanguageModelV4 } from \"@ai-sdk/provider\";\n\nimport { AdmissionController } from \"./admission\";\nimport type { AdmissionRegistry } from \"./admission-utils\";\nimport type { RetryBudget } from \"./budget\";\nimport { CandidateHealthState } from \"./candidate-health\";\nimport { CooldownState, resolveCooldown } from \"./cooldown\";\nimport { defaultClassifyFailure } from \"./failure\";\nimport type { OrderingTokenSource } from \"./ordering\";\nimport { resolveShouldRetry } from \"./retry\";\nimport { type NormalizedEntry, normalizeEntry } from \"./router-entry\";\nimport type { InvalidProviderModelError } from \"./router-generate-validator\";\nimport {\n  createRetryBudget,\n  resolveHealthNamespace,\n  resolveSharedHealthNamespace,\n  validateEntryConfiguration,\n  validateSharedAdmission,\n} from \"./router-options\";\nimport { sanitizeSupportedUrls } from \"./router-supported-urls\";\nimport type { ResolvedEntry } from \"./stream\";\nimport { durationMs } from \"./timeout\";\nimport type {\n  ClassifyFailure,\n  CreateRouterOptions,\n  OnRouterAttempt,\n  OnRouterError,\n  ProviderEntry,\n  RouterHealthStore,\n  ShouldRetryThisError,\n  ValidateGenerateResult,\n} from \"./types\";\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\n\nexport abstract class RouterModelConfig {\n  protected abstract computeSupportedUrls():\n    | Promise<Record<string, RegExp[]>>\n    | Record<string, RegExp[]>;\n\n  readonly specificationVersion = \"v4\" as const;\n  readonly provider = \"router\";\n  readonly modelId: string;\n\n  protected readonly normalized: NormalizedEntry[];\n  protected readonly onError?: OnRouterError;\n  protected readonly shouldRetry: ShouldRetryThisError;\n  protected readonly retryAfterOutput: boolean;\n  protected readonly cooldown?: CooldownState;\n  protected readonly health: CandidateHealthState;\n  protected readonly healthEnabled: boolean;\n  protected readonly classifyFailure: ClassifyFailure;\n  protected readonly hasCustomClassifier: boolean;\n  protected readonly hasCustomRetry: boolean;\n  protected readonly attemptTimeout?: number;\n  protected readonly concurrencyWaitTimeout?: number;\n  protected readonly backoff?: number;\n  protected readonly firstContentTimeout?: number;\n  protected readonly totalTimeout?: number;\n  protected readonly maxAttempts: number;\n  protected readonly onAttempt?: OnRouterAttempt;\n  protected readonly validateResult?: ValidateGenerateResult;\n  protected readonly strictStreamValidation: boolean;\n  protected readonly retryBudget?: RetryBudget;\n  protected readonly admission: AdmissionController;\n  protected readonly ordering: OrderingTokenSource;\n  protected readonly selection: \"least-inflight\" | \"ordered\" | \"round-robin\";\n\n  /** Cache of instantiated models, keyed by candidate index. */\n  protected readonly modelCache = new Map<number, LanguageModelV4>();\n  /** Permanent invalid-model results are cached; transient factory throws are not. */\n  protected readonly modelErrors = new Map<number, InvalidProviderModelError>();\n  /** Memoized conservative `supportedUrls` (computed once per instance). */\n  protected supportedUrlsCache: Record<string, RegExp[]> = {};\n  protected supportedUrlsPromise?: Promise<Record<string, RegExp[]>>;\n  protected supportedUrlsComputed = false;\n\n  protected abstract emitSkipped(\n    candidates: ResolvedEntry[],\n    phase: \"generate\" | \"stream-open\",\n    reason: \"concurrency\" | \"cooldown\" | \"max-attempts\"\n  ): void;\n\n  constructor(\n    logicalId: string,\n    entries: ProviderEntry[],\n    options: CreateRouterOptions,\n    admissionRegistry: AdmissionRegistry,\n    healthStore: RouterHealthStore,\n    ordering: OrderingTokenSource\n  ) {\n    this.modelId = logicalId;\n    this.ordering = ordering;\n    const fallback = options.fallback;\n    this.health = new CandidateHealthState(\n      resolveHealthNamespace(logicalId, fallback?.healthNamespace),\n      healthStore,\n      Date.now,\n      resolveSharedHealthNamespace(logicalId, fallback?.healthNamespace)\n    );\n    this.normalized = entries.map(normalizeEntry);\n    for (const entry of this.normalized) {\n      validateEntryConfiguration(entry);\n      if (\n        entry.maxConcurrency !== undefined &&\n        (!Number.isSafeInteger(entry.maxConcurrency) ||\n          entry.maxConcurrency < 1)\n      ) {\n        throw new Error(\"ai-router: maxConcurrency must be a positive integer\");\n      }\n    }\n    for (const [index, entry] of this.normalized.entries()) {\n      this.health.register(index, entry.healthKey, entry.providerFamily);\n    }\n    validateSharedAdmission(this.normalized);\n    this.onError = options.onError;\n    this.onAttempt = options.onAttempt;\n    this.shouldRetry = resolveShouldRetry(fallback?.shouldRetry);\n    this.classifyFailure = fallback?.classifyFailure ?? defaultClassifyFailure;\n    this.hasCustomClassifier = fallback?.classifyFailure !== undefined;\n    this.hasCustomRetry = fallback?.shouldRetry !== undefined;\n    this.retryAfterOutput = fallback?.retryAfterOutput ?? false;\n    this.attemptTimeout = durationMs(fallback?.attemptTimeout);\n    this.concurrencyWaitTimeout = durationMs(fallback?.concurrencyWaitTimeout);\n    this.admission = new AdmissionController(\n      this.normalized,\n      this.concurrencyWaitTimeout,\n      resolveHealthNamespace(logicalId, fallback?.healthNamespace),\n      admissionRegistry\n    );\n    this.backoff =\n      fallback?.backoff === false ? undefined : durationMs(fallback?.backoff);\n    this.firstContentTimeout = durationMs(fallback?.firstContentTimeout);\n    this.totalTimeout = durationMs(fallback?.totalTimeout);\n    this.maxAttempts = Math.max(\n      1,\n      Math.floor(fallback?.maxAttempts ?? entries.length)\n    );\n    if (\n      fallback?.maxAttempts !== undefined &&\n      (!(\n        Number.isFinite(fallback.maxAttempts) &&\n        Number.isSafeInteger(fallback.maxAttempts)\n      ) ||\n        fallback.maxAttempts < 1)\n    ) {\n      throw new Error(\n        \"ai-router: maxAttempts must be a positive finite number\"\n      );\n    }\n    this.retryBudget = createRetryBudget(fallback?.retryBudget);\n    const selection = fallback?.selection ?? \"ordered\";\n    if (\n      selection !== \"ordered\" &&\n      selection !== \"least-inflight\" &&\n      selection !== \"round-robin\"\n    ) {\n      throw new Error(\n        'ai-router: selection must be \"ordered\", \"least-inflight\", or \"round-robin\"'\n      );\n    }\n    this.selection = selection;\n    this.validateResult = fallback?.validateResult;\n    this.strictStreamValidation = fallback?.strictStreamValidation ?? false;\n    const cfg = resolveCooldown(fallback?.cooldown);\n    this.cooldown = cfg ? new CooldownState(cfg) : undefined;\n    this.healthEnabled = fallback?.health ?? cfg !== undefined;\n  }\n\n  /**\n   * The set of URLs the router can pass through un-downloaded. The AI SDK reads\n   * this ONCE during call setup to decide whether to download+inline a URL or\n   * forward it raw — but it cannot know which candidate will actually serve the\n   * request. So we report only the support COMMON to every candidate: a URL is\n   * passed through only if all candidates handle it natively; otherwise the SDK\n   * inlines it (which any candidate accepts). Computed once and memoized.\n   */\n  get supportedUrls(): LanguageModelV4[\"supportedUrls\"] {\n    if (!this.supportedUrlsComputed) {\n      const computed = this.computeSupportedUrls();\n      if (computed instanceof Promise) {\n        this.supportedUrlsPromise = computed;\n      } else {\n        this.supportedUrlsCache = computed;\n      }\n      this.supportedUrlsComputed = true;\n    }\n    if (this.supportedUrlsPromise !== undefined) {\n      return this.supportedUrlsPromise.then(sanitizeSupportedUrls, () => ({}));\n    }\n    return sanitizeSupportedUrls(this.supportedUrlsCache);\n  }\n}\n","import type {\n  LanguageModelV4,\n  LanguageModelV4CallOptions,\n} from \"@ai-sdk/provider\";\nimport { RouterHealthUnavailableError } from \"./health-store\";\nimport { detectModalities, supportsAll } from \"./modality\";\nimport { InvalidProviderModelError } from \"./router-generate-validator\";\nimport { snapshotLanguageModelV4 } from \"./router-model-options\";\nimport {\n  sanitizeSupportedUrls,\n  settleSupportedUrls,\n} from \"./router-supported-urls\";\nimport { captureGenuinePromise } from \"./runtime-types\";\nimport type { ResolvedEntry } from \"./stream\";\nimport type {\n  RouterAdmissionSnapshot,\n  RouterHealthSnapshot,\n  RouterRetryBudgetSnapshot,\n} from \"./types\";\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\n\nimport { RouterModelConfig } from \"./router-model-config\";\n\nexport abstract class RouterModelState extends RouterModelConfig {\n  protected computeSupportedUrls():\n    | Promise<Record<string, RegExp[]>>\n    | Record<string, RegExp[]> {\n    // With multiple candidates the router cannot know which one will serve the\n    // request, so it conservatively reports NO native URL support — the SDK then\n    // downloads + inlines every URL, which any candidate accepts. A lone\n    // candidate can safely report its own support. Either way, a broken / non-v4\n    // first entry must not abort call setup (read before any fallback runs).\n    if (this.normalized.length !== 1) {\n      return {};\n    }\n    try {\n      const supported = this.instantiate(0).supportedUrls;\n      if (\n        supported !== null &&\n        (typeof supported === \"object\" || typeof supported === \"function\")\n      ) {\n        const promise = captureGenuinePromise(supported);\n        if (promise !== undefined) {\n          return settleSupportedUrls(promise);\n        }\n        return sanitizeSupportedUrls(supported);\n      }\n      return sanitizeSupportedUrls(supported);\n    } catch {\n      return {};\n    }\n  }\n\n  healthSnapshot(): RouterHealthSnapshot[] {\n    return this.health.snapshot();\n  }\n\n  admissionSnapshot(): RouterAdmissionSnapshot[] {\n    return this.normalized.map((_, index) => ({\n      ...this.admission.snapshot(index),\n      logicalId: this.modelId,\n    }));\n  }\n\n  retryBudgetSnapshot(): RouterRetryBudgetSnapshot | undefined {\n    const snapshot = this.retryBudget?.snapshot();\n    return snapshot === undefined\n      ? undefined\n      : { ...snapshot, logicalId: this.modelId };\n  }\n\n  /**\n   * Commit a survivor into cooldown state, but only when reaching it actually\n   * involved an earlier candidate failing (`hadFailure`), or when it is the\n   * primary recovering (`fullIndex === 0`). A candidate reached merely because\n   * earlier entries were modality-filtered out must NOT become sticky —\n   * otherwise a later request of a different modality would skip a perfectly\n   * healthy higher-priority primary. No-op when cooldown is disabled.\n   */\n  protected commitSurvivor(fullIndex: number, hadFailure: boolean): void {\n    if (hadFailure || fullIndex === 0) {\n      this.cooldown?.advanceTo(fullIndex);\n    }\n  }\n\n  protected assertHasCandidate(candidates: ResolvedEntry[]): void {\n    if (candidates.length === 0) {\n      throw new Error(\n        `ai-router: no candidate for \"${this.modelId}\" supports the requested input modalities`\n      );\n    }\n  }\n\n  /** Lazily instantiate (and cache) the model for a candidate index. */\n  protected instantiate(index: number): LanguageModelV4 {\n    // Cached models are always defined objects, so a present entry short-circuits\n    // without a second Map lookup (and never re-creates a candidate).\n    const cached = this.modelCache.get(index);\n    if (cached !== undefined) {\n      return cached;\n    }\n    const cachedError = this.modelErrors.get(index);\n    if (cachedError !== undefined) {\n      throw cachedError;\n    }\n\n    const entry = this.normalized[index];\n    const model = entry.raw();\n    // Fail fast — outside the fallback loop — if a factory or instance entry did\n    // not yield a v4 language model (a bare model-id string, or an older spec).\n    // Otherwise it would crash deep inside the routed call and be swallowed into\n    // fallback as an opaque error.\n    const stableModel = snapshotLanguageModelV4(model);\n    if (stableModel === undefined) {\n      const error = new InvalidProviderModelError(\n        entry.label === undefined\n          ? `ai-router: entry for \"${this.modelId}\" did not provide a v4 LanguageModel`\n          : `ai-router: provider for \"${this.modelId}\" (model \"${entry.label}\") did not return a v4 LanguageModel`\n      );\n      this.modelErrors.set(index, error);\n      throw error;\n    }\n    this.modelCache.set(index, stableModel);\n    return stableModel;\n  }\n\n  /**\n   * Filter entries by the prompt's required modalities and order them for this\n   * request. With sticky cooldown, the active survivor is promoted to the head\n   * instead of becoming a start offset, so every other compatible candidate\n   * remains reachable if that survivor fails.\n   */\n  protected selectCandidates(\n    options: LanguageModelV4CallOptions,\n    phase: \"generate\" | \"stream-open\"\n  ): {\n    candidates: ResolvedEntry[];\n    startIndex: number;\n  } {\n    const required = detectModalities(options.prompt);\n    const candidates: ResolvedEntry[] = [];\n    const coolingCandidates: ResolvedEntry[] = [];\n    const router = this;\n    for (let i = 0; i < this.normalized.length; i++) {\n      if (supportsAll(this.normalized[i].supports, required)) {\n        const index = i;\n        const resolved: ResolvedEntry = {\n          entry: this.normalized[i].original,\n          // Instantiate lazily, on first access, so a later candidate whose\n          // factory throws (or yields a non-v4 model) is treated as a normal\n          // candidate failure (classified + fallen through) rather than aborting\n          // the whole request before a healthy higher-priority candidate runs.\n          get model() {\n            return router.instantiate(index);\n          },\n          fullIndex: i,\n        };\n        if (\n          this.healthEnabled &&\n          !this.health.available(\n            i,\n            this.normalized[i].healthKey,\n            this.normalized[i].providerFamily\n          )\n        ) {\n          coolingCandidates.push(resolved);\n        } else {\n          candidates.push(resolved);\n        }\n      }\n    }\n\n    this.emitSkipped(coolingCandidates, phase, \"cooldown\");\n    if (candidates.length === 0 && coolingCandidates.length > 0) {\n      throw new RouterHealthUnavailableError(this.modelId);\n    }\n\n    if (this.cooldown) {\n      this.cooldown.checkAndReset();\n      const active = this.cooldown.current();\n      // Honor the sticky survivor ONLY when it is itself present in this request's\n      // modality-filtered set. If it was filtered out, re-probe from the top\n      // rather than skipping forward to a later candidate (which would silently\n      // bypass a healthy higher-priority candidate for this modality).\n      const pos = candidates.findIndex(\n        (candidate) => candidate.fullIndex === active\n      );\n      if (pos > 0) {\n        const [sticky] = candidates.splice(pos, 1);\n        if (sticky !== undefined) {\n          candidates.unshift(sticky);\n        }\n      }\n      // Keep the sticky survivor (or the first modality-compatible candidate\n      // when it is absent) first. Selection policies only balance the fallback\n      // tail and therefore cannot bypass the cooldown decision.\n      this.applySelection(candidates, 1);\n    } else {\n      this.applySelection(candidates);\n    }\n    return { candidates, startIndex: 0 };\n  }\n\n  protected applySelection(candidates: ResolvedEntry[], from = 0): void {\n    if (from === 0) {\n      this.admission.reorder(candidates, this.selection);\n      return;\n    }\n    const tail = candidates.slice(from);\n    this.admission.reorder(tail, this.selection);\n    candidates.splice(from, tail.length, ...tail);\n  }\n}\n","import type { LanguageModelV4GenerateResult } from \"@ai-sdk/provider\";\nimport type { HealthTransition } from \"./health-store\";\nimport { runAttemptObservabilityHook } from \"./observability\";\nimport { snapshotGenerateEnvelope } from \"./router-generate-envelope\";\nimport {\n  EmptyModelResponseError,\n  InvalidModelResponseError,\n  ValidatorContractError,\n  validateGenerateEnvelope,\n} from \"./router-generate-validation\";\nimport {\n  captureValidatorMutationTargets,\n  consumeCapturedValidatorMutationPromises,\n  consumeNestedValidatorInputPromiseMutations,\n  GENERATE_ENVELOPE_FIELDS,\n  hasOutputContent,\n} from \"./router-generate-validator\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nimport type { ResolvedEntry } from \"./stream\";\nimport type {\n  FailureClassification,\n  OnRouterAttempt,\n  RouterOrderingToken,\n} from \"./types\";\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\n\nimport { RouterModelState } from \"./router-model-state\";\n\nexport class RouterAttemptObservability extends RouterModelState {\n  protected assertValidResult(\n    result: LanguageModelV4GenerateResult\n  ): LanguageModelV4GenerateResult {\n    let snapshot: LanguageModelV4GenerateResult;\n    try {\n      snapshot = snapshotGenerateEnvelope(result);\n    } catch {\n      throw new InvalidModelResponseError(\n        \"result properties could not be read\"\n      );\n    }\n    const shapeError = validateGenerateEnvelope(snapshot);\n    if (shapeError !== undefined) {\n      throw new InvalidModelResponseError(shapeError);\n    }\n    snapshot = {\n      ...snapshot,\n      content: [...snapshot.content],\n      warnings: [...snapshot.warnings],\n    };\n    if (!hasOutputContent(snapshot)) {\n      throw new EmptyModelResponseError();\n    }\n    if (this.validateResult === undefined) {\n      return snapshot;\n    }\n    const validatorInput = snapshotGenerateEnvelope(snapshot);\n    const validatorMutationTargets =\n      captureValidatorMutationTargets(validatorInput);\n    let validation: unknown;\n    try {\n      validation = this.validateResult(validatorInput);\n    } catch (error) {\n      throw new ValidatorContractError(\"threw\", error);\n    } finally {\n      consumeOwnDataPromiseFields(validatorInput, GENERATE_ENVELOPE_FIELDS);\n      consumeNestedValidatorInputPromiseMutations(validatorInput);\n      consumeCapturedValidatorMutationPromises(validatorMutationTargets);\n    }\n    if (\n      ((typeof validation === \"object\" && validation !== null) ||\n        typeof validation === \"function\") &&\n      consumeGenuinePromise(validation)\n    ) {\n      throw new ValidatorContractError(\"must be synchronous\");\n    }\n    if (validation === true) {\n      return snapshot;\n    }\n    if (validation === false) {\n      throw new InvalidModelResponseError(\"custom validator returned false\");\n    }\n    if (typeof validation === \"string\") {\n      throw new InvalidModelResponseError(validation);\n    }\n    throw new ValidatorContractError(\"must return boolean or string\");\n  }\n\n  protected emitAttempt(\n    info: Omit<Parameters<OnRouterAttempt>[0], \"entry\" | \"logicalId\"> & {\n      candidate: ResolvedEntry;\n    }\n  ): void {\n    const { candidate, failure, ...rest } = info;\n    const payload = {\n      ...rest,\n      ...(failure === undefined ? {} : { failure: { ...failure } }),\n      ...(rest.concurrencyLimit === undefined\n        ? { concurrencyLimit: this.admission.limit(candidate.fullIndex) }\n        : {}),\n      entry: candidate.entry,\n      logicalId: this.modelId,\n    };\n    runAttemptObservabilityHook(payload, (event) => this.onAttempt?.(event));\n  }\n\n  protected emitSkipped(\n    candidates: ResolvedEntry[],\n    phase: \"generate\" | \"stream-open\",\n    reason: \"concurrency\" | \"cooldown\" | \"max-attempts\"\n  ): void {\n    for (const candidate of candidates) {\n      this.emitAttempt({\n        candidate,\n        durationMs: 0,\n        index: candidate.fullIndex,\n        outcome: \"skipped\",\n        phase,\n        reason,\n        concurrencyLimit: this.admission.limit(candidate.fullIndex),\n        ...(reason === \"concurrency\"\n          ? {\n              inFlight: this.admission.inFlight(candidate.fullIndex),\n            }\n          : {}),\n      });\n    }\n  }\n\n  protected markFailure(\n    index: number,\n    classification: FailureClassification,\n    attemptStartedAt: RouterOrderingToken = Date.now()\n  ): HealthTransition {\n    const entry = this.normalized[index];\n    return this.health.failure(\n      index,\n      classification,\n      entry.healthKey,\n      entry.providerFamily,\n      attemptStartedAt\n    );\n  }\n\n  protected markFailureIfEnabled(\n    index: number,\n    classification: FailureClassification,\n    attemptStartedAt: RouterOrderingToken = Date.now()\n  ): HealthTransition | undefined {\n    if (this.healthEnabled && classification.scope !== \"request\") {\n      return this.markFailure(index, classification, attemptStartedAt);\n    }\n    return;\n  }\n\n  protected markSuccess(\n    index: number,\n    attemptStartedAt: RouterOrderingToken = Date.now()\n  ): HealthTransition | undefined {\n    const entry = this.normalized[index];\n    return this.health.success(\n      index,\n      entry.healthKey,\n      entry.providerFamily,\n      attemptStartedAt\n    );\n  }\n\n  protected markSuccessIfEnabled(\n    index: number,\n    attemptStartedAt: RouterOrderingToken = Date.now()\n  ): HealthTransition | undefined {\n    if (this.healthEnabled) {\n      return this.markSuccess(index, attemptStartedAt);\n    }\n    return;\n  }\n\n  protected becameUnavailable(\n    index: number,\n    selectedAt: RouterOrderingToken\n  ): boolean {\n    if (!this.healthEnabled) {\n      return false;\n    }\n    const entry = this.normalized[index];\n    return this.health.unavailableSince(\n      index,\n      selectedAt,\n      entry.healthKey,\n      entry.providerFamily\n    );\n  }\n\n  protected nextOrderingToken(): RouterOrderingToken {\n    return this.ordering.next();\n  }\n\n  protected isBudgetFailure(failure: FailureClassification): boolean {\n    return failure.retryable && failure.scope !== \"request\";\n  }\n\n  protected suppressesBudget(failure: FailureClassification): boolean {\n    return !failure.retryable && failure.scope === \"request\";\n  }\n\n  protected observeRequestFailure(\n    eligible: boolean,\n    suppressed: boolean\n  ): void {\n    if (eligible && !suppressed) {\n      this.retryBudget?.observe(false);\n    }\n  }\n}\n","import type { ResolvedEntry } from \"./stream\";\nimport { monotonicNow, RouterTimeoutError } from \"./timeout\";\nimport type { RouterOrderingToken } from \"./types\";\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\n\nimport { RouterAttemptObservability } from \"./router-attempt-observability\";\n\nexport class RouterAttemptAdmission extends RouterAttemptObservability {\n  protected releaseCandidateProbe(candidate: ResolvedEntry): void {\n    const lease = candidate.probeLease;\n    candidate.probeLease = undefined;\n    this.health.releaseProbe(lease);\n  }\n\n  protected releaseCandidateOwnership(candidate: ResolvedEntry): void {\n    try {\n      this.admission.release(candidate.fullIndex);\n    } finally {\n      this.releaseCandidateProbe(candidate);\n    }\n  }\n\n  protected prepareCandidate(candidate: ResolvedEntry): boolean {\n    if (!this.healthEnabled) {\n      return true;\n    }\n    const entry = this.normalized[candidate.fullIndex];\n    if (\n      !this.health.claimProbe(\n        candidate.fullIndex,\n        entry.healthKey,\n        entry.providerFamily\n      )\n    ) {\n      return false;\n    }\n    candidate.probeLease = this.health.takeProbeLease(\n      candidate.fullIndex,\n      entry.healthKey,\n      entry.providerFamily\n    );\n    return true;\n  }\n\n  protected acceptAdmission(\n    candidate: ResolvedEntry,\n    inFlight: number | undefined,\n    selectedAt: RouterOrderingToken,\n    phase: \"generate\" | \"stream-open\"\n  ): inFlight is number {\n    if (inFlight === undefined) {\n      this.releaseCandidateProbe(candidate);\n      this.emitSkipped([candidate], phase, \"concurrency\");\n      return false;\n    }\n    if (this.becameUnavailable(candidate.fullIndex, selectedAt)) {\n      this.releaseCandidateOwnership(candidate);\n      this.emitSkipped([candidate], phase, \"cooldown\");\n      return false;\n    }\n    return true;\n  }\n\n  protected async admitCandidate(\n    candidate: ResolvedEntry,\n    isLast: boolean,\n    signal: AbortSignal | undefined,\n    deadline: number | undefined,\n    selectedAt: RouterOrderingToken,\n    phase: \"generate\" | \"stream-open\"\n  ): Promise<{\n    capacitySkipped: boolean;\n    healthSkipped: boolean;\n    inFlight?: number;\n  }> {\n    let ownsCapacity = false;\n    try {\n      if (!this.prepareCandidate(candidate)) {\n        this.emitSkipped([candidate], phase, \"cooldown\");\n        return { capacitySkipped: false, healthSkipped: true };\n      }\n      let inFlight = this.admission.acquire(candidate.fullIndex);\n      ownsCapacity = inFlight !== undefined;\n      if (\n        inFlight === undefined &&\n        isLast &&\n        this.concurrencyWaitTimeout !== undefined\n      ) {\n        // A queued request is not probing the provider yet. Do not reserve the\n        // half-open lease while waiting (possibly longer than the lease itself);\n        // reclaim it only after admission grants a real slot.\n        this.releaseCandidateProbe(candidate);\n        inFlight = await this.admission.waitFor(\n          candidate.fullIndex,\n          signal,\n          deadline\n        );\n        ownsCapacity = inFlight !== undefined;\n        if (\n          inFlight === undefined &&\n          deadline !== undefined &&\n          monotonicNow() >= deadline\n        ) {\n          throw new RouterTimeoutError(\"total_timeout\", this.totalTimeout ?? 0);\n        }\n        if (inFlight !== undefined && !this.prepareCandidate(candidate)) {\n          this.releaseCandidateOwnership(candidate);\n          ownsCapacity = false;\n          this.emitSkipped([candidate], phase, \"cooldown\");\n          return { capacitySkipped: false, healthSkipped: true };\n        }\n      }\n      const capacitySkipped = inFlight === undefined;\n      const accepted = this.acceptAdmission(\n        candidate,\n        inFlight,\n        selectedAt,\n        phase\n      );\n      ownsCapacity = false;\n      return accepted\n        ? { capacitySkipped, healthSkipped: false, inFlight }\n        : { capacitySkipped, healthSkipped: !capacitySkipped };\n    } catch (error) {\n      if (ownsCapacity) {\n        this.releaseCandidateOwnership(candidate);\n      } else {\n        this.releaseCandidateProbe(candidate);\n      }\n      throw error;\n    }\n  }\n}\n","import { RouterConcurrencyError } from \"./admission-utils\";\nimport {\n  isTerminalRequestFailure,\n  normalizeFailureClassification,\n} from \"./failure\";\nimport {\n  type HealthTransition,\n  RouterHealthUnavailableError,\n} from \"./health-store\";\nimport { runErrorObservabilityHook } from \"./observability\";\nimport { recordFailure, safeShouldRetry, surfaceFailure } from \"./retry\";\nimport { isSignalAborted } from \"./router-options\";\nimport type { ResolvedEntry } from \"./stream\";\nimport {\n  effectiveTimeout,\n  jitteredBackoff,\n  monotonicNow,\n  RouterTimeoutError,\n} from \"./timeout\";\nimport type { FailureClassification } from \"./types\";\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\n\nimport { RouterAttemptAdmission } from \"./router-attempt-admission\";\n\nexport class RouterAttemptRuntime extends RouterAttemptAdmission {\n  protected handleFailure(\n    error: unknown,\n    candidate: ResolvedEntry,\n    filteredIndex: number,\n    candidates: ResolvedEntry[],\n    errors: unknown[],\n    phase: \"generate\" | \"stream-open\",\n    classification: FailureClassification,\n    attempt: number,\n    attemptLimit: number,\n    deadline: number | undefined,\n    startedAt: number,\n    healthTransition?: HealthTransition,\n    inFlight?: number\n  ): boolean {\n    recordFailure(errors, error);\n    const retry = classification.retryable;\n    const hasNext =\n      retry &&\n      attempt < attemptLimit &&\n      this.hasRetryCandidate(\n        candidates,\n        filteredIndex + 1,\n        deadline,\n        candidate.fullIndex\n      );\n    const errorPayload = {\n      logicalId: this.modelId,\n      entry: candidate.entry,\n      index: candidate.fullIndex,\n      error,\n      phase,\n      willRetry: hasNext,\n    };\n    runErrorObservabilityHook(errorPayload, (event) => this.onError?.(event));\n    this.emitAttempt({\n      candidate,\n      attempt,\n      durationMs: Math.max(0, monotonicNow() - startedAt),\n      error,\n      failure: classification,\n      healthTransition,\n      inFlight,\n      outcome: \"failure\",\n      phase,\n      index: candidate.fullIndex,\n      willRetry: hasNext,\n    });\n    return retry;\n  }\n\n  protected routeFailure(\n    errors: unknown[],\n    capacitySkips: number,\n    healthSkips: number\n  ): unknown {\n    if (errors.length === 0 && capacitySkips > 0) {\n      return new RouterConcurrencyError(this.modelId);\n    }\n    if (errors.length === 0 && healthSkips > 0) {\n      return new RouterHealthUnavailableError(this.modelId);\n    }\n    return surfaceFailure(errors, this.modelId);\n  }\n\n  protected hasRetryCandidate(\n    candidates: ResolvedEntry[],\n    startIndex: number,\n    deadline: number | undefined,\n    releasingIndex?: number\n  ): boolean {\n    for (let index = startIndex; index < candidates.length; index++) {\n      const candidate = candidates[index];\n      const entry = this.normalized[candidate.fullIndex];\n      if (\n        this.healthEnabled &&\n        !this.health.available(\n          candidate.fullIndex,\n          entry.healthKey,\n          entry.providerFamily\n        )\n      ) {\n        continue;\n      }\n      if (\n        releasingIndex === undefined\n          ? this.admission.canAcquire(candidate.fullIndex)\n          : this.admission.canAcquireAfterRelease(\n              candidate.fullIndex,\n              releasingIndex\n            )\n      ) {\n        return true;\n      }\n      if (\n        index === candidates.length - 1 &&\n        this.concurrencyWaitTimeout !== undefined &&\n        (deadline === undefined || monotonicNow() < deadline)\n      ) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  protected classify(error: unknown): FailureClassification {\n    if (isTerminalRequestFailure(error)) {\n      return { retryable: false, scope: \"request\" };\n    }\n    try {\n      const classification = normalizeFailureClassification(\n        this.classifyFailure(error)\n      );\n      if (this.hasCustomClassifier || !this.hasCustomRetry) {\n        return classification;\n      }\n      return {\n        ...classification,\n        retryable: safeShouldRetry(this.shouldRetry, error),\n      };\n    } catch {\n      return { retryable: false, scope: \"request\" };\n    }\n  }\n\n  protected classifyAttemptFailure(\n    error: unknown,\n    callerSignal: AbortSignal | undefined\n  ): FailureClassification {\n    // Abort reasons are allowed to be arbitrary JavaScript values. When the\n    // provider ignores the signal, withTimeout races it and preserves that\n    // exact reason; classifying the reason alone would mistake an Error or\n    // string for a transient provider outage.\n    if (isSignalAborted(callerSignal)) {\n      return { retryable: false, scope: \"request\" };\n    }\n    return this.classify(error);\n  }\n\n  protected shouldSurfaceDirectly(\n    classification: FailureClassification\n  ): boolean {\n    return (\n      !classification.retryable &&\n      classification.scope === \"request\" &&\n      classification.statusCode === undefined\n    );\n  }\n\n  protected attemptTiming(deadline: number | undefined): {\n    code: \"attempt_timeout\" | \"total_timeout\";\n    timeoutMs: number | undefined;\n  } {\n    const remaining =\n      deadline === undefined ? undefined : deadline - monotonicNow();\n    if (remaining !== undefined && remaining <= 0) {\n      throw new RouterTimeoutError(\"total_timeout\", this.totalTimeout ?? 0);\n    }\n    const timeoutMs = effectiveTimeout(this.attemptTimeout, remaining);\n    return {\n      code:\n        remaining !== undefined && timeoutMs === remaining\n          ? \"total_timeout\"\n          : \"attempt_timeout\",\n      timeoutMs,\n    };\n  }\n\n  protected timeoutDiagnosticDuration(\n    code: \"attempt_timeout\" | \"total_timeout\"\n  ): number | undefined {\n    return code === \"total_timeout\" ? this.totalTimeout : this.attemptTimeout;\n  }\n\n  protected backoffAfterAttempt(\n    attempts: number,\n    signal: AbortSignal | undefined,\n    deadline: number | undefined\n  ): Promise<void> {\n    if (attempts === 0) {\n      return Promise.resolve();\n    }\n    const remaining =\n      deadline === undefined ? undefined : deadline - monotonicNow();\n    if (remaining !== undefined && remaining <= 0) {\n      return Promise.reject(\n        new RouterTimeoutError(\"total_timeout\", this.totalTimeout ?? 0)\n      );\n    }\n    const maximum =\n      remaining === undefined || this.backoff === undefined\n        ? this.backoff\n        : Math.min(this.backoff, remaining);\n    return jitteredBackoff(maximum, signal);\n  }\n\n  protected async backoffCandidate(\n    candidate: ResolvedEntry,\n    attempts: number,\n    signal: AbortSignal | undefined,\n    deadline: number | undefined\n  ): Promise<void> {\n    try {\n      await this.backoffAfterAttempt(attempts, signal, deadline);\n    } catch (error) {\n      this.releaseCandidateProbe(candidate);\n      throw error;\n    }\n  }\n}\n","import type {\n  LanguageModelV4CallOptions,\n  LanguageModelV4StreamResult,\n} from \"@ai-sdk/provider\";\nimport { cloneCallOptions, cloneInitialCallOptions } from \"./call-options\";\nimport { throwIfAborted } from \"./router-options\";\nimport { discardLateStreamResult, wrapStreamResult } from \"./stream\";\nimport { monotonicNow } from \"./timeout\";\nimport { withTimeout } from \"./timeout-operation\";\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\n\nimport { RouterAttemptRuntime } from \"./router-attempt-runtime\";\n\nexport class RouterStreamLanguageModel extends RouterAttemptRuntime {\n  async doStream(\n    options: LanguageModelV4CallOptions\n  ): Promise<LanguageModelV4StreamResult> {\n    const requestOptions = cloneInitialCallOptions(options);\n    throwIfAborted(requestOptions.abortSignal);\n    const selectedAt = this.nextOrderingToken();\n    const { candidates, startIndex } = this.selectCandidates(\n      requestOptions,\n      \"stream-open\"\n    );\n    this.assertHasCandidate(candidates);\n\n    const onAdvance = this.cooldown\n      ? (filteredIndex: number, hadFailure: boolean) =>\n          this.commitSurvivor(candidates[filteredIndex].fullIndex, hadFailure)\n      : undefined;\n\n    const errors: unknown[] = [];\n    const deadline =\n      this.totalTimeout === undefined\n        ? undefined\n        : monotonicNow() + this.totalTimeout;\n    let attempts = 0;\n    let capacitySkips = 0;\n    let healthSkips = 0;\n    let budgetFailureObserved = false;\n    let budgetSuppressed = false;\n    let directRequestError: unknown;\n    const requestMaxAttempts =\n      this.retryBudget?.available() === false ? 1 : this.maxAttempts;\n    for (let k = startIndex; k < candidates.length; k++) {\n      if (attempts >= requestMaxAttempts) {\n        this.emitSkipped(candidates.slice(k), \"stream-open\", \"max-attempts\");\n        break;\n      }\n      const candidate = candidates[k];\n      await this.backoffCandidate(\n        candidate,\n        attempts,\n        requestOptions.abortSignal,\n        deadline\n      );\n      if (this.becameUnavailable(candidate.fullIndex, selectedAt)) {\n        healthSkips += 1;\n        this.releaseCandidateProbe(candidate);\n        this.emitSkipped([candidate], \"stream-open\", \"cooldown\");\n        continue;\n      }\n      const admission = await this.admitCandidate(\n        candidate,\n        k === candidates.length - 1,\n        requestOptions.abortSignal,\n        deadline,\n        selectedAt,\n        \"stream-open\"\n      );\n      capacitySkips += Number(admission.capacitySkipped);\n      healthSkips += Number(admission.healthSkipped);\n      if (admission.inFlight === undefined) {\n        continue;\n      }\n      const inFlight = admission.inFlight;\n      const startedAt = monotonicNow();\n      const attemptOrderingToken = this.nextOrderingToken();\n      attempts += 1;\n      let result: LanguageModelV4StreamResult;\n      try {\n        // Errors thrown BEFORE the stream opens are caught here; errors that\n        // arrive AFTER it opens are handled inside wrapStreamResult.\n        const timing = this.attemptTiming(deadline);\n        result = await withTimeout(\n          (signal) =>\n            candidate.model.doStream(cloneCallOptions(requestOptions, signal)),\n          timing.timeoutMs,\n          requestOptions.abortSignal,\n          timing.code,\n          this.timeoutDiagnosticDuration(timing.code),\n          discardLateStreamResult\n        );\n      } catch (error) {\n        const classification = this.classifyAttemptFailure(\n          error,\n          requestOptions.abortSignal\n        );\n        if (this.shouldSurfaceDirectly(classification)) {\n          directRequestError = error;\n        }\n        this.admission.observe(\n          candidate.fullIndex,\n          false,\n          classification,\n          startedAt,\n          attemptOrderingToken\n        );\n        budgetFailureObserved ||= this.isBudgetFailure(classification);\n        budgetSuppressed ||= this.suppressesBudget(classification);\n        const healthTransition = this.markFailureIfEnabled(\n          candidate.fullIndex,\n          classification,\n          attemptOrderingToken\n        );\n        this.releaseCandidateProbe(candidate);\n        let shouldContinue: boolean;\n        try {\n          shouldContinue = this.handleFailure(\n            error,\n            candidate,\n            k,\n            candidates,\n            errors,\n            \"stream-open\",\n            classification,\n            attempts,\n            requestMaxAttempts,\n            deadline,\n            startedAt,\n            healthTransition,\n            inFlight\n          );\n        } finally {\n          this.admission.release(candidate.fullIndex);\n        }\n        if (!shouldContinue) {\n          break;\n        }\n        continue;\n      }\n      return wrapStreamResult({\n        logicalId: this.modelId,\n        candidates,\n        startIndex: k,\n        options: requestOptions,\n        prepareCandidate: (entry) => this.prepareCandidate(entry),\n        firstResult: result,\n        shouldRetry: () => true,\n        strictStreamValidation: this.strictStreamValidation,\n        classifyFailure: (error) => this.classify(error),\n        concurrencyLimit: (entry) => this.admission.limit(entry.fullIndex),\n        candidateInFlight: (entry) => this.admission.inFlight(entry.fullIndex),\n        attemptTimeout: this.attemptTimeout,\n        backoff: this.backoff,\n        retryAfterOutput: this.retryAfterOutput,\n        firstContentTimeout: this.firstContentTimeout,\n        maxAttempts: requestMaxAttempts,\n        totalDeadline: deadline,\n        totalTimeout: this.totalTimeout,\n        attemptsStarted: attempts,\n        startAttemptStartedAt: startedAt,\n        startInFlight: inFlight,\n        startOrderingToken: attemptOrderingToken,\n        nextOrderingToken: () => this.nextOrderingToken(),\n        candidateAvailable: (entry) =>\n          !this.becameUnavailable(entry.fullIndex, selectedAt),\n        acquireCandidate: (entry) => this.admission.acquire(entry.fullIndex),\n        waitForCandidate: (entry, signal) =>\n          this.admission.waitFor(\n            entry.fullIndex,\n            signal ?? requestOptions.abortSignal,\n            deadline\n          ),\n        releaseCandidate: (entry) => this.admission.release(entry.fullIndex),\n        releaseProbeCandidate: (entry) => this.releaseCandidateProbe(entry),\n        budgetFailureObserved,\n        budgetSuppressed,\n        isBudgetFailure: (failure) => this.isBudgetFailure(failure),\n        onRequestOutcome: (success, eligibleFailure, suppressed) => {\n          if (success) {\n            this.retryBudget?.observe(true);\n          } else {\n            this.observeRequestFailure(eligibleFailure, suppressed);\n          }\n        },\n        onError: this.onError,\n        onAttempt: this.onAttempt,\n        onCandidateFailure: (\n          entry,\n          failure,\n          attemptStartedAt,\n          attemptStartedMonotonic\n        ) => {\n          this.admission.observe(\n            entry.fullIndex,\n            false,\n            failure,\n            attemptStartedMonotonic,\n            attemptStartedAt\n          );\n          return this.markFailureIfEnabled(\n            entry.fullIndex,\n            failure,\n            attemptStartedAt\n          );\n        },\n        onCandidateSuccess: (\n          entry,\n          attemptStartedAt,\n          attemptStartedMonotonic\n        ) => {\n          this.admission.observe(\n            entry.fullIndex,\n            true,\n            undefined,\n            attemptStartedMonotonic,\n            attemptStartedAt\n          );\n          return this.markSuccessIfEnabled(entry.fullIndex, attemptStartedAt);\n        },\n        onAdvance,\n        priorErrors: errors,\n      });\n    }\n    this.observeRequestFailure(budgetFailureObserved, budgetSuppressed);\n    if (directRequestError !== undefined) {\n      throw directRequestError;\n    }\n    throw this.routeFailure(errors, capacitySkips, healthSkips);\n  }\n\n  /**\n   * Record the error, classify it, notify `onError`, and report whether the\n   * router should keep trying the next candidate (`true`) or stop (`false`).\n   */\n}\n","import type {\n  LanguageModelV4CallOptions,\n  LanguageModelV4GenerateResult,\n} from \"@ai-sdk/provider\";\nimport { cloneCallOptions, cloneInitialCallOptions } from \"./call-options\";\nimport { discardLateGenerateResult } from \"./router-generate-envelope\";\nimport { throwIfAborted } from \"./router-options\";\nimport { monotonicNow } from \"./timeout\";\nimport { withTimeout } from \"./timeout-operation\";\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\n\nimport { RouterStreamLanguageModel } from \"./router-stream-language-model\";\n\nexport class RouterLanguageModel extends RouterStreamLanguageModel {\n  async doGenerate(\n    options: LanguageModelV4CallOptions\n  ): Promise<LanguageModelV4GenerateResult> {\n    const requestOptions = cloneInitialCallOptions(options);\n    throwIfAborted(requestOptions.abortSignal);\n    const selectedAt = this.nextOrderingToken();\n    const { candidates, startIndex } = this.selectCandidates(\n      requestOptions,\n      \"generate\"\n    );\n    this.assertHasCandidate(candidates);\n\n    const errors: unknown[] = [];\n    const deadline =\n      this.totalTimeout === undefined\n        ? undefined\n        : monotonicNow() + this.totalTimeout;\n    let attempts = 0;\n    let capacitySkips = 0;\n    let healthSkips = 0;\n    let budgetFailureObserved = false;\n    let budgetSuppressed = false;\n    let directRequestError: unknown;\n    const requestMaxAttempts =\n      this.retryBudget?.available() === false ? 1 : this.maxAttempts;\n    for (let k = startIndex; k < candidates.length; k++) {\n      if (attempts >= requestMaxAttempts) {\n        this.emitSkipped(candidates.slice(k), \"generate\", \"max-attempts\");\n        break;\n      }\n      const candidate = candidates[k];\n      await this.backoffCandidate(\n        candidate,\n        attempts,\n        requestOptions.abortSignal,\n        deadline\n      );\n      if (this.becameUnavailable(candidate.fullIndex, selectedAt)) {\n        healthSkips += 1;\n        this.releaseCandidateProbe(candidate);\n        this.emitSkipped([candidate], \"generate\", \"cooldown\");\n        continue;\n      }\n      const admission = await this.admitCandidate(\n        candidate,\n        k === candidates.length - 1,\n        requestOptions.abortSignal,\n        deadline,\n        selectedAt,\n        \"generate\"\n      );\n      capacitySkips += Number(admission.capacitySkipped);\n      healthSkips += Number(admission.healthSkipped);\n      if (admission.inFlight === undefined) {\n        continue;\n      }\n      const inFlight = admission.inFlight;\n      const startedAt = monotonicNow();\n      const attemptOrderingToken = this.nextOrderingToken();\n      attempts += 1;\n      try {\n        const timing = this.attemptTiming(deadline);\n        const result = await withTimeout(\n          (signal) =>\n            candidate.model.doGenerate(\n              cloneCallOptions(requestOptions, signal)\n            ),\n          timing.timeoutMs,\n          requestOptions.abortSignal,\n          timing.code,\n          this.timeoutDiagnosticDuration(timing.code),\n          discardLateGenerateResult\n        );\n        const validatedResult = this.assertValidResult(result);\n        const healthTransition = this.markSuccessIfEnabled(\n          candidate.fullIndex,\n          attemptOrderingToken\n        );\n        this.admission.observe(\n          candidate.fullIndex,\n          true,\n          undefined,\n          startedAt,\n          attemptOrderingToken\n        );\n        this.retryBudget?.observe(true);\n        this.commitSurvivor(candidate.fullIndex, errors.length > 0);\n        this.emitAttempt({\n          candidate,\n          attempt: attempts,\n          durationMs: Math.max(0, monotonicNow() - startedAt),\n          outcome: \"success\",\n          phase: \"generate\",\n          index: candidate.fullIndex,\n          inFlight,\n          healthTransition,\n        });\n        return validatedResult;\n      } catch (error) {\n        const classification = this.classifyAttemptFailure(\n          error,\n          requestOptions.abortSignal\n        );\n        if (this.shouldSurfaceDirectly(classification)) {\n          directRequestError = error;\n        }\n        this.admission.observe(\n          candidate.fullIndex,\n          false,\n          classification,\n          startedAt,\n          attemptOrderingToken\n        );\n        budgetFailureObserved ||= this.isBudgetFailure(classification);\n        budgetSuppressed ||= this.suppressesBudget(classification);\n        const healthTransition = this.markFailureIfEnabled(\n          candidate.fullIndex,\n          classification,\n          attemptOrderingToken\n        );\n        if (\n          !this.handleFailure(\n            error,\n            candidate,\n            k,\n            candidates,\n            errors,\n            \"generate\",\n            classification,\n            attempts,\n            requestMaxAttempts,\n            deadline,\n            startedAt,\n            healthTransition,\n            inFlight\n          )\n        ) {\n          break;\n        }\n      } finally {\n        this.releaseCandidateOwnership(candidate);\n      }\n    }\n    this.observeRequestFailure(budgetFailureObserved, budgetSuppressed);\n    if (directRequestError !== undefined) {\n      throw directRequestError;\n    }\n    throw this.routeFailure(errors, capacitySkips, healthSkips);\n  }\n}\n","import type { LanguageModel } from \"ai\";\n\nimport { AdmissionRegistry } from \"./admission-utils\";\nimport { MemoryRouterHealthStore } from \"./health-store\";\nimport { boundedEnumerableOwnKeys } from \"./http-headers\";\nimport { snapshotFallback } from \"./router-fallback-options\";\nimport { RouterLanguageModel } from \"./router-language-model\";\nimport { orderingTokenSourceFor } from \"./router-options\";\nimport {\n  consumeGenuinePromise,\n  consumeOwnDataPromiseFields,\n} from \"./runtime-types\";\nimport type {\n  CreateRouterOptions,\n  ProviderEntry,\n  Router,\n  RouterAdmissionSnapshot,\n  RouterHealthSnapshot,\n  RouterRetryBudgetSnapshot,\n} from \"./types\";\n\nconst MAX_ROUTE_CANDIDATES = 10_000;\nconst MAX_LOGICAL_ROUTES = 10_000;\nconst MAX_TOTAL_ROUTE_CANDIDATES = 100_000;\nconst MAX_LOGICAL_ID_LENGTH = 256;\n\n/**\n * A candidate entry normalized to a single internal shape, regardless of which\n * of the three accepted `ProviderEntry` forms the user wrote.\n */\nfunction snapshotRouteEntries(\n  logicalId: string,\n  entries: unknown\n): ProviderEntry[] {\n  if (consumeGenuinePromise(entries)) {\n    throw new Error(`ai-router: model id \"${logicalId}\" must be synchronous`);\n  }\n  if (!Array.isArray(entries)) {\n    throw new Error(\n      `ai-router: model id \"${logicalId}\" must map to a provider entry array`\n    );\n  }\n  let entryCount: number;\n  try {\n    entryCount = Reflect.get(entries, \"length\");\n  } catch {\n    throw new Error(\n      `ai-router: model id \"${logicalId}\" candidate array is unreadable`\n    );\n  }\n  if (!Number.isSafeInteger(entryCount) || entryCount < 0) {\n    throw new Error(\n      `ai-router: model id \"${logicalId}\" candidate array is unreadable`\n    );\n  }\n  if (entryCount === 0) {\n    throw new Error(\n      `ai-router: model id \"${logicalId}\" has no provider entries`\n    );\n  }\n  if (entryCount > MAX_ROUTE_CANDIDATES) {\n    throw new Error(\n      `ai-router: model id \"${logicalId}\" exceeds ${MAX_ROUTE_CANDIDATES} candidates`\n    );\n  }\n  consumeOwnDataPromiseFields(\n    entries,\n    Array.from({ length: entryCount }, (_, index) => index)\n  );\n  const snapshot: ProviderEntry[] = [];\n  let asyncEntry = false;\n  for (let index = 0; index < entryCount; index += 1) {\n    if (!Object.hasOwn(entries, index)) {\n      throw new Error(\n        `ai-router: model id \"${logicalId}\" candidate array must not contain holes`\n      );\n    }\n    try {\n      const entry = Reflect.get(entries, index);\n      if (consumeGenuinePromise(entry)) {\n        asyncEntry = true;\n      } else {\n        snapshot.push(entry as ProviderEntry);\n      }\n    } catch {\n      throw new Error(\n        `ai-router: model id \"${logicalId}\" candidate entry ${index} is unreadable`\n      );\n    }\n  }\n  if (asyncEntry) {\n    throw new Error(\n      `ai-router: model id \"${logicalId}\" candidates must be synchronous`\n    );\n  }\n  return snapshot;\n}\n\n/** Validate route cardinality before allocating long-lived model state. */\nfunction configuredRoutes(\n  models: CreateRouterOptions[\"models\"]\n): [string, CreateRouterOptions[\"models\"][string]][] {\n  const logicalIds = boundedEnumerableOwnKeys(models, MAX_LOGICAL_ROUTES);\n  if (logicalIds === undefined) {\n    throw new Error(\n      `ai-router: models must contain at most ${MAX_LOGICAL_ROUTES} logical routes`\n    );\n  }\n  consumeOwnDataPromiseFields(models, logicalIds);\n  const routes: [string, CreateRouterOptions[\"models\"][string]][] = [];\n  let totalCandidates = 0;\n  for (const logicalId of logicalIds) {\n    if (\n      logicalId.trim().length === 0 ||\n      logicalId.length > MAX_LOGICAL_ID_LENGTH\n    ) {\n      throw new Error(\n        `ai-router: model ids must be non-empty and at most ${MAX_LOGICAL_ID_LENGTH} characters`\n      );\n    }\n    const entrySnapshot = snapshotRouteEntries(\n      logicalId,\n      Reflect.get(models, logicalId)\n    );\n    totalCandidates += entrySnapshot.length;\n    if (totalCandidates > MAX_TOTAL_ROUTE_CANDIDATES) {\n      throw new Error(\n        `ai-router: models exceed ${MAX_TOTAL_ROUTE_CANDIDATES} total candidates`\n      );\n    }\n    routes.push([logicalId, entrySnapshot]);\n  }\n  return routes;\n}\n\n/** Create a modality-aware router with provider fallback. */\nexport function createRouter(options: CreateRouterOptions): Router {\n  if (consumeGenuinePromise(options)) {\n    throw new Error(\"ai-router: createRouter options must be synchronous\");\n  }\n  if (typeof options !== \"object\" || options === null) {\n    throw new Error(\"ai-router: createRouter options must be an object\");\n  }\n  const keys = [\"fallback\", \"models\", \"onAttempt\", \"onError\"] as const;\n  consumeOwnDataPromiseFields(options, keys);\n  const models = options.models;\n  const fallback = options.fallback;\n  const onAttempt = options.onAttempt;\n  const onError = options.onError;\n  let asyncOption = false;\n  for (const value of [models, fallback, onAttempt, onError]) {\n    if (consumeGenuinePromise(value)) {\n      asyncOption = true;\n    }\n  }\n  if (asyncOption) {\n    throw new Error(\"ai-router: createRouter options must be synchronous\");\n  }\n  if (typeof models !== \"object\" || models === null || Array.isArray(models)) {\n    throw new Error(\"ai-router: models must be an object of candidate arrays\");\n  }\n  const cache = new Map<string, RouterLanguageModel>();\n  const admissionRegistry = new AdmissionRegistry();\n  if (onAttempt !== undefined && typeof onAttempt !== \"function\") {\n    throw new Error(\"ai-router: onAttempt must be a function\");\n  }\n  if (onError !== undefined && typeof onError !== \"function\") {\n    throw new Error(\"ai-router: onError must be a function\");\n  }\n  const optionSnapshot: CreateRouterOptions = {\n    fallback: snapshotFallback(fallback),\n    models,\n    onAttempt,\n    onError,\n  };\n  const healthStore =\n    optionSnapshot.fallback?.healthStore ?? new MemoryRouterHealthStore();\n  const ordering = orderingTokenSourceFor(healthStore);\n\n  // Validate every logical route up front without constructing model wrappers\n  // or instantiating provider factories. This avoids partial registry growth\n  // when a later route pushes the aggregate configuration over its limit.\n  // Construction is now bounded and cannot fail due to route cardinality.\n  for (const [logicalId, entries] of configuredRoutes(models)) {\n    cache.set(\n      logicalId,\n      new RouterLanguageModel(\n        logicalId,\n        entries,\n        optionSnapshot,\n        admissionRegistry,\n        healthStore,\n        ordering\n      )\n    );\n  }\n\n  const route = (logicalId: string): LanguageModel => {\n    const cached = cache.get(logicalId);\n    if (cached !== undefined) {\n      return cached;\n    }\n    throw new Error(`ai-router: unknown model id \"${logicalId}\"`);\n  };\n  return Object.assign(route, {\n    getAdmissionSnapshot(logicalId?: string): RouterAdmissionSnapshot[] {\n      if (logicalId !== undefined) {\n        if (!cache.has(logicalId)) {\n          return [];\n        }\n        return cache.get(logicalId)?.admissionSnapshot() ?? [];\n      }\n      return [...cache.values()].flatMap((model) => model.admissionSnapshot());\n    },\n    getHealthSnapshot(logicalId?: string): RouterHealthSnapshot[] {\n      if (logicalId !== undefined) {\n        if (!cache.has(logicalId)) {\n          return [];\n        }\n        return cache.get(logicalId)?.healthSnapshot() ?? [];\n      }\n      const snapshots = [...cache.values()].flatMap((model) =>\n        model.healthSnapshot()\n      );\n      return [\n        ...new Map(\n          snapshots.map((snapshot) => [snapshot.key, snapshot] as const)\n        ).values(),\n      ];\n    },\n    getRetryBudgetSnapshot(logicalId?: string): RouterRetryBudgetSnapshot[] {\n      if (logicalId !== undefined) {\n        if (!cache.has(logicalId)) {\n          return [];\n        }\n        const snapshot = cache.get(logicalId)?.retryBudgetSnapshot();\n        return snapshot === undefined ? [] : [snapshot];\n      }\n      return [...cache.values()]\n        .map((model) => model.retryBudgetSnapshot())\n        .filter(\n          (snapshot): snapshot is RouterRetryBudgetSnapshot =>\n            snapshot !== undefined\n        );\n    },\n  });\n}\n"]}