@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.
- package/dist/{auth-command--ky3JspQ.js → auth-command-Cw71Gud0.js} +2 -2
- package/dist/{auth-command--ky3JspQ.js.map → auth-command-Cw71Gud0.js.map} +1 -1
- package/dist/build-id-9kqTcA9R.js +3 -0
- package/dist/build-id-9kqTcA9R.js.map +1 -0
- package/dist/bundled-extensions/plugin-otto-wire-protocols/plugin-dist/meta.json +1 -1
- package/dist/bundled-extensions/plugin-otto-wire-protocols/plugin-dist/plugin.cjs +195 -161
- package/dist/bundled-extensions/plugin-otto-wire-protocols/plugin.ts +4 -0
- package/dist/bundled-extensions/plugin-otto-wire-protocols/src/anthropic-messages.ts +9 -1
- package/dist/bundled-extensions/plugin-otto-wire-protocols/src/openai-completions.ts +11 -1
- package/dist/bundled-extensions/plugin-otto-wire-protocols/src/openai-responses.ts +9 -1
- package/dist/command-dispatcher-W3E5zhWN.js +18 -0
- package/dist/command-dispatcher-W3E5zhWN.js.map +1 -0
- package/dist/create-host-app-_xUKDWy7.js +3 -0
- package/dist/{create-host-app-BtifD7KK.js.map → create-host-app-_xUKDWy7.js.map} +1 -1
- package/dist/{doctor-BAxvhLws.js → doctor-BDEllJgc.js} +2 -2
- package/dist/{doctor-BAxvhLws.js.map → doctor-BDEllJgc.js.map} +1 -1
- package/dist/{feedback-CJVKfI0S.js → feedback-CqTWm_TD.js} +10 -10
- package/dist/{feedback-CJVKfI0S.js.map → feedback-CqTWm_TD.js.map} +1 -1
- package/dist/{feedback-backend-methods-C23Z2suw.js → feedback-backend-methods-3CMRkGoJ.js} +2 -2
- package/dist/{feedback-backend-methods-C23Z2suw.js.map → feedback-backend-methods-3CMRkGoJ.js.map} +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/{interactive-schedule-BKiI3Qrw.js → interactive-schedule-D0NOMjB7.js} +2 -2
- package/dist/{interactive-schedule-BKiI3Qrw.js.map → interactive-schedule-D0NOMjB7.js.map} +1 -1
- package/dist/{mcp-server-CfJK4pav.js → mcp-server-kME-VSX4.js} +2 -2
- package/dist/{mcp-server-CfJK4pav.js.map → mcp-server-kME-VSX4.js.map} +1 -1
- package/dist/{parse-cli-B9Go-f6A.js → parse-cli-Byh6vJ3e.js} +2 -2
- package/dist/{parse-cli-B9Go-f6A.js.map → parse-cli-Byh6vJ3e.js.map} +1 -1
- package/dist/schedule-C_uHI2M8.js +5 -0
- package/dist/schedule-C_uHI2M8.js.map +1 -0
- package/dist/{serve-ChSSkjLs.js → serve-Di0fC7-B.js} +2 -2
- package/dist/{serve-ChSSkjLs.js.map → serve-Di0fC7-B.js.map} +1 -1
- package/dist/{version-BL66TSQP.js → version-CHEEY4Vx.js} +2 -2
- package/dist/{version-BL66TSQP.js.map → version-CHEEY4Vx.js.map} +1 -1
- package/package.json +18 -18
- package/dist/build-id-C94zHRXj.js +0 -3
- package/dist/build-id-C94zHRXj.js.map +0 -1
- package/dist/command-dispatcher-CKj6qR-G.js +0 -18
- package/dist/command-dispatcher-CKj6qR-G.js.map +0 -1
- package/dist/create-host-app-BtifD7KK.js +0 -3
- package/dist/schedule-Ke0jwatM.js +0 -5
- 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
|
|
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
|
|
16141
|
+
var x = class extends b {
|
|
16142
16142
|
};
|
|
16143
|
-
var
|
|
16143
|
+
var Ce = class extends b {
|
|
16144
16144
|
};
|
|
16145
|
-
var { setPrototypeOf:
|
|
16145
|
+
var { setPrototypeOf: Ee = function(e8, t6) {
|
|
16146
16146
|
return e8.__proto__ = t6, e8;
|
|
16147
16147
|
} } = Object;
|
|
16148
|
-
var
|
|
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),
|
|
16152
|
+
super(typeof t6 == `number` ? `Invariant Violation: ${t6}` : t6), Ee(this, e3.prototype);
|
|
16153
16153
|
}
|
|
16154
16154
|
};
|
|
16155
|
-
function
|
|
16156
|
-
if (typeof e8 == `function`)
|
|
16157
|
-
else if (!e8) throw new
|
|
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
|
|
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
|
|
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
|
|
16202
|
-
function
|
|
16203
|
-
return
|
|
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
|
|
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
|
|
16213
|
-
if (!
|
|
16212
|
+
function Me() {
|
|
16213
|
+
if (!je) return false;
|
|
16214
16214
|
try {
|
|
16215
|
-
return
|
|
16215
|
+
return je.resolve(`pino-pretty`), true;
|
|
16216
16216
|
} catch {
|
|
16217
16217
|
return false;
|
|
16218
16218
|
}
|
|
16219
16219
|
}
|
|
16220
|
-
function
|
|
16220
|
+
function Ne(e8) {
|
|
16221
16221
|
return e8 === `stdout` ? 1 : e8 === `stderr` ? 2 : e8;
|
|
16222
16222
|
}
|
|
16223
|
-
function
|
|
16223
|
+
function Pe() {
|
|
16224
16224
|
return process.env.OTTO_LOG_STDERR === `0`;
|
|
16225
16225
|
}
|
|
16226
|
-
function
|
|
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
|
|
16230
|
-
let n5 =
|
|
16231
|
-
if (!e8 || e8 === `stdout` || e8 === `stderr`) return r4 ? [{ target: `pino/file`, options: { destination:
|
|
16232
|
-
let a3 = { target: `pino/file`, options: { destination:
|
|
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
|
|
16236
|
-
var
|
|
16237
|
-
|
|
16235
|
+
var T = new import_node_stream.PassThrough();
|
|
16236
|
+
var Le = new ke();
|
|
16237
|
+
T.on(`data`, (e8) => {
|
|
16238
16238
|
try {
|
|
16239
|
-
|
|
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
|
|
16245
|
-
var
|
|
16246
|
-
var
|
|
16247
|
-
var
|
|
16248
|
-
function
|
|
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
|
-
|
|
16250
|
+
k2 ??= import_pino.default.transport({ targets: Ie(e8, n5) }), k2.write(r4);
|
|
16251
16251
|
} } : { write: (e9) => {
|
|
16252
|
-
|
|
16252
|
+
T.write(e9);
|
|
16253
16253
|
} };
|
|
16254
16254
|
}
|
|
16255
|
-
function
|
|
16256
|
-
return
|
|
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
|
-
|
|
16260
|
-
let i3 =
|
|
16261
|
-
return
|
|
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
|
|
16264
|
-
var
|
|
16265
|
-
function
|
|
16266
|
-
let t6 = e8 ||
|
|
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
|
|
16274
|
-
var
|
|
16275
|
-
function
|
|
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
|
|
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
|
|
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*
|
|
16287
|
-
let { url: t6, method: n5 = `POST`, headers: r4 = {}, body: i3, signal: a3 } = e8, { timeout: o3, idleTimeout: s3, firstTokenIdleTimeout: c3 } =
|
|
16288
|
-
f && clearTimeout(f), f = setTimeout(() => l2.abort(
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
16337
|
-
var
|
|
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
|
-
|
|
16385
|
-
|
|
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
|
|
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
|
|
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:
|
|
16466
|
-
return
|
|
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 (
|
|
16471
|
-
let e8 =
|
|
16472
|
-
if (!t7 && e8.length === 0) continue;
|
|
16473
|
-
n5.push({ role: `assistant`, content: t7 || null, ...e8.length > 0 ? { tool_calls: e8 } : {} });
|
|
16474
|
-
} else
|
|
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:
|
|
16492
|
-
return t6.temperature !== void 0 && !e8.reasoning && (r4.temperature = t6.temperature), e8.
|
|
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
|
|
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
|
|
16528
|
-
function
|
|
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
|
|
16538
|
+
function M2(e8, t6) {
|
|
16532
16539
|
try {
|
|
16533
16540
|
return { args: JSON.parse(e8), parseFailed: false };
|
|
16534
16541
|
} catch {
|
|
16535
|
-
return
|
|
16542
|
+
return oe2.debug({ toolName: t6 }, `Failed to parse tool arguments JSON`), { args: {}, parseFailed: true };
|
|
16536
16543
|
}
|
|
16537
16544
|
}
|
|
16538
|
-
function
|
|
16545
|
+
function ce(e8) {
|
|
16539
16546
|
return new Set(e8?.map((e9) => e9.name) ?? []);
|
|
16540
16547
|
}
|
|
16541
|
-
function
|
|
16542
|
-
let { args: r4, parseFailed: i3 } =
|
|
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
|
|
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 =
|
|
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(
|
|
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
|
|
16555
|
-
var
|
|
16556
|
-
function
|
|
16557
|
-
let n5 = e8.trimEnd(), r4 =
|
|
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 (
|
|
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
|
|
16566
|
-
return { ...
|
|
16572
|
+
function L2() {
|
|
16573
|
+
return { ...j3(), textContent: ``, thinkingText: ``, toolCalls: /* @__PURE__ */ new Map(), stopReason: `end_turn` };
|
|
16567
16574
|
}
|
|
16568
|
-
function
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
16582
|
-
function
|
|
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
|
|
16600
|
+
return fe.warn(`Unknown chat-completions finish_reason: ${e8}`), `end_turn`;
|
|
16594
16601
|
}
|
|
16595
16602
|
}
|
|
16596
|
-
async function*
|
|
16597
|
-
let { url: t6, headers: r4, body: i3, identity: a3, signal: o3, timeout: s3, idleTimeout: c3, onResponse: l2, registeredToolNames: u } = e8, d =
|
|
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
|
|
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 =
|
|
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:
|
|
16638
|
-
yield { type: `done`, reason: d.stopReason, message:
|
|
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
|
|
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
|
|
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
|
|
16661
|
-
var
|
|
16662
|
-
var
|
|
16663
|
-
function
|
|
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 (!
|
|
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(
|
|
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
|
|
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 =
|
|
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
|
|
16689
|
-
let { logger: t6, diagnosticLabel: n5, allowAuthHeaderOverride: r4 } = e8, i3 = [{ label: `protocolDefaults`, entries:
|
|
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) &&
|
|
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
|
|
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
|
|
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 =
|
|
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 =
|
|
16738
|
+
const status = Ct(headers, "anthropic-ratelimit-unified-status");
|
|
16732
16739
|
if (status !== "allowed" && status !== "allowed_warning" && status !== "rejected") return null;
|
|
16733
|
-
const limitType =
|
|
16734
|
-
const resetRaw =
|
|
16735
|
-
const overageStatus =
|
|
16736
|
-
const overageResetRaw =
|
|
16737
|
-
const overageDisabledReason =
|
|
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
|
-
...
|
|
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
|
|
17005
|
+
return z2(
|
|
16999
17006
|
{ api: "anthropic-messages", provider: "anthropic", model: state.model },
|
|
17000
|
-
|
|
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:
|
|
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
|
|
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(
|
|
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 =
|
|
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:
|
|
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
|
|
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
|
|
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
|
-
...
|
|
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
|
|
17454
|
+
return z2(
|
|
17440
17455
|
{ api: state.model.api, provider: state.model.provider, model: state.model.id },
|
|
17441
|
-
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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 =
|
|
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:
|
|
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:
|
|
17672
|
-
providerUsage:
|
|
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
|
|
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
|
|
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 =
|
|
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*
|
|
17781
|
+
yield* pe({
|
|
17755
17782
|
url: `${await v2(
|
|
17756
17783
|
model.provider === "deepseek" ? "DEEPSEEK_BASE_URL" : "OPENAI_BASE_URL",
|
|
17757
|
-
|
|
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:
|
|
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,唯独本
|