@probelabs/probe 0.6.0-rc334 → 0.6.0-rc336

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16070,6 +16070,218 @@ var init_v3 = __esm({
16070
16070
  }
16071
16071
  });
16072
16072
 
16073
+ // node_modules/eventsource-parser/dist/index.js
16074
+ function noop(_arg) {
16075
+ }
16076
+ function createParser(config2) {
16077
+ if (typeof config2 == "function")
16078
+ throw new TypeError(
16079
+ "`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?"
16080
+ );
16081
+ const { onEvent = noop, onError = noop, onRetry = noop, onComment, maxBufferSize } = config2, pendingFragments = [];
16082
+ let pendingFragmentsLength = 0, isFirstChunk = true, id, data2 = "", dataLines = 0, eventType, terminated = false;
16083
+ function feed(chunk) {
16084
+ if (terminated)
16085
+ throw new Error(
16086
+ "Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing."
16087
+ );
16088
+ if (isFirstChunk && (isFirstChunk = false, chunk.charCodeAt(0) === 239 && chunk.charCodeAt(1) === 187 && chunk.charCodeAt(2) === 191 && (chunk = chunk.slice(3))), pendingFragments.length === 0) {
16089
+ const trailing2 = processLines(chunk);
16090
+ trailing2 !== "" && (pendingFragments.push(trailing2), pendingFragmentsLength = trailing2.length), checkBufferSize();
16091
+ return;
16092
+ }
16093
+ if (chunk.indexOf(`
16094
+ `) === -1 && chunk.indexOf("\r") === -1) {
16095
+ pendingFragments.push(chunk), pendingFragmentsLength += chunk.length, checkBufferSize();
16096
+ return;
16097
+ }
16098
+ pendingFragments.push(chunk);
16099
+ const input = pendingFragments.join("");
16100
+ pendingFragments.length = 0, pendingFragmentsLength = 0;
16101
+ const trailing = processLines(input);
16102
+ trailing !== "" && (pendingFragments.push(trailing), pendingFragmentsLength = trailing.length), checkBufferSize();
16103
+ }
16104
+ function checkBufferSize() {
16105
+ maxBufferSize !== void 0 && (pendingFragmentsLength + data2.length <= maxBufferSize || (terminated = true, pendingFragments.length = 0, pendingFragmentsLength = 0, id = void 0, data2 = "", dataLines = 0, eventType = void 0, onError(
16106
+ new ParseError(`Buffered data exceeded max buffer size of ${maxBufferSize} characters`, {
16107
+ type: "max-buffer-size-exceeded"
16108
+ })
16109
+ )));
16110
+ }
16111
+ function processLines(chunk) {
16112
+ let searchIndex = 0;
16113
+ if (chunk.indexOf("\r") === -1) {
16114
+ let lfIndex = chunk.indexOf(`
16115
+ `, searchIndex);
16116
+ for (; lfIndex !== -1; ) {
16117
+ if (searchIndex === lfIndex) {
16118
+ dataLines > 0 && onEvent({ id, event: eventType, data: data2 }), id = void 0, data2 = "", dataLines = 0, eventType = void 0, searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(`
16119
+ `, searchIndex);
16120
+ continue;
16121
+ }
16122
+ const firstCharCode = chunk.charCodeAt(searchIndex);
16123
+ if (isDataPrefix(chunk, searchIndex, firstCharCode)) {
16124
+ const valueStart = chunk.charCodeAt(searchIndex + 5) === SPACE ? searchIndex + 6 : searchIndex + 5, value = chunk.slice(valueStart, lfIndex);
16125
+ if (dataLines === 0 && chunk.charCodeAt(lfIndex + 1) === LF) {
16126
+ onEvent({ id, event: eventType, data: value }), id = void 0, data2 = "", eventType = void 0, searchIndex = lfIndex + 2, lfIndex = chunk.indexOf(`
16127
+ `, searchIndex);
16128
+ continue;
16129
+ }
16130
+ data2 = dataLines === 0 ? value : `${data2}
16131
+ ${value}`, dataLines++;
16132
+ } else isEventPrefix(chunk, searchIndex, firstCharCode) ? eventType = chunk.slice(
16133
+ chunk.charCodeAt(searchIndex + 6) === SPACE ? searchIndex + 7 : searchIndex + 6,
16134
+ lfIndex
16135
+ ) || void 0 : parseLine(chunk, searchIndex, lfIndex);
16136
+ searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(`
16137
+ `, searchIndex);
16138
+ }
16139
+ return chunk.slice(searchIndex);
16140
+ }
16141
+ for (; searchIndex < chunk.length; ) {
16142
+ const crIndex = chunk.indexOf("\r", searchIndex), lfIndex = chunk.indexOf(`
16143
+ `, searchIndex);
16144
+ let lineEnd = -1;
16145
+ if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = crIndex < lfIndex ? crIndex : lfIndex : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1)
16146
+ break;
16147
+ parseLine(chunk, searchIndex, lineEnd), searchIndex = lineEnd + 1, chunk.charCodeAt(searchIndex - 1) === CR && chunk.charCodeAt(searchIndex) === LF && searchIndex++;
16148
+ }
16149
+ return chunk.slice(searchIndex);
16150
+ }
16151
+ function parseLine(chunk, start, end) {
16152
+ if (start === end) {
16153
+ dispatchEvent();
16154
+ return;
16155
+ }
16156
+ const firstCharCode = chunk.charCodeAt(start);
16157
+ if (isDataPrefix(chunk, start, firstCharCode)) {
16158
+ const valueStart = chunk.charCodeAt(start + 5) === SPACE ? start + 6 : start + 5, value2 = chunk.slice(valueStart, end);
16159
+ data2 = dataLines === 0 ? value2 : `${data2}
16160
+ ${value2}`, dataLines++;
16161
+ return;
16162
+ }
16163
+ if (isEventPrefix(chunk, start, firstCharCode)) {
16164
+ eventType = chunk.slice(chunk.charCodeAt(start + 6) === SPACE ? start + 7 : start + 6, end) || void 0;
16165
+ return;
16166
+ }
16167
+ if (firstCharCode === 105 && chunk.charCodeAt(start + 1) === 100 && chunk.charCodeAt(start + 2) === 58) {
16168
+ const value2 = chunk.slice(chunk.charCodeAt(start + 3) === SPACE ? start + 4 : start + 3, end);
16169
+ value2.includes("\0") || (id = value2);
16170
+ return;
16171
+ }
16172
+ if (firstCharCode === 58) {
16173
+ if (onComment) {
16174
+ const line2 = chunk.slice(start, end);
16175
+ onComment(line2.slice(chunk.charCodeAt(start + 1) === SPACE ? 2 : 1));
16176
+ }
16177
+ return;
16178
+ }
16179
+ const line = chunk.slice(start, end), fieldSeparatorIndex = line.indexOf(":");
16180
+ if (fieldSeparatorIndex === -1) {
16181
+ processField(line, "", line);
16182
+ return;
16183
+ }
16184
+ const field = line.slice(0, fieldSeparatorIndex), offset2 = line.charCodeAt(fieldSeparatorIndex + 1) === SPACE ? 2 : 1, value = line.slice(fieldSeparatorIndex + offset2);
16185
+ processField(field, value, line);
16186
+ }
16187
+ function processField(field, value, line) {
16188
+ switch (field) {
16189
+ case "event":
16190
+ eventType = value || void 0;
16191
+ break;
16192
+ case "data":
16193
+ data2 = dataLines === 0 ? value : `${data2}
16194
+ ${value}`, dataLines++;
16195
+ break;
16196
+ case "id":
16197
+ value.includes("\0") || (id = value);
16198
+ break;
16199
+ case "retry":
16200
+ /^\d+$/.test(value) ? onRetry(parseInt(value, 10)) : onError(
16201
+ new ParseError(`Invalid \`retry\` value: "${value}"`, {
16202
+ type: "invalid-retry",
16203
+ value,
16204
+ line
16205
+ })
16206
+ );
16207
+ break;
16208
+ default:
16209
+ onError(
16210
+ new ParseError(
16211
+ `Unknown field "${field.length > 20 ? `${field.slice(0, 20)}\u2026` : field}"`,
16212
+ { type: "unknown-field", field, value, line }
16213
+ )
16214
+ );
16215
+ break;
16216
+ }
16217
+ }
16218
+ function dispatchEvent() {
16219
+ dataLines > 0 && onEvent({
16220
+ id,
16221
+ event: eventType,
16222
+ data: data2
16223
+ }), id = void 0, data2 = "", dataLines = 0, eventType = void 0;
16224
+ }
16225
+ function reset2(options = {}) {
16226
+ if (options.consume && pendingFragments.length > 0) {
16227
+ const incompleteLine = pendingFragments.join("");
16228
+ parseLine(incompleteLine, 0, incompleteLine.length);
16229
+ }
16230
+ isFirstChunk = true, id = void 0, data2 = "", dataLines = 0, eventType = void 0, pendingFragments.length = 0, pendingFragmentsLength = 0, terminated = false;
16231
+ }
16232
+ return { feed, reset: reset2 };
16233
+ }
16234
+ function isDataPrefix(chunk, i, firstCharCode) {
16235
+ return firstCharCode === 100 && chunk.charCodeAt(i + 1) === 97 && chunk.charCodeAt(i + 2) === 116 && chunk.charCodeAt(i + 3) === 97 && chunk.charCodeAt(i + 4) === 58;
16236
+ }
16237
+ function isEventPrefix(chunk, i, firstCharCode) {
16238
+ return firstCharCode === 101 && chunk.charCodeAt(i + 1) === 118 && chunk.charCodeAt(i + 2) === 101 && chunk.charCodeAt(i + 3) === 110 && chunk.charCodeAt(i + 4) === 116 && chunk.charCodeAt(i + 5) === 58;
16239
+ }
16240
+ var ParseError, LF, CR, SPACE;
16241
+ var init_dist2 = __esm({
16242
+ "node_modules/eventsource-parser/dist/index.js"() {
16243
+ ParseError = class extends Error {
16244
+ constructor(message, options) {
16245
+ super(message), this.name = "ParseError", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line;
16246
+ }
16247
+ };
16248
+ LF = 10;
16249
+ CR = 13;
16250
+ SPACE = 32;
16251
+ }
16252
+ });
16253
+
16254
+ // node_modules/eventsource-parser/dist/stream.js
16255
+ var EventSourceParserStream;
16256
+ var init_stream = __esm({
16257
+ "node_modules/eventsource-parser/dist/stream.js"() {
16258
+ init_dist2();
16259
+ EventSourceParserStream = class extends TransformStream {
16260
+ constructor({ onError, onRetry, onComment, maxBufferSize } = {}) {
16261
+ let parser;
16262
+ super({
16263
+ start(controller) {
16264
+ parser = createParser({
16265
+ onEvent: (event) => {
16266
+ controller.enqueue(event);
16267
+ },
16268
+ onError(error40) {
16269
+ typeof onError == "function" && onError(error40), (onError === "terminate" || error40.type === "max-buffer-size-exceeded") && controller.error(error40);
16270
+ },
16271
+ onRetry,
16272
+ onComment,
16273
+ maxBufferSize
16274
+ });
16275
+ },
16276
+ transform(chunk) {
16277
+ parser.feed(chunk);
16278
+ }
16279
+ });
16280
+ }
16281
+ };
16282
+ }
16283
+ });
16284
+
16073
16285
  // node_modules/@ai-sdk/provider-utils/dist/index.mjs
16074
16286
  function combineHeaders(...headers) {
16075
16287
  return headers.reduce(
@@ -16083,6 +16295,11 @@ function combineHeaders(...headers) {
16083
16295
  function extractResponseHeaders(response) {
16084
16296
  return Object.fromEntries([...response.headers]);
16085
16297
  }
16298
+ function convertBase64ToUint8Array(base64String) {
16299
+ const base64Url = base64String.replace(/-/g, "+").replace(/_/g, "/");
16300
+ const latin1string = atob2(base64Url);
16301
+ return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));
16302
+ }
16086
16303
  function convertUint8ArrayToBase64(array2) {
16087
16304
  let latin1string = "";
16088
16305
  for (let i = 0; i < array2.length; i++) {
@@ -16093,6 +16310,28 @@ function convertUint8ArrayToBase64(array2) {
16093
16310
  function convertToBase64(value) {
16094
16311
  return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;
16095
16312
  }
16313
+ function convertToFormData(input, options = {}) {
16314
+ const { useArrayBrackets = true } = options;
16315
+ const formData = new FormData();
16316
+ for (const [key, value] of Object.entries(input)) {
16317
+ if (value == null) {
16318
+ continue;
16319
+ }
16320
+ if (Array.isArray(value)) {
16321
+ if (value.length === 1) {
16322
+ formData.append(key, value[0]);
16323
+ continue;
16324
+ }
16325
+ const arrayKey = useArrayBrackets ? `${key}[]` : key;
16326
+ for (const item of value) {
16327
+ formData.append(arrayKey, item);
16328
+ }
16329
+ continue;
16330
+ }
16331
+ formData.append(key, value);
16332
+ }
16333
+ return formData;
16334
+ }
16096
16335
  async function cancelResponseBody(response) {
16097
16336
  var _a22;
16098
16337
  try {
@@ -16100,6 +16339,202 @@ async function cancelResponseBody(response) {
16100
16339
  } catch (e) {
16101
16340
  }
16102
16341
  }
16342
+ function isBrowserRuntime(globalThisAny = globalThis) {
16343
+ return globalThisAny.window != null;
16344
+ }
16345
+ function validateDownloadUrl(url2) {
16346
+ let parsed;
16347
+ try {
16348
+ parsed = new URL(url2);
16349
+ } catch (e) {
16350
+ throw new DownloadError({
16351
+ url: url2,
16352
+ message: `Invalid URL: ${url2}`
16353
+ });
16354
+ }
16355
+ if (parsed.protocol === "data:") {
16356
+ return;
16357
+ }
16358
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
16359
+ throw new DownloadError({
16360
+ url: url2,
16361
+ message: `URL scheme must be http, https, or data, got ${parsed.protocol}`
16362
+ });
16363
+ }
16364
+ const hostname2 = parsed.hostname.toLowerCase().replace(/\.+$/, "");
16365
+ if (!hostname2) {
16366
+ throw new DownloadError({
16367
+ url: url2,
16368
+ message: `URL must have a hostname`
16369
+ });
16370
+ }
16371
+ if (hostname2 === "localhost" || hostname2.endsWith(".local") || hostname2.endsWith(".localhost")) {
16372
+ throw new DownloadError({
16373
+ url: url2,
16374
+ message: `URL with hostname ${hostname2} is not allowed`
16375
+ });
16376
+ }
16377
+ if (hostname2.startsWith("[") && hostname2.endsWith("]")) {
16378
+ const ipv63 = hostname2.slice(1, -1);
16379
+ if (isPrivateIPv6(ipv63)) {
16380
+ throw new DownloadError({
16381
+ url: url2,
16382
+ message: `URL with IPv6 address ${hostname2} is not allowed`
16383
+ });
16384
+ }
16385
+ return;
16386
+ }
16387
+ if (isIPv4(hostname2)) {
16388
+ if (isPrivateIPv4(hostname2)) {
16389
+ throw new DownloadError({
16390
+ url: url2,
16391
+ message: `URL with IP address ${hostname2} is not allowed`
16392
+ });
16393
+ }
16394
+ return;
16395
+ }
16396
+ }
16397
+ function validateDownloadAddress({
16398
+ address,
16399
+ family,
16400
+ hostname: hostname2
16401
+ }) {
16402
+ const isUnsafe = family === 4 ? !isIPv4(address) || isPrivateIPv4(address) : family === 6 ? isPrivateIPv6(address) : true;
16403
+ if (isUnsafe) {
16404
+ throw new DownloadError({
16405
+ url: hostname2,
16406
+ message: `Hostname ${hostname2} resolved to disallowed IP address ${address}`
16407
+ });
16408
+ }
16409
+ }
16410
+ function isIPv4(hostname2) {
16411
+ const parts = hostname2.split(".");
16412
+ if (parts.length !== 4) return false;
16413
+ return parts.every((part) => {
16414
+ const num = Number(part);
16415
+ return Number.isInteger(num) && num >= 0 && num <= 255 && String(num) === part;
16416
+ });
16417
+ }
16418
+ function isPrivateIPv4(ip) {
16419
+ const parts = ip.split(".").map(Number);
16420
+ const [a, b, c] = parts;
16421
+ if (a === 0) return true;
16422
+ if (a === 10) return true;
16423
+ if (a === 100 && b >= 64 && b <= 127) return true;
16424
+ if (a === 127) return true;
16425
+ if (a === 169 && b === 254) return true;
16426
+ if (a === 172 && b >= 16 && b <= 31) return true;
16427
+ if (a === 192 && b === 0 && c === 0) return true;
16428
+ if (a === 192 && b === 168) return true;
16429
+ if (a === 198 && (b === 18 || b === 19)) return true;
16430
+ if (a >= 240) return true;
16431
+ return false;
16432
+ }
16433
+ function parseIPv6(ip) {
16434
+ let address = ip.toLowerCase();
16435
+ const zoneIndex = address.indexOf("%");
16436
+ if (zoneIndex !== -1) {
16437
+ address = address.slice(0, zoneIndex);
16438
+ }
16439
+ const halves = address.split("::");
16440
+ if (halves.length > 2) return null;
16441
+ const toGroups = (segment) => {
16442
+ if (segment === "") return [];
16443
+ const groups = [];
16444
+ const parts = segment.split(":");
16445
+ for (let i = 0; i < parts.length; i++) {
16446
+ const part = parts[i];
16447
+ if (part.includes(".")) {
16448
+ if (i !== parts.length - 1 || !isIPv4(part)) return null;
16449
+ const [a, b, c, d] = part.split(".").map(Number);
16450
+ groups.push(a << 8 | b, c << 8 | d);
16451
+ continue;
16452
+ }
16453
+ if (!/^[0-9a-f]{1,4}$/.test(part)) return null;
16454
+ groups.push(parseInt(part, 16));
16455
+ }
16456
+ return groups;
16457
+ };
16458
+ const head2 = toGroups(halves[0]);
16459
+ if (head2 === null) return null;
16460
+ if (halves.length === 2) {
16461
+ const tail = toGroups(halves[1]);
16462
+ if (tail === null) return null;
16463
+ const fill = 8 - head2.length - tail.length;
16464
+ if (fill < 0) return null;
16465
+ return [...head2, ...new Array(fill).fill(0), ...tail];
16466
+ }
16467
+ return head2.length === 8 ? head2 : null;
16468
+ }
16469
+ function isPrivateIPv6(ip) {
16470
+ const groups = parseIPv6(ip);
16471
+ if (groups === null) return true;
16472
+ const topZero = (count) => groups.slice(0, count).every((group) => group === 0);
16473
+ if (topZero(7) && (groups[7] === 0 || groups[7] === 1)) return true;
16474
+ if ((groups[0] & 65024) === 64512) return true;
16475
+ if ((groups[0] & 65472) === 65152) return true;
16476
+ if ((groups[0] & 65472) === 65216) return true;
16477
+ if ((groups[0] & 65280) === 65280) return true;
16478
+ const embedsIPv4 = (
16479
+ // ::/96 — IPv4-compatible (deprecated)
16480
+ topZero(6) || // ::ffff:0:0/96 — IPv4-mapped (ffff in group 5)
16481
+ topZero(5) && groups[5] === 65535 || // ::ffff:0:0/96 — IPv4-translated form (ffff in group 4, group 5 zero)
16482
+ topZero(4) && groups[4] === 65535 && groups[5] === 0 || // 64:ff9b::/96 — NAT64 well-known prefix
16483
+ groups[0] === 100 && groups[1] === 65435 && groups[2] === 0 && groups[3] === 0 && groups[4] === 0 && groups[5] === 0 || // 64:ff9b:1::/48 — NAT64 local-use prefix
16484
+ groups[0] === 100 && groups[1] === 65435 && groups[2] === 1
16485
+ );
16486
+ if (embedsIPv4) {
16487
+ const a = groups[6] >> 8 & 255;
16488
+ const b = groups[6] & 255;
16489
+ const c = groups[7] >> 8 & 255;
16490
+ const d = groups[7] & 255;
16491
+ return isPrivateIPv4(`${a}.${b}.${c}.${d}`);
16492
+ }
16493
+ return false;
16494
+ }
16495
+ function createSafeLookup(lookup) {
16496
+ return ((hostname2, options, callback) => {
16497
+ lookup(hostname2, { ...options, all: true }, (error40, addresses) => {
16498
+ if (error40) {
16499
+ callback(error40);
16500
+ return;
16501
+ }
16502
+ try {
16503
+ const [firstAddress] = addresses;
16504
+ if (firstAddress == null) {
16505
+ throw new Error(`Hostname ${hostname2} did not resolve to an address`);
16506
+ }
16507
+ for (const { address, family } of addresses) {
16508
+ validateDownloadAddress({ address, family, hostname: hostname2 });
16509
+ }
16510
+ if (options.all === true) {
16511
+ callback(null, addresses);
16512
+ } else {
16513
+ callback(
16514
+ null,
16515
+ firstAddress.address,
16516
+ firstAddress.family
16517
+ );
16518
+ }
16519
+ } catch (error210) {
16520
+ callback(
16521
+ error210 instanceof Error ? error210 : new Error(String(error210))
16522
+ );
16523
+ }
16524
+ });
16525
+ });
16526
+ }
16527
+ function isNodeRuntime() {
16528
+ var _a22, _b22;
16529
+ const runtimeProcess = globalThis.process;
16530
+ return ((_a22 = runtimeProcess == null ? void 0 : runtimeProcess.release) == null ? void 0 : _a22.name) === "node" && ((_b22 = runtimeProcess.versions) == null ? void 0 : _b22.bun) == null;
16531
+ }
16532
+ async function getDefaultDownloadFetch() {
16533
+ if (!isNodeRuntime() || !initialGlobalFetchIsNodeDefault || globalThis.fetch !== initialGlobalFetch) {
16534
+ return globalThis.fetch;
16535
+ }
16536
+ return safeNodeFetchPromise != null ? safeNodeFetchPromise : safeNodeFetchPromise = createSafeNodeFetch();
16537
+ }
16103
16538
  function isNodeDefaultFetch(fetch2) {
16104
16539
  if (typeof fetch2 !== "function") {
16105
16540
  return false;
@@ -16107,6 +16542,92 @@ function isNodeDefaultFetch(fetch2) {
16107
16542
  const source = Function.prototype.toString.call(fetch2);
16108
16543
  return source.includes("internal/deps/undici") || source.includes("lazy loading of undici");
16109
16544
  }
16545
+ async function createSafeNodeFetch() {
16546
+ const [{ createRequire: createRequire2 }, { lookup }] = await Promise.all([
16547
+ loadNodeModule("node:module"),
16548
+ loadNodeModule("node:dns")
16549
+ ]);
16550
+ const { Agent, fetch: fetch2 } = createRequire2(getCurrentModulePath())(
16551
+ "undici"
16552
+ );
16553
+ const dispatcher = new Agent({
16554
+ connect: {
16555
+ lookup: createSafeLookup(lookup)
16556
+ }
16557
+ });
16558
+ return ((input, init) => fetch2(
16559
+ input,
16560
+ {
16561
+ ...init,
16562
+ dispatcher
16563
+ }
16564
+ ));
16565
+ }
16566
+ async function loadNodeModule(id) {
16567
+ var _a22;
16568
+ const processWithBuiltins = globalThis.process;
16569
+ const builtinModule = (_a22 = processWithBuiltins == null ? void 0 : processWithBuiltins.getBuiltinModule) == null ? void 0 : _a22.call(processWithBuiltins, id);
16570
+ if (builtinModule == null) {
16571
+ throw new Error(`Node.js built-in module ${id} is unavailable`);
16572
+ }
16573
+ return builtinModule;
16574
+ }
16575
+ function getCurrentModulePath() {
16576
+ const originalPrepareStackTrace = Error.prepareStackTrace;
16577
+ try {
16578
+ Error.prepareStackTrace = (_error, callSites) => callSites;
16579
+ const error40 = new Error("Capture current module path");
16580
+ Error.captureStackTrace(error40, getCurrentModulePath);
16581
+ const [caller] = error40.stack;
16582
+ const fileName = caller == null ? void 0 : caller.getFileName();
16583
+ if (fileName == null) {
16584
+ throw new Error("Unable to determine the current module path");
16585
+ }
16586
+ return fileName;
16587
+ } finally {
16588
+ Error.prepareStackTrace = originalPrepareStackTrace;
16589
+ }
16590
+ }
16591
+ async function fetchWithValidatedRedirects({
16592
+ url: url2,
16593
+ headers,
16594
+ abortSignal,
16595
+ maxRedirects = MAX_DOWNLOAD_REDIRECTS
16596
+ }) {
16597
+ const baseInit = { signal: abortSignal };
16598
+ if (headers !== void 0) {
16599
+ baseInit.headers = headers;
16600
+ }
16601
+ let currentUrl = url2;
16602
+ for (let redirectCount = 0; redirectCount <= maxRedirects; redirectCount++) {
16603
+ validateDownloadUrl(currentUrl);
16604
+ const fetch2 = await getDefaultDownloadFetch();
16605
+ const response = await fetch2(currentUrl, {
16606
+ ...baseInit,
16607
+ redirect: "manual"
16608
+ });
16609
+ if (response.type === "opaqueredirect") {
16610
+ if (!isBrowserRuntime()) {
16611
+ throw new DownloadError({
16612
+ url: url2,
16613
+ message: `Redirect from ${currentUrl} could not be validated and was blocked`
16614
+ });
16615
+ }
16616
+ return await fetch2(currentUrl, { ...baseInit, redirect: "follow" });
16617
+ }
16618
+ const location = response.headers.get("location");
16619
+ if (response.status >= 300 && response.status < 400 && location) {
16620
+ await cancelResponseBody(response);
16621
+ currentUrl = new URL(location, currentUrl).toString();
16622
+ continue;
16623
+ }
16624
+ return response;
16625
+ }
16626
+ throw new DownloadError({
16627
+ url: url2,
16628
+ message: `Too many redirects (max ${maxRedirects})`
16629
+ });
16630
+ }
16110
16631
  async function readResponseWithSizeLimit({
16111
16632
  response,
16112
16633
  url: url2,
@@ -16161,6 +16682,35 @@ async function readResponseWithSizeLimit({
16161
16682
  }
16162
16683
  return result;
16163
16684
  }
16685
+ async function downloadBlob(url2, options) {
16686
+ var _a22, _b22;
16687
+ try {
16688
+ const response = await fetchWithValidatedRedirects({
16689
+ url: url2,
16690
+ abortSignal: options == null ? void 0 : options.abortSignal
16691
+ });
16692
+ if (!response.ok) {
16693
+ await cancelResponseBody(response);
16694
+ throw new DownloadError({
16695
+ url: url2,
16696
+ statusCode: response.status,
16697
+ statusText: response.statusText
16698
+ });
16699
+ }
16700
+ const data2 = await readResponseWithSizeLimit({
16701
+ response,
16702
+ url: url2,
16703
+ maxBytes: (_a22 = options == null ? void 0 : options.maxBytes) != null ? _a22 : DEFAULT_MAX_DOWNLOAD_SIZE
16704
+ });
16705
+ const contentType = (_b22 = response.headers.get("content-type")) != null ? _b22 : void 0;
16706
+ return new Blob([data2], contentType ? { type: contentType } : void 0);
16707
+ } catch (error40) {
16708
+ if (DownloadError.isInstance(error40)) {
16709
+ throw error40;
16710
+ }
16711
+ throw new DownloadError({ url: url2, cause: error40 });
16712
+ }
16713
+ }
16164
16714
  function isAbortError(error40) {
16165
16715
  return (error40 instanceof Error || error40 instanceof DOMException) && (error40.name === "AbortError" || error40.name === "ResponseAborted" || // Next.js
16166
16716
  error40.name === "TimeoutError");
@@ -17380,6 +17930,21 @@ async function safeParseJSON({
17380
17930
  };
17381
17931
  }
17382
17932
  }
17933
+ function parseJsonEventStream({
17934
+ stream: stream2,
17935
+ schema
17936
+ }) {
17937
+ return stream2.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream()).pipeThrough(
17938
+ new TransformStream({
17939
+ async transform({ data: data2 }, controller) {
17940
+ if (data2 === "[DONE]") {
17941
+ return;
17942
+ }
17943
+ controller.enqueue(await safeParseJSON({ text: data2, schema }));
17944
+ }
17945
+ })
17946
+ );
17947
+ }
17383
17948
  async function parseProviderOptions({
17384
17949
  provider,
17385
17950
  providerOptions,
@@ -17407,6 +17972,62 @@ async function resolve(value) {
17407
17972
  }
17408
17973
  return Promise.resolve(value);
17409
17974
  }
17975
+ function wrapResponseBodyStream({
17976
+ stream: stream2,
17977
+ url: url2,
17978
+ requestBodyValues,
17979
+ statusCode,
17980
+ responseHeaders
17981
+ }) {
17982
+ const reader = stream2.getReader();
17983
+ let readerReleased = false;
17984
+ const releaseReader = () => {
17985
+ if (!readerReleased) {
17986
+ reader.releaseLock();
17987
+ readerReleased = true;
17988
+ }
17989
+ };
17990
+ return new ReadableStream({
17991
+ async pull(controller) {
17992
+ try {
17993
+ const { done, value } = await reader.read();
17994
+ if (done) {
17995
+ releaseReader();
17996
+ controller.close();
17997
+ } else {
17998
+ controller.enqueue(value);
17999
+ }
18000
+ } catch (error40) {
18001
+ releaseReader();
18002
+ if (isAbortError(error40)) {
18003
+ controller.error(error40);
18004
+ return;
18005
+ }
18006
+ controller.error(
18007
+ handleFetchError({
18008
+ error: new APICallError({
18009
+ message: "Failed to process successful response",
18010
+ cause: error40,
18011
+ statusCode,
18012
+ url: url2,
18013
+ responseHeaders,
18014
+ requestBodyValues
18015
+ }),
18016
+ url: url2,
18017
+ requestBodyValues
18018
+ })
18019
+ );
18020
+ }
18021
+ },
18022
+ async cancel(reason) {
18023
+ try {
18024
+ await reader.cancel(reason);
18025
+ } finally {
18026
+ releaseReader();
18027
+ }
18028
+ }
18029
+ });
18030
+ }
17410
18031
  async function readResponseBodyAsText({
17411
18032
  response,
17412
18033
  url: url2
@@ -17425,8 +18046,8 @@ function stripFileExtension(filename) {
17425
18046
  function withoutTrailingSlash(url2) {
17426
18047
  return url2 == null ? void 0 : url2.replace(/\/$/, "");
17427
18048
  }
17428
- var btoa2, atob2, name14, marker15, symbol16, _a15, _b15, DownloadError, initialGlobalFetch, initialGlobalFetchIsNodeDefault, DEFAULT_MAX_DOWNLOAD_SIZE, createIdGenerator, generateId, FETCH_FAILED_ERROR_MESSAGES, RETRYABLE_NETWORK_ERROR_CODES, VERSION, DEFAULT_SCHEMA_PREFIX, DEFAULT_SCHEMA_SUFFIX, DEFAULT_GENERIC_SUFFIX, suspectProtoRx, suspectConstructorRx, ignoreOverride, defaultOptions, getDefaultOptions, parseCatchDef, integerDateParser, isJsonSchema7AllOfType, emojiRegex2, zodPatterns, ALPHA_NUMERIC, primitiveMappings, asAnyOf, parseOptionalDef, parsePipelineDef, parseReadonlyDef, selectParser, getRelativePath, get$ref, addMeta, getRefs, zod3ToJsonSchema, schemaSymbol, getOriginalFetch2, postJsonToApi, postToApi, textDecoder, createJsonErrorResponseHandler, createJsonResponseHandler;
17429
- var init_dist2 = __esm({
18049
+ var btoa2, atob2, name14, marker15, symbol16, _a15, _b15, DownloadError, safeNodeFetchPromise, initialGlobalFetch, initialGlobalFetchIsNodeDefault, MAX_DOWNLOAD_REDIRECTS, DEFAULT_MAX_DOWNLOAD_SIZE, createIdGenerator, generateId, FETCH_FAILED_ERROR_MESSAGES, RETRYABLE_NETWORK_ERROR_CODES, VERSION, DEFAULT_SCHEMA_PREFIX, DEFAULT_SCHEMA_SUFFIX, DEFAULT_GENERIC_SUFFIX, suspectProtoRx, suspectConstructorRx, ignoreOverride, defaultOptions, getDefaultOptions, parseCatchDef, integerDateParser, isJsonSchema7AllOfType, emojiRegex2, zodPatterns, ALPHA_NUMERIC, primitiveMappings, asAnyOf, parseOptionalDef, parsePipelineDef, parseReadonlyDef, selectParser, getRelativePath, get$ref, addMeta, getRefs, zod3ToJsonSchema, schemaSymbol, getOriginalFetch2, postJsonToApi, postFormDataToApi, postToApi, textDecoder, createJsonErrorResponseHandler, createEventSourceResponseHandler, createJsonResponseHandler;
18050
+ var init_dist3 = __esm({
17430
18051
  "node_modules/@ai-sdk/provider-utils/dist/index.mjs"() {
17431
18052
  init_dist();
17432
18053
  init_dist();
@@ -17439,6 +18060,7 @@ var init_dist2 = __esm({
17439
18060
  init_v3();
17440
18061
  init_v3();
17441
18062
  init_v3();
18063
+ init_stream();
17442
18064
  init_dist();
17443
18065
  init_dist();
17444
18066
  init_dist();
@@ -17466,6 +18088,7 @@ var init_dist2 = __esm({
17466
18088
  };
17467
18089
  initialGlobalFetch = globalThis.fetch;
17468
18090
  initialGlobalFetchIsNodeDefault = isNodeDefaultFetch(initialGlobalFetch);
18091
+ MAX_DOWNLOAD_REDIRECTS = 10;
17469
18092
  DEFAULT_MAX_DOWNLOAD_SIZE = 2 * 1024 * 1024 * 1024;
17470
18093
  createIdGenerator = ({
17471
18094
  prefix,
@@ -17874,6 +18497,26 @@ var init_dist2 = __esm({
17874
18497
  abortSignal,
17875
18498
  fetch: fetch2
17876
18499
  });
18500
+ postFormDataToApi = async ({
18501
+ url: url2,
18502
+ headers,
18503
+ formData,
18504
+ failedResponseHandler,
18505
+ successfulResponseHandler,
18506
+ abortSignal,
18507
+ fetch: fetch2
18508
+ }) => postToApi({
18509
+ url: url2,
18510
+ headers,
18511
+ body: {
18512
+ content: formData,
18513
+ values: Object.fromEntries(formData.entries())
18514
+ },
18515
+ failedResponseHandler,
18516
+ successfulResponseHandler,
18517
+ abortSignal,
18518
+ fetch: fetch2
18519
+ });
17877
18520
  postToApi = async ({
17878
18521
  url: url2,
17879
18522
  headers = {},
@@ -17998,6 +18641,25 @@ var init_dist2 = __esm({
17998
18641
  };
17999
18642
  }
18000
18643
  };
18644
+ createEventSourceResponseHandler = (chunkSchema) => async ({ response, url: url2, requestBodyValues }) => {
18645
+ const responseHeaders = extractResponseHeaders(response);
18646
+ if (response.body == null) {
18647
+ throw new EmptyResponseBodyError({});
18648
+ }
18649
+ return {
18650
+ responseHeaders,
18651
+ value: parseJsonEventStream({
18652
+ stream: wrapResponseBodyStream({
18653
+ stream: response.body,
18654
+ url: url2,
18655
+ requestBodyValues,
18656
+ statusCode: response.status,
18657
+ responseHeaders
18658
+ }),
18659
+ schema: chunkSchema
18660
+ })
18661
+ };
18662
+ };
18001
18663
  createJsonResponseHandler = (responseSchema) => async ({ response, url: url2, requestBodyValues }) => {
18002
18664
  const responseBody = await readResponseBodyAsText({ response, url: url2 });
18003
18665
  const parsedResult = await safeParseJSON({
@@ -18025,6 +18687,1758 @@ var init_dist2 = __esm({
18025
18687
  }
18026
18688
  });
18027
18689
 
18690
+ // node_modules/@ai-sdk/openai-compatible/dist/index.mjs
18691
+ function toCamelCase(str) {
18692
+ return str.replace(/[_-]([a-z])/g, (g) => g[1].toUpperCase());
18693
+ }
18694
+ function resolveProviderOptionsKey(rawName, providerOptions) {
18695
+ const camelName = toCamelCase(rawName);
18696
+ if (camelName !== rawName && (providerOptions == null ? void 0 : providerOptions[camelName]) != null) {
18697
+ return camelName;
18698
+ }
18699
+ return rawName;
18700
+ }
18701
+ function convertOpenAICompatibleChatUsage(usage) {
18702
+ var _a17, _b16, _c, _d, _e, _f;
18703
+ if (usage == null) {
18704
+ return {
18705
+ inputTokens: {
18706
+ total: void 0,
18707
+ noCache: void 0,
18708
+ cacheRead: void 0,
18709
+ cacheWrite: void 0
18710
+ },
18711
+ outputTokens: {
18712
+ total: void 0,
18713
+ text: void 0,
18714
+ reasoning: void 0
18715
+ },
18716
+ raw: void 0
18717
+ };
18718
+ }
18719
+ const promptTokens = (_a17 = usage.prompt_tokens) != null ? _a17 : 0;
18720
+ const completionTokens = (_b16 = usage.completion_tokens) != null ? _b16 : 0;
18721
+ const cacheReadTokens = (_d = (_c = usage.prompt_tokens_details) == null ? void 0 : _c.cached_tokens) != null ? _d : 0;
18722
+ const reasoningTokens = (_f = (_e = usage.completion_tokens_details) == null ? void 0 : _e.reasoning_tokens) != null ? _f : 0;
18723
+ return {
18724
+ inputTokens: {
18725
+ total: promptTokens,
18726
+ noCache: promptTokens - cacheReadTokens,
18727
+ cacheRead: cacheReadTokens,
18728
+ cacheWrite: void 0
18729
+ },
18730
+ outputTokens: {
18731
+ total: completionTokens,
18732
+ text: Math.max(0, completionTokens - reasoningTokens),
18733
+ reasoning: reasoningTokens
18734
+ },
18735
+ raw: usage
18736
+ };
18737
+ }
18738
+ function getOpenAIMetadata(message) {
18739
+ var _a17, _b16;
18740
+ return (_b16 = (_a17 = message == null ? void 0 : message.providerOptions) == null ? void 0 : _a17.openaiCompatible) != null ? _b16 : {};
18741
+ }
18742
+ function getAudioFormat(mediaType) {
18743
+ switch (mediaType) {
18744
+ case "audio/wav":
18745
+ return "wav";
18746
+ case "audio/mp3":
18747
+ case "audio/mpeg":
18748
+ return "mp3";
18749
+ default:
18750
+ return null;
18751
+ }
18752
+ }
18753
+ function convertToOpenAICompatibleChatMessages(prompt) {
18754
+ var _a17, _b16, _c;
18755
+ const messages = [];
18756
+ for (const { role, content, ...message } of prompt) {
18757
+ const metadata = getOpenAIMetadata({ ...message });
18758
+ switch (role) {
18759
+ case "system": {
18760
+ messages.push({ role: "system", content, ...metadata });
18761
+ break;
18762
+ }
18763
+ case "user": {
18764
+ if (content.length === 1 && content[0].type === "text") {
18765
+ messages.push({
18766
+ role: "user",
18767
+ content: content[0].text,
18768
+ ...getOpenAIMetadata(content[0])
18769
+ });
18770
+ break;
18771
+ }
18772
+ messages.push({
18773
+ role: "user",
18774
+ content: content.map((part) => {
18775
+ var _a22;
18776
+ const partMetadata = getOpenAIMetadata(part);
18777
+ switch (part.type) {
18778
+ case "text": {
18779
+ return { type: "text", text: part.text, ...partMetadata };
18780
+ }
18781
+ case "file": {
18782
+ if (part.mediaType.startsWith("image/")) {
18783
+ const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
18784
+ return {
18785
+ type: "image_url",
18786
+ image_url: {
18787
+ url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${convertToBase64(part.data)}`
18788
+ },
18789
+ ...partMetadata
18790
+ };
18791
+ }
18792
+ if (part.mediaType.startsWith("audio/")) {
18793
+ if (part.data instanceof URL) {
18794
+ throw new UnsupportedFunctionalityError({
18795
+ functionality: "audio file parts with URLs"
18796
+ });
18797
+ }
18798
+ const format2 = getAudioFormat(part.mediaType);
18799
+ if (format2 === null) {
18800
+ throw new UnsupportedFunctionalityError({
18801
+ functionality: `audio media type ${part.mediaType}`
18802
+ });
18803
+ }
18804
+ return {
18805
+ type: "input_audio",
18806
+ input_audio: {
18807
+ data: convertToBase64(part.data),
18808
+ format: format2
18809
+ },
18810
+ ...partMetadata
18811
+ };
18812
+ }
18813
+ if (part.mediaType === "application/pdf") {
18814
+ if (part.data instanceof URL) {
18815
+ throw new UnsupportedFunctionalityError({
18816
+ functionality: "PDF file parts with URLs"
18817
+ });
18818
+ }
18819
+ return {
18820
+ type: "file",
18821
+ file: {
18822
+ filename: (_a22 = part.filename) != null ? _a22 : "document.pdf",
18823
+ file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`
18824
+ },
18825
+ ...partMetadata
18826
+ };
18827
+ }
18828
+ if (part.mediaType.startsWith("text/")) {
18829
+ const textContent = part.data instanceof URL ? part.data.toString() : typeof part.data === "string" ? new TextDecoder().decode(
18830
+ convertBase64ToUint8Array(part.data)
18831
+ ) : new TextDecoder().decode(part.data);
18832
+ return {
18833
+ type: "text",
18834
+ text: textContent,
18835
+ ...partMetadata
18836
+ };
18837
+ }
18838
+ throw new UnsupportedFunctionalityError({
18839
+ functionality: `file part media type ${part.mediaType}`
18840
+ });
18841
+ }
18842
+ }
18843
+ }),
18844
+ ...metadata
18845
+ });
18846
+ break;
18847
+ }
18848
+ case "assistant": {
18849
+ let text = "";
18850
+ let reasoning = "";
18851
+ const toolCalls = [];
18852
+ for (const part of content) {
18853
+ const partMetadata = getOpenAIMetadata(part);
18854
+ switch (part.type) {
18855
+ case "text": {
18856
+ text += part.text;
18857
+ break;
18858
+ }
18859
+ case "reasoning": {
18860
+ reasoning += part.text;
18861
+ break;
18862
+ }
18863
+ case "tool-call": {
18864
+ const thoughtSignature = (_b16 = (_a17 = part.providerOptions) == null ? void 0 : _a17.google) == null ? void 0 : _b16.thoughtSignature;
18865
+ toolCalls.push({
18866
+ id: part.toolCallId,
18867
+ type: "function",
18868
+ function: {
18869
+ name: part.toolName,
18870
+ arguments: JSON.stringify(part.input)
18871
+ },
18872
+ ...partMetadata,
18873
+ // Include extra_content for Google Gemini thought signatures
18874
+ ...thoughtSignature ? {
18875
+ extra_content: {
18876
+ google: {
18877
+ thought_signature: String(thoughtSignature)
18878
+ }
18879
+ }
18880
+ } : {}
18881
+ });
18882
+ break;
18883
+ }
18884
+ }
18885
+ }
18886
+ messages.push({
18887
+ role: "assistant",
18888
+ content: toolCalls.length > 0 ? text || null : text,
18889
+ ...reasoning.length > 0 ? { reasoning_content: reasoning } : {},
18890
+ tool_calls: toolCalls.length > 0 ? toolCalls : void 0,
18891
+ ...metadata
18892
+ });
18893
+ break;
18894
+ }
18895
+ case "tool": {
18896
+ for (const toolResponse of content) {
18897
+ if (toolResponse.type === "tool-approval-response") {
18898
+ continue;
18899
+ }
18900
+ const output = toolResponse.output;
18901
+ let contentValue;
18902
+ switch (output.type) {
18903
+ case "text":
18904
+ case "error-text":
18905
+ contentValue = output.value;
18906
+ break;
18907
+ case "execution-denied":
18908
+ contentValue = (_c = output.reason) != null ? _c : "Tool call execution denied.";
18909
+ break;
18910
+ case "content":
18911
+ case "json":
18912
+ case "error-json":
18913
+ contentValue = JSON.stringify(output.value);
18914
+ break;
18915
+ }
18916
+ const toolResponseMetadata = getOpenAIMetadata(toolResponse);
18917
+ messages.push({
18918
+ role: "tool",
18919
+ tool_call_id: toolResponse.toolCallId,
18920
+ content: contentValue,
18921
+ ...toolResponseMetadata
18922
+ });
18923
+ }
18924
+ break;
18925
+ }
18926
+ default: {
18927
+ const _exhaustiveCheck = role;
18928
+ throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
18929
+ }
18930
+ }
18931
+ }
18932
+ return messages;
18933
+ }
18934
+ function getResponseMetadata({
18935
+ id,
18936
+ model,
18937
+ created
18938
+ }) {
18939
+ return {
18940
+ id: id != null ? id : void 0,
18941
+ modelId: model != null ? model : void 0,
18942
+ timestamp: created != null ? new Date(created * 1e3) : void 0
18943
+ };
18944
+ }
18945
+ function mapOpenAICompatibleFinishReason(finishReason) {
18946
+ switch (finishReason) {
18947
+ case "stop":
18948
+ return "stop";
18949
+ case "length":
18950
+ return "length";
18951
+ case "content_filter":
18952
+ return "content-filter";
18953
+ case "function_call":
18954
+ case "tool_calls":
18955
+ return "tool-calls";
18956
+ default:
18957
+ return "other";
18958
+ }
18959
+ }
18960
+ function prepareTools({
18961
+ tools,
18962
+ toolChoice
18963
+ }) {
18964
+ tools = (tools == null ? void 0 : tools.length) ? tools : void 0;
18965
+ const toolWarnings = [];
18966
+ if (tools == null) {
18967
+ return { tools: void 0, toolChoice: void 0, toolWarnings };
18968
+ }
18969
+ const openaiCompatTools = [];
18970
+ for (const tool6 of tools) {
18971
+ if (tool6.type === "provider") {
18972
+ toolWarnings.push({
18973
+ type: "unsupported",
18974
+ feature: `provider-defined tool ${tool6.id}`
18975
+ });
18976
+ } else {
18977
+ openaiCompatTools.push({
18978
+ type: "function",
18979
+ function: {
18980
+ name: tool6.name,
18981
+ description: tool6.description,
18982
+ parameters: tool6.inputSchema,
18983
+ ...tool6.strict != null ? { strict: tool6.strict } : {}
18984
+ }
18985
+ });
18986
+ }
18987
+ }
18988
+ if (toolChoice == null) {
18989
+ return { tools: openaiCompatTools, toolChoice: void 0, toolWarnings };
18990
+ }
18991
+ const type = toolChoice.type;
18992
+ switch (type) {
18993
+ case "auto":
18994
+ case "none":
18995
+ case "required":
18996
+ return { tools: openaiCompatTools, toolChoice: type, toolWarnings };
18997
+ case "tool":
18998
+ return {
18999
+ tools: openaiCompatTools,
19000
+ toolChoice: {
19001
+ type: "function",
19002
+ function: { name: toolChoice.toolName }
19003
+ },
19004
+ toolWarnings
19005
+ };
19006
+ default: {
19007
+ const _exhaustiveCheck = type;
19008
+ throw new UnsupportedFunctionalityError({
19009
+ functionality: `tool choice type: ${_exhaustiveCheck}`
19010
+ });
19011
+ }
19012
+ }
19013
+ }
19014
+ function convertOpenAICompatibleContent(content) {
19015
+ if (content == null) {
19016
+ return [];
19017
+ }
19018
+ if (typeof content === "string") {
19019
+ return content.length > 0 ? [{ type: "text", text: content }] : [];
19020
+ }
19021
+ const result = [];
19022
+ for (const part of content) {
19023
+ if (part.type === "text" && typeof part.text === "string") {
19024
+ if (part.text.length > 0) {
19025
+ result.push({ type: "text", text: part.text });
19026
+ }
19027
+ } else if (part.type === "thinking" && Array.isArray(part.thinking)) {
19028
+ const reasoningText = part.thinking.filter(
19029
+ (chunk) => chunk != null && typeof chunk === "object" && "type" in chunk && chunk.type === "text" && "text" in chunk && typeof chunk.text === "string"
19030
+ ).map((chunk) => chunk.text).join("");
19031
+ if (reasoningText.length > 0) {
19032
+ result.push({ type: "reasoning", text: reasoningText });
19033
+ }
19034
+ }
19035
+ }
19036
+ return result;
19037
+ }
19038
+ function convertOpenAICompatibleCompletionUsage(usage) {
19039
+ var _a17, _b16;
19040
+ if (usage == null) {
19041
+ return {
19042
+ inputTokens: {
19043
+ total: void 0,
19044
+ noCache: void 0,
19045
+ cacheRead: void 0,
19046
+ cacheWrite: void 0
19047
+ },
19048
+ outputTokens: {
19049
+ total: void 0,
19050
+ text: void 0,
19051
+ reasoning: void 0
19052
+ },
19053
+ raw: void 0
19054
+ };
19055
+ }
19056
+ const promptTokens = (_a17 = usage.prompt_tokens) != null ? _a17 : 0;
19057
+ const completionTokens = (_b16 = usage.completion_tokens) != null ? _b16 : 0;
19058
+ return {
19059
+ inputTokens: {
19060
+ total: promptTokens,
19061
+ noCache: promptTokens,
19062
+ cacheRead: void 0,
19063
+ cacheWrite: void 0
19064
+ },
19065
+ outputTokens: {
19066
+ total: completionTokens,
19067
+ text: completionTokens,
19068
+ reasoning: void 0
19069
+ },
19070
+ raw: usage
19071
+ };
19072
+ }
19073
+ function convertToOpenAICompatibleCompletionPrompt({
19074
+ prompt,
19075
+ user = "user",
19076
+ assistant = "assistant"
19077
+ }) {
19078
+ let text = "";
19079
+ if (prompt[0].role === "system") {
19080
+ text += `${prompt[0].content}
19081
+
19082
+ `;
19083
+ prompt = prompt.slice(1);
19084
+ }
19085
+ for (const { role, content } of prompt) {
19086
+ switch (role) {
19087
+ case "system": {
19088
+ throw new InvalidPromptError({
19089
+ message: "Unexpected system message in prompt: ${content}",
19090
+ prompt
19091
+ });
19092
+ }
19093
+ case "user": {
19094
+ const userMessage = content.map((part) => {
19095
+ switch (part.type) {
19096
+ case "text": {
19097
+ return part.text;
19098
+ }
19099
+ }
19100
+ }).filter(Boolean).join("");
19101
+ text += `${user}:
19102
+ ${userMessage}
19103
+
19104
+ `;
19105
+ break;
19106
+ }
19107
+ case "assistant": {
19108
+ const assistantMessage = content.map((part) => {
19109
+ switch (part.type) {
19110
+ case "text": {
19111
+ return part.text;
19112
+ }
19113
+ case "tool-call": {
19114
+ throw new UnsupportedFunctionalityError({
19115
+ functionality: "tool-call messages"
19116
+ });
19117
+ }
19118
+ }
19119
+ }).join("");
19120
+ text += `${assistant}:
19121
+ ${assistantMessage}
19122
+
19123
+ `;
19124
+ break;
19125
+ }
19126
+ case "tool": {
19127
+ throw new UnsupportedFunctionalityError({
19128
+ functionality: "tool messages"
19129
+ });
19130
+ }
19131
+ default: {
19132
+ const _exhaustiveCheck = role;
19133
+ throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
19134
+ }
19135
+ }
19136
+ }
19137
+ text += `${assistant}:
19138
+ `;
19139
+ return {
19140
+ prompt: text,
19141
+ stopSequences: [`
19142
+ ${user}:`]
19143
+ };
19144
+ }
19145
+ function getResponseMetadata2({
19146
+ id,
19147
+ model,
19148
+ created
19149
+ }) {
19150
+ return {
19151
+ id: id != null ? id : void 0,
19152
+ modelId: model != null ? model : void 0,
19153
+ timestamp: created != null ? new Date(created * 1e3) : void 0
19154
+ };
19155
+ }
19156
+ function mapOpenAICompatibleFinishReason2(finishReason) {
19157
+ switch (finishReason) {
19158
+ case "stop":
19159
+ return "stop";
19160
+ case "length":
19161
+ return "length";
19162
+ case "content_filter":
19163
+ return "content-filter";
19164
+ case "function_call":
19165
+ case "tool_calls":
19166
+ return "tool-calls";
19167
+ default:
19168
+ return "other";
19169
+ }
19170
+ }
19171
+ async function fileToBlob(file2) {
19172
+ if (file2.type === "url") {
19173
+ return downloadBlob(file2.url);
19174
+ }
19175
+ const data2 = file2.data instanceof Uint8Array ? file2.data : convertBase64ToUint8Array(file2.data);
19176
+ return new Blob([data2], { type: file2.mediaType });
19177
+ }
19178
+ function createOpenAICompatible(options) {
19179
+ const baseURL = withoutTrailingSlash(options.baseURL);
19180
+ const providerName = options.name;
19181
+ const headers = {
19182
+ ...options.apiKey && { Authorization: `Bearer ${options.apiKey}` },
19183
+ ...options.headers
19184
+ };
19185
+ const getHeaders = () => withUserAgentSuffix(headers, `ai-sdk/openai-compatible/${VERSION2}`);
19186
+ const getCommonModelConfig = (modelType) => ({
19187
+ provider: `${providerName}.${modelType}`,
19188
+ url: ({ path: path9 }) => {
19189
+ const url2 = new URL(`${baseURL}${path9}`);
19190
+ if (options.queryParams) {
19191
+ url2.search = new URLSearchParams(options.queryParams).toString();
19192
+ }
19193
+ return url2.toString();
19194
+ },
19195
+ headers: getHeaders,
19196
+ fetch: options.fetch
19197
+ });
19198
+ const createLanguageModel2 = (modelId) => createChatModel(modelId);
19199
+ const createChatModel = (modelId) => new OpenAICompatibleChatLanguageModel(modelId, {
19200
+ ...getCommonModelConfig("chat"),
19201
+ includeUsage: options.includeUsage,
19202
+ supportsStructuredOutputs: options.supportsStructuredOutputs,
19203
+ supportedUrls: options.supportedUrls,
19204
+ transformRequestBody: options.transformRequestBody,
19205
+ metadataExtractor: options.metadataExtractor,
19206
+ convertUsage: options.convertUsage
19207
+ });
19208
+ const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(modelId, {
19209
+ ...getCommonModelConfig("completion"),
19210
+ includeUsage: options.includeUsage
19211
+ });
19212
+ const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(modelId, {
19213
+ ...getCommonModelConfig("embedding")
19214
+ });
19215
+ const createImageModel = (modelId) => new OpenAICompatibleImageModel(modelId, getCommonModelConfig("image"));
19216
+ const provider = (modelId) => createLanguageModel2(modelId);
19217
+ provider.specificationVersion = "v3";
19218
+ provider.languageModel = createLanguageModel2;
19219
+ provider.chatModel = createChatModel;
19220
+ provider.completionModel = createCompletionModel;
19221
+ provider.embeddingModel = createEmbeddingModel;
19222
+ provider.textEmbeddingModel = createEmbeddingModel;
19223
+ provider.imageModel = createImageModel;
19224
+ return provider;
19225
+ }
19226
+ var openaiCompatibleErrorDataSchema, defaultOpenAICompatibleErrorStructure, openaiCompatibleLanguageModelChatOptions, OpenAICompatibleChatLanguageModel, openaiCompatibleTokenUsageSchema, openAICompatibleContentSchema, OpenAICompatibleChatResponseSchema, chunkBaseSchema, createOpenAICompatibleChatChunkSchema, openaiCompatibleLanguageModelCompletionOptions, OpenAICompatibleCompletionLanguageModel, usageSchema, openaiCompatibleCompletionResponseSchema, createOpenAICompatibleCompletionChunkSchema, openaiCompatibleEmbeddingModelOptions, OpenAICompatibleEmbeddingModel, openaiTextEmbeddingResponseSchema, OpenAICompatibleImageModel, openaiCompatibleImageResponseSchema, VERSION2;
19227
+ var init_dist4 = __esm({
19228
+ "node_modules/@ai-sdk/openai-compatible/dist/index.mjs"() {
19229
+ init_dist();
19230
+ init_dist3();
19231
+ init_v4();
19232
+ init_v4();
19233
+ init_dist();
19234
+ init_dist3();
19235
+ init_v4();
19236
+ init_dist();
19237
+ init_dist3();
19238
+ init_v4();
19239
+ init_dist();
19240
+ init_v4();
19241
+ init_dist();
19242
+ init_dist3();
19243
+ init_v4();
19244
+ init_v4();
19245
+ init_dist3();
19246
+ init_v4();
19247
+ init_dist3();
19248
+ openaiCompatibleErrorDataSchema = external_exports.object({
19249
+ error: external_exports.object({
19250
+ message: external_exports.string(),
19251
+ // The additional information below is handled loosely to support
19252
+ // OpenAI-compatible providers that have slightly different error
19253
+ // responses:
19254
+ type: external_exports.string().nullish(),
19255
+ param: external_exports.any().nullish(),
19256
+ code: external_exports.union([external_exports.string(), external_exports.number()]).nullish()
19257
+ })
19258
+ });
19259
+ defaultOpenAICompatibleErrorStructure = {
19260
+ errorSchema: openaiCompatibleErrorDataSchema,
19261
+ errorToMessage: (data2) => data2.error.message
19262
+ };
19263
+ openaiCompatibleLanguageModelChatOptions = external_exports.object({
19264
+ /**
19265
+ * A unique identifier representing your end-user, which can help the provider to
19266
+ * monitor and detect abuse.
19267
+ */
19268
+ user: external_exports.string().optional(),
19269
+ /**
19270
+ * Reasoning effort for reasoning models. Defaults to `medium`.
19271
+ */
19272
+ reasoningEffort: external_exports.string().optional(),
19273
+ /**
19274
+ * Controls the verbosity of the generated text. Defaults to `medium`.
19275
+ */
19276
+ textVerbosity: external_exports.string().optional(),
19277
+ /**
19278
+ * Whether to use strict JSON schema validation.
19279
+ * When true, the model uses constrained decoding to guarantee schema compliance.
19280
+ * Only used when the provider supports structured outputs and a schema is provided.
19281
+ *
19282
+ * @default true
19283
+ */
19284
+ strictJsonSchema: external_exports.boolean().optional()
19285
+ });
19286
+ OpenAICompatibleChatLanguageModel = class {
19287
+ // type inferred via constructor
19288
+ constructor(modelId, config2) {
19289
+ this.specificationVersion = "v3";
19290
+ var _a17, _b16;
19291
+ this.modelId = modelId;
19292
+ this.config = config2;
19293
+ const errorStructure = (_a17 = config2.errorStructure) != null ? _a17 : defaultOpenAICompatibleErrorStructure;
19294
+ this.chunkSchema = createOpenAICompatibleChatChunkSchema(
19295
+ errorStructure.errorSchema
19296
+ );
19297
+ this.failedResponseHandler = createJsonErrorResponseHandler(errorStructure);
19298
+ this.supportsStructuredOutputs = (_b16 = config2.supportsStructuredOutputs) != null ? _b16 : false;
19299
+ }
19300
+ get provider() {
19301
+ return this.config.provider;
19302
+ }
19303
+ get providerOptionsName() {
19304
+ return this.config.provider.split(".")[0].trim();
19305
+ }
19306
+ get supportedUrls() {
19307
+ var _a17, _b16, _c;
19308
+ return (_c = (_b16 = (_a17 = this.config).supportedUrls) == null ? void 0 : _b16.call(_a17)) != null ? _c : {};
19309
+ }
19310
+ transformRequestBody(args) {
19311
+ var _a17, _b16, _c;
19312
+ return (_c = (_b16 = (_a17 = this.config).transformRequestBody) == null ? void 0 : _b16.call(_a17, args)) != null ? _c : args;
19313
+ }
19314
+ convertUsage(usage) {
19315
+ var _a17, _b16, _c;
19316
+ return (_c = (_b16 = (_a17 = this.config).convertUsage) == null ? void 0 : _b16.call(_a17, usage)) != null ? _c : convertOpenAICompatibleChatUsage(usage);
19317
+ }
19318
+ async getArgs({
19319
+ prompt,
19320
+ maxOutputTokens,
19321
+ temperature,
19322
+ topP,
19323
+ topK,
19324
+ frequencyPenalty,
19325
+ presencePenalty,
19326
+ providerOptions,
19327
+ stopSequences,
19328
+ responseFormat,
19329
+ seed,
19330
+ toolChoice,
19331
+ tools
19332
+ }) {
19333
+ var _a17, _b16, _c, _d, _e;
19334
+ const warnings = [];
19335
+ const deprecatedOptions = await parseProviderOptions({
19336
+ provider: "openai-compatible",
19337
+ providerOptions,
19338
+ schema: openaiCompatibleLanguageModelChatOptions
19339
+ });
19340
+ if (deprecatedOptions != null) {
19341
+ warnings.push({
19342
+ type: "other",
19343
+ message: `The 'openai-compatible' key in providerOptions is deprecated. Use 'openaiCompatible' instead.`
19344
+ });
19345
+ }
19346
+ const compatibleOptions = Object.assign(
19347
+ deprecatedOptions != null ? deprecatedOptions : {},
19348
+ (_a17 = await parseProviderOptions({
19349
+ provider: "openaiCompatible",
19350
+ providerOptions,
19351
+ schema: openaiCompatibleLanguageModelChatOptions
19352
+ })) != null ? _a17 : {},
19353
+ (_b16 = await parseProviderOptions({
19354
+ provider: this.providerOptionsName,
19355
+ providerOptions,
19356
+ schema: openaiCompatibleLanguageModelChatOptions
19357
+ })) != null ? _b16 : {},
19358
+ (_c = await parseProviderOptions({
19359
+ provider: toCamelCase(this.providerOptionsName),
19360
+ providerOptions,
19361
+ schema: openaiCompatibleLanguageModelChatOptions
19362
+ })) != null ? _c : {}
19363
+ );
19364
+ const strictJsonSchema = (_d = compatibleOptions == null ? void 0 : compatibleOptions.strictJsonSchema) != null ? _d : true;
19365
+ if (topK != null) {
19366
+ warnings.push({ type: "unsupported", feature: "topK" });
19367
+ }
19368
+ if ((responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && !this.supportsStructuredOutputs) {
19369
+ warnings.push({
19370
+ type: "unsupported",
19371
+ feature: "responseFormat",
19372
+ details: "JSON response format schema is only supported with structuredOutputs"
19373
+ });
19374
+ }
19375
+ const {
19376
+ tools: openaiTools,
19377
+ toolChoice: openaiToolChoice,
19378
+ toolWarnings
19379
+ } = prepareTools({
19380
+ tools,
19381
+ toolChoice
19382
+ });
19383
+ const metadataKey = resolveProviderOptionsKey(
19384
+ this.providerOptionsName,
19385
+ providerOptions
19386
+ );
19387
+ return {
19388
+ metadataKey,
19389
+ args: {
19390
+ // model id:
19391
+ model: this.modelId,
19392
+ // model specific settings:
19393
+ user: compatibleOptions.user,
19394
+ // standardized settings:
19395
+ max_tokens: maxOutputTokens,
19396
+ temperature,
19397
+ top_p: topP,
19398
+ frequency_penalty: frequencyPenalty,
19399
+ presence_penalty: presencePenalty,
19400
+ response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? this.supportsStructuredOutputs === true && responseFormat.schema != null ? {
19401
+ type: "json_schema",
19402
+ json_schema: {
19403
+ schema: responseFormat.schema,
19404
+ strict: strictJsonSchema,
19405
+ name: (_e = responseFormat.name) != null ? _e : "response",
19406
+ description: responseFormat.description
19407
+ }
19408
+ } : { type: "json_object" } : void 0,
19409
+ stop: stopSequences,
19410
+ seed,
19411
+ ...Object.fromEntries(
19412
+ Object.entries({
19413
+ ...providerOptions == null ? void 0 : providerOptions[this.providerOptionsName],
19414
+ ...providerOptions == null ? void 0 : providerOptions[toCamelCase(this.providerOptionsName)]
19415
+ }).filter(
19416
+ ([key]) => !Object.keys(
19417
+ openaiCompatibleLanguageModelChatOptions.shape
19418
+ ).includes(key)
19419
+ )
19420
+ ),
19421
+ reasoning_effort: compatibleOptions.reasoningEffort,
19422
+ verbosity: compatibleOptions.textVerbosity,
19423
+ // messages:
19424
+ messages: convertToOpenAICompatibleChatMessages(prompt),
19425
+ // tools:
19426
+ tools: openaiTools,
19427
+ tool_choice: openaiToolChoice
19428
+ },
19429
+ warnings: [...warnings, ...toolWarnings]
19430
+ };
19431
+ }
19432
+ async doGenerate(options) {
19433
+ var _a17, _b16, _c, _d, _e, _f, _g, _h;
19434
+ const { args, warnings, metadataKey } = await this.getArgs({ ...options });
19435
+ const transformedBody = this.transformRequestBody(args);
19436
+ const body = JSON.stringify(transformedBody);
19437
+ const {
19438
+ responseHeaders,
19439
+ value: responseBody,
19440
+ rawValue: rawResponse
19441
+ } = await postJsonToApi({
19442
+ url: this.config.url({
19443
+ path: "/chat/completions",
19444
+ modelId: this.modelId
19445
+ }),
19446
+ headers: combineHeaders(this.config.headers(), options.headers),
19447
+ body: transformedBody,
19448
+ failedResponseHandler: this.failedResponseHandler,
19449
+ successfulResponseHandler: createJsonResponseHandler(
19450
+ OpenAICompatibleChatResponseSchema
19451
+ ),
19452
+ abortSignal: options.abortSignal,
19453
+ fetch: this.config.fetch
19454
+ });
19455
+ const choice = responseBody.choices[0];
19456
+ const content = [];
19457
+ content.push(...convertOpenAICompatibleContent(choice.message.content));
19458
+ const reasoning = (_a17 = choice.message.reasoning_content) != null ? _a17 : choice.message.reasoning;
19459
+ if (reasoning != null && reasoning.length > 0) {
19460
+ content.push({
19461
+ type: "reasoning",
19462
+ text: reasoning
19463
+ });
19464
+ }
19465
+ if (choice.message.tool_calls != null) {
19466
+ for (const toolCall of choice.message.tool_calls) {
19467
+ const thoughtSignature = (_c = (_b16 = toolCall.extra_content) == null ? void 0 : _b16.google) == null ? void 0 : _c.thought_signature;
19468
+ content.push({
19469
+ type: "tool-call",
19470
+ toolCallId: (_d = toolCall.id) != null ? _d : generateId(),
19471
+ toolName: toolCall.function.name,
19472
+ input: toolCall.function.arguments,
19473
+ ...thoughtSignature ? {
19474
+ providerMetadata: {
19475
+ [metadataKey]: { thoughtSignature }
19476
+ }
19477
+ } : {}
19478
+ });
19479
+ }
19480
+ }
19481
+ const providerMetadata = {
19482
+ [metadataKey]: {},
19483
+ ...await ((_f = (_e = this.config.metadataExtractor) == null ? void 0 : _e.extractMetadata) == null ? void 0 : _f.call(_e, {
19484
+ parsedBody: rawResponse
19485
+ }))
19486
+ };
19487
+ const completionTokenDetails = (_g = responseBody.usage) == null ? void 0 : _g.completion_tokens_details;
19488
+ if ((completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens) != null) {
19489
+ providerMetadata[metadataKey].acceptedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.accepted_prediction_tokens;
19490
+ }
19491
+ if ((completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens) != null) {
19492
+ providerMetadata[metadataKey].rejectedPredictionTokens = completionTokenDetails == null ? void 0 : completionTokenDetails.rejected_prediction_tokens;
19493
+ }
19494
+ return {
19495
+ content,
19496
+ finishReason: {
19497
+ unified: mapOpenAICompatibleFinishReason(choice.finish_reason),
19498
+ raw: (_h = choice.finish_reason) != null ? _h : void 0
19499
+ },
19500
+ usage: this.convertUsage(responseBody.usage),
19501
+ providerMetadata,
19502
+ request: { body },
19503
+ response: {
19504
+ ...getResponseMetadata(responseBody),
19505
+ headers: responseHeaders,
19506
+ body: rawResponse
19507
+ },
19508
+ warnings
19509
+ };
19510
+ }
19511
+ async doStream(options) {
19512
+ var _a17;
19513
+ const { args, warnings, metadataKey } = await this.getArgs({ ...options });
19514
+ const body = this.transformRequestBody({
19515
+ ...args,
19516
+ stream: true,
19517
+ // only include stream_options when in strict compatibility mode:
19518
+ stream_options: this.config.includeUsage ? { include_usage: true } : void 0
19519
+ });
19520
+ const metadataExtractor = (_a17 = this.config.metadataExtractor) == null ? void 0 : _a17.createStreamExtractor();
19521
+ const { responseHeaders, value: response } = await postJsonToApi({
19522
+ url: this.config.url({
19523
+ path: "/chat/completions",
19524
+ modelId: this.modelId
19525
+ }),
19526
+ headers: combineHeaders(this.config.headers(), options.headers),
19527
+ body,
19528
+ failedResponseHandler: this.failedResponseHandler,
19529
+ successfulResponseHandler: createEventSourceResponseHandler(
19530
+ this.chunkSchema
19531
+ ),
19532
+ abortSignal: options.abortSignal,
19533
+ fetch: this.config.fetch
19534
+ });
19535
+ const toolCalls = [];
19536
+ const pendingToolCalls = /* @__PURE__ */ new Map();
19537
+ let finishReason;
19538
+ let usage = void 0;
19539
+ let isFirstChunk = true;
19540
+ const providerOptionsName = metadataKey;
19541
+ let isActiveReasoning = false;
19542
+ let isActiveText = false;
19543
+ const convertUsage = (usage2) => this.convertUsage(usage2);
19544
+ return {
19545
+ stream: response.pipeThrough(
19546
+ new TransformStream({
19547
+ start(controller) {
19548
+ controller.enqueue({ type: "stream-start", warnings });
19549
+ },
19550
+ transform(chunk, controller) {
19551
+ var _a22, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v;
19552
+ if (options.includeRawChunks) {
19553
+ controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
19554
+ }
19555
+ if (!chunk.success) {
19556
+ finishReason = { unified: "error", raw: void 0 };
19557
+ controller.enqueue({ type: "error", error: chunk.error });
19558
+ return;
19559
+ }
19560
+ metadataExtractor == null ? void 0 : metadataExtractor.processChunk(chunk.rawValue);
19561
+ if ("error" in chunk.value) {
19562
+ finishReason = { unified: "error", raw: void 0 };
19563
+ controller.enqueue({
19564
+ type: "error",
19565
+ error: chunk.value.error
19566
+ });
19567
+ return;
19568
+ }
19569
+ const value = chunk.value;
19570
+ if (isFirstChunk) {
19571
+ isFirstChunk = false;
19572
+ controller.enqueue({
19573
+ type: "response-metadata",
19574
+ ...getResponseMetadata(value)
19575
+ });
19576
+ }
19577
+ if (value.usage != null) {
19578
+ usage = value.usage;
19579
+ }
19580
+ const choice = value.choices[0];
19581
+ if ((choice == null ? void 0 : choice.finish_reason) != null) {
19582
+ finishReason = {
19583
+ unified: mapOpenAICompatibleFinishReason(choice.finish_reason),
19584
+ raw: (_a22 = choice.finish_reason) != null ? _a22 : void 0
19585
+ };
19586
+ }
19587
+ if ((choice == null ? void 0 : choice.delta) == null) {
19588
+ return;
19589
+ }
19590
+ const delta = choice.delta;
19591
+ const enqueueReasoningDelta = (reasoningDelta) => {
19592
+ if (isActiveText) {
19593
+ controller.enqueue({ type: "text-end", id: "txt-0" });
19594
+ isActiveText = false;
19595
+ }
19596
+ if (!isActiveReasoning) {
19597
+ controller.enqueue({
19598
+ type: "reasoning-start",
19599
+ id: "reasoning-0"
19600
+ });
19601
+ isActiveReasoning = true;
19602
+ }
19603
+ controller.enqueue({
19604
+ type: "reasoning-delta",
19605
+ id: "reasoning-0",
19606
+ delta: reasoningDelta
19607
+ });
19608
+ };
19609
+ const enqueueTextDelta = (textDelta) => {
19610
+ if (isActiveReasoning) {
19611
+ controller.enqueue({
19612
+ type: "reasoning-end",
19613
+ id: "reasoning-0"
19614
+ });
19615
+ isActiveReasoning = false;
19616
+ }
19617
+ if (!isActiveText) {
19618
+ controller.enqueue({ type: "text-start", id: "txt-0" });
19619
+ isActiveText = true;
19620
+ }
19621
+ controller.enqueue({
19622
+ type: "text-delta",
19623
+ id: "txt-0",
19624
+ delta: textDelta
19625
+ });
19626
+ };
19627
+ const reasoningContent = (_b16 = delta.reasoning_content) != null ? _b16 : delta.reasoning;
19628
+ if (reasoningContent) {
19629
+ enqueueReasoningDelta(reasoningContent);
19630
+ }
19631
+ for (const contentPart of convertOpenAICompatibleContent(
19632
+ delta.content
19633
+ )) {
19634
+ if (contentPart.type === "reasoning") {
19635
+ enqueueReasoningDelta(contentPart.text);
19636
+ } else {
19637
+ enqueueTextDelta(contentPart.text);
19638
+ }
19639
+ }
19640
+ if (delta.tool_calls != null) {
19641
+ if (isActiveReasoning) {
19642
+ controller.enqueue({
19643
+ type: "reasoning-end",
19644
+ id: "reasoning-0"
19645
+ });
19646
+ isActiveReasoning = false;
19647
+ }
19648
+ for (const toolCallDelta of delta.tool_calls) {
19649
+ const index = (_c = toolCallDelta.index) != null ? _c : toolCalls.length;
19650
+ if (toolCalls[index] == null) {
19651
+ if (toolCallDelta.index != null) {
19652
+ let pending = pendingToolCalls.get(index);
19653
+ if (pending == null) {
19654
+ pending = {
19655
+ id: (_d = toolCallDelta.id) != null ? _d : null,
19656
+ bufferedArguments: "",
19657
+ thoughtSignature: (_g = (_f = (_e = toolCallDelta.extra_content) == null ? void 0 : _e.google) == null ? void 0 : _f.thought_signature) != null ? _g : void 0
19658
+ };
19659
+ pendingToolCalls.set(index, pending);
19660
+ } else {
19661
+ if (pending.id == null && toolCallDelta.id != null) {
19662
+ pending.id = toolCallDelta.id;
19663
+ }
19664
+ if (pending.thoughtSignature == null && ((_i = (_h = toolCallDelta.extra_content) == null ? void 0 : _h.google) == null ? void 0 : _i.thought_signature) != null) {
19665
+ pending.thoughtSignature = toolCallDelta.extra_content.google.thought_signature;
19666
+ }
19667
+ }
19668
+ const argumentsDelta = (_j = toolCallDelta.function) == null ? void 0 : _j.arguments;
19669
+ if (argumentsDelta != null) {
19670
+ pending.bufferedArguments += argumentsDelta;
19671
+ }
19672
+ const name15 = (_k = toolCallDelta.function) == null ? void 0 : _k.name;
19673
+ if (name15 == null) {
19674
+ continue;
19675
+ }
19676
+ pendingToolCalls.delete(index);
19677
+ if (pending.id == null) {
19678
+ throw new InvalidResponseDataError({
19679
+ data: toolCallDelta,
19680
+ message: `Expected 'id' to be a string.`
19681
+ });
19682
+ }
19683
+ controller.enqueue({
19684
+ type: "tool-input-start",
19685
+ id: pending.id,
19686
+ toolName: name15
19687
+ });
19688
+ toolCalls[index] = {
19689
+ id: pending.id,
19690
+ type: "function",
19691
+ function: {
19692
+ name: name15,
19693
+ arguments: pending.bufferedArguments
19694
+ },
19695
+ hasFinished: false,
19696
+ thoughtSignature: pending.thoughtSignature
19697
+ };
19698
+ } else {
19699
+ if (toolCallDelta.id == null) {
19700
+ throw new InvalidResponseDataError({
19701
+ data: toolCallDelta,
19702
+ message: `Expected 'id' to be a string.`
19703
+ });
19704
+ }
19705
+ if (((_l = toolCallDelta.function) == null ? void 0 : _l.name) == null) {
19706
+ throw new InvalidResponseDataError({
19707
+ data: toolCallDelta,
19708
+ message: `Expected 'function.name' to be a string.`
19709
+ });
19710
+ }
19711
+ controller.enqueue({
19712
+ type: "tool-input-start",
19713
+ id: toolCallDelta.id,
19714
+ toolName: toolCallDelta.function.name
19715
+ });
19716
+ toolCalls[index] = {
19717
+ id: toolCallDelta.id,
19718
+ type: "function",
19719
+ function: {
19720
+ name: toolCallDelta.function.name,
19721
+ arguments: (_m = toolCallDelta.function.arguments) != null ? _m : ""
19722
+ },
19723
+ hasFinished: false,
19724
+ thoughtSignature: (_p = (_o = (_n = toolCallDelta.extra_content) == null ? void 0 : _n.google) == null ? void 0 : _o.thought_signature) != null ? _p : void 0
19725
+ };
19726
+ }
19727
+ const toolCall2 = toolCalls[index];
19728
+ if (((_q = toolCall2.function) == null ? void 0 : _q.name) != null && ((_r = toolCall2.function) == null ? void 0 : _r.arguments) != null) {
19729
+ if (toolCall2.function.arguments.length > 0) {
19730
+ controller.enqueue({
19731
+ type: "tool-input-delta",
19732
+ id: toolCall2.id,
19733
+ delta: toolCall2.function.arguments
19734
+ });
19735
+ }
19736
+ }
19737
+ continue;
19738
+ }
19739
+ const toolCall = toolCalls[index];
19740
+ if (toolCall.hasFinished) {
19741
+ continue;
19742
+ }
19743
+ if (((_s = toolCallDelta.function) == null ? void 0 : _s.arguments) != null) {
19744
+ toolCall.function.arguments += (_u = (_t = toolCallDelta.function) == null ? void 0 : _t.arguments) != null ? _u : "";
19745
+ }
19746
+ controller.enqueue({
19747
+ type: "tool-input-delta",
19748
+ id: toolCall.id,
19749
+ delta: (_v = toolCallDelta.function.arguments) != null ? _v : ""
19750
+ });
19751
+ }
19752
+ }
19753
+ },
19754
+ flush(controller) {
19755
+ var _a22, _b16, _c, _d, _e;
19756
+ if (isActiveReasoning) {
19757
+ controller.enqueue({ type: "reasoning-end", id: "reasoning-0" });
19758
+ }
19759
+ if (isActiveText) {
19760
+ controller.enqueue({ type: "text-end", id: "txt-0" });
19761
+ }
19762
+ for (const [index, pending] of pendingToolCalls) {
19763
+ throw new InvalidResponseDataError({
19764
+ data: {
19765
+ index,
19766
+ id: pending.id,
19767
+ function: { arguments: pending.bufferedArguments }
19768
+ },
19769
+ message: `Expected 'function.name' to be a string.`
19770
+ });
19771
+ }
19772
+ for (const toolCall of toolCalls.filter(
19773
+ (toolCall2) => !toolCall2.hasFinished
19774
+ )) {
19775
+ controller.enqueue({
19776
+ type: "tool-input-end",
19777
+ id: toolCall.id
19778
+ });
19779
+ controller.enqueue({
19780
+ type: "tool-call",
19781
+ toolCallId: (_a22 = toolCall.id) != null ? _a22 : generateId(),
19782
+ toolName: toolCall.function.name,
19783
+ input: toolCall.function.arguments,
19784
+ ...toolCall.thoughtSignature ? {
19785
+ providerMetadata: {
19786
+ [providerOptionsName]: {
19787
+ thoughtSignature: toolCall.thoughtSignature
19788
+ }
19789
+ }
19790
+ } : {}
19791
+ });
19792
+ }
19793
+ if (finishReason == null) {
19794
+ finishReason = { unified: "error", raw: void 0 };
19795
+ controller.enqueue({
19796
+ type: "error",
19797
+ error: new InvalidResponseDataError({
19798
+ data: void 0,
19799
+ message: "Response stream ended without a finish reason."
19800
+ })
19801
+ });
19802
+ }
19803
+ const providerMetadata = {
19804
+ [providerOptionsName]: {},
19805
+ ...metadataExtractor == null ? void 0 : metadataExtractor.buildMetadata()
19806
+ };
19807
+ if (((_b16 = usage == null ? void 0 : usage.completion_tokens_details) == null ? void 0 : _b16.accepted_prediction_tokens) != null) {
19808
+ providerMetadata[providerOptionsName].acceptedPredictionTokens = (_c = usage == null ? void 0 : usage.completion_tokens_details) == null ? void 0 : _c.accepted_prediction_tokens;
19809
+ }
19810
+ if (((_d = usage == null ? void 0 : usage.completion_tokens_details) == null ? void 0 : _d.rejected_prediction_tokens) != null) {
19811
+ providerMetadata[providerOptionsName].rejectedPredictionTokens = (_e = usage == null ? void 0 : usage.completion_tokens_details) == null ? void 0 : _e.rejected_prediction_tokens;
19812
+ }
19813
+ controller.enqueue({
19814
+ type: "finish",
19815
+ finishReason,
19816
+ usage: convertUsage(usage),
19817
+ providerMetadata
19818
+ });
19819
+ }
19820
+ })
19821
+ ),
19822
+ request: { body },
19823
+ response: { headers: responseHeaders }
19824
+ };
19825
+ }
19826
+ };
19827
+ openaiCompatibleTokenUsageSchema = external_exports.looseObject({
19828
+ prompt_tokens: external_exports.number().nullish(),
19829
+ completion_tokens: external_exports.number().nullish(),
19830
+ total_tokens: external_exports.number().nullish(),
19831
+ prompt_tokens_details: external_exports.looseObject({
19832
+ cached_tokens: external_exports.number().nullish()
19833
+ }).nullish(),
19834
+ completion_tokens_details: external_exports.looseObject({
19835
+ reasoning_tokens: external_exports.number().nullish(),
19836
+ accepted_prediction_tokens: external_exports.number().nullish(),
19837
+ rejected_prediction_tokens: external_exports.number().nullish()
19838
+ }).nullish()
19839
+ }).nullish();
19840
+ openAICompatibleContentSchema = external_exports.union([
19841
+ external_exports.string(),
19842
+ external_exports.array(
19843
+ external_exports.looseObject({
19844
+ type: external_exports.string()
19845
+ })
19846
+ )
19847
+ ]).nullish();
19848
+ OpenAICompatibleChatResponseSchema = external_exports.looseObject({
19849
+ id: external_exports.string().nullish(),
19850
+ created: external_exports.number().nullish(),
19851
+ model: external_exports.string().nullish(),
19852
+ choices: external_exports.array(
19853
+ external_exports.object({
19854
+ message: external_exports.object({
19855
+ role: external_exports.literal("assistant").nullish(),
19856
+ content: openAICompatibleContentSchema,
19857
+ reasoning_content: external_exports.string().nullish(),
19858
+ reasoning: external_exports.string().nullish(),
19859
+ tool_calls: external_exports.array(
19860
+ external_exports.object({
19861
+ id: external_exports.string().nullish(),
19862
+ function: external_exports.object({
19863
+ name: external_exports.string(),
19864
+ arguments: external_exports.string()
19865
+ }),
19866
+ // Support for Google Gemini thought signatures via OpenAI compatibility
19867
+ extra_content: external_exports.object({
19868
+ google: external_exports.object({
19869
+ thought_signature: external_exports.string().nullish()
19870
+ }).nullish()
19871
+ }).nullish()
19872
+ })
19873
+ ).nullish()
19874
+ }),
19875
+ finish_reason: external_exports.string().nullish()
19876
+ })
19877
+ ),
19878
+ usage: openaiCompatibleTokenUsageSchema
19879
+ });
19880
+ chunkBaseSchema = external_exports.looseObject({
19881
+ id: external_exports.string().nullish(),
19882
+ created: external_exports.number().nullish(),
19883
+ model: external_exports.string().nullish(),
19884
+ choices: external_exports.array(
19885
+ external_exports.object({
19886
+ delta: external_exports.object({
19887
+ role: external_exports.enum(["assistant", ""]).nullish(),
19888
+ content: openAICompatibleContentSchema,
19889
+ // Most openai-compatible models set `reasoning_content`, but some
19890
+ // providers serving `gpt-oss` set `reasoning`. See #7866
19891
+ reasoning_content: external_exports.string().nullish(),
19892
+ reasoning: external_exports.string().nullish(),
19893
+ tool_calls: external_exports.array(
19894
+ external_exports.object({
19895
+ index: external_exports.number().nullish(),
19896
+ //google does not send index
19897
+ id: external_exports.string().nullish(),
19898
+ function: external_exports.object({
19899
+ name: external_exports.string().nullish(),
19900
+ arguments: external_exports.string().nullish()
19901
+ }),
19902
+ // Support for Google Gemini thought signatures via OpenAI compatibility
19903
+ extra_content: external_exports.object({
19904
+ google: external_exports.object({
19905
+ thought_signature: external_exports.string().nullish()
19906
+ }).nullish()
19907
+ }).nullish()
19908
+ })
19909
+ ).nullish()
19910
+ }).nullish(),
19911
+ finish_reason: external_exports.string().nullish()
19912
+ })
19913
+ ),
19914
+ usage: openaiCompatibleTokenUsageSchema
19915
+ });
19916
+ createOpenAICompatibleChatChunkSchema = (errorSchema) => external_exports.union([chunkBaseSchema, errorSchema]);
19917
+ openaiCompatibleLanguageModelCompletionOptions = external_exports.object({
19918
+ /**
19919
+ * Echo back the prompt in addition to the completion.
19920
+ */
19921
+ echo: external_exports.boolean().optional(),
19922
+ /**
19923
+ * Modify the likelihood of specified tokens appearing in the completion.
19924
+ *
19925
+ * Accepts a JSON object that maps tokens (specified by their token ID in
19926
+ * the GPT tokenizer) to an associated bias value from -100 to 100.
19927
+ */
19928
+ logitBias: external_exports.record(external_exports.string(), external_exports.number()).optional(),
19929
+ /**
19930
+ * The suffix that comes after a completion of inserted text.
19931
+ */
19932
+ suffix: external_exports.string().optional(),
19933
+ /**
19934
+ * A unique identifier representing your end-user, which can help providers to
19935
+ * monitor and detect abuse.
19936
+ */
19937
+ user: external_exports.string().optional()
19938
+ });
19939
+ OpenAICompatibleCompletionLanguageModel = class {
19940
+ // type inferred via constructor
19941
+ constructor(modelId, config2) {
19942
+ this.specificationVersion = "v3";
19943
+ var _a17;
19944
+ this.modelId = modelId;
19945
+ this.config = config2;
19946
+ const errorStructure = (_a17 = config2.errorStructure) != null ? _a17 : defaultOpenAICompatibleErrorStructure;
19947
+ this.chunkSchema = createOpenAICompatibleCompletionChunkSchema(
19948
+ errorStructure.errorSchema
19949
+ );
19950
+ this.failedResponseHandler = createJsonErrorResponseHandler(errorStructure);
19951
+ }
19952
+ get provider() {
19953
+ return this.config.provider;
19954
+ }
19955
+ get providerOptionsName() {
19956
+ return this.config.provider.split(".")[0].trim();
19957
+ }
19958
+ get supportedUrls() {
19959
+ var _a17, _b16, _c;
19960
+ return (_c = (_b16 = (_a17 = this.config).supportedUrls) == null ? void 0 : _b16.call(_a17)) != null ? _c : {};
19961
+ }
19962
+ async getArgs({
19963
+ prompt,
19964
+ maxOutputTokens,
19965
+ temperature,
19966
+ topP,
19967
+ topK,
19968
+ frequencyPenalty,
19969
+ presencePenalty,
19970
+ stopSequences: userStopSequences,
19971
+ responseFormat,
19972
+ seed,
19973
+ providerOptions,
19974
+ tools,
19975
+ toolChoice
19976
+ }) {
19977
+ var _a17, _b16;
19978
+ const warnings = [];
19979
+ const completionOptions = Object.assign(
19980
+ (_a17 = await parseProviderOptions({
19981
+ provider: this.providerOptionsName,
19982
+ providerOptions,
19983
+ schema: openaiCompatibleLanguageModelCompletionOptions
19984
+ })) != null ? _a17 : {},
19985
+ (_b16 = await parseProviderOptions({
19986
+ provider: toCamelCase(this.providerOptionsName),
19987
+ providerOptions,
19988
+ schema: openaiCompatibleLanguageModelCompletionOptions
19989
+ })) != null ? _b16 : {}
19990
+ );
19991
+ if (topK != null) {
19992
+ warnings.push({ type: "unsupported", feature: "topK" });
19993
+ }
19994
+ if (tools == null ? void 0 : tools.length) {
19995
+ warnings.push({ type: "unsupported", feature: "tools" });
19996
+ }
19997
+ if (toolChoice != null) {
19998
+ warnings.push({ type: "unsupported", feature: "toolChoice" });
19999
+ }
20000
+ if (responseFormat != null && responseFormat.type !== "text") {
20001
+ warnings.push({
20002
+ type: "unsupported",
20003
+ feature: "responseFormat",
20004
+ details: "JSON response format is not supported."
20005
+ });
20006
+ }
20007
+ const { prompt: completionPrompt, stopSequences } = convertToOpenAICompatibleCompletionPrompt({ prompt });
20008
+ const stop = [...stopSequences != null ? stopSequences : [], ...userStopSequences != null ? userStopSequences : []];
20009
+ return {
20010
+ args: {
20011
+ // model id:
20012
+ model: this.modelId,
20013
+ // model specific settings:
20014
+ echo: completionOptions.echo,
20015
+ logit_bias: completionOptions.logitBias,
20016
+ suffix: completionOptions.suffix,
20017
+ user: completionOptions.user,
20018
+ // standardized settings:
20019
+ max_tokens: maxOutputTokens,
20020
+ temperature,
20021
+ top_p: topP,
20022
+ frequency_penalty: frequencyPenalty,
20023
+ presence_penalty: presencePenalty,
20024
+ seed,
20025
+ ...providerOptions == null ? void 0 : providerOptions[this.providerOptionsName],
20026
+ ...providerOptions == null ? void 0 : providerOptions[toCamelCase(this.providerOptionsName)],
20027
+ // prompt:
20028
+ prompt: completionPrompt,
20029
+ // stop sequences:
20030
+ stop: stop.length > 0 ? stop : void 0
20031
+ },
20032
+ warnings
20033
+ };
20034
+ }
20035
+ async doGenerate(options) {
20036
+ const { args, warnings } = await this.getArgs(options);
20037
+ const {
20038
+ responseHeaders,
20039
+ value: response,
20040
+ rawValue: rawResponse
20041
+ } = await postJsonToApi({
20042
+ url: this.config.url({
20043
+ path: "/completions",
20044
+ modelId: this.modelId
20045
+ }),
20046
+ headers: combineHeaders(this.config.headers(), options.headers),
20047
+ body: args,
20048
+ failedResponseHandler: this.failedResponseHandler,
20049
+ successfulResponseHandler: createJsonResponseHandler(
20050
+ openaiCompatibleCompletionResponseSchema
20051
+ ),
20052
+ abortSignal: options.abortSignal,
20053
+ fetch: this.config.fetch
20054
+ });
20055
+ const choice = response.choices[0];
20056
+ const content = [];
20057
+ if (choice.text != null && choice.text.length > 0) {
20058
+ content.push({ type: "text", text: choice.text });
20059
+ }
20060
+ return {
20061
+ content,
20062
+ usage: convertOpenAICompatibleCompletionUsage(response.usage),
20063
+ finishReason: {
20064
+ unified: mapOpenAICompatibleFinishReason2(choice.finish_reason),
20065
+ raw: choice.finish_reason
20066
+ },
20067
+ request: { body: args },
20068
+ response: {
20069
+ ...getResponseMetadata2(response),
20070
+ headers: responseHeaders,
20071
+ body: rawResponse
20072
+ },
20073
+ warnings
20074
+ };
20075
+ }
20076
+ async doStream(options) {
20077
+ const { args, warnings } = await this.getArgs(options);
20078
+ const body = {
20079
+ ...args,
20080
+ stream: true,
20081
+ // only include stream_options when in strict compatibility mode:
20082
+ stream_options: this.config.includeUsage ? { include_usage: true } : void 0
20083
+ };
20084
+ const { responseHeaders, value: response } = await postJsonToApi({
20085
+ url: this.config.url({
20086
+ path: "/completions",
20087
+ modelId: this.modelId
20088
+ }),
20089
+ headers: combineHeaders(this.config.headers(), options.headers),
20090
+ body,
20091
+ failedResponseHandler: this.failedResponseHandler,
20092
+ successfulResponseHandler: createEventSourceResponseHandler(
20093
+ this.chunkSchema
20094
+ ),
20095
+ abortSignal: options.abortSignal,
20096
+ fetch: this.config.fetch
20097
+ });
20098
+ let finishReason = {
20099
+ unified: "other",
20100
+ raw: void 0
20101
+ };
20102
+ let usage = void 0;
20103
+ let isFirstChunk = true;
20104
+ return {
20105
+ stream: response.pipeThrough(
20106
+ new TransformStream({
20107
+ start(controller) {
20108
+ controller.enqueue({ type: "stream-start", warnings });
20109
+ },
20110
+ transform(chunk, controller) {
20111
+ var _a17;
20112
+ if (options.includeRawChunks) {
20113
+ controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
20114
+ }
20115
+ if (!chunk.success) {
20116
+ finishReason = { unified: "error", raw: void 0 };
20117
+ controller.enqueue({ type: "error", error: chunk.error });
20118
+ return;
20119
+ }
20120
+ const value = chunk.value;
20121
+ if ("error" in value) {
20122
+ finishReason = { unified: "error", raw: void 0 };
20123
+ controller.enqueue({ type: "error", error: value.error });
20124
+ return;
20125
+ }
20126
+ if (isFirstChunk) {
20127
+ isFirstChunk = false;
20128
+ controller.enqueue({
20129
+ type: "response-metadata",
20130
+ ...getResponseMetadata2(value)
20131
+ });
20132
+ controller.enqueue({
20133
+ type: "text-start",
20134
+ id: "0"
20135
+ });
20136
+ }
20137
+ if (value.usage != null) {
20138
+ usage = value.usage;
20139
+ }
20140
+ const choice = value.choices[0];
20141
+ if ((choice == null ? void 0 : choice.finish_reason) != null) {
20142
+ finishReason = {
20143
+ unified: mapOpenAICompatibleFinishReason2(choice.finish_reason),
20144
+ raw: (_a17 = choice.finish_reason) != null ? _a17 : void 0
20145
+ };
20146
+ }
20147
+ if ((choice == null ? void 0 : choice.text) != null) {
20148
+ controller.enqueue({
20149
+ type: "text-delta",
20150
+ id: "0",
20151
+ delta: choice.text
20152
+ });
20153
+ }
20154
+ },
20155
+ flush(controller) {
20156
+ if (!isFirstChunk) {
20157
+ controller.enqueue({ type: "text-end", id: "0" });
20158
+ }
20159
+ controller.enqueue({
20160
+ type: "finish",
20161
+ finishReason,
20162
+ usage: convertOpenAICompatibleCompletionUsage(usage)
20163
+ });
20164
+ }
20165
+ })
20166
+ ),
20167
+ request: { body },
20168
+ response: { headers: responseHeaders }
20169
+ };
20170
+ }
20171
+ };
20172
+ usageSchema = external_exports.looseObject({
20173
+ prompt_tokens: external_exports.number(),
20174
+ completion_tokens: external_exports.number(),
20175
+ total_tokens: external_exports.number()
20176
+ });
20177
+ openaiCompatibleCompletionResponseSchema = external_exports.object({
20178
+ id: external_exports.string().nullish(),
20179
+ created: external_exports.number().nullish(),
20180
+ model: external_exports.string().nullish(),
20181
+ choices: external_exports.array(
20182
+ external_exports.object({
20183
+ text: external_exports.string(),
20184
+ finish_reason: external_exports.string()
20185
+ })
20186
+ ),
20187
+ usage: usageSchema.nullish()
20188
+ });
20189
+ createOpenAICompatibleCompletionChunkSchema = (errorSchema) => external_exports.union([
20190
+ external_exports.object({
20191
+ id: external_exports.string().nullish(),
20192
+ created: external_exports.number().nullish(),
20193
+ model: external_exports.string().nullish(),
20194
+ choices: external_exports.array(
20195
+ external_exports.object({
20196
+ text: external_exports.string(),
20197
+ finish_reason: external_exports.string().nullish(),
20198
+ index: external_exports.number()
20199
+ })
20200
+ ),
20201
+ usage: usageSchema.nullish()
20202
+ }),
20203
+ errorSchema
20204
+ ]);
20205
+ openaiCompatibleEmbeddingModelOptions = external_exports.object({
20206
+ /**
20207
+ * The number of dimensions the resulting output embeddings should have.
20208
+ * Only supported in text-embedding-3 and later models.
20209
+ */
20210
+ dimensions: external_exports.number().optional(),
20211
+ /**
20212
+ * A unique identifier representing your end-user, which can help providers to
20213
+ * monitor and detect abuse.
20214
+ */
20215
+ user: external_exports.string().optional()
20216
+ });
20217
+ OpenAICompatibleEmbeddingModel = class {
20218
+ constructor(modelId, config2) {
20219
+ this.specificationVersion = "v3";
20220
+ this.modelId = modelId;
20221
+ this.config = config2;
20222
+ }
20223
+ get provider() {
20224
+ return this.config.provider;
20225
+ }
20226
+ get maxEmbeddingsPerCall() {
20227
+ var _a17;
20228
+ return (_a17 = this.config.maxEmbeddingsPerCall) != null ? _a17 : 2048;
20229
+ }
20230
+ get supportsParallelCalls() {
20231
+ var _a17;
20232
+ return (_a17 = this.config.supportsParallelCalls) != null ? _a17 : true;
20233
+ }
20234
+ get providerOptionsName() {
20235
+ return this.config.provider.split(".")[0].trim();
20236
+ }
20237
+ async doEmbed({
20238
+ values: values2,
20239
+ headers,
20240
+ abortSignal,
20241
+ providerOptions
20242
+ }) {
20243
+ var _a17, _b16, _c;
20244
+ const warnings = [];
20245
+ const deprecatedOptions = await parseProviderOptions({
20246
+ provider: "openai-compatible",
20247
+ providerOptions,
20248
+ schema: openaiCompatibleEmbeddingModelOptions
20249
+ });
20250
+ if (deprecatedOptions != null) {
20251
+ warnings.push({
20252
+ type: "other",
20253
+ message: `The 'openai-compatible' key in providerOptions is deprecated. Use 'openaiCompatible' instead.`
20254
+ });
20255
+ }
20256
+ const compatibleOptions = Object.assign(
20257
+ deprecatedOptions != null ? deprecatedOptions : {},
20258
+ (_a17 = await parseProviderOptions({
20259
+ provider: "openaiCompatible",
20260
+ providerOptions,
20261
+ schema: openaiCompatibleEmbeddingModelOptions
20262
+ })) != null ? _a17 : {},
20263
+ (_b16 = await parseProviderOptions({
20264
+ provider: this.providerOptionsName,
20265
+ providerOptions,
20266
+ schema: openaiCompatibleEmbeddingModelOptions
20267
+ })) != null ? _b16 : {}
20268
+ );
20269
+ if (values2.length > this.maxEmbeddingsPerCall) {
20270
+ throw new TooManyEmbeddingValuesForCallError({
20271
+ provider: this.provider,
20272
+ modelId: this.modelId,
20273
+ maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,
20274
+ values: values2
20275
+ });
20276
+ }
20277
+ const {
20278
+ responseHeaders,
20279
+ value: response,
20280
+ rawValue
20281
+ } = await postJsonToApi({
20282
+ url: this.config.url({
20283
+ path: "/embeddings",
20284
+ modelId: this.modelId
20285
+ }),
20286
+ headers: combineHeaders(this.config.headers(), headers),
20287
+ body: {
20288
+ model: this.modelId,
20289
+ input: values2,
20290
+ encoding_format: "float",
20291
+ dimensions: compatibleOptions.dimensions,
20292
+ user: compatibleOptions.user
20293
+ },
20294
+ failedResponseHandler: createJsonErrorResponseHandler(
20295
+ (_c = this.config.errorStructure) != null ? _c : defaultOpenAICompatibleErrorStructure
20296
+ ),
20297
+ successfulResponseHandler: createJsonResponseHandler(
20298
+ openaiTextEmbeddingResponseSchema
20299
+ ),
20300
+ abortSignal,
20301
+ fetch: this.config.fetch
20302
+ });
20303
+ return {
20304
+ warnings,
20305
+ embeddings: response.data.map((item) => item.embedding),
20306
+ usage: response.usage ? { tokens: response.usage.prompt_tokens } : void 0,
20307
+ providerMetadata: response.providerMetadata,
20308
+ response: { headers: responseHeaders, body: rawValue }
20309
+ };
20310
+ }
20311
+ };
20312
+ openaiTextEmbeddingResponseSchema = external_exports.object({
20313
+ data: external_exports.array(external_exports.object({ embedding: external_exports.array(external_exports.number()) })),
20314
+ usage: external_exports.object({ prompt_tokens: external_exports.number() }).nullish(),
20315
+ providerMetadata: external_exports.record(external_exports.string(), external_exports.record(external_exports.string(), external_exports.any())).optional()
20316
+ });
20317
+ OpenAICompatibleImageModel = class {
20318
+ constructor(modelId, config2) {
20319
+ this.modelId = modelId;
20320
+ this.config = config2;
20321
+ this.specificationVersion = "v3";
20322
+ this.maxImagesPerCall = 10;
20323
+ }
20324
+ get provider() {
20325
+ return this.config.provider;
20326
+ }
20327
+ /**
20328
+ * The provider options key used to extract provider-specific options.
20329
+ */
20330
+ get providerOptionsKey() {
20331
+ return this.config.provider.split(".")[0].trim();
20332
+ }
20333
+ // TODO: deprecate non-camelCase keys and remove in future major version
20334
+ getArgs(providerOptions) {
20335
+ return {
20336
+ ...providerOptions[this.providerOptionsKey],
20337
+ ...providerOptions[toCamelCase(this.providerOptionsKey)]
20338
+ };
20339
+ }
20340
+ async doGenerate({
20341
+ prompt,
20342
+ n,
20343
+ size,
20344
+ aspectRatio,
20345
+ seed,
20346
+ providerOptions,
20347
+ headers,
20348
+ abortSignal,
20349
+ files,
20350
+ mask
20351
+ }) {
20352
+ var _a17, _b16, _c, _d, _e;
20353
+ const warnings = [];
20354
+ if (aspectRatio != null) {
20355
+ warnings.push({
20356
+ type: "unsupported",
20357
+ feature: "aspectRatio",
20358
+ details: "This model does not support aspect ratio. Use `size` instead."
20359
+ });
20360
+ }
20361
+ if (seed != null) {
20362
+ warnings.push({ type: "unsupported", feature: "seed" });
20363
+ }
20364
+ const currentDate = (_c = (_b16 = (_a17 = this.config._internal) == null ? void 0 : _a17.currentDate) == null ? void 0 : _b16.call(_a17)) != null ? _c : /* @__PURE__ */ new Date();
20365
+ const args = this.getArgs(providerOptions);
20366
+ if (files != null && files.length > 0) {
20367
+ const { value: response2, responseHeaders: responseHeaders2 } = await postFormDataToApi({
20368
+ url: this.config.url({
20369
+ path: "/images/edits",
20370
+ modelId: this.modelId
20371
+ }),
20372
+ headers: combineHeaders(this.config.headers(), headers),
20373
+ formData: convertToFormData({
20374
+ model: this.modelId,
20375
+ prompt,
20376
+ image: await Promise.all(files.map((file2) => fileToBlob(file2))),
20377
+ mask: mask != null ? await fileToBlob(mask) : void 0,
20378
+ n,
20379
+ size,
20380
+ ...args
20381
+ }),
20382
+ failedResponseHandler: createJsonErrorResponseHandler(
20383
+ (_d = this.config.errorStructure) != null ? _d : defaultOpenAICompatibleErrorStructure
20384
+ ),
20385
+ successfulResponseHandler: createJsonResponseHandler(
20386
+ openaiCompatibleImageResponseSchema
20387
+ ),
20388
+ abortSignal,
20389
+ fetch: this.config.fetch
20390
+ });
20391
+ return {
20392
+ images: response2.data.map((item) => item.b64_json),
20393
+ warnings,
20394
+ response: {
20395
+ timestamp: currentDate,
20396
+ modelId: this.modelId,
20397
+ headers: responseHeaders2
20398
+ }
20399
+ };
20400
+ }
20401
+ const { value: response, responseHeaders } = await postJsonToApi({
20402
+ url: this.config.url({
20403
+ path: "/images/generations",
20404
+ modelId: this.modelId
20405
+ }),
20406
+ headers: combineHeaders(this.config.headers(), headers),
20407
+ body: {
20408
+ model: this.modelId,
20409
+ prompt,
20410
+ n,
20411
+ size,
20412
+ ...args,
20413
+ response_format: "b64_json"
20414
+ },
20415
+ failedResponseHandler: createJsonErrorResponseHandler(
20416
+ (_e = this.config.errorStructure) != null ? _e : defaultOpenAICompatibleErrorStructure
20417
+ ),
20418
+ successfulResponseHandler: createJsonResponseHandler(
20419
+ openaiCompatibleImageResponseSchema
20420
+ ),
20421
+ abortSignal,
20422
+ fetch: this.config.fetch
20423
+ });
20424
+ return {
20425
+ images: response.data.map((item) => item.b64_json),
20426
+ warnings,
20427
+ response: {
20428
+ timestamp: currentDate,
20429
+ modelId: this.modelId,
20430
+ headers: responseHeaders
20431
+ }
20432
+ };
20433
+ }
20434
+ };
20435
+ openaiCompatibleImageResponseSchema = external_exports.object({
20436
+ data: external_exports.array(external_exports.object({ b64_json: external_exports.string() }))
20437
+ });
20438
+ VERSION2 = true ? "2.0.74" : "0.0.0-test";
20439
+ }
20440
+ });
20441
+
18028
20442
  // node_modules/@smithy/core/dist-es/submodules/serde/is-array-buffer/is-array-buffer.js
18029
20443
  var isArrayBuffer;
18030
20444
  var init_is_array_buffer = __esm({
@@ -22662,16 +25076,17 @@ var init_aws4fetch_esm = __esm({
22662
25076
 
22663
25077
  // node_modules/@ai-sdk/amazon-bedrock/dist/index.mjs
22664
25078
  function supportsStrictTools(modelId) {
22665
- return !rejectsNewerSchemaFields(modelId);
25079
+ return !matchesModel(modelId, MODELS_WITHOUT_STRICT_TOOL_SUPPORT);
22666
25080
  }
22667
25081
  function supportsNativeStructuredOutput(modelId) {
22668
- return !rejectsNewerSchemaFields(modelId);
22669
- }
22670
- function rejectsNewerSchemaFields(modelId) {
22671
- return MODELS_REJECTING_NEWER_SCHEMA_FIELDS.some(
22672
- (model) => modelId.includes(model)
25082
+ return !matchesModel(
25083
+ modelId,
25084
+ MODELS_WITHOUT_RELIABLE_NATIVE_STRUCTURED_OUTPUT
22673
25085
  );
22674
25086
  }
25087
+ function matchesModel(modelId, models) {
25088
+ return models.some((model) => modelId.includes(model));
25089
+ }
22675
25090
  function createBedrockEventStreamDecoder(body, processEvent) {
22676
25091
  const codec = new import_eventstream_codec.EventStreamCodec(import_util_utf8.toUtf8, import_util_utf8.fromUtf8);
22677
25092
  let buffer = new Uint8Array(0);
@@ -22716,7 +25131,7 @@ function createBedrockEventStreamDecoder(body, processEvent) {
22716
25131
  })
22717
25132
  );
22718
25133
  }
22719
- async function prepareTools({
25134
+ async function prepareTools2({
22720
25135
  tools,
22721
25136
  toolChoice,
22722
25137
  modelId,
@@ -23369,6 +25784,9 @@ function mapBedrockFinishReason(finishReason, isJsonResponseFromTool) {
23369
25784
  return "other";
23370
25785
  }
23371
25786
  }
25787
+ function isJsonResponseToolName(name15) {
25788
+ return name15 === "json" || name15 === "json<|channel|>commentary";
25789
+ }
23372
25790
  function isCohereEmbeddingModel(modelId) {
23373
25791
  return modelId.includes("cohere.embed-");
23374
25792
  }
@@ -23400,7 +25818,7 @@ function createSigV4FetchFunction(getCredentials, fetch2, service = "bedrock") {
23400
25818
  );
23401
25819
  const headersWithUserAgent = withUserAgentSuffix(
23402
25820
  originalHeaders,
23403
- `ai-sdk/amazon-bedrock/${VERSION2}`,
25821
+ `ai-sdk/amazon-bedrock/${VERSION3}`,
23404
25822
  getRuntimeEnvironmentUserAgent()
23405
25823
  );
23406
25824
  let effectiveBody = (_a17 = init == null ? void 0 : init.body) != null ? _a17 : void 0;
@@ -23458,7 +25876,7 @@ function createApiKeyFetchFunction(apiKey, fetch2) {
23458
25876
  const originalHeaders = normalizeHeaders(init == null ? void 0 : init.headers);
23459
25877
  const headersWithUserAgent = withUserAgentSuffix(
23460
25878
  originalHeaders,
23461
- `ai-sdk/amazon-bedrock/${VERSION2}`,
25879
+ `ai-sdk/amazon-bedrock/${VERSION3}`,
23462
25880
  getRuntimeEnvironmentUserAgent()
23463
25881
  );
23464
25882
  const finalHeaders = combineHeaders(headersWithUserAgent, {
@@ -23540,7 +25958,7 @@ Original error: ${errorMessage}`
23540
25958
  const getHeaders = () => {
23541
25959
  var _a17;
23542
25960
  const baseHeaders = (_a17 = options.headers) != null ? _a17 : {};
23543
- return withUserAgentSuffix(baseHeaders, `ai-sdk/amazon-bedrock/${VERSION2}`);
25961
+ return withUserAgentSuffix(baseHeaders, `ai-sdk/amazon-bedrock/${VERSION3}`);
23544
25962
  };
23545
25963
  const getBedrockRuntimeBaseUrl = () => {
23546
25964
  var _a17, _b16;
@@ -23613,38 +26031,38 @@ Original error: ${errorMessage}`
23613
26031
  provider.tools = import_internal.anthropicTools;
23614
26032
  return provider;
23615
26033
  }
23616
- var import_internal, import_internal2, import_eventstream_codec, import_util_utf8, import_internal3, BEDROCK_STOP_REASONS, BEDROCK_IMAGE_MIME_TYPES, BEDROCK_DOCUMENT_MIME_TYPES, bedrockFilePartProviderOptions, amazonBedrockLanguageModelOptions, MODELS_REJECTING_NEWER_SCHEMA_FIELDS, BedrockErrorSchema, createBedrockEventStreamResponseHandler, bedrockReasoningMetadataSchema, anthropicProviderOptions, BedrockChatLanguageModel, JsonObjectTextExtractor, BedrockStopReasonSchema, BedrockAdditionalModelResponseFieldsSchema, BedrockToolUseSchema, BedrockReasoningTextSchema, BedrockRedactedReasoningSchema, AmazonBedrockCacheDetailSchema, BedrockResponseSchema, BedrockStreamSchema, amazonBedrockEmbeddingModelOptionsSchema, BedrockEmbeddingModel, BedrockEmbeddingResponseSchema, modelMaxImagesPerCall, BedrockImageModel, bedrockImageResponseSchema, VERSION2, bedrockRerankingResponseSchema, amazonBedrockRerankingModelOptionsSchema, BedrockRerankingModel, bedrock;
23617
- var init_dist3 = __esm({
26034
+ var import_internal, import_internal2, import_eventstream_codec, import_util_utf8, import_internal3, BEDROCK_STOP_REASONS, BEDROCK_IMAGE_MIME_TYPES, BEDROCK_DOCUMENT_MIME_TYPES, bedrockFilePartProviderOptions, amazonBedrockLanguageModelOptions, MODELS_WITHOUT_STRICT_TOOL_SUPPORT, MODELS_WITHOUT_RELIABLE_NATIVE_STRUCTURED_OUTPUT, BedrockErrorSchema, createBedrockEventStreamResponseHandler, bedrockReasoningMetadataSchema, anthropicProviderOptions, BedrockChatLanguageModel, JsonObjectTextExtractor, BedrockStopReasonSchema, BedrockAdditionalModelResponseFieldsSchema, BedrockToolUseSchema, BedrockReasoningTextSchema, BedrockRedactedReasoningSchema, AmazonBedrockCacheDetailSchema, BedrockResponseSchema, BedrockStreamSchema, amazonBedrockEmbeddingModelOptionsSchema, BedrockEmbeddingModel, BedrockEmbeddingResponseSchema, modelMaxImagesPerCall, BedrockImageModel, bedrockImageResponseSchema, VERSION3, bedrockRerankingResponseSchema, amazonBedrockRerankingModelOptionsSchema, BedrockRerankingModel, bedrock;
26035
+ var init_dist5 = __esm({
23618
26036
  "node_modules/@ai-sdk/amazon-bedrock/dist/index.mjs"() {
23619
26037
  import_internal = require("@ai-sdk/anthropic/internal");
23620
- init_dist2();
23621
- init_dist2();
26038
+ init_dist3();
26039
+ init_dist3();
23622
26040
  import_internal2 = require("@ai-sdk/anthropic/internal");
23623
26041
  init_v4();
23624
26042
  init_v4();
23625
26043
  init_v4();
23626
26044
  init_dist();
23627
- init_dist2();
26045
+ init_dist3();
23628
26046
  import_eventstream_codec = __toESM(require_dist_cjs2(), 1);
23629
26047
  import_util_utf8 = __toESM(require_dist_cjs3(), 1);
23630
26048
  init_dist();
23631
- init_dist2();
26049
+ init_dist3();
23632
26050
  import_internal3 = require("@ai-sdk/anthropic/internal");
23633
26051
  init_dist();
23634
- init_dist2();
26052
+ init_dist3();
23635
26053
  init_v4();
23636
26054
  init_dist();
23637
- init_dist2();
26055
+ init_dist3();
23638
26056
  init_v4();
23639
26057
  init_v4();
23640
- init_dist2();
26058
+ init_dist3();
23641
26059
  init_v4();
23642
- init_dist2();
26060
+ init_dist3();
23643
26061
  init_aws4fetch_esm();
23644
- init_dist2();
23645
- init_dist2();
26062
+ init_dist3();
26063
+ init_dist3();
23646
26064
  init_v4();
23647
- init_dist2();
26065
+ init_dist3();
23648
26066
  init_v4();
23649
26067
  BEDROCK_STOP_REASONS = [
23650
26068
  "stop",
@@ -23688,6 +26106,14 @@ var init_dist3 = __esm({
23688
26106
  }).optional()
23689
26107
  });
23690
26108
  amazonBedrockLanguageModelOptions = external_exports.object({
26109
+ /**
26110
+ * Determines how structured outputs are generated for Anthropic models.
26111
+ *
26112
+ * - `outputFormat`: Use the native `output_config.format` parameter.
26113
+ * - `jsonTool`: Use a special 'json' tool to specify the structured output format.
26114
+ * - `auto`: Use `outputFormat` when supported, otherwise use `jsonTool` (default).
26115
+ */
26116
+ structuredOutputMode: external_exports.enum(["outputFormat", "jsonTool", "auto"]).optional(),
23691
26117
  /**
23692
26118
  * Additional inference parameters that the model supports,
23693
26119
  * beyond the base set of inference parameters that Converse
@@ -23719,13 +26145,18 @@ var init_dist3 = __esm({
23719
26145
  */
23720
26146
  serviceTier: external_exports.enum(["reserved", "priority", "default", "flex"]).optional()
23721
26147
  });
23722
- MODELS_REJECTING_NEWER_SCHEMA_FIELDS = [
26148
+ MODELS_WITHOUT_STRICT_TOOL_SUPPORT = [
23723
26149
  "claude-opus-4-7",
23724
26150
  "claude-opus-4-8",
23725
26151
  "claude-opus-5",
23726
26152
  "claude-fable-5",
23727
26153
  "claude-sonnet-5"
23728
26154
  ];
26155
+ MODELS_WITHOUT_RELIABLE_NATIVE_STRUCTURED_OUTPUT = [
26156
+ ...MODELS_WITHOUT_STRICT_TOOL_SUPPORT,
26157
+ "claude-sonnet-4-6",
26158
+ "claude-haiku-4-5"
26159
+ ];
23729
26160
  BedrockErrorSchema = external_exports.object({
23730
26161
  message: external_exports.string(),
23731
26162
  type: external_exports.string().nullish()
@@ -23776,7 +26207,8 @@ var init_dist3 = __esm({
23776
26207
  redactedContent: external_exports.string().optional()
23777
26208
  });
23778
26209
  anthropicProviderOptions = external_exports.object({
23779
- disableParallelToolUse: external_exports.boolean().optional()
26210
+ disableParallelToolUse: external_exports.boolean().optional(),
26211
+ structuredOutputMode: external_exports.enum(["outputFormat", "jsonTool", "auto"]).optional()
23780
26212
  });
23781
26213
  BedrockChatLanguageModel = class {
23782
26214
  constructor(modelId, config2) {
@@ -23803,7 +26235,7 @@ var init_dist3 = __esm({
23803
26235
  toolChoice,
23804
26236
  providerOptions
23805
26237
  }) {
23806
- var _a17, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
26238
+ var _a17, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
23807
26239
  const bedrockOptions = (_a17 = await parseProviderOptions({
23808
26240
  provider: "bedrock",
23809
26241
  providerOptions,
@@ -23861,15 +26293,33 @@ var init_dist3 = __esm({
23861
26293
  const isOpenAIGptOssModel = (_d = openAIModelId == null ? void 0 : openAIModelId.startsWith("openai.gpt-oss-")) != null ? _d : false;
23862
26294
  const isThinkingEnabled = ((_e = bedrockOptions.reasoningConfig) == null ? void 0 : _e.type) === "enabled" || ((_f = bedrockOptions.reasoningConfig) == null ? void 0 : _f.type) === "adaptive";
23863
26295
  const { supportsStructuredOutput: modelSupportsStructuredOutput } = (0, import_internal2.getModelCapabilities)(this.modelId);
23864
- const useNativeStructuredOutput = isAnthropicModel && supportsNativeStructuredOutput(this.modelId) && (modelSupportsStructuredOutput || isThinkingEnabled) && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null;
23865
- const useJsonInstructionForStructuredOutput = isAnthropicModel && !supportsStrictTools(this.modelId) && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && tools != null && tools.length > 0;
26296
+ const structuredOutputMode = (_h = (_g = bedrockOptions.structuredOutputMode) != null ? _g : anthropicOptions == null ? void 0 : anthropicOptions.structuredOutputMode) != null ? _h : "auto";
26297
+ if (structuredOutputMode === "jsonTool") {
26298
+ const additionalModelRequestFields = {
26299
+ ...bedrockOptions.additionalModelRequestFields
26300
+ };
26301
+ const outputConfig = additionalModelRequestFields.output_config;
26302
+ if (outputConfig != null && typeof outputConfig === "object" && !Array.isArray(outputConfig)) {
26303
+ const outputConfigWithoutFormat = { ...outputConfig };
26304
+ delete outputConfigWithoutFormat.format;
26305
+ if (Object.keys(outputConfigWithoutFormat).length > 0) {
26306
+ additionalModelRequestFields.output_config = outputConfigWithoutFormat;
26307
+ } else {
26308
+ delete additionalModelRequestFields.output_config;
26309
+ }
26310
+ bedrockOptions.additionalModelRequestFields = additionalModelRequestFields;
26311
+ }
26312
+ }
26313
+ const modelSupportsNativeStructuredOutput = supportsNativeStructuredOutput(this.modelId) && (modelSupportsStructuredOutput || isThinkingEnabled);
26314
+ const useNativeStructuredOutput = isAnthropicModel && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && (structuredOutputMode === "outputFormat" || structuredOutputMode === "auto" && modelSupportsNativeStructuredOutput);
26315
+ const useJsonInstructionForStructuredOutput = !useNativeStructuredOutput && structuredOutputMode !== "jsonTool" && isAnthropicModel && !supportsStrictTools(this.modelId) && (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && tools != null && tools.length > 0;
23866
26316
  const jsonResponseTool = (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && !useNativeStructuredOutput && !useJsonInstructionForStructuredOutput ? {
23867
26317
  type: "function",
23868
26318
  name: "json",
23869
26319
  description: "Respond with a JSON object.",
23870
26320
  inputSchema: responseFormat.schema
23871
26321
  } : void 0;
23872
- const { toolConfig, additionalTools, toolWarnings, betas } = await prepareTools({
26322
+ const { toolConfig, additionalTools, toolWarnings, betas } = await prepareTools2({
23873
26323
  tools: jsonResponseTool ? [...tools != null ? tools : [], jsonResponseTool] : tools,
23874
26324
  toolChoice: jsonResponseTool != null ? { type: "required" } : toolChoice,
23875
26325
  modelId: this.modelId,
@@ -23883,16 +26333,16 @@ var init_dist3 = __esm({
23883
26333
  };
23884
26334
  }
23885
26335
  if (betas.size > 0 || bedrockOptions.anthropicBeta) {
23886
- const existingBetas = (_g = bedrockOptions.anthropicBeta) != null ? _g : [];
26336
+ const existingBetas = (_i = bedrockOptions.anthropicBeta) != null ? _i : [];
23887
26337
  const mergedBetas = betas.size > 0 ? [...existingBetas, ...Array.from(betas)] : existingBetas;
23888
26338
  bedrockOptions.additionalModelRequestFields = {
23889
26339
  ...bedrockOptions.additionalModelRequestFields,
23890
26340
  anthropic_beta: mergedBetas
23891
26341
  };
23892
26342
  }
23893
- const thinkingType = (_h = bedrockOptions.reasoningConfig) == null ? void 0 : _h.type;
23894
- const thinkingBudget = thinkingType === "enabled" ? (_i = bedrockOptions.reasoningConfig) == null ? void 0 : _i.budgetTokens : void 0;
23895
- const thinkingDisplay = thinkingType === "adaptive" ? (_j = bedrockOptions.reasoningConfig) == null ? void 0 : _j.display : void 0;
26343
+ const thinkingType = (_j = bedrockOptions.reasoningConfig) == null ? void 0 : _j.type;
26344
+ const thinkingBudget = thinkingType === "enabled" ? (_k = bedrockOptions.reasoningConfig) == null ? void 0 : _k.budgetTokens : void 0;
26345
+ const thinkingDisplay = thinkingType === "adaptive" ? (_l = bedrockOptions.reasoningConfig) == null ? void 0 : _l.display : void 0;
23896
26346
  const isAnthropicThinkingEnabled = isAnthropicModel && isThinkingEnabled;
23897
26347
  const inferenceConfig = {
23898
26348
  ...maxOutputTokens != null && { maxTokens: maxOutputTokens },
@@ -23925,7 +26375,7 @@ var init_dist3 = __esm({
23925
26375
  };
23926
26376
  }
23927
26377
  } else if (!isAnthropicModel) {
23928
- if (((_k = bedrockOptions.reasoningConfig) == null ? void 0 : _k.budgetTokens) != null) {
26378
+ if (((_m = bedrockOptions.reasoningConfig) == null ? void 0 : _m.budgetTokens) != null) {
23929
26379
  warnings.push({
23930
26380
  type: "unsupported",
23931
26381
  feature: "budgetTokens",
@@ -23940,13 +26390,13 @@ var init_dist3 = __esm({
23940
26390
  });
23941
26391
  }
23942
26392
  }
23943
- const maxReasoningEffort = (_l = bedrockOptions.reasoningConfig) == null ? void 0 : _l.maxReasoningEffort;
26393
+ const maxReasoningEffort = (_n = bedrockOptions.reasoningConfig) == null ? void 0 : _n.maxReasoningEffort;
23944
26394
  if (maxReasoningEffort != null) {
23945
26395
  if (isAnthropicModel) {
23946
26396
  bedrockOptions.additionalModelRequestFields = {
23947
26397
  ...bedrockOptions.additionalModelRequestFields,
23948
26398
  output_config: {
23949
- ...(_m = bedrockOptions.additionalModelRequestFields) == null ? void 0 : _m.output_config,
26399
+ ...(_o = bedrockOptions.additionalModelRequestFields) == null ? void 0 : _o.output_config,
23950
26400
  effort: maxReasoningEffort
23951
26401
  }
23952
26402
  };
@@ -23957,7 +26407,7 @@ var init_dist3 = __esm({
23957
26407
  } : {
23958
26408
  ...bedrockOptions.additionalModelRequestFields,
23959
26409
  reasoning: {
23960
- ...(_n = bedrockOptions.additionalModelRequestFields) == null ? void 0 : _n.reasoning,
26410
+ ...(_p = bedrockOptions.additionalModelRequestFields) == null ? void 0 : _p.reasoning,
23961
26411
  effort: maxReasoningEffort
23962
26412
  }
23963
26413
  };
@@ -23976,7 +26426,7 @@ var init_dist3 = __esm({
23976
26426
  bedrockOptions.additionalModelRequestFields = {
23977
26427
  ...bedrockOptions.additionalModelRequestFields,
23978
26428
  output_config: {
23979
- ...(_o = bedrockOptions.additionalModelRequestFields) == null ? void 0 : _o.output_config,
26429
+ ...(_q = bedrockOptions.additionalModelRequestFields) == null ? void 0 : _q.output_config,
23980
26430
  format: {
23981
26431
  type: "json_schema",
23982
26432
  schema: (0, import_internal2.sanitizeJsonSchema)(responseFormat.schema)
@@ -24008,7 +26458,7 @@ var init_dist3 = __esm({
24008
26458
  details: "topK is not supported when thinking is enabled"
24009
26459
  });
24010
26460
  }
24011
- const hasAnyTools = ((_q = (_p = toolConfig.tools) == null ? void 0 : _p.length) != null ? _q : 0) > 0 || additionalTools;
26461
+ const hasAnyTools = ((_s = (_r = toolConfig.tools) == null ? void 0 : _r.length) != null ? _s : 0) > 0 || additionalTools;
24012
26462
  let filteredPrompt = prompt;
24013
26463
  if (!hasAnyTools) {
24014
26464
  const hasToolContent = prompt.some(
@@ -24050,6 +26500,7 @@ var init_dist3 = __esm({
24050
26500
  reasoningConfig: _,
24051
26501
  additionalModelRequestFields: __,
24052
26502
  serviceTier: ___,
26503
+ structuredOutputMode: ____,
24053
26504
  ...filteredBedrockOptions
24054
26505
  } = (providerOptions == null ? void 0 : providerOptions.bedrock) || {};
24055
26506
  const additionalModelResponseFieldPaths = isAnthropicModel ? ["/delta/stop_sequence"] : void 0;
@@ -24084,7 +26535,7 @@ var init_dist3 = __esm({
24084
26535
  return combineHeaders(await resolve(this.config.headers), headers);
24085
26536
  }
24086
26537
  async doGenerate(options) {
24087
- var _a17, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
26538
+ var _a17, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
24088
26539
  const {
24089
26540
  command: args,
24090
26541
  warnings,
@@ -24113,10 +26564,12 @@ var init_dist3 = __esm({
24113
26564
  let isJsonResponseFromTool = false;
24114
26565
  const jsonObjectTextExtractor = usesJsonInstruction ? new JsonObjectTextExtractor() : void 0;
24115
26566
  for (const part of response.output.message.content) {
24116
- if (part.text != null) {
26567
+ const citationText = (_b16 = (_a17 = part.citationsContent) == null ? void 0 : _a17.content) == null ? void 0 : _b16.map((generatedContent) => generatedContent.text).filter((text2) => text2 != null).join("");
26568
+ const text = (_c = part.text) != null ? _c : citationText ? citationText : void 0;
26569
+ if (text != null) {
24117
26570
  content.push({
24118
26571
  type: "text",
24119
- text: (_a17 = jsonObjectTextExtractor == null ? void 0 : jsonObjectTextExtractor.process(part.text)) != null ? _a17 : part.text
26572
+ text: (_d = jsonObjectTextExtractor == null ? void 0 : jsonObjectTextExtractor.process(text)) != null ? _d : text
24120
26573
  });
24121
26574
  }
24122
26575
  if (part.reasoningContent) {
@@ -24139,7 +26592,7 @@ var init_dist3 = __esm({
24139
26592
  text: "",
24140
26593
  providerMetadata: {
24141
26594
  bedrock: {
24142
- redactedData: (_b16 = part.reasoningContent.redactedReasoning.data) != null ? _b16 : ""
26595
+ redactedData: (_e = part.reasoningContent.redactedReasoning.data) != null ? _e : ""
24143
26596
  }
24144
26597
  }
24145
26598
  });
@@ -24156,7 +26609,7 @@ var init_dist3 = __esm({
24156
26609
  }
24157
26610
  }
24158
26611
  if (part.toolUse) {
24159
- const isJsonResponseTool = usesJsonResponseTool && part.toolUse.name === "json";
26612
+ const isJsonResponseTool = usesJsonResponseTool && isJsonResponseToolName(part.toolUse.name);
24160
26613
  if (isJsonResponseTool) {
24161
26614
  isJsonResponseFromTool = true;
24162
26615
  content.push({
@@ -24165,17 +26618,17 @@ var init_dist3 = __esm({
24165
26618
  });
24166
26619
  } else {
24167
26620
  const isMistral = isMistralModel(this.modelId);
24168
- const rawToolCallId = (_d = (_c = part.toolUse) == null ? void 0 : _c.toolUseId) != null ? _d : this.config.generateId();
26621
+ const rawToolCallId = (_g = (_f = part.toolUse) == null ? void 0 : _f.toolUseId) != null ? _g : this.config.generateId();
24169
26622
  content.push({
24170
26623
  type: "tool-call",
24171
26624
  toolCallId: normalizeToolCallId(rawToolCallId, isMistral),
24172
- toolName: (_f = (_e = part.toolUse) == null ? void 0 : _e.name) != null ? _f : `tool-${this.config.generateId()}`,
24173
- input: JSON.stringify((_h = (_g = part.toolUse) == null ? void 0 : _g.input) != null ? _h : {})
26625
+ toolName: (_i = (_h = part.toolUse) == null ? void 0 : _h.name) != null ? _i : `tool-${this.config.generateId()}`,
26626
+ input: JSON.stringify((_k = (_j = part.toolUse) == null ? void 0 : _j.input) != null ? _k : {})
24174
26627
  });
24175
26628
  }
24176
26629
  }
24177
26630
  }
24178
- const stopSequence = (_k = (_j = (_i = response.additionalModelResponseFields) == null ? void 0 : _i.delta) == null ? void 0 : _j.stop_sequence) != null ? _k : null;
26631
+ const stopSequence = (_n = (_m = (_l = response.additionalModelResponseFields) == null ? void 0 : _l.delta) == null ? void 0 : _m.stop_sequence) != null ? _n : null;
24179
26632
  const providerMetadata = response.trace || response.usage || response.performanceConfig || response.serviceTier || isJsonResponseFromTool || stopSequence ? {
24180
26633
  bedrock: {
24181
26634
  ...response.trace && typeof response.trace === "object" ? { trace: response.trace } : {},
@@ -24185,7 +26638,7 @@ var init_dist3 = __esm({
24185
26638
  ...response.serviceTier && {
24186
26639
  serviceTier: response.serviceTier
24187
26640
  },
24188
- ...(((_l = response.usage) == null ? void 0 : _l.cacheWriteInputTokens) != null || ((_m = response.usage) == null ? void 0 : _m.cacheDetails) != null) && {
26641
+ ...(((_o = response.usage) == null ? void 0 : _o.cacheWriteInputTokens) != null || ((_p = response.usage) == null ? void 0 : _p.cacheDetails) != null) && {
24189
26642
  usage: {
24190
26643
  ...response.usage.cacheWriteInputTokens != null && {
24191
26644
  cacheWriteInputTokens: response.usage.cacheWriteInputTokens
@@ -24206,11 +26659,11 @@ var init_dist3 = __esm({
24206
26659
  response.stopReason,
24207
26660
  isJsonResponseFromTool
24208
26661
  ),
24209
- raw: (_n = response.stopReason) != null ? _n : void 0
26662
+ raw: (_q = response.stopReason) != null ? _q : void 0
24210
26663
  },
24211
26664
  usage: convertBedrockUsage(response.usage),
24212
26665
  response: {
24213
- id: (_o = responseHeaders == null ? void 0 : responseHeaders["x-amzn-requestid"]) != null ? _o : void 0,
26666
+ id: (_r = responseHeaders == null ? void 0 : responseHeaders["x-amzn-requestid"]) != null ? _r : void 0,
24214
26667
  timestamp: (responseHeaders == null ? void 0 : responseHeaders["date"]) != null ? new Date(responseHeaders["date"]) : void 0,
24215
26668
  modelId: this.modelId,
24216
26669
  headers: responseHeaders
@@ -24491,7 +26944,7 @@ var init_dist3 = __esm({
24491
26944
  if (((_q = contentBlockStart == null ? void 0 : contentBlockStart.start) == null ? void 0 : _q.toolUse) != null) {
24492
26945
  const toolUse = contentBlockStart.start.toolUse;
24493
26946
  const blockIndex = contentBlockStart.contentBlockIndex;
24494
- const isJsonResponseTool = usesJsonResponseTool && toolUse.name === "json";
26947
+ const isJsonResponseTool = usesJsonResponseTool && isJsonResponseToolName(toolUse.name);
24495
26948
  const normalizedToolCallId = normalizeToolCallId(
24496
26949
  toolUse.toolUseId,
24497
26950
  isMistral
@@ -24651,6 +27104,13 @@ var init_dist3 = __esm({
24651
27104
  content: external_exports.array(
24652
27105
  external_exports.object({
24653
27106
  text: external_exports.string().nullish(),
27107
+ citationsContent: external_exports.object({
27108
+ content: external_exports.array(
27109
+ external_exports.object({
27110
+ text: external_exports.string().nullish()
27111
+ })
27112
+ ).nullish()
27113
+ }).nullish(),
24654
27114
  toolUse: BedrockToolUseSchema.nullish(),
24655
27115
  reasoningContent: external_exports.union([
24656
27116
  external_exports.object({
@@ -25113,7 +27573,7 @@ var init_dist3 = __esm({
25113
27573
  details: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
25114
27574
  preview: external_exports.unknown().optional()
25115
27575
  });
25116
- VERSION2 = true ? "4.0.167" : "0.0.0-test";
27576
+ VERSION3 = true ? "4.0.172" : "0.0.0-test";
25117
27577
  bedrockRerankingResponseSchema = lazySchema(
25118
27578
  () => zodSchema(
25119
27579
  external_exports.object({
@@ -25231,10 +27691,17 @@ function createProviderInstance(config2) {
25231
27691
  ...config2.baseURL && { baseURL: config2.baseURL }
25232
27692
  });
25233
27693
  case "openai": {
27694
+ if (config2.baseURL) {
27695
+ const provider = createOpenAICompatible({
27696
+ name: "openai-compatible",
27697
+ baseURL: config2.baseURL,
27698
+ apiKey: config2.apiKey
27699
+ });
27700
+ return provider;
27701
+ }
25234
27702
  const openai = (0, import_openai.createOpenAI)({
25235
27703
  compatibility: "strict",
25236
- apiKey: config2.apiKey,
25237
- ...config2.baseURL && { baseURL: config2.baseURL }
27704
+ apiKey: config2.apiKey
25238
27705
  });
25239
27706
  const chatProvider = (modelId, settings) => openai.chat(modelId, settings);
25240
27707
  chatProvider.chat = openai.chat.bind(openai);
@@ -25314,8 +27781,9 @@ var init_provider = __esm({
25314
27781
  "use strict";
25315
27782
  import_anthropic = require("@ai-sdk/anthropic");
25316
27783
  import_openai = require("@ai-sdk/openai");
27784
+ init_dist4();
25317
27785
  import_google = require("@ai-sdk/google");
25318
- init_dist3();
27786
+ init_dist5();
25319
27787
  DEFAULT_MODELS = {
25320
27788
  anthropic: "claude-sonnet-4-6",
25321
27789
  openai: "gpt-5.2",
@@ -33854,7 +36322,7 @@ var require_parser = __commonJS({
33854
36322
  /* LispType.None */
33855
36323
  });
33856
36324
  var lispTypes = /* @__PURE__ */ new Map();
33857
- var ParseError = class extends Error {
36325
+ var ParseError2 = class extends Error {
33858
36326
  constructor(message, code) {
33859
36327
  super(message + ": " + code.substring(0, 40));
33860
36328
  this.code = code;
@@ -34789,7 +37257,7 @@ var require_parser = __commonJS({
34789
37257
  lispTypes.get(type)?.(constants, type, part, res, expect, ctx);
34790
37258
  } catch (e) {
34791
37259
  if (topLevel && e instanceof SyntaxError) {
34792
- throw new ParseError(e.message, str);
37260
+ throw new ParseError2(e.message, str);
34793
37261
  }
34794
37262
  throw e;
34795
37263
  }
@@ -34801,7 +37269,7 @@ var require_parser = __commonJS({
34801
37269
  }
34802
37270
  if (!res && part.length) {
34803
37271
  if (topLevel) {
34804
- throw new ParseError(`Unexpected token after ${lastType}: ${part.char(0)}`, str);
37272
+ throw new ParseError2(`Unexpected token after ${lastType}: ${part.char(0)}`, str);
34805
37273
  }
34806
37274
  throw new SyntaxError(`Unexpected token after ${lastType}: ${part.char(0)}`);
34807
37275
  }
@@ -35096,7 +37564,7 @@ var require_parser = __commonJS({
35096
37564
  }
35097
37565
  function parse11(code, eager = false, expression = false) {
35098
37566
  if (typeof code !== "string")
35099
- throw new ParseError(`Cannot parse ${code}`, code);
37567
+ throw new ParseError2(`Cannot parse ${code}`, code);
35100
37568
  let str = " " + code;
35101
37569
  const constants = { strings: [], literals: [], regexes: [], eager };
35102
37570
  str = extractConstants(constants, str).str;
@@ -35106,7 +37574,7 @@ var require_parser = __commonJS({
35106
37574
  }
35107
37575
  return { tree: lispifyFunction(new utils.CodeString(str), constants, expression), constants };
35108
37576
  }
35109
- exports2.ParseError = ParseError;
37577
+ exports2.ParseError = ParseError2;
35110
37578
  exports2.checkRegex = checkRegex;
35111
37579
  exports2.default = parse11;
35112
37580
  exports2.expectTypes = expectTypes;
@@ -55320,12 +57788,12 @@ var init_apply = __esm({
55320
57788
  });
55321
57789
 
55322
57790
  // node_modules/lodash-es/noop.js
55323
- function noop() {
57791
+ function noop2() {
55324
57792
  }
55325
57793
  var noop_default;
55326
57794
  var init_noop = __esm({
55327
57795
  "node_modules/lodash-es/noop.js"() {
55328
- noop_default = noop;
57796
+ noop_default = noop2;
55329
57797
  }
55330
57798
  });
55331
57799
 
@@ -77274,9 +79742,9 @@ var require_arrayIncludesWith = __commonJS({
77274
79742
  // node_modules/lodash/noop.js
77275
79743
  var require_noop = __commonJS({
77276
79744
  "node_modules/lodash/noop.js"(exports2, module2) {
77277
- function noop2() {
79745
+ function noop3() {
77278
79746
  }
77279
- module2.exports = noop2;
79747
+ module2.exports = noop3;
77280
79748
  }
77281
79749
  });
77282
79750
 
@@ -77284,10 +79752,10 @@ var require_noop = __commonJS({
77284
79752
  var require_createSet = __commonJS({
77285
79753
  "node_modules/lodash/_createSet.js"(exports2, module2) {
77286
79754
  var Set3 = require_Set();
77287
- var noop2 = require_noop();
79755
+ var noop3 = require_noop();
77288
79756
  var setToArray2 = require_setToArray();
77289
79757
  var INFINITY5 = 1 / 0;
77290
- var createSet2 = !(Set3 && 1 / setToArray2(new Set3([, -0]))[1] == INFINITY5) ? noop2 : function(values2) {
79758
+ var createSet2 = !(Set3 && 1 / setToArray2(new Set3([, -0]))[1] == INFINITY5) ? noop3 : function(values2) {
77291
79759
  return new Set3(values2);
77292
79760
  };
77293
79761
  module2.exports = createSet2;
@@ -88404,7 +90872,8 @@ var require_utils2 = __commonJS({
88404
90872
  "node_modules/fast-uri/lib/utils.js"(exports2, module2) {
88405
90873
  "use strict";
88406
90874
  var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);
88407
- var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
90875
+ var isIPv42 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
90876
+ var isPort = RegExp.prototype.test.bind(/^\d*$/u);
88408
90877
  var isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);
88409
90878
  var isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);
88410
90879
  var isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u);
@@ -88504,7 +90973,7 @@ var require_utils2 = __commonJS({
88504
90973
  const part = parts[i];
88505
90974
  if (part === "") return void 0;
88506
90975
  if (part.indexOf(".") !== -1) {
88507
- if (i !== parts.length - 1 || compression !== -1 && right.length === 0 || !isIPv4(part)) return void 0;
90976
+ if (i !== parts.length - 1 || compression !== -1 && right.length === 0 || !isIPv42(part)) return void 0;
88508
90977
  hextetCount += 2;
88509
90978
  continue;
88510
90979
  }
@@ -88855,7 +91324,7 @@ var require_utils2 = __commonJS({
88855
91324
  }
88856
91325
  if (component.host !== void 0) {
88857
91326
  let host = component.host;
88858
- if (!isIPv4(host)) {
91327
+ if (!isIPv42(host)) {
88859
91328
  let ipV6res = normalizeIPv6(host);
88860
91329
  if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {
88861
91330
  host = normalizePercentEncoding(host, true);
@@ -88870,8 +91339,12 @@ var require_utils2 = __commonJS({
88870
91339
  uriTokens.push(host);
88871
91340
  }
88872
91341
  if (typeof component.port === "number" || typeof component.port === "string") {
91342
+ const port = String(component.port);
91343
+ if (!isPort(port)) {
91344
+ throw new TypeError("URI port is malformed.");
91345
+ }
88873
91346
  uriTokens.push(":");
88874
- uriTokens.push(String(component.port));
91347
+ uriTokens.push(port);
88875
91348
  }
88876
91349
  return uriTokens.length ? uriTokens.join("") : void 0;
88877
91350
  }
@@ -88888,7 +91361,7 @@ var require_utils2 = __commonJS({
88888
91361
  encodeFragment,
88889
91362
  escapePreservingEscapes,
88890
91363
  removeDotSegments,
88891
- isIPv4,
91364
+ isIPv4: isIPv42,
88892
91365
  isUUID,
88893
91366
  normalizeIPv6,
88894
91367
  stringArrayToHexStripped
@@ -89111,7 +91584,7 @@ var require_schemes = __commonJS({
89111
91584
  var require_fast_uri = __commonJS({
89112
91585
  "node_modules/fast-uri/index.js"(exports2, module2) {
89113
91586
  "use strict";
89114
- var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils2();
91587
+ var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4: isIPv42, nonSimpleDomain } = require_utils2();
89115
91588
  var { SCHEMES, getSchemeHandler } = require_schemes();
89116
91589
  var VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u;
89117
91590
  var MALFORMED_SCHEME_ERROR = "URI scheme is malformed.";
@@ -89156,7 +91629,7 @@ var require_fast_uri = __commonJS({
89156
91629
  const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true);
89157
91630
  const resolvedSchemeHandler = getSchemeHandler(options && options.scheme || resolved.scheme);
89158
91631
  const resolvedHost = resolved.host;
89159
- const resolvedHostIsIP = resolvedHost !== void 0 && resolvedHost !== "" && (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6);
91632
+ const resolvedHostIsIP = resolvedHost !== void 0 && resolvedHost !== "" && (isIPv42(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6);
89160
91633
  canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP);
89161
91634
  const encodedASCIIHost = resolvedHost && resolvedHost.indexOf("%") !== -1 && !/\P{ASCII}/u.test(resolvedHost);
89162
91635
  if (resolved.error && !encodedASCIIHost) {
@@ -89314,12 +91787,15 @@ var require_fast_uri = __commonJS({
89314
91787
  }
89315
91788
  return false;
89316
91789
  }
91790
+ function isIPLiteral(host) {
91791
+ return host[0] === "[" && host[host.length - 1] === "]";
91792
+ }
89317
91793
  function hasMalformedComponentPercentEncoding(matches) {
89318
91794
  const host = matches[4];
89319
- return hasMalformedPercentEncoding(matches[3]) || host !== void 0 && !(host[0] === "[" && host[host.length - 1] === "]") && hasMalformedPercentEncoding(host) || hasMalformedPercentEncoding(matches[6]) || hasMalformedPercentEncoding(matches[7]) || hasMalformedPercentEncoding(matches[8]);
91795
+ return hasMalformedPercentEncoding(matches[3]) || host !== void 0 && !isIPLiteral(host) && hasMalformedPercentEncoding(host) || hasMalformedPercentEncoding(matches[6]) || hasMalformedPercentEncoding(matches[7]) || hasMalformedPercentEncoding(matches[8]);
89320
91796
  }
89321
91797
  function canonicalizeHost(parsed, options, schemeHandler, isIP) {
89322
- if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport) && parsed.host && parsed.host[0] !== "[" && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) {
91798
+ if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport) && parsed.host && !isIPLiteral(parsed.host) && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) {
89323
91799
  try {
89324
91800
  parsed.host = new URL("http://" + parsed.host).hostname;
89325
91801
  } catch (e) {
@@ -89404,12 +91880,13 @@ var require_fast_uri = __commonJS({
89404
91880
  malformedAuthorityOrPort = true;
89405
91881
  }
89406
91882
  if (parsed.host) {
89407
- const ipv4result = isIPv4(parsed.host);
91883
+ const ipv4result = isIPv42(parsed.host);
89408
91884
  if (ipv4result === false) {
89409
- const bracketedIPLiteral = parsed.host[0] === "[" && parsed.host[parsed.host.length - 1] === "]";
91885
+ const bracketedIPLiteral = isIPLiteral(parsed.host);
91886
+ const hasIPLiteralBracket = parsed.host.indexOf("[") !== -1 || parsed.host.indexOf("]") !== -1;
89410
91887
  const ipv6result = normalizeIPv6(parsed.host);
89411
91888
  isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true;
89412
- malformedIPLiteral = bracketedIPLiteral && ipv6result.error === true;
91889
+ malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true);
89413
91890
  parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase();
89414
91891
  if (malformedIPLiteral) {
89415
91892
  parsed.error = parsed.error || "URI host is malformed.";
@@ -89432,7 +91909,9 @@ var require_fast_uri = __commonJS({
89432
91909
  parsed.error = parsed.error || "URI is not a " + options.reference + " reference.";
89433
91910
  }
89434
91911
  const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
89435
- malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP);
91912
+ if (!malformedIPLiteral) {
91913
+ malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP);
91914
+ }
89436
91915
  if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
89437
91916
  if (uri.indexOf("%") !== -1) {
89438
91917
  if (parsed.host !== void 0 && !malformedIPLiteral) {
@@ -104403,7 +106882,7 @@ var init_governed_codex_profile = __esm({
104403
106882
  function governedAttestationPredicate(error40) {
104404
106883
  return error40 instanceof TypeError ? GOVERNED_ATTESTATION_ERROR_PREDICATES.get(error40.message) ?? null : null;
104405
106884
  }
104406
- function governedAnswerFailure(stage, nativeEventFailureBoundary = null, nativeEventFailureSubreason = null, nativeEventFailureCorrelationOperand = null, nativeEventFailureAttestationPredicate = null, schemaResultValidationSubreason = null, schemaResultValidationKeyword = null) {
106885
+ function governedAnswerFailure(stage, nativeEventFailureBoundary = null, nativeEventFailureSubreason = null, nativeEventFailureCorrelationOperand = null, nativeEventFailureAttestationPredicate = null, schemaResultValidationSubreason = null, schemaResultValidationKeyword = null, providerEngineFailureBoundary = null) {
104407
106886
  return new GovernedAnswerFailure(
104408
106887
  stage,
104409
106888
  nativeEventFailureBoundary,
@@ -104411,21 +106890,23 @@ function governedAnswerFailure(stage, nativeEventFailureBoundary = null, nativeE
104411
106890
  nativeEventFailureCorrelationOperand,
104412
106891
  nativeEventFailureAttestationPredicate,
104413
106892
  schemaResultValidationSubreason,
104414
- schemaResultValidationKeyword
106893
+ schemaResultValidationKeyword,
106894
+ providerEngineFailureBoundary
104415
106895
  );
104416
106896
  }
104417
- function normalizeGovernedAnswerFailure(error40, fallback = "unknown", nativeEventFailureBoundary = null, nativeEventFailureSubreason = null, nativeEventFailureCorrelationOperand = null, schemaResultValidationSubreason = null, schemaResultValidationKeyword = null) {
106897
+ function normalizeGovernedAnswerFailure(error40, fallback = "unknown", nativeEventFailureBoundary = null, nativeEventFailureSubreason = null, nativeEventFailureCorrelationOperand = null, schemaResultValidationSubreason = null, schemaResultValidationKeyword = null, providerEngineFailureBoundary = null, nativeEventFailureAttestationPredicate = null) {
104418
106898
  return error40 instanceof GovernedAnswerFailure ? error40 : governedAnswerFailure(
104419
106899
  fallback,
104420
106900
  nativeEventFailureBoundary,
104421
106901
  nativeEventFailureSubreason,
104422
106902
  nativeEventFailureCorrelationOperand,
104423
- fallback === "native_event_grammar" && nativeEventFailureBoundary === "live_envelope_session" && nativeEventFailureSubreason === "attestation" ? governedAttestationPredicate(error40) : null,
106903
+ fallback === "native_event_grammar" && nativeEventFailureBoundary === "live_envelope_session" && nativeEventFailureSubreason === "attestation" ? nativeEventFailureAttestationPredicate ?? governedAttestationPredicate(error40) : null,
104424
106904
  schemaResultValidationSubreason,
104425
- schemaResultValidationKeyword
106905
+ schemaResultValidationKeyword,
106906
+ providerEngineFailureBoundary
104426
106907
  );
104427
106908
  }
104428
- var GOVERNED_ANSWER_FAILURE_STAGES, GOVERNED_NATIVE_EVENT_FAILURE_BOUNDARIES, GOVERNED_NATIVE_EVENT_FAILURE_SUBREASONS, GOVERNED_NATIVE_EVENT_FAILURE_CORRELATION_OPERANDS, GOVERNED_NATIVE_EVENT_FAILURE_ATTESTATION_PREDICATES, GOVERNED_SCHEMA_RESULT_VALIDATION_SUBREASONS, GOVERNED_SCHEMA_RESULT_VALIDATION_KEYWORDS, GOVERNED_ATTESTATION_ERROR_PREDICATES, GovernedAnswerFailure;
106909
+ var GOVERNED_ANSWER_FAILURE_STAGES, GOVERNED_PROVIDER_ENGINE_FAILURE_BOUNDARIES, GOVERNED_NATIVE_EVENT_FAILURE_BOUNDARIES, GOVERNED_NATIVE_EVENT_FAILURE_SUBREASONS, GOVERNED_NATIVE_EVENT_FAILURE_CORRELATION_OPERANDS, GOVERNED_NATIVE_EVENT_FAILURE_ATTESTATION_PREDICATES, GOVERNED_SCHEMA_RESULT_VALIDATION_SUBREASONS, GOVERNED_SCHEMA_RESULT_VALIDATION_KEYWORDS, GOVERNED_ATTESTATION_ERROR_PREDICATES, GovernedAnswerFailure;
104429
106910
  var init_governed_answer_failure = __esm({
104430
106911
  "src/agent/engines/governed-answer-failure.js"() {
104431
106912
  "use strict";
@@ -104433,8 +106914,10 @@ var init_governed_answer_failure = __esm({
104433
106914
  "native_event_grammar",
104434
106915
  "provider_engine",
104435
106916
  "schema_result_validation",
106917
+ "internal_contract",
104436
106918
  "unknown"
104437
106919
  ]);
106920
+ GOVERNED_PROVIDER_ENGINE_FAILURE_BOUNDARIES = /* @__PURE__ */ new Set(["acquire", "query", "close"]);
104438
106921
  GOVERNED_NATIVE_EVENT_FAILURE_BOUNDARIES = /* @__PURE__ */ new Set([
104439
106922
  "raw_item_predicate",
104440
106923
  "live_envelope_session"
@@ -104478,7 +106961,9 @@ var init_governed_answer_failure = __esm({
104478
106961
  "value_shape",
104479
106962
  "kind",
104480
106963
  "native_tool_evidence",
104481
- "internal_contract"
106964
+ "internal_contract",
106965
+ "invocation_attestation",
106966
+ "native_capability_aggregate"
104482
106967
  ]);
104483
106968
  GOVERNED_SCHEMA_RESULT_VALIDATION_SUBREASONS = /* @__PURE__ */ new Set([
104484
106969
  "response_json",
@@ -104561,7 +107046,7 @@ var init_governed_answer_failure = __esm({
104561
107046
  ["Invalid profile capability overlap", "internal_contract"]
104562
107047
  ]);
104563
107048
  GovernedAnswerFailure = class extends Error {
104564
- constructor(stage, nativeEventFailureBoundary = null, nativeEventFailureSubreason = null, nativeEventFailureCorrelationOperand = null, nativeEventFailureAttestationPredicate = null, schemaResultValidationSubreason = null, schemaResultValidationKeyword = null) {
107049
+ constructor(stage, nativeEventFailureBoundary = null, nativeEventFailureSubreason = null, nativeEventFailureCorrelationOperand = null, nativeEventFailureAttestationPredicate = null, schemaResultValidationSubreason = null, schemaResultValidationKeyword = null, providerEngineFailureBoundary = null) {
104565
107050
  super();
104566
107051
  delete this.stack;
104567
107052
  const answerFailureStage = GOVERNED_ANSWER_FAILURE_STAGES.has(stage) ? stage : "unknown";
@@ -104570,6 +107055,10 @@ var init_governed_answer_failure = __esm({
104570
107055
  value: answerFailureStage,
104571
107056
  enumerable: true
104572
107057
  });
107058
+ if (answerFailureStage === "provider_engine") Object.defineProperty(this, "providerEngineFailureBoundary", {
107059
+ value: GOVERNED_PROVIDER_ENGINE_FAILURE_BOUNDARIES.has(providerEngineFailureBoundary) ? providerEngineFailureBoundary : null,
107060
+ enumerable: true
107061
+ });
104573
107062
  if (answerFailureStage === "native_event_grammar") Object.defineProperty(this, "nativeEventFailureBoundary", {
104574
107063
  value: GOVERNED_NATIVE_EVENT_FAILURE_BOUNDARIES.has(nativeEventFailureBoundary) ? nativeEventFailureBoundary : null,
104575
107064
  enumerable: true
@@ -105580,7 +108069,9 @@ async function createCodexEngine(options = {}) {
105580
108069
  }
105581
108070
  });
105582
108071
  if (opts.abortSignal) {
105583
- if (opts.abortSignal.aborted) throw new Error("Codex query cancelled");
108072
+ if (opts.abortSignal.aborted) {
108073
+ throw governedProfile ? governedAnswerFailure("provider_engine", null, null, null, null, null, null, "query") : new Error("Codex query cancelled");
108074
+ }
105584
108075
  abortHandler = () => {
105585
108076
  void cleanup(new Error("Codex query cancelled")).catch(() => {
105586
108077
  });
@@ -105613,7 +108104,16 @@ async function createCodexEngine(options = {}) {
105613
108104
  try {
105614
108105
  result = await resultPromise;
105615
108106
  } catch (error40) {
105616
- throw governedProfile ? governedAnswerFailure(evidenceFailure ? "unknown" : "provider_engine") : error40;
108107
+ throw governedProfile ? evidenceFailure || normalizeGovernedAnswerFailure(
108108
+ error40,
108109
+ "provider_engine",
108110
+ null,
108111
+ null,
108112
+ null,
108113
+ null,
108114
+ null,
108115
+ "query"
108116
+ ) : error40;
105617
108117
  }
105618
108118
  eventHandlers.delete(reqId);
105619
108119
  governedEvidenceHandlers.delete(reqId);
@@ -105631,17 +108131,50 @@ async function createCodexEngine(options = {}) {
105631
108131
  profile: governedProfile,
105632
108132
  events: governedProfile.version === "probe.governed-codex-profile/v2" ? [collected.sessionEvent, collected.capabilities.nativeTools] : [collected.sessionEvent]
105633
108133
  });
108134
+ } catch (error40) {
108135
+ throw normalizeGovernedAnswerFailure(
108136
+ error40,
108137
+ "native_event_grammar",
108138
+ "live_envelope_session",
108139
+ "attestation"
108140
+ );
108141
+ }
108142
+ try {
105634
108143
  probeMcpCallCount = governedProfile.version === "probe.governed-codex-profile/v2" ? governedProbeMcpCallCount(mcpServer?.getGovernedCallEvidence()) : 0;
105635
108144
  } catch (error40) {
105636
- throw normalizeGovernedAnswerFailure(error40, "native_event_grammar", "live_envelope_session", "attestation");
105637
- }
105638
- attestation = hasInvocationDigest ? externalBoundReceipt(internal, dispatch, invocationDigest, {
105639
- nativeCallCount: collected.capabilities.nativeTools.total,
105640
- probeMcpCallCount
105641
- }) : externalReceipt(internal, {
105642
- nativeCallCount: collected.capabilities.nativeTools.total,
105643
- probeMcpCallCount
105644
- });
108145
+ throw normalizeGovernedAnswerFailure(
108146
+ error40,
108147
+ "native_event_grammar",
108148
+ "live_envelope_session",
108149
+ "attestation",
108150
+ null,
108151
+ null,
108152
+ null,
108153
+ null,
108154
+ "native_capability_aggregate"
108155
+ );
108156
+ }
108157
+ try {
108158
+ attestation = hasInvocationDigest ? externalBoundReceipt(internal, dispatch, invocationDigest, {
108159
+ nativeCallCount: collected.capabilities.nativeTools.total,
108160
+ probeMcpCallCount
108161
+ }) : externalReceipt(internal, {
108162
+ nativeCallCount: collected.capabilities.nativeTools.total,
108163
+ probeMcpCallCount
108164
+ });
108165
+ } catch (error40) {
108166
+ throw normalizeGovernedAnswerFailure(
108167
+ error40,
108168
+ "native_event_grammar",
108169
+ "live_envelope_session",
108170
+ "attestation",
108171
+ null,
108172
+ null,
108173
+ null,
108174
+ null,
108175
+ "invocation_attestation"
108176
+ );
108177
+ }
105645
108178
  session.setConversationId(collected.sessionEvent.params.msg.session_id);
105646
108179
  }
105647
108180
  if (result && result.content && Array.isArray(result.content)) {
@@ -105678,7 +108211,7 @@ async function createCodexEngine(options = {}) {
105678
108211
  }
105679
108212
  };
105680
108213
  } catch (error40) {
105681
- if (governedProfile) error40 = normalizeGovernedAnswerFailure(error40, "unknown");
108214
+ if (governedProfile) error40 = normalizeGovernedAnswerFailure(error40, "internal_contract");
105682
108215
  queryError = error40;
105683
108216
  if (debug) {
105684
108217
  console.error("[DEBUG] Codex query error:", error40);
@@ -105693,7 +108226,16 @@ async function createCodexEngine(options = {}) {
105693
108226
  try {
105694
108227
  await cleanup();
105695
108228
  } catch (cleanupError) {
105696
- if (!queryError) throw cleanupError;
108229
+ if (!queryError) throw normalizeGovernedAnswerFailure(
108230
+ cleanupError,
108231
+ "provider_engine",
108232
+ null,
108233
+ null,
108234
+ null,
108235
+ null,
108236
+ null,
108237
+ "close"
108238
+ );
105697
108239
  }
105698
108240
  }
105699
108241
  }
@@ -107797,7 +110339,18 @@ var init_ProbeAgent = __esm({
107797
110339
  }
107798
110340
  return this.engine;
107799
110341
  } catch (error40) {
107800
- if (this.governedCodexProfile) throw error40;
110342
+ if (this.governedCodexProfile) {
110343
+ throw normalizeGovernedAnswerFailure(
110344
+ error40,
110345
+ "provider_engine",
110346
+ null,
110347
+ null,
110348
+ null,
110349
+ null,
110350
+ null,
110351
+ "acquire"
110352
+ );
110353
+ }
107801
110354
  console.warn("[WARNING] Failed to load Codex CLI engine:", error40.message);
107802
110355
  console.warn("[WARNING] Falling back to Vercel AI SDK");
107803
110356
  this.clientApiProvider = null;
@@ -108668,38 +111221,99 @@ You are working with a workspace. Available paths: ${workspaceDesc}
108668
111221
  try {
108669
111222
  try {
108670
111223
  engine = await this.getEngine();
108671
- } catch {
108672
- throw governedAnswerFailure("provider_engine");
111224
+ } catch (error40) {
111225
+ throw normalizeGovernedAnswerFailure(
111226
+ error40,
111227
+ "provider_engine",
111228
+ null,
111229
+ null,
111230
+ null,
111231
+ null,
111232
+ null,
111233
+ "acquire"
111234
+ );
108673
111235
  }
108674
- if (!engine?.query) throw governedAnswerFailure("provider_engine");
111236
+ if (!engine?.query) throw governedAnswerFailure("internal_contract");
108675
111237
  const candidateChunks = [];
108676
111238
  let runtimeAttestation;
108677
111239
  let attestationCount = 0;
108678
111240
  let nativeToolBatch;
108679
111241
  let nativeToolBatchCount = 0;
108680
111242
  const queryOptions = hasInvocationDigest ? { abortSignal: this._abortController.signal, invocationDigest } : { abortSignal: this._abortController.signal };
108681
- for await (const chunk of engine.query(prompt, queryOptions)) {
108682
- if (chunk.type === "text" && chunk.content) candidateChunks.push(chunk.content);
108683
- else if (chunk.type === "metadata" && chunk.data?.attestation) {
108684
- runtimeAttestation = chunk.data.attestation;
108685
- attestationCount++;
108686
- } else if (chunk.type === "toolBatch") {
108687
- nativeToolBatch = chunk;
108688
- nativeToolBatchCount++;
108689
- } else if (chunk.type === "error") throw normalizeGovernedAnswerFailure(chunk.error, "unknown");
111243
+ try {
111244
+ for await (const chunk of engine.query(prompt, queryOptions)) {
111245
+ if (chunk.type === "text" && chunk.content) candidateChunks.push(chunk.content);
111246
+ else if (chunk.type === "metadata" && chunk.data?.attestation) {
111247
+ runtimeAttestation = chunk.data.attestation;
111248
+ attestationCount++;
111249
+ } else if (chunk.type === "toolBatch") {
111250
+ nativeToolBatch = chunk;
111251
+ nativeToolBatchCount++;
111252
+ } else if (chunk.type === "error") {
111253
+ throw normalizeGovernedAnswerFailure(
111254
+ chunk.error,
111255
+ "provider_engine",
111256
+ null,
111257
+ null,
111258
+ null,
111259
+ null,
111260
+ null,
111261
+ "query"
111262
+ );
111263
+ }
111264
+ }
111265
+ } catch (error40) {
111266
+ throw normalizeGovernedAnswerFailure(
111267
+ error40,
111268
+ "provider_engine",
111269
+ null,
111270
+ null,
111271
+ null,
111272
+ null,
111273
+ null,
111274
+ "query"
111275
+ );
108690
111276
  }
108691
111277
  if (hasInvocationDigest) {
108692
111278
  const expectedAttestation = this.governedCodexProfile?.version === "probe.governed-codex-profile/v2" ? "probe.governed-codex-attestation/v3" : "probe.governed-codex-attestation/v2";
108693
111279
  if (attestationCount !== 1 || runtimeAttestation?.version !== expectedAttestation || runtimeAttestation?.executionContext?.source !== "caller" || runtimeAttestation?.executionContext?.invocationDigest !== invocationDigest) {
108694
- throw new Error("Expected exactly one matching governed invocation attestation");
111280
+ throw governedAnswerFailure(
111281
+ "native_event_grammar",
111282
+ "live_envelope_session",
111283
+ "attestation",
111284
+ null,
111285
+ "invocation_attestation"
111286
+ );
108695
111287
  }
108696
- } else if (attestationCount !== 1) throw new Error(`Expected exactly one governed runtime attestation; received ${attestationCount}`);
111288
+ } else if (attestationCount !== 1) {
111289
+ throw governedAnswerFailure(
111290
+ "native_event_grammar",
111291
+ "live_envelope_session",
111292
+ "attestation",
111293
+ null,
111294
+ "invocation_attestation"
111295
+ );
111296
+ }
108697
111297
  if (this.governedCodexProfile?.version === "probe.governed-codex-profile/v2") {
108698
111298
  if (nativeToolBatchCount !== 1 || !Number.isSafeInteger(nativeToolBatch?.total) || !Array.isArray(nativeToolBatch?.tools) || nativeToolBatch.total !== runtimeAttestation?.observed?.nativeTools?.total || JSON.stringify(nativeToolBatch.tools) !== JSON.stringify(runtimeAttestation?.observed?.nativeTools?.tools)) {
108699
- throw new Error("Expected exactly one matching governed native capability aggregate");
111299
+ throw governedAnswerFailure(
111300
+ "native_event_grammar",
111301
+ "live_envelope_session",
111302
+ "attestation",
111303
+ null,
111304
+ "native_capability_aggregate"
111305
+ );
108700
111306
  }
108701
111307
  for (const toolEvent of nativeToolBatch.tools) this.events.emit("toolCall", toolEvent);
108702
- } else if (nativeToolBatchCount !== 0) throw new Error("Unexpected governed native capability aggregate");
111308
+ } else if (nativeToolBatchCount !== 0) {
111309
+ throw governedAnswerFailure(
111310
+ "native_event_grammar",
111311
+ "live_envelope_session",
111312
+ "attestation",
111313
+ null,
111314
+ "native_capability_aggregate"
111315
+ );
111316
+ }
108703
111317
  const validation = validateJsonResponse(candidateChunks.join(""), { debug: this.debug, schema });
108704
111318
  if (!validation.isValid) throw governedSchemaResultValidationFailure(validation);
108705
111319
  if (hasResultIdentity) {
@@ -108715,14 +111329,23 @@ You are working with a workspace. Available paths: ${workspaceDesc}
108715
111329
  }
108716
111330
  return { data: validation.parsed, runtimeAttestation };
108717
111331
  } catch (error40) {
108718
- answerFailure = normalizeGovernedAnswerFailure(error40, "unknown");
111332
+ answerFailure = normalizeGovernedAnswerFailure(error40, "internal_contract");
108719
111333
  throw answerFailure;
108720
111334
  } finally {
108721
111335
  if (engine) {
108722
111336
  try {
108723
111337
  await engine.close();
108724
- } catch {
108725
- if (!answerFailure) throw governedAnswerFailure("unknown");
111338
+ } catch (error40) {
111339
+ if (!answerFailure) throw normalizeGovernedAnswerFailure(
111340
+ error40,
111341
+ "provider_engine",
111342
+ null,
111343
+ null,
111344
+ null,
111345
+ null,
111346
+ null,
111347
+ "close"
111348
+ );
108726
111349
  }
108727
111350
  }
108728
111351
  }