@x-otto/cli 0.0.1-alpha.53 → 0.0.1-alpha.55

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.
Files changed (42) hide show
  1. package/dist/{auth-command--ky3JspQ.js → auth-command-Cw71Gud0.js} +2 -2
  2. package/dist/{auth-command--ky3JspQ.js.map → auth-command-Cw71Gud0.js.map} +1 -1
  3. package/dist/build-id-9kqTcA9R.js +3 -0
  4. package/dist/build-id-9kqTcA9R.js.map +1 -0
  5. package/dist/bundled-extensions/plugin-otto-wire-protocols/plugin-dist/meta.json +1 -1
  6. package/dist/bundled-extensions/plugin-otto-wire-protocols/plugin-dist/plugin.cjs +195 -161
  7. package/dist/bundled-extensions/plugin-otto-wire-protocols/plugin.ts +4 -0
  8. package/dist/bundled-extensions/plugin-otto-wire-protocols/src/anthropic-messages.ts +9 -1
  9. package/dist/bundled-extensions/plugin-otto-wire-protocols/src/openai-completions.ts +11 -1
  10. package/dist/bundled-extensions/plugin-otto-wire-protocols/src/openai-responses.ts +9 -1
  11. package/dist/command-dispatcher-W3E5zhWN.js +18 -0
  12. package/dist/command-dispatcher-W3E5zhWN.js.map +1 -0
  13. package/dist/create-host-app-_xUKDWy7.js +3 -0
  14. package/dist/{create-host-app-BtifD7KK.js.map → create-host-app-_xUKDWy7.js.map} +1 -1
  15. package/dist/{doctor-BAxvhLws.js → doctor-BDEllJgc.js} +2 -2
  16. package/dist/{doctor-BAxvhLws.js.map → doctor-BDEllJgc.js.map} +1 -1
  17. package/dist/{feedback-CJVKfI0S.js → feedback-CqTWm_TD.js} +10 -10
  18. package/dist/{feedback-CJVKfI0S.js.map → feedback-CqTWm_TD.js.map} +1 -1
  19. package/dist/{feedback-backend-methods-C23Z2suw.js → feedback-backend-methods-3CMRkGoJ.js} +2 -2
  20. package/dist/{feedback-backend-methods-C23Z2suw.js.map → feedback-backend-methods-3CMRkGoJ.js.map} +1 -1
  21. package/dist/index.js +7 -7
  22. package/dist/index.js.map +1 -1
  23. package/dist/{interactive-schedule-BKiI3Qrw.js → interactive-schedule-D0NOMjB7.js} +2 -2
  24. package/dist/{interactive-schedule-BKiI3Qrw.js.map → interactive-schedule-D0NOMjB7.js.map} +1 -1
  25. package/dist/{mcp-server-CfJK4pav.js → mcp-server-kME-VSX4.js} +2 -2
  26. package/dist/{mcp-server-CfJK4pav.js.map → mcp-server-kME-VSX4.js.map} +1 -1
  27. package/dist/{parse-cli-B9Go-f6A.js → parse-cli-Byh6vJ3e.js} +2 -2
  28. package/dist/{parse-cli-B9Go-f6A.js.map → parse-cli-Byh6vJ3e.js.map} +1 -1
  29. package/dist/schedule-C_uHI2M8.js +5 -0
  30. package/dist/schedule-C_uHI2M8.js.map +1 -0
  31. package/dist/{serve-ChSSkjLs.js → serve-Di0fC7-B.js} +2 -2
  32. package/dist/{serve-ChSSkjLs.js.map → serve-Di0fC7-B.js.map} +1 -1
  33. package/dist/{version-BL66TSQP.js → version-CHEEY4Vx.js} +2 -2
  34. package/dist/{version-BL66TSQP.js.map → version-CHEEY4Vx.js.map} +1 -1
  35. package/package.json +18 -18
  36. package/dist/build-id-C94zHRXj.js +0 -3
  37. package/dist/build-id-C94zHRXj.js.map +0 -1
  38. package/dist/command-dispatcher-CKj6qR-G.js +0 -18
  39. package/dist/command-dispatcher-CKj6qR-G.js.map +0 -1
  40. package/dist/create-host-app-BtifD7KK.js +0 -3
  41. package/dist/schedule-Ke0jwatM.js +0 -5
  42. package/dist/schedule-Ke0jwatM.js.map +0 -1
@@ -16126,7 +16126,7 @@ function splitLines(chunk) {
16126
16126
 
16127
16127
  // ../shared/dist/index.js
16128
16128
  var import_undici = __toESM(require_undici(), 1);
16129
- var y = class extends Error {
16129
+ var b = class extends Error {
16130
16130
  code;
16131
16131
  cause;
16132
16132
  status;
@@ -16138,25 +16138,25 @@ var y = class extends Error {
16138
16138
  super(e8, { cause: t6.cause }), this.name = new.target.name, this.code = t6.code, this.cause = t6.cause, this.status = t6.status, this.headers = t6.headers, this.errorType = t6.errorType, this.pluginSource = t6.pluginSource, this.abortKind = t6.abortKind;
16139
16139
  }
16140
16140
  };
16141
- var b = class extends y {
16141
+ var x = class extends b {
16142
16142
  };
16143
- var we = class extends y {
16143
+ var Ce = class extends b {
16144
16144
  };
16145
- var { setPrototypeOf: De = function(e8, t6) {
16145
+ var { setPrototypeOf: Ee = function(e8, t6) {
16146
16146
  return e8.__proto__ = t6, e8;
16147
16147
  } } = Object;
16148
- var Oe = class e3 extends Error {
16148
+ var De = class e3 extends Error {
16149
16149
  framesToPop = 1;
16150
16150
  name = `Invariant Violation`;
16151
16151
  constructor(t6 = `Invariant Violation`) {
16152
- super(typeof t6 == `number` ? `Invariant Violation: ${t6}` : t6), De(this, e3.prototype);
16152
+ super(typeof t6 == `number` ? `Invariant Violation: ${t6}` : t6), Ee(this, e3.prototype);
16153
16153
  }
16154
16154
  };
16155
- function S(e8, t6) {
16156
- if (typeof e8 == `function`) S(e8(), t6);
16157
- else if (!e8) throw new Oe(t6);
16155
+ function C(e8, t6) {
16156
+ if (typeof e8 == `function`) C(e8(), t6);
16157
+ else if (!e8) throw new De(t6);
16158
16158
  }
16159
- var ke = class {
16159
+ var Oe = class {
16160
16160
  listeners = {};
16161
16161
  on(e8, t6) {
16162
16162
  let n5 = this.listeners[e8];
@@ -16183,7 +16183,7 @@ var ke = class {
16183
16183
  return this.listeners[e8]?.size ?? 0;
16184
16184
  }
16185
16185
  };
16186
- var Ae = class extends ke {
16186
+ var ke = class extends Oe {
16187
16187
  publish(e8) {
16188
16188
  let t6 = (e9, ...t7) => this.emit(e9, ...t7);
16189
16189
  for (let [n5, r4] of Object.entries(e8)) {
@@ -16198,97 +16198,97 @@ var Ae = class extends ke {
16198
16198
  return this.subscribe(`*`, e8);
16199
16199
  }
16200
16200
  };
16201
- var je = /* @__PURE__ */ new Set([`trace`, `debug`, `info`, `warn`, `error`, `fatal`]);
16202
- function C(e8) {
16203
- return je.has(e8) ? e8 : `info`;
16201
+ var Ae = /* @__PURE__ */ new Set([`trace`, `debug`, `info`, `warn`, `error`, `fatal`]);
16202
+ function w2(e8) {
16203
+ return Ae.has(e8) ? e8 : `info`;
16204
16204
  }
16205
- var Me = (() => {
16205
+ var je = (() => {
16206
16206
  try {
16207
16207
  return (0, import_node_module.createRequire)(__otto_plugin_import_meta_url);
16208
16208
  } catch {
16209
16209
  return;
16210
16210
  }
16211
16211
  })();
16212
- function Ne() {
16213
- if (!Me) return false;
16212
+ function Me() {
16213
+ if (!je) return false;
16214
16214
  try {
16215
- return Me.resolve(`pino-pretty`), true;
16215
+ return je.resolve(`pino-pretty`), true;
16216
16216
  } catch {
16217
16217
  return false;
16218
16218
  }
16219
16219
  }
16220
- function Pe(e8) {
16220
+ function Ne(e8) {
16221
16221
  return e8 === `stdout` ? 1 : e8 === `stderr` ? 2 : e8;
16222
16222
  }
16223
- function Fe() {
16223
+ function Pe() {
16224
16224
  return process.env.OTTO_LOG_STDERR === `0`;
16225
16225
  }
16226
- function Ie() {
16226
+ function Fe() {
16227
16227
  return process.env.OTTO_LOG_FILE || `${process.env.HOME || process.env.USERPROFILE || `.`}/.otto/logs/otto.log`;
16228
16228
  }
16229
- function Le(e8, t6) {
16230
- let n5 = Ne(), r4 = Fe(), i3 = { target: n5 ? `pino-pretty` : `pino/file`, options: n5 ? { colorize: true, destination: 2 } : { destination: 2 }, level: t6 };
16231
- if (!e8 || e8 === `stdout` || e8 === `stderr`) return r4 ? [{ target: `pino/file`, options: { destination: Ie(), mkdir: true }, level: t6 }] : [i3];
16232
- let a3 = { target: `pino/file`, options: { destination: Pe(e8), mkdir: true }, level: t6 };
16229
+ function Ie(e8, t6) {
16230
+ let n5 = Me(), r4 = Pe(), i3 = { target: n5 ? `pino-pretty` : `pino/file`, options: n5 ? { colorize: true, destination: 2 } : { destination: 2 }, level: t6 };
16231
+ if (!e8 || e8 === `stdout` || e8 === `stderr`) return r4 ? [{ target: `pino/file`, options: { destination: Fe(), mkdir: true }, level: t6 }] : [i3];
16232
+ let a3 = { target: `pino/file`, options: { destination: Ne(e8), mkdir: true }, level: t6 };
16233
16233
  return r4 ? [a3] : [a3, i3];
16234
16234
  }
16235
- var w2 = new import_node_stream.PassThrough();
16236
- var Re = new Ae();
16237
- w2.on(`data`, (e8) => {
16235
+ var T = new import_node_stream.PassThrough();
16236
+ var Le = new ke();
16237
+ T.on(`data`, (e8) => {
16238
16238
  try {
16239
- Re.publish({ log: [JSON.parse(e8.toString())] });
16239
+ Le.publish({ log: [JSON.parse(e8.toString())] });
16240
16240
  } catch (t6) {
16241
16241
  console.warn(`Failed to parse log chunk for listener:`, e8.toString(), t6);
16242
16242
  }
16243
16243
  });
16244
- var T = null;
16245
- var E2 = C(Z);
16246
- var D = /* @__PURE__ */ new Set();
16247
- var O = null;
16248
- function He(e8, n5) {
16244
+ var E2 = null;
16245
+ var D = w2(Z);
16246
+ var ze = /* @__PURE__ */ new Set();
16247
+ var k2 = null;
16248
+ function Ve(e8, n5) {
16249
16249
  return globalThis.__miniv8_wasm === void 0 ? { write(r4) {
16250
- O ??= import_pino.default.transport({ targets: Le(e8, n5) }), O.write(r4);
16250
+ k2 ??= import_pino.default.transport({ targets: Ie(e8, n5) }), k2.write(r4);
16251
16251
  } } : { write: (e9) => {
16252
- w2.write(e9);
16252
+ T.write(e9);
16253
16253
  } };
16254
16254
  }
16255
- function k2(e8, n5) {
16256
- return T ??= (0, import_pino.default)({ level: e8 }, import_pino.default.multistream([{ level: e8, stream: w2 }, { level: e8, stream: He(n5, e8) }])), E2 = C(T.level), T;
16255
+ function He(e8, n5) {
16256
+ return E2 ??= (0, import_pino.default)({ level: e8 }, import_pino.default.multistream([{ level: e8, stream: T }, { level: e8, stream: Ve(n5, e8) }])), D = w2(E2.level), E2;
16257
16257
  }
16258
16258
  function A2(e8, t6) {
16259
- k2(t6?.level ?? C(Z), t6?.destination ?? K), S(T, `Root logger is not initialized`);
16260
- let i3 = T.child({ name: e8 }, { level: t6?.level ?? E2 });
16261
- return D.add(i3), i3;
16259
+ He(t6?.level ?? w2(Z), t6?.destination ?? K), C(E2, `Root logger is not initialized`);
16260
+ let i3 = E2.child({ name: e8 }, { level: t6?.level ?? D });
16261
+ return ze.add(i3), i3;
16262
16262
  }
16263
- var We = 10 * 1024 * 1024;
16264
- var F2;
16265
- function L2(e8) {
16266
- let t6 = e8 || F2;
16263
+ var j2 = 10 * 1024 * 1024;
16264
+ var I2;
16265
+ function R2(e8) {
16266
+ let t6 = e8 || I2;
16267
16267
  if (t6) try {
16268
16268
  return new import_undici.ProxyAgent({ uri: t6 });
16269
16269
  } catch {
16270
16270
  return;
16271
16271
  }
16272
16272
  }
16273
- var gt = { kind: `idle` };
16274
- var _t = { kind: `wallclock` };
16275
- function vt(e8, t6) {
16273
+ var ht = { kind: `idle` };
16274
+ var gt = { kind: `wallclock` };
16275
+ function _t(e8, t6) {
16276
16276
  return e8 ? t6.idleTimeout : t6.firstTokenIdleTimeout;
16277
16277
  }
16278
- function yt(e8) {
16278
+ function vt(e8) {
16279
16279
  let t6 = e8.idleTimeout ?? 12e4, n5 = e8.firstTokenIdleTimeout ?? Math.max(t6, 9e5), r4 = e8.timeout ?? 3e5;
16280
16280
  return { timeout: Math.max(r4, n5 + 6e4), idleTimeout: t6, firstTokenIdleTimeout: n5 };
16281
16281
  }
16282
- function bt(e8) {
16282
+ function yt(e8) {
16283
16283
  let t6 = e8.signal.reason;
16284
16284
  return typeof t6 == `object` && t6 && `kind` in t6 ? t6.kind : `external`;
16285
16285
  }
16286
- async function* xt(e8) {
16287
- let { url: t6, method: n5 = `POST`, headers: r4 = {}, body: i3, signal: a3 } = e8, { timeout: o3, idleTimeout: s3, firstTokenIdleTimeout: c3 } = yt(e8), l2 = new AbortController(), u = a3 ? AbortSignal.any([a3, l2.signal]) : l2.signal, d = setTimeout(() => l2.abort(_t), o3), f, p = false, m = () => {
16288
- f && clearTimeout(f), f = setTimeout(() => l2.abort(gt), vt(p, { idleTimeout: s3, firstTokenIdleTimeout: c3 }));
16286
+ async function* bt(e8) {
16287
+ let { url: t6, method: n5 = `POST`, headers: r4 = {}, body: i3, signal: a3 } = e8, { timeout: o3, idleTimeout: s3, firstTokenIdleTimeout: c3 } = vt(e8), l2 = new AbortController(), u = a3 ? AbortSignal.any([a3, l2.signal]) : l2.signal, d = setTimeout(() => l2.abort(gt), o3), f, p = false, m = () => {
16288
+ f && clearTimeout(f), f = setTimeout(() => l2.abort(ht), _t(p, { idleTimeout: s3, firstTokenIdleTimeout: c3 }));
16289
16289
  }, h;
16290
16290
  try {
16291
- let a4 = L2(e8.proxy), o4 = { method: n5, headers: { "content-type": `application/json`, accept: `text/event-stream`, ...r4 }, body: i3 ? typeof i3 == `string` ? i3 : JSON.stringify(i3) : void 0, signal: u }, s4 = await fetch(t6, a4 ? { ...o4, dispatcher: a4 } : o4);
16291
+ let a4 = R2(e8.proxy), o4 = { method: n5, headers: { "content-type": `application/json`, accept: `text/event-stream`, ...r4 }, body: i3 ? typeof i3 == `string` ? i3 : JSON.stringify(i3) : void 0, signal: u }, s4 = await fetch(t6, a4 ? { ...o4, dispatcher: a4 } : o4);
16292
16292
  if (!s4.ok) {
16293
16293
  let e9 = await s4.text(), t7 = `BAD_RESPONSE`;
16294
16294
  s4.status === 429 ? t7 = `RATE_LIMIT` : s4.status === 529 ? t7 = `OVERLOADED` : s4.status >= 500 ? t7 = `SERVER_ERROR` : s4.status >= 400 && (t7 = `REQUEST_ERROR`);
@@ -16298,9 +16298,9 @@ async function* xt(e8) {
16298
16298
  n6 = t8?.code ?? t8?.type;
16299
16299
  } catch {
16300
16300
  }
16301
- throw new b(`Http request failed ${s4.status}: ${e9}`, { code: t7, status: s4.status, headers: s4.headers, errorType: n6 });
16301
+ throw new x(`Http request failed ${s4.status}: ${e9}`, { code: t7, status: s4.status, headers: s4.headers, errorType: n6 });
16302
16302
  }
16303
- if (e8.onResponse?.(s4.headers), !s4.body) throw new b(`Response body is empty`, { code: `BAD_RESPONSE` });
16303
+ if (e8.onResponse?.(s4.headers), !s4.body) throw new x(`Response body is empty`, { code: `BAD_RESPONSE` });
16304
16304
  h = s4.body.getReader();
16305
16305
  let c4 = new TextDecoder(), l3 = [], d2 = createParser({ onEvent(e9) {
16306
16306
  l3.push({ event: e9.event || void 0, data: e9.data, id: e9.id || void 0 });
@@ -16318,13 +16318,13 @@ async function* xt(e8) {
16318
16318
  e9 && (p || (p = true, m()), yield e9);
16319
16319
  }
16320
16320
  } catch (e9) {
16321
- throw e9 instanceof b ? e9 : l2.signal.aborted || e9 instanceof DOMException && e9.name === `AbortError` ? new b(`Stream aborted or timed out`, { code: `TIMEOUT`, cause: e9 instanceof Error ? e9 : Error(String(e9)), abortKind: bt(l2) }) : new b(`Stream request failed`, { code: `NETWORK_ERROR`, cause: e9 instanceof Error ? e9 : Error(String(e9)) });
16321
+ throw e9 instanceof x ? e9 : l2.signal.aborted || e9 instanceof DOMException && e9.name === `AbortError` ? new x(`Stream aborted or timed out`, { code: `TIMEOUT`, cause: e9 instanceof Error ? e9 : Error(String(e9)), abortKind: yt(l2) }) : new x(`Stream request failed`, { code: `NETWORK_ERROR`, cause: e9 instanceof Error ? e9 : Error(String(e9)) });
16322
16322
  } finally {
16323
16323
  clearTimeout(d), f && clearTimeout(f), h && h.cancel().catch(() => {
16324
16324
  });
16325
16325
  }
16326
16326
  }
16327
- function wt(e8, t6) {
16327
+ function Ct(e8, t6) {
16328
16328
  if (e8 == null) return;
16329
16329
  if (typeof e8.get == `function`) return e8.get(t6) ?? void 0;
16330
16330
  let n5 = e8;
@@ -16333,8 +16333,8 @@ function wt(e8, t6) {
16333
16333
  return typeof t7 == `string` ? t7 : void 0;
16334
16334
  }
16335
16335
  }
16336
- var B2 = { Bash: `bash`, Read: `read`, Write: `write`, Edit: `edit`, MultiEdit: `edit`, Grep: `grep`, Glob: `find`, WebFetch: `web_fetch`, WebSearch: `web_search`, Task: `task_delegate`, TodoWrite: `write_todos` };
16337
- var kt = Object.fromEntries(Object.entries(B2).reverse().map(([e8, t6]) => [t6, e8]));
16336
+ var V2 = { Bash: `bash`, Read: `read`, Write: `write`, Edit: `edit`, MultiEdit: `edit`, Grep: `grep`, Glob: `find`, WebFetch: `web_fetch`, WebSearch: `web_search`, Task: `task_delegate`, TodoWrite: `write_todos` };
16337
+ var Ot = Object.fromEntries(Object.entries(V2).reverse().map(([e8, t6]) => [t6, e8]));
16338
16338
  var Kt = 5 * 1024 * 1024;
16339
16339
  var qt = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);
16340
16340
  var Jt = Buffer.from(`GIF8`, `ascii`);
@@ -16371,7 +16371,7 @@ function i2(e8) {
16371
16371
  }
16372
16372
 
16373
16373
  // ../interchange/dist/index.js
16374
- var _ = { toolGuidance: { name: `tool-guidance-injection`, priority: 20, lane: `stable`, budgetBytes: 2e4 }, skillLoopGuidance: { name: `skill-loop-guidance-injection`, priority: 21, lane: `stable`, budgetBytes: 2e3 }, environment: { name: `runtime:environment`, priority: 25, lane: `stable`, budgetBytes: 8e3 }, agentKnowledge: { name: `agent-knowledge-injection`, priority: 35, lane: `stable`, budgetBytes: 28e3 }, skillCatalog: { name: `skill-catalog-injection`, priority: 38, lane: `stable`, budgetBytes: 12e3 }, lessonRelevantHints: { name: `lesson-relevant-hints`, priority: 41, lane: `volatile`, budgetBytes: 4e3 }, internalize: { name: `internalize-skill-injection`, priority: 42, lane: `volatile`, budgetBytes: 4e3 }, memoryDelta: { name: `memory-delta-injection`, priority: 60, lane: `volatile`, budgetBytes: 8e3 }, todoReminder: { name: `todo-reminder-injection`, priority: 62, lane: `volatile`, budgetBytes: 4e3 }, docSyncReminder: { name: `doc-sync-reminder-injection`, priority: 64, lane: `volatile`, budgetBytes: 4e3 } };
16374
+ var _ = { toolGuidance: { name: `tool-guidance-injection`, priority: 20, lane: `stable`, budgetBytes: 2e4 }, skillLoopGuidance: { name: `skill-loop-guidance-injection`, priority: 21, lane: `stable`, budgetBytes: 2e3 }, environment: { name: `runtime:environment`, priority: 25, lane: `stable`, budgetBytes: 8e3 }, agentKnowledge: { name: `agent-knowledge-injection`, priority: 35, lane: `stable`, budgetBytes: 28e3 }, skillCatalog: { name: `skill-catalog-injection`, priority: 38, lane: `stable`, budgetBytes: 12e3 }, lessonRelevantHints: { name: `lesson-relevant-hints`, priority: 41, lane: `volatile`, budgetBytes: 4e3 }, internalize: { name: `internalize-skill-injection`, priority: 42, lane: `volatile`, budgetBytes: 4e3 }, pluginFailures: { name: `plugin-failures-injection`, priority: 55, lane: `volatile`, budgetBytes: 4e3 }, memoryDelta: { name: `memory-delta-injection`, priority: 60, lane: `volatile`, budgetBytes: 8e3 }, todoReminder: { name: `todo-reminder-injection`, priority: 62, lane: `volatile`, budgetBytes: 4e3 }, docSyncReminder: { name: `doc-sync-reminder-injection`, priority: 64, lane: `volatile`, budgetBytes: 4e3 } };
16375
16375
  var v = Object.values(_);
16376
16376
 
16377
16377
  // ../provider/dist/index.js
@@ -16380,9 +16380,13 @@ var _2 = { debug: () => {
16380
16380
  }, warn: () => {
16381
16381
  }, error: () => {
16382
16382
  } };
16383
- async function v2(e8, t6, n5) {
16384
- let r4 = process.env[e8];
16385
- if (r4) return r4;
16383
+ async function v2(e8, t6, n5, r4 = false) {
16384
+ if (r4 && t6) {
16385
+ let e9 = await t6();
16386
+ if (e9) return e9;
16387
+ }
16388
+ let i3 = process.env[e8];
16389
+ if (i3) return i3;
16386
16390
  if (t6) {
16387
16391
  let e9 = await t6();
16388
16392
  if (e9) return e9;
@@ -16452,26 +16456,29 @@ function D2(e8, t6) {
16452
16456
  else break;
16453
16457
  return i3 ?? r4[0];
16454
16458
  }
16459
+ function O(e8, t6) {
16460
+ return e8.reasoning === true && !!t6;
16461
+ }
16455
16462
  function te2(e8) {
16456
16463
  for (let t6 of e8) if (t6.role === `tool_result` || t6.role === `assistant` && t6.content.some((e9) => e9.type === `tool_call`)) return true;
16457
16464
  return false;
16458
16465
  }
16459
- function O2(t6) {
16460
- let n5 = [];
16466
+ function k3(t6) {
16467
+ let n5 = [], r4 = O(t6.model, t6.thinkingLevel);
16461
16468
  t6.systemPrompt && n5.push({ role: `system`, content: w3(t6.systemPrompt) });
16462
- for (let r4 of b2(t6.messages)) if (r4.role === `user`) typeof r4.content == `string` ? n5.push({ role: `user`, content: w3(r4.content) }) : n5.push({ role: `user`, content: r4.content.map((t7) => {
16469
+ for (let i3 of b2(t6.messages)) if (i3.role === `user`) typeof i3.content == `string` ? n5.push({ role: `user`, content: w3(i3.content) }) : n5.push({ role: `user`, content: i3.content.map((t7) => {
16463
16470
  if (t7.type === `text`) return { type: `text`, text: w3(t7.text) };
16464
16471
  if (t7.type === `image`) {
16465
- let { base64: n6, mediaType: r5, valid: i3 } = t3(t7.source, t7.mime);
16466
- return i3 ? { type: `image_url`, image_url: { url: `data:${r5 || `image/png`};base64,${n6}` } } : { type: `text`, text: `[image omitted: corrupted or empty data]` };
16472
+ let { base64: n6, mediaType: r5, valid: i4 } = t3(t7.source, t7.mime);
16473
+ return i4 ? { type: `image_url`, image_url: { url: `data:${r5 || `image/png`};base64,${n6}` } } : { type: `text`, text: `[image omitted: corrupted or empty data]` };
16467
16474
  }
16468
16475
  return { type: `text`, text: `[unsupported]` };
16469
16476
  }) });
16470
- else if (r4.role === `assistant`) {
16471
- let e8 = r4.content.filter((e9) => e9.type === `tool_call`).map((e9) => ({ id: e9.id, type: `function`, function: { name: e9.name, arguments: JSON.stringify(e9.arguments) } })), t7 = r4.content.filter((e9) => e9.type === `text`).filter((e9) => e9.text.trim().length > 0).map((e9) => w3(e9.text)).join(``);
16472
- if (!t7 && e8.length === 0) continue;
16473
- n5.push({ role: `assistant`, content: t7 || null, ...e8.length > 0 ? { tool_calls: e8 } : {} });
16474
- } else r4.role === `tool_result` ? n5.push({ role: `tool`, tool_call_id: r4.toolCallId, content: w3(r4.content.map((e8) => e8.type === `text` ? e8.text : ``).join(``)) }) : r4.role === `system_notification` && n5.push({ role: `user`, content: w3(S2(r4.content)) });
16477
+ else if (i3.role === `assistant`) {
16478
+ let e8 = i3.content.filter((e9) => e9.type === `tool_call`).map((e9) => ({ id: e9.id, type: `function`, function: { name: e9.name, arguments: JSON.stringify(e9.arguments) } })), t7 = i3.content.filter((e9) => e9.type === `text`).filter((e9) => e9.text.trim().length > 0).map((e9) => w3(e9.text)).join(``), a3 = i3.content.filter((e9) => e9.type === `thinking`).map((e9) => w3(e9.text)).join(``).trim();
16479
+ if (!t7 && e8.length === 0 && !a3) continue;
16480
+ n5.push({ role: `assistant`, content: t7 || null, ...e8.length > 0 ? { tool_calls: e8 } : {}, ...a3 ? { reasoning_content: a3 } : e8.length > 0 && r4 ? { reasoning_content: null } : {} });
16481
+ } else i3.role === `tool_result` ? n5.push({ role: `tool`, tool_call_id: i3.toolCallId, content: w3(i3.content.map((e8) => e8.type === `text` ? e8.text : ``).join(``)) }) : i3.role === `system_notification` && n5.push({ role: `user`, content: w3(S2(i3.content)) });
16475
16482
  return n5;
16476
16483
  }
16477
16484
  function ne2(e8) {
@@ -16488,8 +16495,8 @@ function ne2(e8) {
16488
16495
  }
16489
16496
  }
16490
16497
  function re(e8, t6, n5 = {}) {
16491
- let r4 = { model: n5.modelName ?? e8.name, messages: O2(t6), max_tokens: t6.maxTokens ?? e8.maxOutputTokens, stream: true, stream_options: { include_usage: true } };
16492
- return t6.temperature !== void 0 && !e8.reasoning && (r4.temperature = t6.temperature), e8.reasoning && t6.thinkingLevel && (r4.reasoning_effort = ne2(D2(t6.thinkingLevel, e8.thinkingLevels))), t6.tools && t6.tools.length > 0 ? r4.tools = t6.tools.map((e9) => ({ type: `function`, function: { name: e9.name, description: e9.description, parameters: T2(e9.parameters) } })) : te2(t6.messages) && (r4.tools = []), r4;
16498
+ let r4 = { model: n5.modelName ?? e8.name, messages: k3(t6), max_tokens: t6.maxTokens ?? e8.maxOutputTokens, stream: true, stream_options: { include_usage: true } };
16499
+ return t6.temperature !== void 0 && !e8.reasoning && (r4.temperature = t6.temperature), O(e8, t6.thinkingLevel) && t6.thinkingLevel !== void 0 && (r4.reasoning_effort = ne2(D2(t6.thinkingLevel, e8.thinkingLevels))), t6.tools && t6.tools.length > 0 ? r4.tools = t6.tools.map((e9) => ({ type: `function`, function: { name: e9.name, description: e9.description, parameters: T2(e9.parameters) } })) : te2(t6.messages) && (r4.tools = []), r4;
16493
16500
  }
16494
16501
  var ie = A2(`@x-otto/provider:openai-usage`);
16495
16502
  function ae2(e8) {
@@ -16510,7 +16517,7 @@ function ae2(e8) {
16510
16517
  }, r4 = { remainingRequests: t6(`x-ratelimit-remaining-requests`), remainingTokens: t6(`x-ratelimit-remaining-tokens`), limitRequests: t6(`x-ratelimit-limit-requests`), limitTokens: t6(`x-ratelimit-limit-tokens`), resetRequestsMs: n5(`x-ratelimit-reset-requests`), resetTokensMs: n5(`x-ratelimit-reset-tokens`) };
16511
16518
  if (!Object.values(r4).every((e9) => e9 === void 0)) return r4;
16512
16519
  }
16513
- function oe2(e8) {
16520
+ function A3(e8) {
16514
16521
  if (!e8) return null;
16515
16522
  let t6 = ae2(e8);
16516
16523
  if (ie.isLevelEnabled(`trace`)) {
@@ -16524,62 +16531,62 @@ function oe2(e8) {
16524
16531
  }
16525
16532
  return t6 ? { status: `unknown`, standardLimits: t6 } : null;
16526
16533
  }
16527
- var se = A2(`@x-otto/provider:stream-state`);
16528
- function k3() {
16534
+ var oe2 = A2(`@x-otto/provider:stream-state`);
16535
+ function j3() {
16529
16536
  return { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 };
16530
16537
  }
16531
- function A3(e8, t6) {
16538
+ function M2(e8, t6) {
16532
16539
  try {
16533
16540
  return { args: JSON.parse(e8), parseFailed: false };
16534
16541
  } catch {
16535
- return se.debug({ toolName: t6 }, `Failed to parse tool arguments JSON`), { args: {}, parseFailed: true };
16542
+ return oe2.debug({ toolName: t6 }, `Failed to parse tool arguments JSON`), { args: {}, parseFailed: true };
16536
16543
  }
16537
16544
  }
16538
- function le2(e8) {
16545
+ function ce(e8) {
16539
16546
  return new Set(e8?.map((e9) => e9.name) ?? []);
16540
16547
  }
16541
- function j2(e8, t6, n5) {
16542
- let { args: r4, parseFailed: i3 } = A3(n5, t6);
16548
+ function N2(e8, t6, n5) {
16549
+ let { args: r4, parseFailed: i3 } = M2(n5, t6);
16543
16550
  return { type: `tool_call`, id: e8, name: t6, arguments: r4, ...i3 ? { argumentsParseFailed: true } : {} };
16544
16551
  }
16545
- function M2(e8, t6) {
16552
+ function P2(e8, t6) {
16546
16553
  if (e8.content.some((e9) => e9.type === `tool_call`)) return e8;
16547
16554
  let n5 = e8.content.findLastIndex((e9) => e9.type === `text`);
16548
16555
  if (n5 < 0) return e8;
16549
- let r4 = e8.content[n5], i3 = P2(r4.text, t6);
16556
+ let r4 = e8.content[n5], i3 = I3(r4.text, t6);
16550
16557
  if (!i3) return e8;
16551
16558
  let a3 = [...e8.content], o3 = r4.text.slice(0, i3.matchStart).trimEnd();
16552
- return o3.length > 0 ? a3[n5] = { ...r4, text: o3 } : a3.splice(n5, 1), a3.push(j2(`recovered_${n5}`, i3.name, i3.argumentsJson)), { ...e8, content: a3 };
16559
+ return o3.length > 0 ? a3[n5] = { ...r4, text: o3 } : a3.splice(n5, 1), a3.push(N2(`recovered_${n5}`, i3.name, i3.argumentsJson)), { ...e8, content: a3 };
16553
16560
  }
16554
- var ue2 = /<invoke name="([^"]+)">((?:(?!<invoke name=")[\s\S])*?)<\/invoke>\s*$/;
16555
- var N2 = /<parameter name="([^"]+)">([\s\S]*?)<\/parameter>/g;
16556
- function P2(e8, t6) {
16557
- let n5 = e8.trimEnd(), r4 = ue2.exec(n5);
16561
+ var le2 = /<invoke name="([^"]+)">((?:(?!<invoke name=")[\s\S])*?)<\/invoke>\s*$/;
16562
+ var F2 = /<parameter name="([^"]+)">([\s\S]*?)<\/parameter>/g;
16563
+ function I3(e8, t6) {
16564
+ let n5 = e8.trimEnd(), r4 = le2.exec(n5);
16558
16565
  if (!r4) return null;
16559
16566
  let i3 = r4[1];
16560
16567
  if (!t6.has(i3)) return null;
16561
16568
  let a3 = {}, o3 = r4[2], s3;
16562
- for (N2.lastIndex = 0; (s3 = N2.exec(o3)) !== null; ) a3[s3[1]] = s3[2];
16569
+ for (F2.lastIndex = 0; (s3 = F2.exec(o3)) !== null; ) a3[s3[1]] = s3[2];
16563
16570
  return { name: i3, argumentsJson: JSON.stringify(a3), matchStart: r4.index };
16564
16571
  }
16565
- function F3() {
16566
- return { ...k3(), textContent: ``, thinkingText: ``, toolCalls: /* @__PURE__ */ new Map(), stopReason: `end_turn` };
16572
+ function L2() {
16573
+ return { ...j3(), textContent: ``, thinkingText: ``, toolCalls: /* @__PURE__ */ new Map(), stopReason: `end_turn` };
16567
16574
  }
16568
- function I2(e8, t6 = true) {
16575
+ function R3(e8, t6 = true) {
16569
16576
  let n5 = [];
16570
- if (e8.thinkingText && n5.push({ type: `thinking`, text: e8.thinkingText }), e8.textContent && n5.push({ type: `text`, text: e8.textContent }), t6) for (let [, t7] of e8.toolCalls) n5.push(j2(t7.id, t7.name, t7.argumentsJson));
16577
+ if (e8.thinkingText && n5.push({ type: `thinking`, text: e8.thinkingText }), e8.textContent && n5.push({ type: `text`, text: e8.textContent }), t6) for (let [, t7] of e8.toolCalls) n5.push(N2(t7.id, t7.name, t7.argumentsJson));
16571
16578
  return n5;
16572
16579
  }
16573
- function fe2(e8, t6 = true) {
16580
+ function de2(e8, t6 = true) {
16574
16581
  let n5 = [], r4 = [...e8.entries()].sort(([e9], [t7]) => e9 - t7);
16575
- for (let [, e9] of r4) e9.kind === `thinking` ? e9.text && n5.push({ type: `thinking`, text: e9.text, ...e9.signature === void 0 ? {} : { signature: e9.signature } }) : e9.kind === `text` ? e9.text && n5.push({ type: `text`, text: e9.text }) : t6 && n5.push(j2(e9.id, e9.name, e9.argumentsJson));
16582
+ for (let [, e9] of r4) e9.kind === `thinking` ? e9.text && n5.push({ type: `thinking`, text: e9.text, ...e9.signature === void 0 ? {} : { signature: e9.signature } }) : e9.kind === `text` ? e9.text && n5.push({ type: `text`, text: e9.text }) : t6 && n5.push(N2(e9.id, e9.name, e9.argumentsJson));
16576
16583
  return n5;
16577
16584
  }
16578
- function L3(e8, t6, n5, r4) {
16585
+ function z2(e8, t6, n5, r4) {
16579
16586
  return { role: `assistant`, content: t6, api: e8.api, provider: e8.provider, model: e8.model, usage: { inputTokens: n5.inputTokens, outputTokens: n5.outputTokens, cacheReadTokens: n5.cacheReadTokens, cacheWriteTokens: n5.cacheWriteTokens }, stopReason: r4 };
16580
16587
  }
16581
- var pe = A2(`@x-otto/provider:chat-completions-stream`);
16582
- function R2(e8) {
16588
+ var fe = A2(`@x-otto/provider:chat-completions-stream`);
16589
+ function B2(e8) {
16583
16590
  switch (e8) {
16584
16591
  case `stop`:
16585
16592
  return `end_turn`;
@@ -16590,11 +16597,11 @@ function R2(e8) {
16590
16597
  case `content_filter`:
16591
16598
  return `refusal`;
16592
16599
  default:
16593
- return pe.warn(`Unknown chat-completions finish_reason: ${e8}`), `end_turn`;
16600
+ return fe.warn(`Unknown chat-completions finish_reason: ${e8}`), `end_turn`;
16594
16601
  }
16595
16602
  }
16596
- async function* me(e8) {
16597
- let { url: t6, headers: r4, body: i3, identity: a3, signal: o3, timeout: s3, idleTimeout: c3, onResponse: l2, registeredToolNames: u } = e8, d = F3(), p = (e9 = false) => L3(a3, I2(d, e9), d, d.stopReason), m = false, h = false, g = false, _3, v3 = xt({ url: t6, body: i3, headers: r4, signal: o3, timeout: s3, idleTimeout: c3, onResponse: (e9) => {
16603
+ async function* pe(e8) {
16604
+ let { url: t6, headers: r4, body: i3, identity: a3, signal: o3, timeout: s3, idleTimeout: c3, onResponse: l2, registeredToolNames: u } = e8, d = L2(), p = (e9 = false) => z2(a3, R3(d, e9), d, d.stopReason), m = false, h = false, g = false, _3, v3 = bt({ url: t6, body: i3, headers: r4, signal: o3, timeout: s3, idleTimeout: c3, onResponse: (e9) => {
16598
16605
  _3 = e9, l2?.(e9);
16599
16606
  } });
16600
16607
  try {
@@ -16608,7 +16615,7 @@ async function* me(e8) {
16608
16615
  }
16609
16616
  if (t7.error) {
16610
16617
  let e10 = t7.error, r6 = typeof e10.message == `string` ? e10.message : JSON.stringify(e10), i5 = e10.code, a5 = typeof i5 == `number` ? i5 : typeof i5 == `string` && /^\d+/.test(i5) ? Number(i5.match(/^\d+/)?.[0]) : void 0;
16611
- throw new we(`Chat Completions stream error: ${r6}`, { code: `PROVIDER_API_ERROR`, status: a5 });
16618
+ throw new Ce(`Chat Completions stream error: ${r6}`, { code: `PROVIDER_API_ERROR`, status: a5 });
16612
16619
  }
16613
16620
  if (t7.usage) {
16614
16621
  let e10 = t7.usage, n5 = e10.prompt_tokens ?? 0, r6 = e10.completion_tokens ?? 0, i5 = e10.prompt_tokens_details?.cached_tokens ?? e10.prompt_cache_hit_tokens ?? 0;
@@ -16617,7 +16624,7 @@ async function* me(e8) {
16617
16624
  let r5 = t7.choices?.[0];
16618
16625
  if (!r5) continue;
16619
16626
  let i4 = r5.delta;
16620
- if (m || (m = true, yield { type: `start`, partial: p() }), r5.finish_reason && (d.stopReason = R2(r5.finish_reason)), !i4) continue;
16627
+ if (m || (m = true, yield { type: `start`, partial: p() }), r5.finish_reason && (d.stopReason = B2(r5.finish_reason)), !i4) continue;
16621
16628
  if (i4.content) {
16622
16629
  let e10 = i4.content;
16623
16630
  h || (h = true, yield { type: `text_start`, index: 0, partial: p() }), d.textContent += e10, yield { type: `text_delta`, index: 0, delta: e10, partial: p() };
@@ -16634,13 +16641,13 @@ async function* me(e8) {
16634
16641
  }
16635
16642
  }
16636
16643
  g && (yield { type: `thinking_end`, index: 0, content: d.thinkingText, partial: p() }), h && (yield { type: `text_end`, index: 0, content: d.textContent, partial: p() });
16637
- for (let [e9, t7] of d.toolCalls) yield { type: `tool_call_end`, index: e9, toolCall: j2(t7.id, t7.name, t7.argumentsJson), partial: p() };
16638
- yield { type: `done`, reason: d.stopReason, message: M2(p(true), u ?? /* @__PURE__ */ new Set()), providerUsage: oe2(_3) };
16644
+ for (let [e9, t7] of d.toolCalls) yield { type: `tool_call_end`, index: e9, toolCall: N2(t7.id, t7.name, t7.argumentsJson), partial: p() };
16645
+ yield { type: `done`, reason: d.stopReason, message: P2(p(true), u ?? /* @__PURE__ */ new Set()), providerUsage: A3(_3) };
16639
16646
  } catch (e9) {
16640
- yield { type: `error`, error: e9 instanceof Error ? e9 : new we(`Unknown Chat Completions stream error`, { code: `PROVIDER_STREAM_ERROR` }) };
16647
+ yield { type: `error`, error: e9 instanceof Error ? e9 : new Ce(`Unknown Chat Completions stream error`, { code: `PROVIDER_STREAM_ERROR` }) };
16641
16648
  }
16642
16649
  }
16643
- function z2(e8, t6, n5) {
16650
+ function V3(e8, t6, n5) {
16644
16651
  for (let r4 of e8) {
16645
16652
  if (!r4) continue;
16646
16653
  let e9 = r4.split(`.`)[1];
@@ -16657,45 +16664,45 @@ function z2(e8, t6, n5) {
16657
16664
  }
16658
16665
  }
16659
16666
  }
16660
- var he = /* @__PURE__ */ new Set([`authorization`, `x-api-key`]);
16661
- var ge = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
16662
- var _e = /[\u0000-\u001f\u007f]/g;
16663
- function B3(e8, t6, n5, r4) {
16667
+ var me = /* @__PURE__ */ new Set([`authorization`, `x-api-key`]);
16668
+ var he = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
16669
+ var ge = /[\u0000-\u001f\u007f]/g;
16670
+ function H2(e8, t6, n5, r4) {
16664
16671
  let i3 = /* @__PURE__ */ new Map();
16665
16672
  if (!e8) return i3;
16666
16673
  for (let [a3, o3] of Object.entries(e8)) {
16667
16674
  let e9 = a3.trim();
16668
- if (!ge.test(e9)) {
16675
+ if (!he.test(e9)) {
16669
16676
  n5?.warn({ provider: r4, source: t6, header: a3 }, `dropped request header with invalid name (RFC 7230 token expected)`);
16670
16677
  continue;
16671
16678
  }
16672
16679
  if (typeof o3 != `string`) continue;
16673
- let s3 = o3.replace(_e, ``).trim();
16680
+ let s3 = o3.replace(ge, ``).trim();
16674
16681
  s3 && i3.set(e9.toLowerCase(), { name: e9, value: s3 });
16675
16682
  }
16676
16683
  return i3;
16677
16684
  }
16678
- function ve(e8) {
16685
+ function _e(e8) {
16679
16686
  if (!e8?.headers.length) return;
16680
16687
  let t6 = {};
16681
16688
  for (let n5 of e8.headers) {
16682
16689
  if (n5.source.kind !== `jwt-claim`) continue;
16683
- let r4 = z2(n5.source.tokenSources?.length ? n5.source.tokenSources.map((t7) => t7 === `access_token` ? e8.token : void 0) : [e8.token], n5.source.claim, n5.source.namespace);
16690
+ let r4 = V3(n5.source.tokenSources?.length ? n5.source.tokenSources.map((t7) => t7 === `access_token` ? e8.token : void 0) : [e8.token], n5.source.claim, n5.source.namespace);
16684
16691
  r4 && (t6[n5.header] = r4);
16685
16692
  }
16686
16693
  return Object.keys(t6).length > 0 ? t6 : void 0;
16687
16694
  }
16688
- function ye(e8) {
16689
- let { logger: t6, diagnosticLabel: n5, allowAuthHeaderOverride: r4 } = e8, i3 = [{ label: `protocolDefaults`, entries: B3(e8.protocolDefaults, `protocolDefaults`, t6, n5) }, { label: `staticHeaders`, entries: B3(e8.staticHeaders, `staticHeaders`, t6, n5) }, { label: `tokenDerived`, entries: B3(ve(e8.tokenDerived), `tokenDerived`, t6, n5) }, { label: `customized`, entries: B3(e8.customized, `customized`, t6, n5) }], a3 = /* @__PURE__ */ new Set([`staticHeaders`, `tokenDerived`, `customized`]), o3 = /* @__PURE__ */ new Map();
16695
+ function ve(e8) {
16696
+ let { logger: t6, diagnosticLabel: n5, allowAuthHeaderOverride: r4 } = e8, i3 = [{ label: `protocolDefaults`, entries: H2(e8.protocolDefaults, `protocolDefaults`, t6, n5) }, { label: `staticHeaders`, entries: H2(e8.staticHeaders, `staticHeaders`, t6, n5) }, { label: `tokenDerived`, entries: H2(_e(e8.tokenDerived), `tokenDerived`, t6, n5) }, { label: `customized`, entries: H2(e8.customized, `customized`, t6, n5) }], a3 = /* @__PURE__ */ new Set([`staticHeaders`, `tokenDerived`, `customized`]), o3 = /* @__PURE__ */ new Map();
16690
16697
  for (let { label: e9, entries: s4 } of i3) for (let [i4, c3] of s4) {
16691
- if (!r4 && a3.has(e9) && he.has(i4)) {
16698
+ if (!r4 && a3.has(e9) && me.has(i4)) {
16692
16699
  t6?.warn({ provider: n5, source: e9, header: c3.name }, `dropped attempt to override auth header (declare allowAuthHeaderOverride to permit)`);
16693
16700
  continue;
16694
16701
  }
16695
16702
  let s5 = o3.get(i4);
16696
16703
  s5 && e9 === `customized` && s5.value !== c3.value && t6?.debug({ provider: n5, header: c3.name }, `customizeRequest overrode a previously declared request header`), o3.set(i4, c3);
16697
16704
  }
16698
- for (let [i4, a4] of B3(e8.auth, `auth`, t6, n5)) {
16705
+ for (let [i4, a4] of H2(e8.auth, `auth`, t6, n5)) {
16699
16706
  if (r4 && o3.has(i4)) {
16700
16707
  t6?.debug({ provider: n5, header: a4.name }, `provider-declared auth header kept (allowAuthHeaderOverride); otto-resolved credential not applied`);
16701
16708
  continue;
@@ -16706,7 +16713,7 @@ function ye(e8) {
16706
16713
  for (let { name: e9, value: t7 } of o3.values()) s3[e9] = t7;
16707
16714
  return s3;
16708
16715
  }
16709
- var V2 = A2(`@x-otto/provider:oauth:templates`);
16716
+ var U = A2(`@x-otto/provider:oauth:templates`);
16710
16717
 
16711
16718
  // ../../extensions/plugin-otto-wire-protocols/src/anthropic-usage.ts
16712
16719
  var LIMIT_TYPE_ABBREVIATION = {
@@ -16720,7 +16727,7 @@ function readBucketUtilization(headers, limitType) {
16720
16727
  if (!limitType) return void 0;
16721
16728
  const abbr = LIMIT_TYPE_ABBREVIATION[limitType];
16722
16729
  if (!abbr) return void 0;
16723
- const raw = wt(headers, `anthropic-ratelimit-unified-${abbr}-utilization`);
16730
+ const raw = Ct(headers, `anthropic-ratelimit-unified-${abbr}-utilization`);
16724
16731
  if (raw === void 0) return void 0;
16725
16732
  const n5 = Number(raw);
16726
16733
  if (!Number.isFinite(n5)) return void 0;
@@ -16728,13 +16735,13 @@ function readBucketUtilization(headers, limitType) {
16728
16735
  }
16729
16736
  function extractProviderUsageFromHeaders(headers) {
16730
16737
  if (!headers) return null;
16731
- const status = wt(headers, "anthropic-ratelimit-unified-status");
16738
+ const status = Ct(headers, "anthropic-ratelimit-unified-status");
16732
16739
  if (status !== "allowed" && status !== "allowed_warning" && status !== "rejected") return null;
16733
- const limitType = wt(headers, "anthropic-ratelimit-unified-representative-claim");
16734
- const resetRaw = wt(headers, "anthropic-ratelimit-unified-reset");
16735
- const overageStatus = wt(headers, "anthropic-ratelimit-unified-overage-status");
16736
- const overageResetRaw = wt(headers, "anthropic-ratelimit-unified-overage-reset");
16737
- const overageDisabledReason = wt(
16740
+ const limitType = Ct(headers, "anthropic-ratelimit-unified-representative-claim");
16741
+ const resetRaw = Ct(headers, "anthropic-ratelimit-unified-reset");
16742
+ const overageStatus = Ct(headers, "anthropic-ratelimit-unified-overage-status");
16743
+ const overageResetRaw = Ct(headers, "anthropic-ratelimit-unified-overage-reset");
16744
+ const overageDisabledReason = Ct(
16738
16745
  headers,
16739
16746
  "anthropic-ratelimit-unified-overage-disabled-reason"
16740
16747
  );
@@ -16988,16 +16995,16 @@ function mapStopReason(reason) {
16988
16995
  }
16989
16996
  function initStreamState(modelId) {
16990
16997
  return {
16991
- ...k3(),
16998
+ ...j3(),
16992
16999
  model: modelId,
16993
17000
  blocks: /* @__PURE__ */ new Map(),
16994
17001
  stopReason: "end_turn"
16995
17002
  };
16996
17003
  }
16997
17004
  function buildAssistantMessage(state, final = false) {
16998
- return L3(
17005
+ return z2(
16999
17006
  { api: "anthropic-messages", provider: "anthropic", model: state.model },
17000
- fe2(state.blocks, final),
17007
+ de2(state.blocks, final),
17001
17008
  state,
17002
17009
  state.stopReason
17003
17010
  );
@@ -17091,7 +17098,7 @@ function dispatchStreamEvent(event, state) {
17091
17098
  return [{
17092
17099
  type: "tool_call_end",
17093
17100
  index,
17094
- toolCall: j2(block.id, block.name, block.argumentsJson),
17101
+ toolCall: N2(block.id, block.name, block.argumentsJson),
17095
17102
  partial: buildAssistantMessage(state)
17096
17103
  }];
17097
17104
  }
@@ -17116,9 +17123,10 @@ function dispatchStreamEvent(event, state) {
17116
17123
  }
17117
17124
  }
17118
17125
  var AnthropicStream = class {
17119
- constructor(resolveCredential, baseUrlResolver, authResolver, customizeRequest, logger = _2, staticHeaders, tokenDerivedHeaders, allowAuthHeaderOverride) {
17126
+ constructor(resolveCredential, baseUrlResolver, preferResolvedBaseUrl = false, authResolver, customizeRequest, logger = _2, staticHeaders, tokenDerivedHeaders, allowAuthHeaderOverride) {
17120
17127
  this.resolveCredential = resolveCredential;
17121
17128
  this.baseUrlResolver = baseUrlResolver;
17129
+ this.preferResolvedBaseUrl = preferResolvedBaseUrl;
17122
17130
  this.authResolver = authResolver;
17123
17131
  this.customizeRequest = customizeRequest;
17124
17132
  this.logger = logger;
@@ -17128,6 +17136,7 @@ var AnthropicStream = class {
17128
17136
  }
17129
17137
  resolveCredential;
17130
17138
  baseUrlResolver;
17139
+ preferResolvedBaseUrl;
17131
17140
  authResolver;
17132
17141
  customizeRequest;
17133
17142
  logger;
@@ -17162,15 +17171,20 @@ var AnthropicStream = class {
17162
17171
  if (envKey) {
17163
17172
  return { token: envKey, mode: "api_key" };
17164
17173
  }
17165
- throw new we(
17174
+ throw new Ce(
17166
17175
  "Missing Anthropic API key. Set ANTHROPIC_API_KEY or configure via auth file.",
17167
17176
  { code: "PROVIDER_AUTH_MISSING" }
17168
17177
  );
17169
17178
  }
17170
17179
  async buildRequestParams(model, context, auth) {
17171
- const baseURL = await v2("ANTHROPIC_BASE_URL", this.baseUrlResolver, model.baseUrl);
17180
+ const baseURL = await v2(
17181
+ "ANTHROPIC_BASE_URL",
17182
+ this.baseUrlResolver,
17183
+ model.baseUrl,
17184
+ this.preferResolvedBaseUrl
17185
+ );
17172
17186
  const customization = this.customizeRequest?.({ auth, sessionId: this.requestSessionId });
17173
- const defaultHeaders = ye({
17187
+ const defaultHeaders = ve({
17174
17188
  staticHeaders: this.staticHeaders,
17175
17189
  tokenDerived: this.tokenDerivedHeaders?.length ? { headers: this.tokenDerivedHeaders, token: auth.token } : void 0,
17176
17190
  customized: customization?.defaultHeaders,
@@ -17257,14 +17271,14 @@ var AnthropicStream = class {
17257
17271
  // RFC-232(终局修正):跨 wire 协议救回"模型把工具调用写成字面文本 XML"违约响应
17258
17272
  // (见 stream-state.ts recoverLiteralInvokeToolCalls 头注释)。判据内部短路,
17259
17273
  // 无违约态时零开销(引用相等,不构造新对象)。
17260
- message: M2(doneMessage, le2(context.tools)),
17274
+ message: P2(doneMessage, ce(context.tools)),
17261
17275
  providerUsage
17262
17276
  };
17263
17277
  } catch (error) {
17264
17278
  if (error instanceof Anthropic.APIError) {
17265
17279
  yield {
17266
17280
  type: "error",
17267
- error: new we(`Anthropic API error ${error.status}: ${error.message}`, {
17281
+ error: new Ce(`Anthropic API error ${error.status}: ${error.message}`, {
17268
17282
  code: "PROVIDER_API_ERROR",
17269
17283
  cause: error,
17270
17284
  // 把 SDK 的 HTTP status/headers 转成 ProviderError 的 typed 字段
@@ -17282,7 +17296,7 @@ var AnthropicStream = class {
17282
17296
  } else {
17283
17297
  yield {
17284
17298
  type: "error",
17285
- error: new we("Unknown Anthropic stream error", {
17299
+ error: new Ce("Unknown Anthropic stream error", {
17286
17300
  code: "PROVIDER_STREAM_ERROR"
17287
17301
  })
17288
17302
  };
@@ -17294,6 +17308,7 @@ function createAnthropicProvider(options = {}) {
17294
17308
  return new AnthropicStream(
17295
17309
  options.resolveKey,
17296
17310
  options.resolveBaseUrl,
17311
+ options.preferResolvedBaseUrl,
17297
17312
  options.resolveAuth,
17298
17313
  options.customizeRequest,
17299
17314
  options.logger,
@@ -17429,16 +17444,16 @@ function ensureBlock(blocks, index, kind) {
17429
17444
  }
17430
17445
  function initStreamState2(model) {
17431
17446
  return {
17432
- ...k3(),
17447
+ ...j3(),
17433
17448
  model,
17434
17449
  blocks: /* @__PURE__ */ new Map(),
17435
17450
  stopReason: "end_turn"
17436
17451
  };
17437
17452
  }
17438
17453
  function buildAssistantMessage2(state, final = false) {
17439
- return L3(
17454
+ return z2(
17440
17455
  { api: state.model.api, provider: state.model.provider, model: state.model.id },
17441
- fe2(state.blocks, final),
17456
+ de2(state.blocks, final),
17442
17457
  state,
17443
17458
  state.stopReason
17444
17459
  );
@@ -17526,7 +17541,7 @@ function dispatchResponsesSSEEvent(type, data, state) {
17526
17541
  return {
17527
17542
  events: [{
17528
17543
  type: "error",
17529
- error: new we(`OpenAI Responses API error: ${message}`, {
17544
+ error: new Ce(`OpenAI Responses API error: ${message}`, {
17530
17545
  code: "PROVIDER_API_ERROR",
17531
17546
  errorType
17532
17547
  })
@@ -17539,9 +17554,10 @@ function dispatchResponsesSSEEvent(type, data, state) {
17539
17554
  }
17540
17555
  }
17541
17556
  var OpenAIResponsesStream = class {
17542
- constructor(resolveCredential, baseUrlResolver, tokenDerivedHeaders, staticHeaders, logger = _2, customizeRequest, allowAuthHeaderOverride) {
17557
+ constructor(resolveCredential, baseUrlResolver, preferResolvedBaseUrl = false, tokenDerivedHeaders, staticHeaders, logger = _2, customizeRequest, allowAuthHeaderOverride) {
17543
17558
  this.resolveCredential = resolveCredential;
17544
17559
  this.baseUrlResolver = baseUrlResolver;
17560
+ this.preferResolvedBaseUrl = preferResolvedBaseUrl;
17545
17561
  this.tokenDerivedHeaders = tokenDerivedHeaders;
17546
17562
  this.staticHeaders = staticHeaders;
17547
17563
  this.logger = logger;
@@ -17550,6 +17566,7 @@ var OpenAIResponsesStream = class {
17550
17566
  }
17551
17567
  resolveCredential;
17552
17568
  baseUrlResolver;
17569
+ preferResolvedBaseUrl;
17553
17570
  tokenDerivedHeaders;
17554
17571
  staticHeaders;
17555
17572
  logger;
@@ -17574,12 +17591,17 @@ var OpenAIResponsesStream = class {
17574
17591
  if (envKey) {
17575
17592
  return { token: envKey, mode: "api_key" };
17576
17593
  }
17577
- throw new we("Missing OpenAI credential. Set OPENAI_API_KEY or login via OAuth.", {
17594
+ throw new Ce("Missing OpenAI credential. Set OPENAI_API_KEY or login via OAuth.", {
17578
17595
  code: "PROVIDER_AUTH_MISSING"
17579
17596
  });
17580
17597
  }
17581
17598
  async resolveBaseUrl(model) {
17582
- return v2("OPENAI_BASE_URL", this.baseUrlResolver, model.baseUrl);
17599
+ return v2(
17600
+ "OPENAI_BASE_URL",
17601
+ this.baseUrlResolver,
17602
+ model.baseUrl,
17603
+ this.preferResolvedBaseUrl
17604
+ );
17583
17605
  }
17584
17606
  /**
17585
17607
  * RFC-270 D1:头组装收敛到 @x-otto/provider 的统一管线(此前本方法自行合并,且注释声称
@@ -17591,7 +17613,7 @@ var OpenAIResponsesStream = class {
17591
17613
  auth: { mode: auth.mode, beta: auth.beta },
17592
17614
  sessionId: this.requestSessionId
17593
17615
  });
17594
- return ye({
17616
+ return ve({
17595
17617
  staticHeaders: this.staticHeaders,
17596
17618
  tokenDerived: this.tokenDerivedHeaders?.length ? { headers: this.tokenDerivedHeaders, token: auth.token } : void 0,
17597
17619
  customized: customization?.defaultHeaders,
@@ -17611,7 +17633,7 @@ var OpenAIResponsesStream = class {
17611
17633
  let started = false;
17612
17634
  try {
17613
17635
  let responseHeaders;
17614
- const sse = xt({
17636
+ const sse = bt({
17615
17637
  url,
17616
17638
  body,
17617
17639
  headers: this.buildHeaders(auth, model.provider),
@@ -17650,7 +17672,7 @@ var OpenAIResponsesStream = class {
17650
17672
  yield {
17651
17673
  type: "tool_call_end",
17652
17674
  index,
17653
- toolCall: j2(block.id, block.name, block.argumentsJson),
17675
+ toolCall: N2(block.id, block.name, block.argumentsJson),
17654
17676
  partial: buildAssistantMessage2(state)
17655
17677
  };
17656
17678
  } else if (block.kind === "text") {
@@ -17668,8 +17690,8 @@ var OpenAIResponsesStream = class {
17668
17690
  type: "done",
17669
17691
  reason: state.stopReason,
17670
17692
  // RFC-232(终局修正):跨 wire 协议救回违约响应,见 @x-otto/provider stream-state.ts。
17671
- message: M2(buildAssistantMessage2(state, true), le2(context.tools)),
17672
- providerUsage: oe2(responseHeaders)
17693
+ message: P2(buildAssistantMessage2(state, true), ce(context.tools)),
17694
+ providerUsage: A3(responseHeaders)
17673
17695
  };
17674
17696
  } catch (error) {
17675
17697
  if (error instanceof Error) {
@@ -17677,7 +17699,7 @@ var OpenAIResponsesStream = class {
17677
17699
  } else {
17678
17700
  yield {
17679
17701
  type: "error",
17680
- error: new we("Unknown OpenAI Responses stream error", {
17702
+ error: new Ce("Unknown OpenAI Responses stream error", {
17681
17703
  code: "PROVIDER_STREAM_ERROR"
17682
17704
  })
17683
17705
  };
@@ -17689,6 +17711,7 @@ function createOpenAIResponsesProvider(options = {}) {
17689
17711
  return new OpenAIResponsesStream(
17690
17712
  options.resolveKey,
17691
17713
  options.resolveBaseUrl,
17714
+ options.preferResolvedBaseUrl,
17692
17715
  options.tokenDerivedHeaders,
17693
17716
  options.headers,
17694
17717
  options.logger,
@@ -17700,8 +17723,10 @@ function createOpenAIResponsesProvider(options = {}) {
17700
17723
  // ../../extensions/plugin-otto-wire-protocols/src/openai-completions.ts
17701
17724
  var import_node_crypto3 = require("node:crypto");
17702
17725
  var OpenAICompletionsStream = class {
17703
- constructor(resolveCredential, extraHeaders, tokenDerivedHeaders, logger = _2, customizeRequest, allowAuthHeaderOverride) {
17726
+ constructor(resolveCredential, baseUrlResolver, preferResolvedBaseUrl = false, extraHeaders, tokenDerivedHeaders, logger = _2, customizeRequest, allowAuthHeaderOverride) {
17704
17727
  this.resolveCredential = resolveCredential;
17728
+ this.baseUrlResolver = baseUrlResolver;
17729
+ this.preferResolvedBaseUrl = preferResolvedBaseUrl;
17705
17730
  this.extraHeaders = extraHeaders;
17706
17731
  this.tokenDerivedHeaders = tokenDerivedHeaders;
17707
17732
  this.logger = logger;
@@ -17709,6 +17734,8 @@ var OpenAICompletionsStream = class {
17709
17734
  this.allowAuthHeaderOverride = allowAuthHeaderOverride;
17710
17735
  }
17711
17736
  resolveCredential;
17737
+ baseUrlResolver;
17738
+ preferResolvedBaseUrl;
17712
17739
  extraHeaders;
17713
17740
  tokenDerivedHeaders;
17714
17741
  logger;
@@ -17729,7 +17756,7 @@ var OpenAICompletionsStream = class {
17729
17756
  return { token: key, mode: "api_key" };
17730
17757
  }
17731
17758
  }
17732
- throw new we(
17759
+ throw new Ce(
17733
17760
  `Missing credential for provider '${model.provider}' (openai-completions).`,
17734
17761
  { code: "PROVIDER_AUTH_MISSING" }
17735
17762
  );
@@ -17742,7 +17769,7 @@ var OpenAICompletionsStream = class {
17742
17769
  auth: { mode: auth.mode, beta: auth.beta },
17743
17770
  sessionId: this.requestSessionId
17744
17771
  });
17745
- const headers = ye({
17772
+ const headers = ve({
17746
17773
  staticHeaders: this.extraHeaders,
17747
17774
  tokenDerived: this.tokenDerivedHeaders?.length ? { headers: this.tokenDerivedHeaders, token: key } : void 0,
17748
17775
  customized: customization?.defaultHeaders,
@@ -17751,11 +17778,12 @@ var OpenAICompletionsStream = class {
17751
17778
  logger: this.logger,
17752
17779
  diagnosticLabel: `openai-completions:${model.provider}`
17753
17780
  });
17754
- yield* me({
17781
+ yield* pe({
17755
17782
  url: `${await v2(
17756
17783
  model.provider === "deepseek" ? "DEEPSEEK_BASE_URL" : "OPENAI_BASE_URL",
17757
- void 0,
17758
- model.baseUrl
17784
+ this.baseUrlResolver,
17785
+ model.baseUrl,
17786
+ this.preferResolvedBaseUrl
17759
17787
  )}/chat/completions`,
17760
17788
  headers,
17761
17789
  body: re(model, context),
@@ -17775,13 +17803,15 @@ var OpenAICompletionsStream = class {
17775
17803
  // 区分——分段判据比"模型是否声明 reasoning"更准(同一个 reasoning 模型的不同 turn,
17776
17804
  // 思考时长差异极大,用模型属性预测本就是弱相关变量)。
17777
17805
  // RFC-232(终局修正):跨 wire 协议救回违约响应,见 @x-otto/provider stream-state.ts。
17778
- registeredToolNames: le2(context.tools)
17806
+ registeredToolNames: ce(context.tools)
17779
17807
  });
17780
17808
  }
17781
17809
  };
17782
17810
  function createOpenAICompletionsProvider(options = {}) {
17783
17811
  return new OpenAICompletionsStream(
17784
17812
  options.resolveKey,
17813
+ options.resolveBaseUrl,
17814
+ options.preferResolvedBaseUrl,
17785
17815
  options.headers,
17786
17816
  options.tokenDerivedHeaders,
17787
17817
  options.logger,
@@ -17794,6 +17824,8 @@ function createOpenAICompletionsProvider(options = {}) {
17794
17824
  function adaptToOpenAICompletions(input) {
17795
17825
  return createOpenAICompletionsProvider({
17796
17826
  resolveKey: () => input.resolveAuth().then((a3) => a3?.token),
17827
+ resolveBaseUrl: input.resolveBaseUrl,
17828
+ preferResolvedBaseUrl: input.preferResolvedBaseUrl,
17797
17829
  headers: input.headers,
17798
17830
  tokenDerivedHeaders: input.tokenDerivedHeaders,
17799
17831
  logger: input.logger,
@@ -17806,6 +17838,7 @@ function adaptToOpenAIResponses(input) {
17806
17838
  return createOpenAIResponsesProvider({
17807
17839
  resolveKey: () => input.resolveAuth().then((a3) => a3?.token),
17808
17840
  resolveBaseUrl: input.resolveBaseUrl,
17841
+ preferResolvedBaseUrl: input.preferResolvedBaseUrl,
17809
17842
  tokenDerivedHeaders: input.tokenDerivedHeaders,
17810
17843
  headers: input.headers,
17811
17844
  logger: input.logger,
@@ -17818,6 +17851,7 @@ function adaptToAnthropicMessages(input) {
17818
17851
  return createAnthropicProvider({
17819
17852
  resolveAuth: () => input.resolveAuth(),
17820
17853
  resolveBaseUrl: input.resolveBaseUrl,
17854
+ preferResolvedBaseUrl: input.preferResolvedBaseUrl,
17821
17855
  customizeRequest: input.customizeRequest,
17822
17856
  logger: input.logger,
17823
17857
  // RFC-270 缺陷 1(P0):此前这两行缺失——另两个 adapter 都透传了 headers,唯独本