@voltro/ai 0.27.0 → 0.29.0

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/index.js CHANGED
@@ -1,52 +1,53 @@
1
- import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as ee, u as te } from "./provider-BOC5wBxx.js";
2
- import { AgentErrorCode as ne, AgentEvent as re, SeqEvent as ie } from "./events.js";
3
- import { a as ae, i as oe, n as se, o as m, r as ce, s as h, t as le } from "./agentDescriptor-CCeWeadZ.js";
4
- import { createGateway as ue, gateway as de } from "@ai-sdk/gateway";
5
- import { Output as fe, cosineSimilarity as pe, embed as me, embedMany as he, generateImage as ge, generateObject as _e, generateSpeech as ve, generateText as ye, jsonSchema as g, rerank as be, stepCountIs as xe, streamText as Se, tool as Ce } from "ai";
6
- import { Chunk as _, Context as we, Duration as Te, Effect as v, JSONSchema as Ee, Metric as y, MetricBoundaries as De, Option as b, Runtime as Oe, Schema as x, Stream as S } from "effect";
7
- import { and as C, boolean as ke, contains as Ae, eq as w, generateId as je, gt as Me, gte as Ne, id as T, inSet as Pe, integer as E, json as Fe, lt as Ie, lte as Le, neq as Re, queryFor as ze, registerRetention as Be, retentionTtlMsFromEnv as Ve, table as D, text as O, timestamp as k } from "@voltro/database";
1
+ import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as ee, r as d, s as f, t as te, u as ne } from "./provider-BOC5wBxx.js";
2
+ import { AgentErrorCode as re, AgentEvent as ie, SeqEvent as ae } from "./events.js";
3
+ import { a as oe, i as se, n as ce, o as p, r as le, s as m, t as ue } from "./agentDescriptor-CCeWeadZ.js";
4
+ import { createGateway as de, gateway as fe } from "@ai-sdk/gateway";
5
+ import { Output as pe, cosineSimilarity as me, embed as he, embedMany as ge, generateImage as _e, generateObject as ve, generateSpeech as ye, generateText as be, jsonSchema as h, rerank as xe, stepCountIs as Se, streamText as Ce, tool as we } from "ai";
6
+ import { Chunk as g, Context as Te, Duration as Ee, Effect as _, JSONSchema as De, Metric as v, MetricBoundaries as Oe, Option as y, Runtime as ke, Schema as b, Stream as x } from "effect";
7
+ import { and as S, boolean as Ae, contains as je, eq as C, generateId as Me, gt as Ne, gte as Pe, id as w, inSet as Fe, integer as T, json as Ie, lt as Le, lte as Re, neq as ze, queryFor as Be, registerRetention as Ve, retentionTtlMsFromEnv as He, table as E, text as D, timestamp as O } from "@voltro/database";
8
+ import { rowDep as Ue, tableDep as We } from "@voltro/cache";
8
9
  //#region src/tools.ts
9
- var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
10
+ var Ge = (e, t) => e(t), Ke = Symbol.for("@voltro/ai/Tool"), qe = (e) => ({
10
11
  ...e,
11
- [Ue]: !0
12
- }), Ge = (e) => typeof e == "object" && !!e && e[Ue] === !0, Ke = (e) => {
12
+ [Ke]: !0
13
+ }), Je = (e) => typeof e == "object" && !!e && e[Ke] === !0, Ye = (e) => {
13
14
  let t = e.default;
14
15
  if (typeof t != "function") return 0;
15
16
  let n = 0;
16
- for (let r of Object.values(e)) Ge(r) && r.execute === void 0 && r.handler === void 0 && (r.handler = t, n += 1);
17
+ for (let r of Object.values(e)) Je(r) && r.execute === void 0 && r.handler === void 0 && (r.handler = t, n += 1);
17
18
  return n;
18
- }, qe = (e, t) => {
19
- let n = t ?? Oe.defaultRuntime;
20
- return Oe.runPromise(n)(e);
21
- }, Je = (e, t, n) => n ? e.pipe(v.timeoutFail({
19
+ }, Xe = (e, t) => {
20
+ let n = t ?? ke.defaultRuntime;
21
+ return ke.runPromise(n)(e);
22
+ }, Ze = (e, t, n) => n ? e.pipe(_.timeoutFail({
22
23
  duration: `${n} millis`,
23
24
  onTimeout: () => /* @__PURE__ */ Error(`tool '${t}' timed out`)
24
- })) : e, Ye = (e, t, n) => {
25
- if (e.execute) return qe(Je(He(e.execute, t), e.name, e.timeoutMs), n.runtime);
25
+ })) : e, Qe = (e, t, n) => {
26
+ if (e.execute) return Xe(Ze(Ge(e.execute, t), e.name, e.timeoutMs), n.runtime);
26
27
  if (e.handler) {
27
28
  let r = e.handler, i = r(t, n);
28
- return v.isEffect(i) ? qe(Je(i, e.name, e.timeoutMs), n.runtime) : i;
29
+ return _.isEffect(i) ? Xe(Ze(i, e.name, e.timeoutMs), n.runtime) : i;
29
30
  }
30
31
  return Promise.reject(/* @__PURE__ */ Error(`tool '${e.name}' has neither execute nor handler`));
31
- }, Xe = (e) => {
32
- let t = Ee.make(e);
32
+ }, $e = (e) => {
33
+ let t = De.make(e);
33
34
  return t && t.type === "object" ? t : {
34
35
  type: "object",
35
36
  properties: {},
36
37
  additionalProperties: !1
37
38
  };
38
- }, A = (e, t = { store: void 0 }) => {
39
+ }, k = (e, t = { store: void 0 }) => {
39
40
  let n = {};
40
- for (let [r, i] of Object.entries(e)) n[i.name || r] = Ce({
41
+ for (let [r, i] of Object.entries(e)) n[i.name || r] = we({
41
42
  description: i.description,
42
- inputSchema: g(Xe(i.input)),
43
+ inputSchema: h($e(i.input)),
43
44
  execute: async (e) => {
44
- let n = await v.runPromise(x.decodeUnknown(i.input)(e)), r = await Ye(i, n, t);
45
- return i.output ? v.runPromise(x.decodeUnknown(i.output)(r)) : r;
45
+ let n = await _.runPromise(b.decodeUnknown(i.input)(e)), r = await Qe(i, n, t);
46
+ return i.output ? _.runPromise(b.decodeUnknown(i.output)(r)) : r;
46
47
  }
47
48
  });
48
49
  return n;
49
- }, Ze = {
50
+ }, et = {
50
51
  "claude-opus-4-8": {
51
52
  inputPer1M: 15,
52
53
  outputPer1M: 75
@@ -91,21 +92,21 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
91
92
  inputPer1M: .1,
92
93
  outputPer1M: .4
93
94
  }
94
- }, j = {}, Qe = (e) => {
95
- let t = j;
96
- return j = { ...e }, t;
97
- }, $e = () => ({
98
- ...Ze,
99
- ...j
100
- }), et = (e) => {
101
- let t = $e();
95
+ }, A = {}, tt = (e) => {
96
+ let t = A;
97
+ return A = { ...e }, t;
98
+ }, nt = () => ({
99
+ ...et,
100
+ ...A
101
+ }), rt = (e) => {
102
+ let t = nt();
102
103
  if (t[e] !== void 0) return t[e];
103
104
  let n = e.indexOf("/");
104
105
  if (n > 0) {
105
106
  let r = e.slice(n + 1);
106
107
  if (t[r] !== void 0) return t[r];
107
108
  }
108
- }, M = (e, t) => {
109
+ }, j = (e, t) => {
109
110
  let n = e.inputTokens ?? 0, r = e.outputTokens ?? 0;
110
111
  if (t.actualCostUsd !== void 0) {
111
112
  let e = n + r, i = e > 0 ? n / e : 0;
@@ -118,7 +119,7 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
118
119
  costSource: "gateway"
119
120
  };
120
121
  }
121
- let i = t.price ?? et(t.model) ?? {
122
+ let i = t.price ?? rt(t.model) ?? {
122
123
  inputPer1M: 0,
123
124
  outputPer1M: 0
124
125
  }, a = n / 1e6 * i.inputPer1M, o = r / 1e6 * i.outputPer1M;
@@ -130,32 +131,32 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
130
131
  totalCostUsd: a + o,
131
132
  costSource: "estimated"
132
133
  };
133
- }, N = "_voltro_ai_usage", tt = D(N, {
134
- id: T({ prefix: "aiu" }),
135
- tenantId: O().nullable(),
136
- provider: O(),
137
- model: O(),
138
- operation: O(),
139
- agent: O().nullable(),
140
- inputTokens: E().default(0),
141
- outputTokens: E().default(0),
142
- costMicroUsd: E().default(0),
143
- costSource: O().default("estimated"),
144
- calledAt: k().default("now")
145
- }).index(["tenantId"]), nt = (e) => {
134
+ }, M = "_voltro_ai_usage", it = E(M, {
135
+ id: w({ prefix: "aiu" }),
136
+ tenantId: D().nullable(),
137
+ provider: D(),
138
+ model: D(),
139
+ operation: D(),
140
+ agent: D().nullable(),
141
+ inputTokens: T().default(0),
142
+ outputTokens: T().default(0),
143
+ costMicroUsd: T().default(0),
144
+ costSource: D().default("estimated"),
145
+ calledAt: O().default("now")
146
+ }).index(["tenantId"]), at = (e) => {
146
147
  let t = e?.gateway?.cost, n = typeof t == "number" ? t : typeof t == "string" ? Number(t) : NaN;
147
148
  return Number.isFinite(n) ? n : void 0;
148
- }, rt = (e, t) => (Be({
149
- table: N,
149
+ }, ot = (e, t) => (Ve({
150
+ table: M,
150
151
  timeColumn: "calledAt",
151
- ttlMs: Ve(process.env.VOLTRO_AI_USAGE_TTL_HOURS, 24 * 365)
152
- }), v.promise(async () => {
153
- let n = M(t.usage, {
152
+ ttlMs: He(process.env.VOLTRO_AI_USAGE_TTL_HOURS, 24 * 365)
153
+ }), _.promise(async () => {
154
+ let n = j(t.usage, {
154
155
  model: t.model,
155
156
  ...t.price === void 0 ? {} : { price: t.price },
156
157
  ...t.actualCostUsd === void 0 ? {} : { actualCostUsd: t.actualCostUsd }
157
158
  });
158
- return await e.insert(N, {
159
+ return await e.insert(M, {
159
160
  tenantId: t.tenantId ?? null,
160
161
  provider: t.provider,
161
162
  model: t.model,
@@ -167,35 +168,35 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
167
168
  costSource: n.costSource,
168
169
  calledAt: t.calledAt ?? /* @__PURE__ */ new Date()
169
170
  }), n;
170
- })), it = (e, t = {}) => v.promise(async () => {
171
- let n = [...t.tenantId === void 0 ? [] : [w("tenantId", t.tenantId)], ...t.since === void 0 ? [] : [Ne("calledAt", t.since)]], r = ze(tt), i = n.length === 0 ? r : r.where(n.length === 1 ? n[0] : C(...n));
171
+ })), st = (e, t = {}) => _.promise(async () => {
172
+ let n = [...t.tenantId === void 0 ? [] : [C("tenantId", t.tenantId)], ...t.since === void 0 ? [] : [Pe("calledAt", t.since)]], r = Be(it), i = n.length === 0 ? r : r.where(n.length === 1 ? n[0] : S(...n));
172
173
  return (await e.query(i.descriptor)).reduce((e, t) => e + (Number(t.costMicroUsd) || 0), 0) / 1e6;
173
- }), at = class extends x.TaggedError()("AiBudgetExceeded", {
174
- tenantId: x.NullOr(x.String),
175
- limitUsd: x.Number,
176
- spentUsd: x.Number,
177
- attemptedUsd: x.Number
178
- }) {}, P = "_voltro_ai_budget", ot = D(P, {
179
- id: T({ prefix: "aib" }),
180
- bucket: O().maxLength(191),
181
- tenantId: O().nullable(),
182
- reservedMicroUsd: E().default(0),
183
- updatedAt: k().default("now")
184
- }).unique("byAiBudgetBucket", ["bucket"]), st = (e, t) => `${e ?? "global"}::${t === void 0 ? "all" : String(t.getTime())}`, ct = 32, lt = (e, t) => v.gen(function* () {
185
- Be({
186
- table: P,
174
+ }), ct = class extends b.TaggedError()("AiBudgetExceeded", {
175
+ tenantId: b.NullOr(b.String),
176
+ limitUsd: b.Number,
177
+ spentUsd: b.Number,
178
+ attemptedUsd: b.Number
179
+ }) {}, N = "_voltro_ai_budget", lt = E(N, {
180
+ id: w({ prefix: "aib" }),
181
+ bucket: D().maxLength(191),
182
+ tenantId: D().nullable(),
183
+ reservedMicroUsd: T().default(0),
184
+ updatedAt: O().default("now")
185
+ }).unique("byAiBudgetBucket", ["bucket"]), ut = (e, t) => `${e ?? "global"}::${t === void 0 ? "all" : String(t.getTime())}`, dt = 32, ft = (e, t) => _.gen(function* () {
186
+ Ve({
187
+ table: N,
187
188
  timeColumn: "updatedAt",
188
- ttlMs: Ve(process.env.VOLTRO_AI_USAGE_TTL_HOURS, 24 * 365)
189
+ ttlMs: He(process.env.VOLTRO_AI_USAGE_TTL_HOURS, 24 * 365)
189
190
  });
190
- let n = t.addUsd ?? 0, r = Math.round(n * 1e6), i = Math.round(t.limitUsd * 1e6), a = st(t.tenantId, t.since), o = t.tenantId ?? null, s = (e) => new at({
191
+ let n = t.addUsd ?? 0, r = Math.round(n * 1e6), i = Math.round(t.limitUsd * 1e6), a = ut(t.tenantId, t.since), o = t.tenantId ?? null, s = (e) => new ct({
191
192
  tenantId: o,
192
193
  limitUsd: t.limitUsd,
193
194
  spentUsd: e / 1e6,
194
195
  attemptedUsd: n
195
- }), c = yield* v.promise(async () => {
196
- for (let t = 0; t < ct; t++) {
196
+ }), c = yield* _.promise(async () => {
197
+ for (let t = 0; t < dt; t++) {
197
198
  t > 0 && await new Promise((e) => setTimeout(e, t));
198
- let n = (await e.query(ze(ot).where(w("bucket", a)).descriptor))[0], s = n && Number(n.reservedMicroUsd) || 0;
199
+ let n = (await e.query(Be(lt).where(C("bucket", a)).descriptor))[0], s = n && Number(n.reservedMicroUsd) || 0;
199
200
  if (s + r > i) return {
200
201
  ok: !1,
201
202
  reservedMicro: s
@@ -205,12 +206,12 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
205
206
  if (await e.updateMany("_voltro_ai_budget", {
206
207
  reservedMicroUsd: s + r,
207
208
  updatedAt: /* @__PURE__ */ new Date()
208
- }, { where: C(w("id", String(n.id)), w("reservedMicroUsd", s)) }) === 1) return { ok: !0 };
209
+ }, { where: S(C("id", String(n.id)), C("reservedMicroUsd", s)) }) === 1) return { ok: !0 };
209
210
  } else {
210
- let t = je({
211
+ let t = Me({
211
212
  kind: "typeid",
212
213
  prefix: "aib"
213
- }, P), n = await e.insertIgnore(P, {
214
+ }, N), n = await e.insertIgnore(N, {
214
215
  id: t,
215
216
  bucket: a,
216
217
  tenantId: o,
@@ -220,59 +221,59 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
220
221
  if (String(n.id) === t) return { ok: !0 };
221
222
  }
222
223
  }
223
- throw Error(`requireAiBudget: contention on bucket '${a}' exceeded ${ct} attempts`);
224
+ throw Error(`requireAiBudget: contention on bucket '${a}' exceeded ${dt} attempts`);
224
225
  });
225
- if (!c.ok) return yield* v.fail(s(c.reservedMicro));
226
- }), ut = De.exponential({
226
+ if (!c.ok) return yield* _.fail(s(c.reservedMicro));
227
+ }), pt = Oe.exponential({
227
228
  start: .001,
228
229
  factor: 2,
229
230
  count: 16
230
- }), F = y.counter("voltro_ai_calls_total", { description: "Total AI provider calls (generate + stream)." }), dt = y.counter("voltro_ai_call_errors_total", { description: "AI provider calls that errored." }), I = y.histogram("voltro_ai_call_duration_seconds", ut, "AI provider call duration in seconds."), ft = y.counter("voltro_ai_input_tokens_total", {
231
+ }), P = v.counter("voltro_ai_calls_total", { description: "Total AI provider calls (generate + stream)." }), mt = v.counter("voltro_ai_call_errors_total", { description: "AI provider calls that errored." }), F = v.histogram("voltro_ai_call_duration_seconds", pt, "AI provider call duration in seconds."), ht = v.counter("voltro_ai_input_tokens_total", {
231
232
  description: "Total prompt (input) tokens across AI calls.",
232
233
  incremental: !0
233
- }), pt = y.counter("voltro_ai_output_tokens_total", {
234
+ }), gt = v.counter("voltro_ai_output_tokens_total", {
234
235
  description: "Total completion (output) tokens across AI calls.",
235
236
  incremental: !0
236
- }), mt = y.counter("voltro_ai_cost_microusd_total", {
237
+ }), _t = v.counter("voltro_ai_cost_microusd_total", {
237
238
  description: "Total estimated AI spend in micro-USD (USD × 1e6).",
238
239
  incremental: !0
239
- }), L = (e, t) => ({
240
+ }), I = (e, t) => ({
240
241
  provider: e.name,
241
242
  model: e.model ?? e.name,
242
243
  operation: t
243
- }), R = (e, t, n) => e.pipe(v.tagMetrics("provider", t.provider), v.tagMetrics("model", t.model), v.tagMetrics("operation", t.operation), v.tagMetrics("status", n)), ht = (e, t) => {
244
- let n = t.inputTokens ?? 0, r = t.outputTokens ?? 0, i = M({
244
+ }), L = (e, t, n) => e.pipe(_.tagMetrics("provider", t.provider), _.tagMetrics("model", t.model), _.tagMetrics("operation", t.operation), _.tagMetrics("status", n)), vt = (e, t) => {
245
+ let n = t.inputTokens ?? 0, r = t.outputTokens ?? 0, i = j({
245
246
  inputTokens: n,
246
247
  outputTokens: r
247
248
  }, { model: e.model }), a = Math.round(i.totalCostUsd * 1e6);
248
- return v.all([
249
- R(y.incrementBy(ft, n), e, "ok"),
250
- R(y.incrementBy(pt, r), e, "ok"),
251
- R(y.incrementBy(mt, a), e, "ok")
249
+ return _.all([
250
+ L(v.incrementBy(ht, n), e, "ok"),
251
+ L(v.incrementBy(gt, r), e, "ok"),
252
+ L(v.incrementBy(_t, a), e, "ok")
252
253
  ], { discard: !0 });
253
- }, z = (e, t, n) => v.gen(function* () {
254
- let r = yield* v.clockWith((e) => e.currentTimeMillis);
255
- return yield* n.pipe(v.tap((n) => ht(e, t(n))), v.tap(() => R(y.increment(F), e, "ok").pipe(v.zipRight(v.clockWith((e) => e.currentTimeMillis).pipe(v.flatMap((t) => R(y.update(I, (t - r) / 1e3), e, "ok")))))), v.tapError(() => R(y.increment(F), e, "error").pipe(v.zipRight(R(y.increment(dt), e, "error")), v.zipRight(v.clockWith((e) => e.currentTimeMillis).pipe(v.flatMap((t) => R(y.update(I, (t - r) / 1e3), e, "error")))))), v.withSpan("voltro.ai.call", { attributes: {
254
+ }, R = (e, t, n) => _.gen(function* () {
255
+ let r = yield* _.clockWith((e) => e.currentTimeMillis);
256
+ return yield* n.pipe(_.tap((n) => vt(e, t(n))), _.tap(() => L(v.increment(P), e, "ok").pipe(_.zipRight(_.clockWith((e) => e.currentTimeMillis).pipe(_.flatMap((t) => L(v.update(F, (t - r) / 1e3), e, "ok")))))), _.tapError(() => L(v.increment(P), e, "error").pipe(_.zipRight(L(v.increment(mt), e, "error")), _.zipRight(_.clockWith((e) => e.currentTimeMillis).pipe(_.flatMap((t) => L(v.update(F, (t - r) / 1e3), e, "error")))))), _.withSpan("voltro.ai.call", { attributes: {
256
257
  "ai.provider": e.provider,
257
258
  "ai.model": e.model,
258
259
  "ai.operation": e.operation
259
260
  } }));
260
- }), gt = (e, t) => {
261
+ }), yt = (e, t) => {
261
262
  let n = Date.now();
262
- return t.pipe(S.tap((t) => t._tag === "done" ? R(y.increment(F), e, "ok").pipe(v.zipRight(R(y.update(I, (Date.now() - n) / 1e3), e, "ok")), v.zipRight(ht(e, t.usage ?? {}))) : t._tag === "error" ? R(y.increment(F), e, "error").pipe(v.zipRight(R(y.increment(dt), e, "error")), v.zipRight(R(y.update(I, (Date.now() - n) / 1e3), e, "error"))) : v.void), S.withSpan("voltro.ai.call", { attributes: {
263
+ return t.pipe(x.tap((t) => t._tag === "done" ? L(v.increment(P), e, "ok").pipe(_.zipRight(L(v.update(F, (Date.now() - n) / 1e3), e, "ok")), _.zipRight(vt(e, t.usage ?? {}))) : t._tag === "error" ? L(v.increment(P), e, "error").pipe(_.zipRight(L(v.increment(mt), e, "error")), _.zipRight(L(v.update(F, (Date.now() - n) / 1e3), e, "error"))) : _.void), x.withSpan("voltro.ai.call", { attributes: {
263
264
  "ai.provider": e.provider,
264
265
  "ai.model": e.model,
265
266
  "ai.operation": e.operation
266
267
  } }));
267
- }, B = class extends x.TaggedError()("AiError", {
268
- reason: x.Literal("generation", "decode"),
269
- message: x.String
270
- }) {}, V = (e, t, n) => {
271
- let r = [e, ...t ?? []], i = (e) => n(r[e]).pipe(v.catchTag("AiError", (t) => t.reason === "generation" && e + 1 < r.length ? i(e + 1) : v.fail(t)));
268
+ }, z = class extends b.TaggedError()("AiError", {
269
+ reason: b.Literal("generation", "decode"),
270
+ message: b.String
271
+ }) {}, bt = (e, t, n) => {
272
+ let r = [e, ...t ?? []], i = (e) => n(r[e]).pipe(_.catchTag("AiError", (t) => t.reason === "generation" && e + 1 < r.length ? i(e + 1) : _.fail(t)));
272
273
  return i(0);
273
- }, _t = (t) => V(t.provider ?? f(), t.fallbacks, (n) => z(L(n, "generateText"), (e) => e.usage, v.tryPromise({
274
+ }, xt = (t) => bt(t.provider ?? d(), t.fallbacks, (n) => R(I(n, "generateText"), (e) => e.usage, _.tryPromise({
274
275
  try: async () => {
275
- let r = await ye({
276
+ let r = await be({
276
277
  model: e(n),
277
278
  prompt: t.prompt,
278
279
  ...t.system === void 0 ? {} : { system: t.system },
@@ -289,39 +290,39 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
289
290
  providerMetadata: r.providerMetadata
290
291
  };
291
292
  },
292
- catch: (e) => new B({
293
+ catch: (e) => new z({
293
294
  reason: "generation",
294
295
  message: String(e?.message ?? e)
295
296
  })
296
- }))), vt = (e, t) => v.gen(function* () {
297
- let n = Ee.make(e);
297
+ }))), St = (e, t) => _.gen(function* () {
298
+ let n = De.make(e);
298
299
  if (n?.type !== "object") {
299
300
  let e = n?.anyOf === void 0 ? `type:${JSON.stringify(n?.type ?? null)}` : "anyOf (e.g. Schema.Struct({}) or a union)";
300
- return yield* v.fail(new B({
301
+ return yield* _.fail(new z({
301
302
  reason: "generation",
302
303
  message: `${t}: the output schema must render as a top-level JSON object (type:"object"), but got ${e}. Use a Schema.Struct({ ... }) as the output schema — wrap arrays/scalars in a field (e.g. Schema.Struct({ items: Schema.Array(...) })).`
303
304
  }));
304
305
  }
305
306
  return n;
306
- }), yt = (t) => v.gen(function* () {
307
- let n = yield* vt(t.schema, "generateObject");
308
- return yield* V(t.provider ?? f(), t.fallbacks, (r) => z(L(r, "generateObject"), (e) => e.usage, v.gen(function* () {
309
- let i = e(r), a = yield* v.tryPromise({
310
- try: () => _e({
307
+ }), B = (t) => _.gen(function* () {
308
+ let n = yield* St(t.schema, "generateObject");
309
+ return yield* bt(t.provider ?? d(), t.fallbacks, (r) => R(I(r, "generateObject"), (e) => e.usage, _.gen(function* () {
310
+ let i = e(r), a = yield* _.tryPromise({
311
+ try: () => ve({
311
312
  model: i,
312
- schema: g(n),
313
+ schema: h(n),
313
314
  prompt: t.prompt,
314
315
  ...t.system === void 0 ? {} : { system: t.system },
315
316
  ...t.maxTokens === void 0 ? {} : { maxOutputTokens: t.maxTokens },
316
317
  ...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
317
318
  }),
318
- catch: (e) => new B({
319
+ catch: (e) => new z({
319
320
  reason: "generation",
320
321
  message: String(e?.message ?? e)
321
322
  })
322
323
  });
323
324
  return {
324
- object: yield* x.decodeUnknown(t.schema)(a.object).pipe(v.mapError((e) => new B({
325
+ object: yield* b.decodeUnknown(t.schema)(a.object).pipe(_.mapError((e) => new z({
325
326
  reason: "decode",
326
327
  message: `model output failed schema decode: ${String(e)}`
327
328
  }))),
@@ -333,31 +334,31 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
333
334
  providerMetadata: a.providerMetadata
334
335
  };
335
336
  })));
336
- }), bt = (t) => v.gen(function* () {
337
- let n = yield* v.runtime(), r = yield* vt(t.schema, "generateObjectWithTools"), i = {
337
+ }), Ct = (t) => _.gen(function* () {
338
+ let n = yield* _.runtime(), r = yield* St(t.schema, "generateObjectWithTools"), i = {
338
339
  store: void 0,
339
340
  ...t.toolContext,
340
341
  runtime: n
341
- }, a = A(t.tools, i);
342
- return yield* V(t.provider ?? f(), t.fallbacks, (n) => z(L(n, "generateObjectWithTools"), (e) => e.usage, v.gen(function* () {
343
- let i = e(n), o = yield* v.tryPromise({
344
- try: () => ye({
342
+ }, a = k(t.tools, i);
343
+ return yield* bt(t.provider ?? d(), t.fallbacks, (n) => R(I(n, "generateObjectWithTools"), (e) => e.usage, _.gen(function* () {
344
+ let i = e(n), o = yield* _.tryPromise({
345
+ try: () => be({
345
346
  model: i,
346
347
  prompt: t.prompt,
347
348
  tools: a,
348
- stopWhen: xe(t.maxSteps ?? 8),
349
- output: fe.object({ schema: g(r) }),
349
+ stopWhen: Se(t.maxSteps ?? 8),
350
+ output: pe.object({ schema: h(r) }),
350
351
  ...t.system === void 0 ? {} : { system: t.system },
351
352
  ...t.maxTokens === void 0 ? {} : { maxOutputTokens: t.maxTokens },
352
353
  ...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
353
354
  }),
354
- catch: (e) => new B({
355
+ catch: (e) => new z({
355
356
  reason: "generation",
356
357
  message: String(e?.message ?? e)
357
358
  })
358
359
  });
359
360
  return {
360
- object: yield* x.decodeUnknown(t.schema)(o.output).pipe(v.mapError((e) => new B({
361
+ object: yield* b.decodeUnknown(t.schema)(o.output).pipe(_.mapError((e) => new z({
361
362
  reason: "decode",
362
363
  message: `model output failed schema decode: ${String(e)}`
363
364
  }))),
@@ -369,23 +370,23 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
369
370
  providerMetadata: o.providerMetadata
370
371
  };
371
372
  })));
372
- }), xt = class extends we.Tag("@voltro/AiService")() {}, St = {
373
- generateText: (e) => _t(e),
374
- generateObject: (e) => yt(e)
375
- }, Ct = (e) => e === void 0 ? {} : { providerOptions: e }, H = (e) => new B({
373
+ }), wt = class extends Te.Tag("@voltro/AiService")() {}, Tt = {
374
+ generateText: (e) => xt(e),
375
+ generateObject: (e) => B(e)
376
+ }, Et = (e) => e === void 0 ? {} : { providerOptions: e }, V = (e) => new z({
376
377
  reason: "generation",
377
378
  message: String(e?.message ?? e)
378
- }), wt = (e) => {
379
- let t = e.provider ?? f();
380
- return z(L(t, "generateImage"), (e) => e.usage ?? {}, v.tryPromise({
379
+ }), Dt = (e) => {
380
+ let t = e.provider ?? d();
381
+ return R(I(t, "generateImage"), (e) => e.usage ?? {}, _.tryPromise({
381
382
  try: async () => {
382
- let n = await ge({
383
+ let n = await _e({
383
384
  model: o(t),
384
385
  prompt: e.prompt,
385
386
  ...e.n === void 0 ? {} : { n: e.n },
386
387
  ...e.size === void 0 ? {} : { size: e.size },
387
388
  ...e.aspectRatio === void 0 ? {} : { aspectRatio: e.aspectRatio },
388
- ...Ct(e.providerOptions)
389
+ ...Et(e.providerOptions)
389
390
  });
390
391
  return {
391
392
  images: n.images.map((e) => ({
@@ -400,13 +401,13 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
400
401
  providerMetadata: n.providerMetadata
401
402
  };
402
403
  },
403
- catch: H
404
+ catch: V
404
405
  }));
405
- }, Tt = (e) => {
406
- let t = e.provider ?? f();
407
- return z(L(t, "generateSpeech"), () => ({}), v.tryPromise({
406
+ }, Ot = (e) => {
407
+ let t = e.provider ?? d();
408
+ return R(I(t, "generateSpeech"), () => ({}), _.tryPromise({
408
409
  try: async () => {
409
- let n = await ve({
410
+ let n = await ye({
410
411
  model: u(t),
411
412
  text: e.text,
412
413
  ...e.voice === void 0 ? {} : { voice: e.voice },
@@ -414,7 +415,7 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
414
415
  ...e.instructions === void 0 ? {} : { instructions: e.instructions },
415
416
  ...e.speed === void 0 ? {} : { speed: e.speed },
416
417
  ...e.language === void 0 ? {} : { language: e.language },
417
- ...Ct(e.providerOptions)
418
+ ...Et(e.providerOptions)
418
419
  });
419
420
  return {
420
421
  audio: {
@@ -424,16 +425,16 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
424
425
  providerMetadata: n.providerMetadata
425
426
  };
426
427
  },
427
- catch: H
428
+ catch: V
428
429
  }));
429
- }, Et = (e) => ({
430
+ }, kt = (e) => ({
430
431
  type: "url",
431
432
  url: e
432
- }), Dt = (e) => Uint8Array.from(Buffer.from(e, "base64")), Ot = (e) => {
433
- let t = e.provider ?? f();
434
- return z(L(t, "generateVideo"), () => ({}), v.tryPromise({
433
+ }), At = (e) => Uint8Array.from(Buffer.from(e, "base64")), jt = (e) => {
434
+ let t = e.provider ?? d();
435
+ return R(I(t, "generateVideo"), () => ({}), _.tryPromise({
435
436
  try: async () => {
436
- let n = await p(t).doGenerate({
437
+ let n = await f(t).doGenerate({
437
438
  prompt: e.prompt,
438
439
  n: 1,
439
440
  aspectRatio: e.params?.aspectRatio,
@@ -441,9 +442,9 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
441
442
  duration: e.params?.durationSeconds,
442
443
  fps: e.params?.fps,
443
444
  seed: e.params?.seed,
444
- image: e.inputs?.image === void 0 ? void 0 : Et(e.inputs.image),
445
+ image: e.inputs?.image === void 0 ? void 0 : kt(e.inputs.image),
445
446
  frameImages: void 0,
446
- inputReferences: e.inputs?.references?.map(Et),
447
+ inputReferences: e.inputs?.references?.map(kt),
447
448
  generateAudio: void 0,
448
449
  providerOptions: e.providerOptions ?? {}
449
450
  }), r = n.videos[0];
@@ -453,7 +454,7 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
453
454
  url: r.url,
454
455
  mediaType: r.mediaType
455
456
  } : r.type === "base64" ? {
456
- data: Dt(r.data),
457
+ data: At(r.data),
457
458
  mediaType: r.mediaType
458
459
  } : {
459
460
  data: r.data,
@@ -462,53 +463,53 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
462
463
  providerMetadata: n.providerMetadata
463
464
  };
464
465
  },
465
- catch: H
466
+ catch: V
466
467
  }));
467
- }, kt = (e) => RegExp("^" + e.split("*").map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join(".*") + "$"), At = (e, t) => t instanceof RegExp ? t.test(e) : t.some((t) => kt(t).test(e)), U = (e, t) => !(t.deny !== void 0 && At(e, t.deny) || t.allow !== void 0 && !At(e, t.allow)), W = (e) => e === "mutation" || e === "action", jt = (e) => ({
468
+ }, Mt = (e) => RegExp("^" + e.split("*").map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join(".*") + "$"), Nt = (e, t) => t instanceof RegExp ? t.test(e) : t.some((t) => Mt(t).test(e)), H = (e, t) => !(t.deny !== void 0 && Nt(e, t.deny) || t.allow !== void 0 && !Nt(e, t.allow)), U = (e) => e === "mutation" || e === "action", Pt = (e) => ({
468
469
  id: e,
469
470
  via: "agent"
470
- }), G = (e, t) => {
471
+ }), W = (e, t) => {
471
472
  let n = e.exposeAsTool;
472
473
  if (n === void 0 || n === !1 || n === !0) return null;
473
- let r = W(e.kind), i = n.confirm ?? (r && (t.requireConfirmForWrites ?? !0));
474
+ let r = U(e.kind), i = n.confirm ?? (r && (t.requireConfirmForWrites ?? !0));
474
475
  return {
475
476
  description: n.description,
476
477
  confirm: i,
477
478
  ...n.maxPerRun === void 0 ? {} : { maxPerRun: n.maxPerRun }
478
479
  };
479
- }, Mt = (e, t = {}) => e.filter((e) => U(e.descriptor.name, t)).map((e) => ({
480
+ }, Ft = (e, t = {}) => e.filter((e) => H(e.descriptor.name, t)).map((e) => ({
480
481
  entry: e,
481
- exposure: G(e.descriptor, t)
482
+ exposure: W(e.descriptor, t)
482
483
  })).filter((e) => e.exposure !== null).map(({ entry: e, exposure: t }) => ({
483
484
  name: e.descriptor.name,
484
485
  kind: e.descriptor.kind,
485
486
  description: t.description,
486
- write: W(e.descriptor.kind),
487
+ write: U(e.descriptor.kind),
487
488
  confirm: t.confirm,
488
489
  ...t.maxPerRun === void 0 ? {} : { maxPerRun: t.maxPerRun }
489
- })).sort((e, t) => e.name.localeCompare(t.name)), Nt = (e, t = {}) => e.filter((e) => U(e.descriptor.name, t)).filter((e) => G(e.descriptor, t) !== null).filter((e) => t.includeWrites === !0 || !W(e.descriptor.kind)).map((e) => {
490
- let n = G(e.descriptor, t);
491
- return We({
490
+ })).sort((e, t) => e.name.localeCompare(t.name)), It = (e, t = {}) => e.filter((e) => H(e.descriptor.name, t)).filter((e) => W(e.descriptor, t) !== null).filter((e) => t.includeWrites === !0 || !U(e.descriptor.kind)).map((e) => {
491
+ let n = W(e.descriptor, t);
492
+ return qe({
492
493
  name: e.descriptor.name,
493
494
  description: n.description,
494
495
  input: e.descriptor.input,
495
496
  ...e.descriptor.output === void 0 ? {} : { output: e.descriptor.output },
496
497
  handler: (t) => Promise.resolve(e.invoke(t))
497
498
  });
498
- }), K = /* @__PURE__ */ new Map(), Pt = (e) => {
499
- let t = K.get(e);
499
+ }), G = /* @__PURE__ */ new Map(), Lt = (e) => {
500
+ let t = G.get(e);
500
501
  if (t) return t;
501
502
  let n = new AbortController();
502
- return K.set(e, n), n;
503
- }, Ft = (e) => {
504
- let t = K.get(e);
505
- return t ? (K.delete(e), t.abort(), !0) : !1;
506
- }, It = (e) => K.has(e), Lt = (e) => {
507
- K.delete(e);
508
- }, Rt = () => K.size, zt = (e) => {
503
+ return G.set(e, n), n;
504
+ }, Rt = (e) => {
505
+ let t = G.get(e);
506
+ return t ? (G.delete(e), t.abort(), !0) : !1;
507
+ }, zt = (e) => G.has(e), Bt = (e) => {
508
+ G.delete(e);
509
+ }, Vt = () => G.size, Ht = (e) => {
509
510
  let t = e?.name, n = String(e?.message ?? e ?? "");
510
511
  return t === "AbortError" || t === "TimeoutError" || /\babort(ed)?\b/i.test(n);
511
- }, Bt = (e) => {
512
+ }, Ut = (e) => {
512
513
  switch (e?.type) {
513
514
  case "text-delta": return {
514
515
  _tag: "token",
@@ -574,14 +575,14 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
574
575
  };
575
576
  default: return null;
576
577
  }
577
- }, q = (t) => S.unwrap(v.gen(function* () {
578
- let n = yield* v.runtime(), r = t.provider ?? f(), i = e(r), a = t.tools ? {
578
+ }, K = (t) => x.unwrap(_.gen(function* () {
579
+ let n = yield* _.runtime(), r = t.provider ?? d(), i = e(r), a = t.tools ? {
579
580
  store: void 0,
580
581
  ...t.toolContext,
581
582
  runtime: n
582
- } : t.toolContext, o = t.tools ? A(t.tools, a) : void 0, s = t.streamId === void 0 ? new AbortController() : Pt(t.streamId);
583
+ } : t.toolContext, o = t.tools ? k(t.tools, a) : void 0, s = t.streamId === void 0 ? new AbortController() : Lt(t.streamId);
583
584
  t.signal !== void 0 && (t.signal.aborted ? s.abort() : t.signal.addEventListener("abort", () => s.abort(), { once: !0 }));
584
- let c = s.signal, l = Se({
585
+ let c = s.signal, l = Ce({
585
586
  model: i,
586
587
  ...t.messages === void 0 ? { prompt: t.prompt } : { messages: [...t.messages] },
587
588
  ...t.system === void 0 ? {} : { system: t.system },
@@ -591,59 +592,59 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
591
592
  abortSignal: c,
592
593
  ...o ? {
593
594
  tools: o,
594
- stopWhen: xe(t.maxSteps ?? 8)
595
+ stopWhen: Se(t.maxSteps ?? 8)
595
596
  } : {}
596
597
  });
597
- return gt(L(r, "streamText"), S.fromAsyncIterable(l.fullStream, (e) => e).pipe(S.map(Bt), S.filter((e) => e !== null), S.catchAll((e) => {
598
- let t = c.aborted || zt(e);
599
- return S.make({
598
+ return yt(I(r, "streamText"), x.fromAsyncIterable(l.fullStream, (e) => e).pipe(x.map(Ut), x.filter((e) => e !== null), x.catchAll((e) => {
599
+ let t = c.aborted || Ht(e);
600
+ return x.make({
600
601
  _tag: "error",
601
602
  code: t ? "cancelled" : "provider",
602
603
  message: t ? "stream aborted" : String(e),
603
604
  retryable: !t
604
605
  });
605
- }), S.ensuring(v.sync(() => {
606
- s.abort(), t.streamId !== void 0 && Lt(t.streamId);
606
+ }), x.ensuring(_.sync(() => {
607
+ s.abort(), t.streamId !== void 0 && Bt(t.streamId);
607
608
  }))));
608
- })), Vt = (e) => e._tag === "token" || e._tag === "reasoning" || e._tag === "toolCall" || e._tag === "toolResult" || e._tag === "source" || e._tag === "file" || e._tag === "message", Ht = (e) => e._tag === "done" || e._tag === "error", Ut = (e, t = {}) => {
609
+ })), Wt = (e) => e._tag === "token" || e._tag === "reasoning" || e._tag === "toolCall" || e._tag === "toolResult" || e._tag === "source" || e._tag === "file" || e._tag === "message", Gt = (e) => e._tag === "done" || e._tag === "error", Kt = (e, t = {}) => {
609
610
  let n = Math.max(1, t.maxAttempts ?? 3), r = t.backoffMs ?? 250, i = t.maxBackoffMs ?? 5e3, a = [e.provider, ...e.fallbacks ?? []], o = (t, s) => {
610
611
  let c = !1, l = a[t];
611
- return q(l === void 0 ? e : {
612
+ return K(l === void 0 ? e : {
612
613
  ...e,
613
614
  provider: l
614
- }).pipe(S.takeUntil(Ht), S.flatMap((e) => {
615
+ }).pipe(x.takeUntil(Gt), x.flatMap((e) => {
615
616
  if (e._tag === "error" && e.retryable && !c) {
616
617
  if (s + 1 < n) {
617
618
  let e = Math.min(i, r * 2 ** s);
618
- return S.unwrap(v.as(v.sleep(Te.millis(e)), o(t, s + 1)));
619
+ return x.unwrap(_.as(_.sleep(Ee.millis(e)), o(t, s + 1)));
619
620
  }
620
621
  if (t + 1 < a.length) return o(t + 1, 0);
621
622
  }
622
- return Vt(e) && (c = !0), S.make(e);
623
+ return Wt(e) && (c = !0), x.make(e);
623
624
  }, { concurrency: 1 }));
624
625
  };
625
626
  return o(0, 0);
626
- }, Wt = (e) => {
627
+ }, qt = (e) => {
627
628
  let t = [e.provider, ...e.fallbacks ?? []], n = (r) => {
628
629
  let i = !1, a = t[r];
629
- return q(a === void 0 ? e : {
630
+ return K(a === void 0 ? e : {
630
631
  ...e,
631
632
  provider: a
632
- }).pipe(S.takeUntil(Ht), S.flatMap((e) => e._tag === "error" && e.retryable && !i && r + 1 < t.length ? n(r + 1) : (Vt(e) && (i = !0), S.make(e)), { concurrency: 1 }));
633
+ }).pipe(x.takeUntil(Gt), x.flatMap((e) => e._tag === "error" && e.retryable && !i && r + 1 < t.length ? n(r + 1) : (Wt(e) && (i = !0), x.make(e)), { concurrency: 1 }));
633
634
  };
634
635
  return n(0);
635
- }, Gt = (e, t, n = {}) => {
636
- let r = n.pollMs ?? 50, i = n.fromSeq ?? 0, a = n.idleTimeoutMs, o = [_.empty(), b.none()];
637
- return S.paginateChunkEffect({
636
+ }, Jt = (e, t, n = {}) => {
637
+ let r = n.pollMs ?? 50, i = n.fromSeq ?? 0, a = n.idleTimeoutMs, o = [g.empty(), y.none()];
638
+ return x.paginateChunkEffect({
638
639
  cursor: i,
639
640
  finishing: !1,
640
641
  idleMs: 0
641
- }, (n) => v.gen(function* () {
642
+ }, (n) => _.gen(function* () {
642
643
  if (n.finishing) return o;
643
644
  let i = yield* t.read(e, n.cursor);
644
645
  if (i.length > 0) {
645
646
  let e = i[i.length - 1].seq;
646
- return [_.fromIterable(i), b.some({
647
+ return [g.fromIterable(i), y.some({
647
648
  cursor: e,
648
649
  finishing: !1,
649
650
  idleMs: 0
@@ -653,38 +654,38 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
653
654
  let r = yield* t.read(e, n.cursor);
654
655
  if (r.length === 0) return o;
655
656
  let i = r[r.length - 1].seq;
656
- return [_.fromIterable(r), b.some({
657
+ return [g.fromIterable(r), y.some({
657
658
  cursor: i,
658
659
  finishing: !0,
659
660
  idleMs: 0
660
661
  })];
661
662
  }
662
663
  let s = n.idleMs + r;
663
- return a !== void 0 && s >= a ? o : (yield* v.sleep(Te.millis(r)), [_.empty(), b.some({
664
+ return a !== void 0 && s >= a ? o : (yield* _.sleep(Ee.millis(r)), [g.empty(), y.some({
664
665
  ...n,
665
666
  idleMs: s
666
667
  })]);
667
668
  }));
668
- }, Kt = (e, t, n) => {
669
+ }, Yt = (e, t, n) => {
669
670
  let r = 0;
670
- return n().pipe(S.runForEach((n) => (r += 1, t.append(e, {
671
+ return n().pipe(x.runForEach((n) => (r += 1, t.append(e, {
671
672
  seq: r,
672
673
  event: n
673
- }))), v.ensuring(t.markDone(e)), v.catchAllCause(() => v.void));
674
- }, qt = (e) => S.unwrap(v.gen(function* () {
675
- return (yield* e.store.claimProducer(e.streamId)) && (yield* v.forkDaemon(Kt(e.streamId, e.store, e.source))), Gt(e.streamId, e.store, {
674
+ }))), _.ensuring(t.markDone(e)), _.catchAllCause(() => _.void));
675
+ }, Xt = (e) => x.unwrap(_.gen(function* () {
676
+ return (yield* e.store.claimProducer(e.streamId)) && (yield* _.forkDaemon(Yt(e.streamId, e.store, e.source))), Jt(e.streamId, e.store, {
676
677
  fromSeq: e.fromSeq ?? 0,
677
678
  pollMs: e.pollMs ?? 50,
678
679
  ...e.idleTimeoutMs === void 0 ? {} : { idleTimeoutMs: e.idleTimeoutMs }
679
680
  });
680
- })), Jt = (e) => qt({
681
+ })), Zt = (e) => Xt({
681
682
  streamId: e.streamId,
682
683
  store: e.store,
683
- source: () => q(e.options),
684
+ source: () => K(e.options),
684
685
  ...e.fromSeq === void 0 ? {} : { fromSeq: e.fromSeq },
685
686
  ...e.pollMs === void 0 ? {} : { pollMs: e.pollMs },
686
687
  ...e.idleTimeoutMs === void 0 ? {} : { idleTimeoutMs: e.idleTimeoutMs }
687
- }), Yt = () => {
688
+ }), Qt = () => {
688
689
  let e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Set(), n = (t) => {
689
690
  let n = e.get(t);
690
691
  return n || (n = {
@@ -693,42 +694,42 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
693
694
  }, e.set(t, n)), n;
694
695
  };
695
696
  return {
696
- claimProducer: (e) => v.sync(() => t.has(e) ? !1 : (t.add(e), !0)),
697
- append: (e, t) => v.sync(() => {
697
+ claimProducer: (e) => _.sync(() => t.has(e) ? !1 : (t.add(e), !0)),
698
+ append: (e, t) => _.sync(() => {
698
699
  n(e).events.push(t);
699
700
  }),
700
- read: (e, t) => v.sync(() => n(e).events.filter((e) => e.seq > t)),
701
- markDone: (e) => v.sync(() => {
701
+ read: (e, t) => _.sync(() => n(e).events.filter((e) => e.seq > t)),
702
+ markDone: (e) => _.sync(() => {
702
703
  n(e).done = !0;
703
704
  }),
704
- isDone: (e) => v.sync(() => n(e).done)
705
+ isDone: (e) => _.sync(() => n(e).done)
705
706
  };
706
- }, J = "_voltro_stream_events", Y = "_voltro_stream_state", Xt = D(J, {
707
- id: T({ prefix: "sev" }),
708
- streamId: O(),
709
- seq: E(),
710
- event: Fe(),
711
- createdAt: k().default("now")
712
- }).unique(["streamId", "seq"]).index(["streamId"]), Zt = D(Y, {
713
- id: T({ prefix: "sst" }),
714
- streamId: O().unique(),
715
- done: ke().default(!1),
716
- createdAt: k().default("now"),
717
- updatedAt: k().default("now")
718
- }).index(["createdAt"]), Qt = (e) => e === !0 || e === 1 || e === "1" || e === "t", $t = async (e, t) => (await e.query({
707
+ }, q = "_voltro_stream_events", J = "_voltro_stream_state", $t = E(q, {
708
+ id: w({ prefix: "sev" }),
709
+ streamId: D(),
710
+ seq: T(),
711
+ event: Ie(),
712
+ createdAt: O().default("now")
713
+ }).unique(["streamId", "seq"]).index(["streamId"]), en = E(J, {
714
+ id: w({ prefix: "sst" }),
715
+ streamId: D().unique(),
716
+ done: Ae().default(!1),
717
+ createdAt: O().default("now"),
718
+ updatedAt: O().default("now")
719
+ }).index(["createdAt"]), tn = (e) => e === !0 || e === 1 || e === "1" || e === "t", nn = async (e, t) => (await e.query({
719
720
  table: "_voltro_stream_state",
720
- predicate: w("streamId", t),
721
+ predicate: C("streamId", t),
721
722
  order: [],
722
723
  take: 1,
723
724
  skip: void 0,
724
725
  projection: void 0
725
- }))[0]?.id ?? null, en = (e) => ({
726
- claimProducer: (t) => v.promise(async () => {
727
- let n = je({
726
+ }))[0]?.id ?? null, rn = (e) => ({
727
+ claimProducer: (t) => _.promise(async () => {
728
+ let n = Me({
728
729
  kind: "typeid",
729
730
  prefix: "sst"
730
- }, Y);
731
- return (await e.insertIgnore(Y, {
731
+ }, J);
732
+ return (await e.insertIgnore(J, {
732
733
  id: n,
733
734
  streamId: t,
734
735
  done: !1,
@@ -736,17 +737,17 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
736
737
  updatedAt: /* @__PURE__ */ new Date()
737
738
  }, { conflictColumns: ["streamId"] })).id === n;
738
739
  }),
739
- append: (t, n) => v.promise(async () => {
740
- await e.insert(J, {
740
+ append: (t, n) => _.promise(async () => {
741
+ await e.insert(q, {
741
742
  streamId: t,
742
743
  seq: n.seq,
743
744
  event: n.event,
744
745
  createdAt: /* @__PURE__ */ new Date()
745
746
  });
746
747
  }),
747
- read: (t, n) => v.promise(async () => (await e.query({
748
- table: J,
749
- predicate: C(w("streamId", t), Me("seq", n)),
748
+ read: (t, n) => _.promise(async () => (await e.query({
749
+ table: q,
750
+ predicate: S(C("streamId", t), Ne("seq", n)),
750
751
  order: [{
751
752
  column: "seq",
752
753
  direction: "asc"
@@ -758,28 +759,28 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
758
759
  seq: Number(e.seq),
759
760
  event: e.event
760
761
  }))),
761
- markDone: (t) => v.promise(async () => {
762
- let n = await $t(e, t);
763
- n !== null && await e.update(Y, n, {
762
+ markDone: (t) => _.promise(async () => {
763
+ let n = await nn(e, t);
764
+ n !== null && await e.update(J, n, {
764
765
  done: !0,
765
766
  updatedAt: /* @__PURE__ */ new Date()
766
767
  });
767
768
  }),
768
- isDone: (t) => v.promise(async () => {
769
+ isDone: (t) => _.promise(async () => {
769
770
  let n = (await e.query({
770
- table: Y,
771
- predicate: w("streamId", t),
771
+ table: J,
772
+ predicate: C("streamId", t),
772
773
  order: [],
773
774
  take: 1,
774
775
  skip: void 0,
775
776
  projection: void 0
776
777
  }))[0];
777
- return n !== void 0 && Qt(n.done);
778
+ return n !== void 0 && tn(n.done);
778
779
  })
779
- }), tn = (e, t) => v.promise(async () => {
780
+ }), an = (e, t) => _.promise(async () => {
780
781
  let n = await e.query({
781
- table: Y,
782
- predicate: w("done", !0),
782
+ table: J,
783
+ predicate: C("done", !0),
783
784
  order: [],
784
785
  take: void 0,
785
786
  skip: void 0,
@@ -789,25 +790,25 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
789
790
  let n = i;
790
791
  if ((n.createdAt instanceof Date ? n.createdAt : new Date(String(n.createdAt))).getTime() >= t.olderThan.getTime()) continue;
791
792
  let a = await e.query({
792
- table: J,
793
- predicate: w("streamId", n.streamId),
793
+ table: q,
794
+ predicate: C("streamId", n.streamId),
794
795
  order: [],
795
796
  take: void 0,
796
797
  skip: void 0,
797
798
  projection: void 0
798
799
  });
799
- for (let t of a) await e.delete(J, t.id);
800
- await e.delete(Y, n.id), r += 1;
800
+ for (let t of a) await e.delete(q, t.id);
801
+ await e.delete(J, n.id), r += 1;
801
802
  }
802
803
  return r;
803
- }), nn = (e, t = {}) => {
804
+ }), on = (e, t = {}) => {
804
805
  let n = t.keyPrefix ?? "voltro:rstream", r = t.ttlSeconds ?? 3600, i = (e) => `${n}:log:${e}`, a = (e) => `${n}:producer:${e}`, o = (e) => `${n}:done:${e}`;
805
806
  return {
806
- claimProducer: (t) => v.promise(() => e.setNx(a(t), "1", r)),
807
- append: (t, n) => v.promise(async () => {
807
+ claimProducer: (t) => _.promise(() => e.setNx(a(t), "1", r)),
808
+ append: (t, n) => _.promise(async () => {
808
809
  await e.rpush(i(t), JSON.stringify(n)), e.expire && await e.expire(i(t), r);
809
810
  }),
810
- read: (t, n) => v.promise(async () => {
811
+ read: (t, n) => _.promise(async () => {
811
812
  let r = await e.lrange(i(t), n, -1), a = [];
812
813
  for (let e of r) try {
813
814
  let t = JSON.parse(e);
@@ -815,39 +816,39 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
815
816
  } catch {}
816
817
  return a;
817
818
  }),
818
- markDone: (t) => v.promise(() => e.set(o(t), "1", r)),
819
- isDone: (t) => v.promise(() => e.exists(o(t)))
819
+ markDone: (t) => _.promise(() => e.set(o(t), "1", r)),
820
+ isDone: (t) => _.promise(() => e.exists(o(t)))
820
821
  };
821
- }, rn = D(h, {
822
- id: T({ prefix: "thread" }),
823
- tenantId: O().nullable(),
824
- title: O().nullable(),
825
- createdAt: k(),
826
- updatedAt: k()
827
- }).renamedFrom("agent_threads").index(["tenantId"]), an = D(m, {
828
- id: T({ prefix: "msg" }),
829
- threadId: O(),
830
- tenantId: O().nullable(),
831
- role: O(),
832
- content: O(),
833
- streaming: ke(),
834
- order: E(),
835
- stepOrder: E(),
836
- parts: Fe(),
837
- createdAt: k()
838
- }).renamedFrom("agent_messages").index(["threadId"]), on = (e, t = {}) => v.promise(async () => {
822
+ }, sn = E(m, {
823
+ id: w({ prefix: "thread" }),
824
+ tenantId: D().nullable(),
825
+ title: D().nullable(),
826
+ createdAt: O(),
827
+ updatedAt: O()
828
+ }).renamedFrom("agent_threads").index(["tenantId"]), cn = E(p, {
829
+ id: w({ prefix: "msg" }),
830
+ threadId: D(),
831
+ tenantId: D().nullable(),
832
+ role: D(),
833
+ content: D(),
834
+ streaming: Ae(),
835
+ order: T(),
836
+ stepOrder: T(),
837
+ parts: Ie(),
838
+ createdAt: O()
839
+ }).renamedFrom("agent_messages").index(["threadId"]), ln = (e, t = {}) => _.promise(async () => {
839
840
  let n = /* @__PURE__ */ new Date();
840
- return await e.insert(h, {
841
+ return await e.insert(m, {
841
842
  tenantId: t.tenantId ?? null,
842
843
  title: t.title ?? null,
843
844
  createdAt: n,
844
845
  updatedAt: n
845
846
  });
846
- }), sn = (e, t) => v.promise(async () => {
847
+ }), un = (e, t) => _.promise(async () => {
847
848
  let n = t.parts ?? (t.content ? [{
848
849
  type: "text",
849
850
  text: t.content
850
- }] : []), r = await e.insert(m, {
851
+ }] : []), r = await e.insert(p, {
851
852
  threadId: t.threadId,
852
853
  tenantId: t.tenantId ?? null,
853
854
  role: t.role,
@@ -858,9 +859,9 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
858
859
  parts: n,
859
860
  createdAt: /* @__PURE__ */ new Date()
860
861
  });
861
- return await e.update(h, t.threadId, { updatedAt: /* @__PURE__ */ new Date() }).catch(() => null), r;
862
- }), X = (e, t) => v.promise(async () => await e.query({
863
- table: m,
862
+ return await e.update(m, t.threadId, { updatedAt: /* @__PURE__ */ new Date() }).catch(() => null), r;
863
+ }), Y = (e, t) => _.promise(async () => await e.query({
864
+ table: p,
864
865
  predicate: {
865
866
  _tag: "leaf",
866
867
  column: "threadId",
@@ -874,7 +875,7 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
874
875
  take: void 0,
875
876
  skip: void 0,
876
877
  projection: void 0
877
- })), cn = (e, t) => v.promise(async () => (await e.query({
878
+ })), dn = (e, t) => _.promise(async () => (await e.query({
878
879
  table: "_voltro_agent_threads",
879
880
  predicate: {
880
881
  _tag: "leaf",
@@ -886,14 +887,14 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
886
887
  take: 1,
887
888
  skip: void 0,
888
889
  projection: void 0
889
- }))[0] ?? null), ln = (e) => [...e].sort((e, t) => e.order - t.order || e.stepOrder - t.stepOrder).filter((e) => !e.streaming && e.content.length > 0 && (e.role === "user" || e.role === "assistant")).map((e) => e.role === "user" ? {
890
+ }))[0] ?? null), fn = (e) => [...e].sort((e, t) => e.order - t.order || e.stepOrder - t.stepOrder).filter((e) => !e.streaming && e.content.length > 0 && (e.role === "user" || e.role === "assistant")).map((e) => e.role === "user" ? {
890
891
  role: "user",
891
892
  content: e.content
892
893
  } : {
893
894
  role: "assistant",
894
895
  content: e.content
895
- }), un = (e, t) => v.promise(async () => {
896
- let n = await e.insert(m, {
896
+ }), pn = (e, t) => _.promise(async () => {
897
+ let n = await e.insert(p, {
897
898
  threadId: t.threadId,
898
899
  tenantId: t.tenantId ?? null,
899
900
  role: "assistant",
@@ -904,18 +905,18 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
904
905
  parts: [],
905
906
  createdAt: /* @__PURE__ */ new Date()
906
907
  });
907
- return await e.update(h, t.threadId, { updatedAt: /* @__PURE__ */ new Date() }).catch(() => null), n.id;
908
- }), dn = (e, t, n) => v.promise(async () => {
909
- await e.update(m, t, {
908
+ return await e.update(m, t.threadId, { updatedAt: /* @__PURE__ */ new Date() }).catch(() => null), n.id;
909
+ }), mn = (e, t, n) => _.promise(async () => {
910
+ await e.update(p, t, {
910
911
  parts: n,
911
- content: Z(n)
912
+ content: X(n)
912
913
  });
913
- }), Z = (e) => e.filter((e) => e.type === "text").map((e) => e.text).join(""), fn = (e, t) => v.gen(function* () {
914
- let n = yield* un(e, {
914
+ }), X = (e) => e.filter((e) => e.type === "text").map((e) => e.text).join(""), hn = (e, t) => _.gen(function* () {
915
+ let n = yield* pn(e, {
915
916
  threadId: t.threadId,
916
917
  tenantId: t.tenantId ?? null,
917
918
  order: t.order
918
- }), r = "", i = "", a = /* @__PURE__ */ new Map(), o = [], s = [], c = 0, l = null, u = t.throttleMs ?? 100, d = () => {
919
+ }), r = "", i = "", a = /* @__PURE__ */ new Map(), o = [], s = [], c = 0, l = null, u = t.throttleMs ?? 100, ee = () => {
919
920
  let e = [];
920
921
  r.length > 0 && e.push({
921
922
  type: "reasoning",
@@ -928,11 +929,11 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
928
929
  for (let t of o) e.push(t);
929
930
  for (let t of s) e.push(t);
930
931
  return e;
931
- }, f = (t) => {
932
+ }, d = (t) => {
932
933
  let r = Date.now();
933
- return !t && r - c < u ? v.void : (c = r, dn(e, n, d()));
934
+ return !t && r - c < u ? _.void : (c = r, mn(e, n, ee()));
934
935
  };
935
- yield* q({
936
+ yield* K({
936
937
  prompt: t.prompt,
937
938
  ...t.messages === void 0 ? {} : { messages: t.messages },
938
939
  ...t.system === void 0 ? {} : { system: t.system },
@@ -941,10 +942,10 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
941
942
  ...t.maxSteps === void 0 ? {} : { maxSteps: t.maxSteps },
942
943
  ...t.toolContext === void 0 ? {} : { toolContext: t.toolContext },
943
944
  ...t.providerOptions === void 0 ? {} : { providerOptions: t.providerOptions }
944
- }).pipe(S.runForEach((e) => v.gen(function* () {
945
+ }).pipe(x.runForEach((e) => _.gen(function* () {
945
946
  switch (e._tag) {
946
947
  case "token":
947
- i += e.text, yield* f(!1);
948
+ i += e.text, yield* d(!1);
948
949
  break;
949
950
  case "toolCall":
950
951
  a.set(e.id, {
@@ -953,7 +954,7 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
953
954
  toolName: e.name,
954
955
  state: "input-available",
955
956
  input: e.input
956
- }), yield* f(!0);
957
+ }), yield* d(!0);
957
958
  break;
958
959
  case "toolResult": {
959
960
  let t = a.get(e.id);
@@ -965,11 +966,11 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
965
966
  input: t?.input,
966
967
  output: e.output,
967
968
  ...e.error ? { errorText: e.error } : {}
968
- }), yield* f(!0);
969
+ }), yield* d(!0);
969
970
  break;
970
971
  }
971
972
  case "reasoning":
972
- r += e.text, yield* f(!1);
973
+ r += e.text, yield* d(!1);
973
974
  break;
974
975
  case "source":
975
976
  o.push({
@@ -980,14 +981,14 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
980
981
  ...e.title === void 0 ? {} : { title: e.title },
981
982
  ...e.mediaType === void 0 ? {} : { mediaType: e.mediaType },
982
983
  ...e.filename === void 0 ? {} : { filename: e.filename }
983
- }), yield* f(!0);
984
+ }), yield* d(!0);
984
985
  break;
985
986
  case "file":
986
987
  s.push({
987
988
  type: "file",
988
989
  mediaType: e.mediaType,
989
990
  data: e.data
990
- }), yield* f(!0);
991
+ }), yield* d(!0);
991
992
  break;
992
993
  case "error":
993
994
  l = e.message;
@@ -996,33 +997,33 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
996
997
  case "message": break;
997
998
  }
998
999
  })));
999
- let p = d();
1000
- return yield* v.promise(() => e.update(m, n, {
1001
- parts: p,
1002
- content: Z(p),
1000
+ let f = ee();
1001
+ return yield* _.promise(() => e.update(p, n, {
1002
+ parts: f,
1003
+ content: X(f),
1003
1004
  streaming: !1
1004
- })), l ? yield* v.fail(Error(l)) : Z(p);
1005
- }), pn = "@voltro/ai/AgentExecutor", mn = (e, t) => ({
1006
- _brand: pn,
1005
+ })), l ? yield* _.fail(Error(l)) : X(f);
1006
+ }), gn = "@voltro/ai/AgentExecutor", _n = (e, t) => ({
1007
+ _brand: gn,
1007
1008
  descriptor: e,
1008
1009
  config: t
1009
- }), hn = (e) => typeof e == "object" && !!e && e._brand === pn, gn = (e, t) => {
1010
+ }), vn = (e) => typeof e == "object" && !!e && e._brand === gn, yn = (e, t) => {
1010
1011
  let n = e.config.system;
1011
1012
  if (n !== void 0) return typeof n == "function" ? n(t) : n;
1012
- }, _n = (e, t) => {
1013
+ }, bn = (e, t) => {
1013
1014
  let n = e.config.model;
1014
1015
  return typeof n == "function" ? n(t) : n;
1015
- }, vn = (e, t, n) => v.gen(function* () {
1016
- let r = n.promptOf ? n.promptOf(n.input) : String(n.input?.prompt ?? ""), i = gn(e, n.input), a = _n(e, n.input);
1017
- yield* sn(t, {
1016
+ }, xn = (e, t, n) => _.gen(function* () {
1017
+ let r = n.promptOf ? n.promptOf(n.input) : String(n.input?.prompt ?? ""), i = yn(e, n.input), a = bn(e, n.input);
1018
+ yield* un(t, {
1018
1019
  threadId: n.threadId,
1019
1020
  role: "user",
1020
1021
  content: r,
1021
1022
  tenantId: n.tenantId ?? null,
1022
1023
  order: n.order
1023
1024
  });
1024
- let o = ln(yield* X(t, n.threadId));
1025
- return yield* fn(t, {
1025
+ let o = fn(yield* Y(t, n.threadId));
1026
+ return yield* hn(t, {
1026
1027
  threadId: n.threadId,
1027
1028
  tenantId: n.tenantId ?? null,
1028
1029
  prompt: r,
@@ -1036,18 +1037,18 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1036
1037
  order: n.order + 1,
1037
1038
  ...n.throttleMs === void 0 ? {} : { throttleMs: n.throttleMs }
1038
1039
  });
1039
- }), yn = (e, t) => X(e, t), bn = (e, t) => ({
1040
+ }), Sn = (e, t) => Y(e, t), Cn = (e, t) => ({
1040
1041
  specificationVersion: "v4",
1041
1042
  provider: "mock",
1042
1043
  modelId: e,
1043
1044
  maxEmbeddingsPerCall: 2048,
1044
1045
  supportsParallelCalls: !0,
1045
1046
  doEmbed: async ({ values: e }) => ({
1046
- embeddings: e.map((e) => xn(e, t)),
1047
+ embeddings: e.map((e) => wn(e, t)),
1047
1048
  usage: { tokens: e.reduce((e, t) => e + t.length, 0) },
1048
1049
  warnings: []
1049
1050
  })
1050
- }), xn = (e, t) => {
1051
+ }), wn = (e, t) => {
1051
1052
  let n = Array(t);
1052
1053
  for (let r = 0; r < t; r++) {
1053
1054
  let t = 2166136261 ^ r * 16777619;
@@ -1055,14 +1056,14 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1055
1056
  n[r] = (t >>> 0) / 4294967295 * 2 - 1;
1056
1057
  }
1057
1058
  return n;
1058
- }, Sn = async (e) => {
1059
+ }, Z = async (e) => {
1059
1060
  switch (e.name) {
1060
- case "mock": return bn(e.model, e.mockDim ?? 8);
1061
- case "openai": return (await Cn("@ai-sdk/openai", "openai")).openai.textEmbeddingModel(e.model);
1062
- case "voyage": return (await Cn("voyage-ai-provider", "voyage")).voyage.textEmbeddingModel(e.model);
1063
- case "cohere": return (await Cn("@ai-sdk/cohere", "cohere")).cohere.textEmbeddingModel(e.model);
1061
+ case "mock": return Cn(e.model, e.mockDim ?? 8);
1062
+ case "openai": return (await Q("@ai-sdk/openai", "openai")).openai.textEmbeddingModel(e.model);
1063
+ case "voyage": return (await Q("voyage-ai-provider", "voyage")).voyage.textEmbeddingModel(e.model);
1064
+ case "cohere": return (await Q("@ai-sdk/cohere", "cohere")).cohere.textEmbeddingModel(e.model);
1064
1065
  }
1065
- }, Cn = async (e, t) => {
1066
+ }, Q = async (e, t) => {
1066
1067
  try {
1067
1068
  return await import(
1068
1069
  /* @vite-ignore */
@@ -1071,51 +1072,101 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1071
1072
  } catch {
1072
1073
  throw Error(`embedding provider '${t}' needs the '${e}' package — install it (pnpm add ${e}) or use AI_EMBED_PROVIDER=mock for tests/demos.`);
1073
1074
  }
1074
- }, wn = (e = process.env) => {
1075
+ }, Tn = (e = process.env) => {
1075
1076
  let t = (e.AI_EMBED_PROVIDER ?? "mock").toLowerCase(), n = t === "openai" ? "text-embedding-3-small" : t === "voyage" ? "voyage-3" : t === "cohere" ? "embed-english-v3.0" : "mock", r = e.AI_EMBED_MODEL ?? n, i = e.AI_EMBED_MOCK_DIM === void 0 ? void 0 : Number(e.AI_EMBED_MOCK_DIM);
1076
1077
  return {
1077
1078
  name: t,
1078
1079
  model: r,
1079
1080
  ...i !== void 0 && Number.isFinite(i) ? { mockDim: i } : {}
1080
1081
  };
1081
- }, Tn = (e, t) => v.tryPromise({
1082
- try: async () => (await me({
1083
- model: await Sn(t ?? wn()),
1082
+ }, En = (e, t) => _.tryPromise({
1083
+ try: async () => (await he({
1084
+ model: await Z(t ?? Tn()),
1084
1085
  value: e
1085
1086
  })).embedding,
1086
- catch: (e) => new B({
1087
+ catch: (e) => new z({
1087
1088
  reason: "generation",
1088
1089
  message: String(e?.message ?? e)
1089
1090
  })
1090
- }), En = (e, t) => v.tryPromise({
1091
- try: async () => (await he({
1092
- model: await Sn(t ?? wn()),
1091
+ }), Dn = (e, t) => _.tryPromise({
1092
+ try: async () => (await ge({
1093
+ model: await Z(t ?? Tn()),
1093
1094
  values: [...e]
1094
1095
  })).embeddings,
1095
- catch: (e) => new B({
1096
+ catch: (e) => new z({
1096
1097
  reason: "generation",
1097
1098
  message: String(e?.message ?? e)
1098
1099
  })
1099
- }), Dn = (e, t) => pe([...e], [...t]), On = (e) => v.tryPromise({
1100
+ }), On = (e, t) => me([...e], [...t]), kn = {
1101
+ inputTokens: 0,
1102
+ outputTokens: 0,
1103
+ totalTokens: 0
1104
+ }, An = .95, jn = (e, t) => t === void 0 ? e : `${t}\n\n${e}`, Mn = (e, t, n) => e.lookup(t, { threshold: n }).pipe(_.catchTag("CacheError", () => _.succeed(y.none()))), Nn = (e, t, n, r) => e.put(t, n, {
1105
+ deps: r.deps,
1106
+ ...r.ttlMs === void 0 ? {} : { ttlMs: r.ttlMs }
1107
+ }).pipe(_.catchTag("CacheError", () => _.void)), Pn = (e, t, n) => _.gen(function* () {
1108
+ let r = n.embed ?? En, i = t.threshold ?? An, a = yield* r(jn(e.prompt, e.system)), o = yield* Mn(n.cache, a, i);
1109
+ if (y.isSome(o)) return {
1110
+ value: o.value,
1111
+ cached: !0,
1112
+ usage: kn
1113
+ };
1114
+ let s = yield* xt(e);
1115
+ return yield* Nn(n.cache, a, s.text, t), {
1116
+ value: s.text,
1117
+ cached: !1,
1118
+ usage: s.usage
1119
+ };
1120
+ }), Fn = (e, t, n) => _.gen(function* () {
1121
+ let r = n.embed ?? En, i = t.threshold ?? An, a = yield* r(jn(e.prompt, e.system)), o = yield* Mn(n.cache, a, i);
1122
+ if (y.isSome(o)) return {
1123
+ value: o.value,
1124
+ cached: !0,
1125
+ usage: kn
1126
+ };
1127
+ let s = yield* B(e);
1128
+ return yield* Nn(n.cache, a, s.object, t), {
1129
+ value: s.object,
1130
+ cached: !1,
1131
+ usage: s.usage
1132
+ };
1133
+ }), In = (e) => {
1134
+ let t = /* @__PURE__ */ new Set(), n = async (n) => {
1135
+ let r = await e.query(n);
1136
+ t.add(We(n.table));
1137
+ for (let e of r) {
1138
+ let r = e.id;
1139
+ r != null && t.add(Ue(n.table, String(r)));
1140
+ }
1141
+ return r;
1142
+ };
1143
+ return {
1144
+ store: new Proxy(e, { get(e, t, r) {
1145
+ return t === "query" ? n : Reflect.get(e, t, r);
1146
+ } }),
1147
+ deps: () => [...t],
1148
+ reset: () => t.clear()
1149
+ };
1150
+ }, Ln = (e) => _.tryPromise({
1100
1151
  try: async () => {
1101
- let t = e.getText ?? ((e) => String(e)), n = e.provider ?? "mock", r = [...n === "mock" ? kn(e.query, e.documents, t) : await jn(n, e.query, e.documents, t, e.model)].sort((e, t) => t.score - e.score);
1152
+ let t = e.getText ?? ((e) => String(e)), n = e.provider ?? "mock", r = [...n === "mock" ? Rn(e.query, e.documents, t) : await Bn(n, e.query, e.documents, t, e.model)].sort((e, t) => t.score - e.score);
1102
1153
  return e.topN === void 0 ? r : r.slice(0, e.topN);
1103
1154
  },
1104
- catch: (e) => new B({
1155
+ catch: (e) => new z({
1105
1156
  reason: "generation",
1106
1157
  message: String(e?.message ?? e)
1107
1158
  })
1108
- }), kn = (e, t, n) => {
1109
- let r = An(e), i = new Set(r);
1159
+ }), Rn = (e, t, n) => {
1160
+ let r = zn(e), i = new Set(r);
1110
1161
  return t.map((e) => {
1111
- let t = new Set(An(n(e))), r = 0;
1162
+ let t = new Set(zn(n(e))), r = 0;
1112
1163
  for (let e of i) t.has(e) && r++;
1113
1164
  return {
1114
1165
  document: e,
1115
1166
  score: i.size === 0 ? 0 : r / i.size
1116
1167
  };
1117
1168
  });
1118
- }, An = (e) => e.toLowerCase().split(/[^a-z0-9]+/).filter((e) => e.length > 0), jn = async (e, t, n, r, i) => {
1169
+ }, zn = (e) => e.toLowerCase().split(/[^a-z0-9]+/).filter((e) => e.length > 0), Bn = async (e, t, n, r, i) => {
1119
1170
  let a = e === "cohere" ? "@ai-sdk/cohere" : "voyage-ai-provider", o;
1120
1171
  try {
1121
1172
  o = await import(
@@ -1127,7 +1178,7 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1127
1178
  }
1128
1179
  let s = o[e], c = s?.rerankingModel ?? s?.reranking;
1129
1180
  if (typeof c != "function") throw Error(`rerank provider '${e}' does not expose a reranking model in '${a}'.`);
1130
- return (await be({
1181
+ return (await xe({
1131
1182
  model: c(i ?? (e === "cohere" ? "rerank-english-v3.0" : "rerank-2")),
1132
1183
  query: t,
1133
1184
  documents: n.map(r)
@@ -1135,12 +1186,137 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1135
1186
  document: n[e.originalIndex],
1136
1187
  score: e.score
1137
1188
  }));
1138
- }, Q = (e) => {
1189
+ }, Vn = (e) => {
1190
+ if (e.name.trim() === "") throw Error("defineEval: name must be non-empty");
1191
+ if (e.cases.length === 0) throw Error(`defineEval "${e.name}": at least one case is required`);
1192
+ let t = /* @__PURE__ */ new Set();
1193
+ for (let n of e.cases) {
1194
+ if (n.id.trim() === "") throw Error(`defineEval "${e.name}": every case needs a non-empty id`);
1195
+ if (t.has(n.id)) throw Error(`defineEval "${e.name}": duplicate case id "${n.id}"`);
1196
+ t.add(n.id);
1197
+ }
1198
+ let n = e.judge?.threshold;
1199
+ if (n !== void 0 && (n < 0 || n > 1)) throw Error(`defineEval "${e.name}": judge.threshold must be within 0..1 (got ${n})`);
1200
+ return {
1201
+ ...e,
1202
+ __eval: !0
1203
+ };
1204
+ }, Hn = (e) => typeof e == "object" && !!e && "__eval" in e && e.__eval === !0, Un = (e, t) => {
1205
+ let n = [], r = e.text;
1206
+ for (let i of t) switch (i.kind) {
1207
+ case "contains": {
1208
+ let e = i.caseInsensitive ? r.toLowerCase() : r, t = i.caseInsensitive ? i.value.toLowerCase() : i.value;
1209
+ e.includes(t) || n.push({
1210
+ assertion: i,
1211
+ detail: `output does not contain "${i.value}"`
1212
+ });
1213
+ break;
1214
+ }
1215
+ case "notContains": {
1216
+ let e = i.caseInsensitive ? r.toLowerCase() : r, t = i.caseInsensitive ? i.value.toLowerCase() : i.value;
1217
+ e.includes(t) && n.push({
1218
+ assertion: i,
1219
+ detail: `output unexpectedly contains "${i.value}"`
1220
+ });
1221
+ break;
1222
+ }
1223
+ case "matches": {
1224
+ let e;
1225
+ try {
1226
+ e = new RegExp(i.pattern, i.flags);
1227
+ } catch (e) {
1228
+ n.push({
1229
+ assertion: i,
1230
+ detail: `invalid pattern /${i.pattern}/: ${e.message}`
1231
+ });
1232
+ break;
1233
+ }
1234
+ e.test(r) || n.push({
1235
+ assertion: i,
1236
+ detail: `output does not match /${i.pattern}/`
1237
+ });
1238
+ break;
1239
+ }
1240
+ case "equals":
1241
+ (i.trim ? r.trim() : r) !== (i.trim ? i.value.trim() : i.value) && n.push({
1242
+ assertion: i,
1243
+ detail: "output is not equal to the expected value"
1244
+ });
1245
+ break;
1246
+ case "maxLatencyMs":
1247
+ e.latencyMs > i.value && n.push({
1248
+ assertion: i,
1249
+ detail: `latency ${e.latencyMs}ms exceeds ${i.value}ms`
1250
+ });
1251
+ break;
1252
+ case "nonEmpty":
1253
+ r.trim() === "" && n.push({
1254
+ assertion: i,
1255
+ detail: "output is empty"
1256
+ });
1257
+ break;
1258
+ }
1259
+ return n;
1260
+ }, Wn = .7, Gn = (e, t, n, r, i) => {
1261
+ let a = Un(t, [...n, ...e.assert ?? []]), o = r?.threshold ?? .7, s = i === void 0 || i.score >= o;
1262
+ return {
1263
+ id: e.id,
1264
+ pass: a.length === 0 && s,
1265
+ assertionFailures: a,
1266
+ ...i === void 0 ? {} : { judge: i },
1267
+ output: t
1268
+ };
1269
+ }, Kn = async (e, t) => {
1270
+ let n = [];
1271
+ for (let r of e.cases) {
1272
+ let i = await t.replay({
1273
+ case: r,
1274
+ def: e
1275
+ }), a = e.judge !== void 0 && t.judge !== void 0 ? await t.judge({
1276
+ case: r,
1277
+ output: i,
1278
+ config: e.judge
1279
+ }) : void 0;
1280
+ n.push(Gn(r, i, e.assert ?? [], e.judge, a));
1281
+ }
1282
+ let r = n.filter((e) => !e.pass).length;
1283
+ return {
1284
+ name: e.name,
1285
+ ok: r === 0,
1286
+ passed: n.length - r,
1287
+ failed: r,
1288
+ cases: n,
1289
+ ...t.branchId === void 0 ? {} : { branch: { id: t.branchId } }
1290
+ };
1291
+ }, qn = b.Struct({
1292
+ pass: b.Boolean,
1293
+ score: b.Number,
1294
+ reason: b.String
1295
+ }), Jn = (e, t, n) => [
1296
+ "You are grading an AI assistant response against a rubric. Respond with a JSON",
1297
+ "object { pass: boolean, score: number (0..1), reason: string }. Score 1 is a",
1298
+ "perfect response, 0 is unusable. Be strict: a plausible-sounding but wrong or",
1299
+ "incomplete answer scores low.",
1300
+ "",
1301
+ `RUBRIC:\n${n.rubric}`,
1302
+ ...e.golden === void 0 ? [] : ["", `REFERENCE (the previously-accepted answer):\n${e.golden}`],
1303
+ ...e.input.prompt === "" ? [] : ["", `USER PROMPT:\n${e.input.prompt}`],
1304
+ "",
1305
+ `CANDIDATE RESPONSE (to grade):\n${t.text}`
1306
+ ].join("\n"), Yn = async ({ case: e, output: t, config: n }) => await _.runPromise(B({
1307
+ schema: qn,
1308
+ prompt: Jn(e, t, n),
1309
+ provider: d()
1310
+ }).pipe(_.map((e) => e.object), _.catchAll((e) => _.succeed({
1311
+ pass: !1,
1312
+ score: 0,
1313
+ reason: `judge failed: ${e.message}`
1314
+ })))), Xn = (e) => {
1139
1315
  if (e === void 0) return;
1140
1316
  let t = Number(e);
1141
1317
  return Number.isFinite(t) ? t * 1e6 : void 0;
1142
- }, Mn = (e) => {
1143
- let t = Q(e.pricing?.input), n = Q(e.pricing?.output), r = Q(e.pricing?.cachedInputTokens ?? void 0);
1318
+ }, Zn = (e) => {
1319
+ let t = Xn(e.pricing?.input), n = Xn(e.pricing?.output), r = Xn(e.pricing?.cachedInputTokens ?? void 0);
1144
1320
  return {
1145
1321
  id: e.id,
1146
1322
  name: e.name,
@@ -1152,16 +1328,16 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1152
1328
  ...r === void 0 ? {} : { cachedInputPer1M: r }
1153
1329
  } } : {}
1154
1330
  };
1155
- }, Nn = async (e = {}) => {
1156
- let t = (await (e.gatewayProvider ?? (e.apiKey !== void 0 || e.baseURL !== void 0 ? ue({
1331
+ }, Qn = async (e = {}) => {
1332
+ let t = (await (e.gatewayProvider ?? (e.apiKey !== void 0 || e.baseURL !== void 0 ? de({
1157
1333
  ...e.apiKey === void 0 ? {} : { apiKey: e.apiKey },
1158
1334
  ...e.baseURL === void 0 ? {} : { baseURL: e.baseURL }
1159
- }) : de)).getAvailableModels()).models.map(Mn);
1335
+ }) : fe)).getAvailableModels()).models.map(Zn);
1160
1336
  return e.modality === void 0 ? t : t.filter((t) => t.modality === e.modality);
1161
- }, Pn = class extends x.TaggedError()("CopilotRejected", {
1162
- reason: x.Literal("unknown-table", "unknown-column", "bad-op", "bad-aggregate", "empty"),
1163
- detail: x.String
1164
- }) {}, Fn = 200, In = 50, Ln = /* @__PURE__ */ new Set([
1337
+ }, $n = class extends b.TaggedError()("CopilotRejected", {
1338
+ reason: b.Literal("unknown-table", "unknown-column", "bad-op", "bad-aggregate", "empty"),
1339
+ detail: b.String
1340
+ }) {}, er = 200, tr = 50, nr = /* @__PURE__ */ new Set([
1165
1341
  "eq",
1166
1342
  "neq",
1167
1343
  "gt",
@@ -1170,30 +1346,30 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1170
1346
  "lte",
1171
1347
  "contains",
1172
1348
  "in"
1173
- ]), Rn = (e) => {
1349
+ ]), rr = (e) => {
1174
1350
  switch (e.op) {
1175
- case "eq": return w(e.column, e.value);
1176
- case "neq": return Re(e.column, e.value);
1177
- case "gt": return Me(e.column, e.value);
1178
- case "gte": return Ne(e.column, e.value);
1179
- case "lt": return Ie(e.column, e.value);
1180
- case "lte": return Le(e.column, e.value);
1181
- case "contains": return Ae(e.column, e.value);
1182
- case "in": return Pe(e.column, Array.isArray(e.value) ? e.value : [e.value]);
1351
+ case "eq": return C(e.column, e.value);
1352
+ case "neq": return ze(e.column, e.value);
1353
+ case "gt": return Ne(e.column, e.value);
1354
+ case "gte": return Pe(e.column, e.value);
1355
+ case "lt": return Le(e.column, e.value);
1356
+ case "lte": return Re(e.column, e.value);
1357
+ case "contains": return je(e.column, e.value);
1358
+ case "in": return Fe(e.column, Array.isArray(e.value) ? e.value : [e.value]);
1183
1359
  }
1184
1360
  }, $ = (e, t) => ({
1185
1361
  ok: !1,
1186
- rejection: new Pn({
1362
+ rejection: new $n({
1187
1363
  reason: e,
1188
1364
  detail: t
1189
1365
  })
1190
- }), zn = (e, t) => {
1366
+ }), ir = (e, t) => {
1191
1367
  let n = t.tables.find((t) => t.name === e.table);
1192
1368
  if (n === void 0) return $("unknown-table", e.table);
1193
1369
  let r = new Set(n.columns.map((e) => e.name));
1194
1370
  for (let t of e.columns ?? []) if (!r.has(t)) return $("unknown-column", `${e.table}.${t}`);
1195
1371
  for (let t of e.filters ?? []) {
1196
- if (!Ln.has(t.op)) return $("bad-op", String(t.op));
1372
+ if (!nr.has(t.op)) return $("bad-op", String(t.op));
1197
1373
  if (!r.has(t.column)) return $("unknown-column", `${e.table}.${t.column}`);
1198
1374
  }
1199
1375
  if (e.orderBy !== void 0 && !r.has(e.orderBy.column)) return $("unknown-column", `${e.table}.${e.orderBy.column}`);
@@ -1201,7 +1377,7 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1201
1377
  let { fn: t, column: n } = e.aggregate;
1202
1378
  if (t !== "count" && (n === void 0 || !r.has(n))) return $("bad-aggregate", `${t}(${n ?? "∅"})`);
1203
1379
  }
1204
- let i = e.filters ?? [], a = i.length === 0 ? void 0 : i.length === 1 ? Rn(i[0]) : C(...i.map(Rn)), o = Math.min(Math.max(1, e.limit ?? In), 200), s = {
1380
+ let i = e.filters ?? [], a = i.length === 0 ? void 0 : i.length === 1 ? rr(i[0]) : S(...i.map(rr)), o = Math.min(Math.max(1, e.limit ?? tr), 200), s = {
1205
1381
  table: e.table,
1206
1382
  predicate: a,
1207
1383
  order: e.orderBy ? [{
@@ -1222,24 +1398,24 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1222
1398
  descriptor: s,
1223
1399
  table: e.table
1224
1400
  };
1225
- }, Bn = x.Struct({
1226
- table: x.String,
1227
- columns: x.optional(x.Array(x.String)),
1228
- filters: x.optional(x.Array(x.Struct({
1229
- column: x.String,
1230
- op: x.Literal("eq", "neq", "gt", "gte", "lt", "lte", "contains", "in"),
1231
- value: x.Unknown
1401
+ }, ar = b.Struct({
1402
+ table: b.String,
1403
+ columns: b.optional(b.Array(b.String)),
1404
+ filters: b.optional(b.Array(b.Struct({
1405
+ column: b.String,
1406
+ op: b.Literal("eq", "neq", "gt", "gte", "lt", "lte", "contains", "in"),
1407
+ value: b.Unknown
1232
1408
  }))),
1233
- orderBy: x.optional(x.Struct({
1234
- column: x.String,
1235
- direction: x.optional(x.Literal("asc", "desc"))
1409
+ orderBy: b.optional(b.Struct({
1410
+ column: b.String,
1411
+ direction: b.optional(b.Literal("asc", "desc"))
1236
1412
  })),
1237
- limit: x.optional(x.Number),
1238
- aggregate: x.optional(x.Struct({
1239
- fn: x.Literal("count", "sum", "avg", "min", "max"),
1240
- column: x.optional(x.String)
1413
+ limit: b.optional(b.Number),
1414
+ aggregate: b.optional(b.Struct({
1415
+ fn: b.Literal("count", "sum", "avg", "min", "max"),
1416
+ column: b.optional(b.String)
1241
1417
  }))
1242
- }), Vn = (e) => [
1418
+ }), or = (e) => [
1243
1419
  "You are a data copilot. Translate the user question into a JSON query proposal.",
1244
1420
  "",
1245
1421
  "You may ONLY reference these tables and columns:",
@@ -1251,12 +1427,12 @@ var He = (e, t) => e(t), Ue = Symbol.for("@voltro/ai/Tool"), We = (e) => ({
1251
1427
  "- NEVER invent a table or column. If the question cannot be answered from the listed schema, pick the closest table and leave filters empty.",
1252
1428
  "- The query is READ-ONLY. You cannot insert, update, or delete.",
1253
1429
  "- Keep the result small (limit ≤ 200)."
1254
- ].join("\n"), Hn = async (e, t, n) => {
1255
- let r = Vn(t);
1256
- return zn(await n.propose({
1430
+ ].join("\n"), sr = async (e, t, n) => {
1431
+ let r = or(t);
1432
+ return ir(await n.propose({
1257
1433
  system: r,
1258
1434
  prompt: e
1259
1435
  }), t);
1260
1436
  };
1261
1437
  //#endregion
1262
- export { m as AGENT_MESSAGES_TABLE, h as AGENT_THREADS_TABLE, P as AI_BUDGET_TABLE, N as AI_USAGE_TABLE, ne as AgentErrorCode, re as AgentEvent, at as AiBudgetExceeded, B as AiError, xt as AiService, Fn as COPILOT_MAX_LIMIT, Bn as CopilotProposalSchema, Pn as CopilotRejected, Ze as MODEL_PRICING_DEFAULTS, ee as MockScript, J as STREAM_EVENTS_TABLE, Y as STREAM_STATE_TABLE, ie as SeqEvent, Rt as activeStreamCount, jt as agentActor, le as agentInputSchema, se as agentMessageSchema, an as agentMessagesTable, ce as agentRouteDescriptors, rn as agentThreadsTable, ot as aiBudgetTable, L as aiCallAttributes, it as aiSpendUsd, tt as aiUsageTable, Nt as appTools, sn as appendMessage, un as appendStreamingMessage, s as applyMiddleware, Vn as buildCopilotSystemPrompt, A as buildSdkTools, Ft as cancelStream, te as clearAiMiddleware, Gt as consumeResumableStream, Dn as cosineSimilarity, on as createThread, en as dataStoreResumableStreamStore, St as defaultAiService, n as defaultSettingsMiddleware, oe as defineAgent, mn as defineAgentExecutor, We as defineTool, Tn as embed, En as embedMany, wn as embeddingProviderFromEnv, M as estimateCostUsd, r as extractReasoningMiddleware, nt as gatewayCostUsd, tn as gcResumableStreams, wt as generateImage, yt as generateObject, bt as generateObjectWithTools, Tt as generateSpeech, _t as generateText, Ot as generateVideo, d as getAiMiddleware, Nn as getAvailableModels, X as getMessages, l as getProviderOverride, cn as getThread, xn as hashToVector, ln as historyToModelMessages, ae as isAgentDescriptor, hn as isAgentExecutor, It as isStreamActive, Ge as isTool, yn as loadAgentMessages, c as loggingMiddleware, Yt as memoryResumableStreamStore, $e as modelPricing, gt as observeStream, U as passesPolicy, dn as patchStreamingMessage, et as priceForModel, f as providerFromEnv, rt as recordAiUsage, nn as redisResumableStreamStore, Pt as registerStream, lt as requireAiBudget, On as rerank, _n as resolveAgentModel, Sn as resolveEmbeddingModel, o as resolveImageModel, e as resolveModel, u as resolveSpeechModel, gn as resolveSystem, Ke as resolveToolModuleHandlers, p as resolveVideoModel, qt as resumableStream, Jt as resumableStreamText, vn as runAgentTurn, fn as runAssistant, Hn as runDataCopilot, a as setAiMiddleware, Qe as setModelPricing, t as setProviderOverride, i as simulateStreamingMiddleware, Kt as startResumableProducer, Xt as streamEventsTable, Zt as streamStateTable, q as streamText, Wt as streamTextWithFallback, Ut as streamTextWithRetry, Mt as synthesizeToolSpecs, Mn as toModelInfo, Lt as unregisterStream, zn as validateCopilotProposal, z as withAiCallSpan };
1438
+ export { p as AGENT_MESSAGES_TABLE, m as AGENT_THREADS_TABLE, N as AI_BUDGET_TABLE, M as AI_USAGE_TABLE, re as AgentErrorCode, ie as AgentEvent, ct as AiBudgetExceeded, z as AiError, wt as AiService, er as COPILOT_MAX_LIMIT, ar as CopilotProposalSchema, $n as CopilotRejected, Wn as DEFAULT_JUDGE_THRESHOLD, et as MODEL_PRICING_DEFAULTS, te as MockScript, q as STREAM_EVENTS_TABLE, J as STREAM_STATE_TABLE, ae as SeqEvent, Vt as activeStreamCount, Pt as agentActor, ue as agentInputSchema, ce as agentMessageSchema, cn as agentMessagesTable, le as agentRouteDescriptors, sn as agentThreadsTable, lt as aiBudgetTable, I as aiCallAttributes, st as aiSpendUsd, it as aiUsageTable, It as appTools, un as appendMessage, pn as appendStreamingMessage, s as applyMiddleware, or as buildCopilotSystemPrompt, k as buildSdkTools, Rt as cancelStream, ne as clearAiMiddleware, Jt as consumeResumableStream, On as cosineSimilarity, ln as createThread, rn as dataStoreResumableStreamStore, Tt as defaultAiService, n as defaultSettingsMiddleware, se as defineAgent, _n as defineAgentExecutor, Vn as defineEval, qe as defineTool, En as embed, Dn as embedMany, Tn as embeddingProviderFromEnv, j as estimateCostUsd, Un as evaluateAssertions, r as extractReasoningMiddleware, at as gatewayCostUsd, an as gcResumableStreams, Dt as generateImage, B as generateObject, Ct as generateObjectWithTools, Ot as generateSpeech, xt as generateText, jt as generateVideo, ee as getAiMiddleware, Qn as getAvailableModels, Y as getMessages, l as getProviderOverride, dn as getThread, wn as hashToVector, fn as historyToModelMessages, oe as isAgentDescriptor, vn as isAgentExecutor, Hn as isEvalDefinition, zt as isStreamActive, Je as isTool, Yn as llmJudge, Sn as loadAgentMessages, c as loggingMiddleware, Qt as memoryResumableStreamStore, nt as modelPricing, yt as observeStream, H as passesPolicy, mn as patchStreamingMessage, rt as priceForModel, d as providerFromEnv, ot as recordAiUsage, In as recordReads, on as redisResumableStreamStore, Lt as registerStream, ft as requireAiBudget, Ln as rerank, bn as resolveAgentModel, Z as resolveEmbeddingModel, o as resolveImageModel, e as resolveModel, u as resolveSpeechModel, yn as resolveSystem, Ye as resolveToolModuleHandlers, f as resolveVideoModel, Xt as resumableStream, Zt as resumableStreamText, xn as runAgentTurn, hn as runAssistant, sr as runDataCopilot, Kn as runEval, Gn as scoreCase, Fn as semanticGenerateObject, Pn as semanticGenerateText, a as setAiMiddleware, tt as setModelPricing, t as setProviderOverride, i as simulateStreamingMiddleware, Yt as startResumableProducer, $t as streamEventsTable, en as streamStateTable, K as streamText, qt as streamTextWithFallback, Kt as streamTextWithRetry, Ft as synthesizeToolSpecs, Zn as toModelInfo, Bt as unregisterStream, ir as validateCopilotProposal, R as withAiCallSpan };