broods 0.17.3 → 0.17.4
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function k(e){if(e.events&&e.input!==void 0)throw Error("Run input accepts either `input` or `events`, not both");if(e.events&&e.events.length>0)return e.events;if(typeof e.input==="string")return[{role:"user",content:[{type:"text",text:e.input}]}];throw Error("Run input requires `input` (string) or a non-empty `events` array")}async function*D(e){let n=e.getReader(),t=new TextDecoder,o="";try{while(!0){let{done:r,value:s}=await n.read();if(r)break;o+=t.decode(s,{stream:!0});let i=o.split(`
|
|
2
2
|
`);o=i.pop()??"";for(let a of i)if(a.startsWith("data: "))yield a.slice(6)}}finally{n.releaseLock()}}import{mkdir as Q,readFile as ee,writeFile as ne}from"node:fs/promises";import{homedir as te}from"node:os";import{dirname as oe,join as re}from"node:path";var Ee="broods",De="_generated",h=re(te(),".broods","config.json"),N="broods.app",T="dashboard",se="gateway";async function Ne(){let e=process.env.BROODS_TOKEN,n=process.env.BROODS_BASE_URL;if(e&&n)return{baseUrl:d(n),token:e,createdAt:new Date().toISOString()};try{let t=JSON.parse(await ee(h,"utf8"));if(typeof t.baseUrl!=="string"||!t.baseUrl)return null;return t}catch{return null}}async function Te(e){await Q(oe(h),{recursive:!0}),await ne(h,`${JSON.stringify(e,null,2)}
|
|
3
3
|
`,"utf8")}function O(){return process.env.BROODS_STAGE}function d(e){let n=e.length;while(n>0&&e.charCodeAt(n-1)===47)n-=1;return e.slice(0,n)}function Oe(e){try{let n=new URL(e);if(!n.hostname.startsWith(`${T}.`))return;let t=n.hostname.slice(T.length+1);if(t!==N&&!t.endsWith(`.${N}`))return;return n.hostname=`${se}.${t}`,d(n.origin)}catch{return}}import{existsSync as U,readFileSync as E,statSync as ie}from"node:fs";import{join as W,resolve as M}from"node:path";var v=new Map,ae=new Set(Object.keys(process.env)),P=new Set;function I(e=process.cwd()){ce(e);let n=de();return{dashboardUrl:process.env.BROODS_DASHBOARD_URL??n?.dashboardUrl,baseUrl:process.env.BROODS_BASE_URL??n?.baseUrl,token:process.env.BROODS_TOKEN??n?.token,project:process.env.BROODS_PROJECT,stage:O()}}function $e(e,n=process.cwd()){let t=process.env[e];if(t===void 0)return!1;let o=M(n);for(let r of[".env.local",".env"]){let s=W(o,r);if(!U(s))continue;let i=_(E(s,"utf8"));if(i[e]!==void 0)return i[e]!==t}return!0}function ce(e){let n=M(e),t=process.env.BROODS_RELOAD_ENV==="1";for(let o of[".env",".env.local"]){let r=W(n,o);if(!U(r)){v.delete(r);continue}let s=ie(r).mtimeMs,i=v.get(r);if(i&&i.mtimeMs===s)continue;v.set(r,{mtimeMs:s});for(let[a,u]of Object.entries(_(E(r,"utf8"))))if(t||!ae.has(a)||P.has(a))process.env[a]=u,P.add(a)}}function _(e){let n={};for(let t of e.split(/\r?\n/)){let o=t.trim();if(!o||o.startsWith("#"))continue;let r=o.startsWith("export ")?o.slice(7).trim():o,s=r.indexOf("=");if(s<=0)continue;let i=r.slice(0,s).trim();if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(i))continue;n[i]=ue(r.slice(s+1).trim())}return n}function ue(e){if(e.startsWith('"')&&e.endsWith('"'))return e.slice(1,-1).replace(/\\n/g,`
|
|
4
|
-
`).replace(/\\"/g,'"');if(e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);let n=e.indexOf(" #");return n>=0?e.slice(0,n).trimEnd():e}function de(){try{let e=JSON.parse(E(h,"utf8"));if(typeof e.baseUrl!=="string"||typeof e.token!=="string")return null;return{baseUrl:d(e.baseUrl),...typeof e.dashboardUrl==="string"?{dashboardUrl:d(e.dashboardUrl)}:{},token:e.token}}catch{return null}}var x="https://gateway.broods.app";class B extends Error{accepted;constructor(e){super(`Ingress ${e.eventId} was accepted asynchronously with status ${e.status??"queued"}`);this.accepted=e;this.name="IngressAcceptedError"}}class le{baseUrl;apiKey;fetchImpl;constructor(e={}){I(),this.baseUrl=A(e.baseUrl||e.host||process.env.BROODS_BASE_URL||process.env.BROODS_HOST||x),this.apiKey=e.apiKey||process.env.BROODS_API_KEY||void 0,this.fetchImpl=e.fetch??fetch}channelWebhookUrl(e){return`${this.baseUrl}${e.webhookPath.startsWith("/")?"":"/"}${e.webhookPath}`}accountWebhookUrl(e,n){let t=[e,n].map(encodeURIComponent);return`${this.baseUrl}/webhooks/${t.join("/")}`}stageWebhookUrl(e,n,t){let o=[e,"dev",n,t].map(encodeURIComponent);return`${this.baseUrl}/webhooks/${o.join("/")}`}agent(e,n){if(typeof e==="string"){let o=e,r=n??"";if(!r)throw Error(`Agent ${o} is missing a generated id. Run broods dev --once or broods deploy to sync it first.`);return{id:r,run:(s)=>this.run({...s,agentName:o,agentId:r}),runAsync:(s)=>this.runAsync({...s,agentName:o,agentId:r}),stream:(s)=>this.stream({...s,agentName:o,agentId:r})}}let t=e;if(!t.id)throw Error(`Agent ${t.name} is missing a generated id. Run broods dev --once or broods deploy to sync it first.`);return{id:t.id,run:(o)=>this.run(t,o),runAsync:(o)=>this.runAsync(t,o),stream:(o)=>this.stream(t,o)}}async run(e,n){let t=[],o="",r=n?this.stream(e,n):this.stream(e);for await(let s of r)if(t.push(s),s.type==="text-delta")o+=s.text;return{text:o,events:t}}async*stream(e,n){let t=n?{...n,agentId:e.id,agentName:e.name}:e,o=K(t,"cli"),r=n?this.scopedUrl(e):this.baseUrl,s=await this.openStream(o,r);if(!s.ok)throw Error(`Run failed: ${s.status} ${await s.text()}`);if(s.status===202)throw new B(H(await s.json(),o));if(!s.body)throw Error("Run response has no body");for await(let i of D(s.body)){let a;try{a=JSON.parse(i)}catch{continue}if(a.type==="error")throw Error(`Agent run failed: ${he(a.error)}`);yield a}}async runAsync(e,n){let t=n?{...n,agentId:e.id,agentName:e.name}:e,o=K(t,"async"),r=n?this.scopedUrl(e,"/async"):`${this.baseUrl}/async`,s=await this.fetchJson(r,{method:"POST",headers:this.apiKeyHeaders(),body:JSON.stringify(o)});if(s.status!==202)throw Error(`Async run failed: ${s.status} ${await fe(s,"202 JSON")}`);let i=H(await s.json(),o);return{...i,conversationKey:o.conversationKey,poll:()=>this.getAsyncStatus(i),wait:(a)=>this.waitForAsyncStatus(i,a)}}async getAsyncStatus(e,n={}){let t=this.resolveStatusUrl(e,n),o=await this.fetchJson(t,{method:"GET",headers:this.apiKeyHeaders()});if(o.status===404)return{status:"not_found"};if(!o.ok)throw Error(`Status check failed: ${o.status} ${await o.text()}`);return await o.json()}async waitForAsyncStatus(e,n={}){let t=Date.now()+(n.timeoutMs??180000),o=n.intervalMs??2000;while(Date.now()<t){if(n.signal?.aborted)throw Error("Async status polling aborted.");let r=await this.getAsyncStatus(e,n);if(r.status==="awaiting_approval"||r.status==="completed"||r.status==="failed"||r.status==="expired"||r.status==="not_found")return r;await ye(o,n.signal)}throw Error("Polling timeout")}async createCron(e){let n=await this.fetchJson(`${this.baseUrl}/v1/crons`,{method:"POST",headers:this.apiKeyHeaders(),body:JSON.stringify(me(e))});if(n.status!==201)throw Error(`Create cron job failed: ${n.status} ${await p(n)}`);return await n.json()}async listCrons(){let e=await this.fetchJson(`${this.baseUrl}/v1/crons`,{method:"GET",headers:this.apiKeyHeaders()});if(!e.ok)throw Error(`List cron jobs failed: ${e.status} ${await p(e)}`);return(await e.json()).crons}async getCron(e){let n=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}`,{method:"GET",headers:this.apiKeyHeaders()});if(n.status===404)return null;if(!n.ok)throw Error(`Get cron job failed: ${n.status} ${await p(n)}`);return await n.json()}async listCronRuns(e,n={}){let t=new URLSearchParams;if(n.limit!==void 0)t.set("limit",String(n.limit));let o=t.size>0?`?${t}`:"",r=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}/runs${o}`,{method:"GET",headers:this.apiKeyHeaders()});if(!r.ok)throw Error(`List cron job runs failed: ${r.status} ${await p(r)}`);return(await r.json()).runs}async updateCron(e,n){let t=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}`,{method:"PATCH",headers:this.apiKeyHeaders(),body:JSON.stringify(n)});if(!t.ok)throw Error(`Update cron job failed: ${t.status} ${await p(t)}`);return await t.json()}async deleteCron(e){let n=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}`,{method:"DELETE",headers:this.apiKeyHeaders()});if(n.status===404)return!1;if(!n.ok)throw Error(`Delete cron job failed: ${n.status} ${await p(n)}`);return(await n.json()).deleted}scopedUrl(e,n=""){if(e.projectSlug&&e.stageSlug&&e.endpointId)return`${this.baseUrl}/v1/${encodeURIComponent(e.projectSlug)}/agents/${encodeURIComponent(e.stageSlug)}/${encodeURIComponent(e.endpointId)}${n}`;return`${this.baseUrl}${n}`}async openStream(e,n){if(this.apiKey)return await this.fetchCore(e,n,{Authorization:`Bearer ${this.apiKey}`});throw Error(`BroodsClient streams directly from the core service at ${this.baseUrl}. Provide apiKey. For a self-hosted core service, set host/baseUrl or BROODS_HOST/BROODS_BASE_URL.`)}async fetchCore(e,n,t){try{return await this.fetchImpl(n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream",...t},body:JSON.stringify(e)})}catch(o){throw Error(`Cannot access the broods core service at ${n}. The SDK uses ${x} by default; set host/baseUrl or BROODS_HOST/BROODS_BASE_URL to your own core service URL if your account uses a custom deployment. Cause: ${o instanceof Error?o.message:String(o)}`)}}apiKeyHeaders(){if(!this.apiKey)throw Error("BroodsClient requires apiKey or BROODS_API_KEY.");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}}async fetchJson(e,n){try{return await this.fetchImpl(e,{...n,headers:{"Content-Type":"application/json",...n.headers??{}}})}catch(t){throw Error(`Cannot access the broods core service at ${e}. Cause: ${t instanceof Error?t.message:String(t)}`)}}resolveStatusUrl(e,n){if(typeof e!=="string")return e.statusUrl;if(/^https?:\/\//.test(e))return e;if(!n.agentId)throw Error("Polling by status id requires agentId.");return pe(this.baseUrl,e,n.agentId)}}function A(e){let n=e.trim(),t=/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(n)?n:`https://${n}`;return d(t)}function K(e,n){let t=e.eventId??`${n}-${Date.now()}`;return{agentId:e.agentId,eventId:t,conversationKey:e.conversationKey??t,events:k(e),...e.mode!==void 0?{mode:e.mode}:{},...e.idempotencyKey!==void 0?{idempotencyKey:e.idempotencyKey}:{},...e.system!==void 0?{system:e.system}:{},...e.model!==void 0?{model:e.model}:{}}}function H(e,n){if(!e||typeof e!=="object")throw Error("Async response must be an object");let t=e.statusUrl;if(typeof t!=="string"||t.length===0)throw Error("Async response missing statusUrl");let o=ge(t);if(!o.statusId)throw Error("Async response statusUrl missing status id");let r=typeof e.eventId==="string"?e.eventId:o.statusId,s=e.status,i=e.requestedMode;return{statusUrl:t,statusId:o.statusId,eventId:r,agentId:o.agentId??n.agentId,...s==="accepted"||s==="queued"||s==="applied"||s==="processing"?{status:s}:{},...i==="reject"||i==="followup"||i==="collect"||i==="steer"?{requestedMode:i}:{}}}function ge(e){let n=new URL(e),t=n.pathname.match(/\/status\/([^/]+)$/);return{statusId:t?.[1]?decodeURIComponent(t[1]):void 0,agentId:n.searchParams.get("agentId")??void 0}}function pe(e,n,t){return`${A(e)}/status/${encodeURIComponent(n)}?agentId=${encodeURIComponent(t)}`}async function fe(e,n){if((e.headers.get("content-type")??"").toLowerCase().includes("text/event-stream"))return await e.body?.cancel().catch(()=>{}),`expected ${n}, but the server returned an SSE stream. This usually means the core deployment routed /async to the direct streaming runner instead of the async handler.`;let o=await e.text();if(o.length<=2000)return o;return`${o.slice(0,2000)}... [truncated ${o.length-2000} chars]`}async function p(e){let n=await e.text();if(n.includes("Request body must include eventId and conversationKey"))return`${n}. Cron job APIs must be served by the configured baseUrl. Prefer defining stable cron jobs with defineCron(...) in broods/ and syncing with \`broods dev\` or \`broods deploy\`.`;return n}function me(e){if("agentId"in e)return e;let n=e.agent,t=typeof n==="string"?n:n.id,{agent:o,...r}=e;return{...r,agentId:t}}function ye(e,n){return new Promise((t,o)=>{if(n?.aborted){o(Error("Async status polling aborted."));return}let r=setTimeout(t,e);n?.addEventListener("abort",()=>{clearTimeout(r),o(Error("Async status polling aborted."))},{once:!0})})}function he(e){if(typeof e==="string")return e;if(!e||typeof e!=="object")return String(e);let n=e,t=n.data?.error?.message??n.message??n.responseBody??JSON.stringify(e),o=n.name?`${n.name}: `:"",r=n.statusCode?` (HTTP ${n.statusCode})`:"";return`${o}${t}${r}`}var Ce=2000,j=0,C=1;class Se{baseUrl;apiKey;WebSocketImpl;connectTimeoutMs;constructor(e={}){if(I(),this.baseUrl=F(e.baseUrl||e.host||process.env.BROODS_BASE_URL||process.env.BROODS_HOST||x),this.apiKey=e.apiKey||process.env.BROODS_API_KEY||"",!this.apiKey)throw Error("BroodsWebSocketClient requires apiKey or BROODS_API_KEY.");this.WebSocketImpl=e.WebSocket,this.connectTimeoutMs=e.connectTimeoutMs??Ce}subscribe(e,n={}){let t=this.resolveWebSocket(),o=this.buildUrl(e),r=Re(e),s=L(this.baseUrl),i=new t(o),a=!1,u=!1,l=setTimeout(()=>{if(!a)y(s)},this.connectTimeoutMs),w=(c=1000,R="client closed")=>{if(u)return;if(u=!0,clearTimeout(l),e.signal?.removeEventListener("abort",S),i.readyState===C||i.readyState===j)i.close(c,R)},y=(c)=>{n.onError?.(c),w(1011,"websocket error")},X=()=>{n.onDone?.(),w(1000,"done")},S=()=>{if(i.readyState===C)i.send(JSON.stringify({type:"cancel"}));y(Error("WebSocket run aborted."))};return e.signal?.addEventListener("abort",S,{once:!0}),i.onopen=()=>{if(a=!0,clearTimeout(l),e.signal?.aborted){S();return}i.send(JSON.stringify({type:"execute",agentId:r,events:k(e),sessionId:e.sessionId,...e.eventId!==void 0?{eventId:e.eventId}:{},...e.mode!==void 0?{mode:e.mode}:{},...e.idempotencyKey!==void 0?{idempotencyKey:e.idempotencyKey}:{},...e.system!==void 0?{system:e.system}:{},...e.model!==void 0?{model:e.model}:{}}))},i.onmessage=(c)=>{if(typeof c.data!=="string")return;let R=q(c.data);if(!R)return;let b=G(R,n);switch(n.onMessage?.(b),b.type){case"meta":n.onMeta?.(b);break;case"done":X();break;case"error":y(Error(J(b.error)));break}},i.onerror=()=>{y(s)},i.onclose=(c)=>{if(clearTimeout(l),e.signal?.removeEventListener("abort",S),u||c.code===1000)return;y(Error(c.reason||"WebSocket connection closed."))},{url:o,sendControl:function(c){if(i.readyState!==C)throw Error("WebSocket is not open");i.send(JSON.stringify({type:"control",...c}))},close:w}}attach(e,n={}){let t=this.resolveWebSocket(),o=this.buildUrl(e),r=new t(o),s=!1,i=(a=1000,u="client closed")=>{if(s)return;if(s=!0,r.readyState===C||r.readyState===j)r.close(a,u)};return r.onopen=()=>r.send(JSON.stringify({type:"attach",...e,signal:void 0,agent:void 0})),r.onmessage=(a)=>{if(typeof a.data!=="string")return;let u=q(a.data);if(!u)return;let l=G(u,n);if(n.onMessage?.(l),l.type==="done")n.onDone?.();if(l.type==="error")n.onError?.(Error(J(l.error)))},r.onerror=()=>n.onError?.(L(this.baseUrl)),r.onclose=(a)=>{if(!s&&a.code!==1000)n.onError?.(Error(a.reason||"WebSocket connection closed."))},{url:o,sendControl:function(a){if(r.readyState!==C)throw Error("WebSocket is not open");r.send(JSON.stringify({type:"control",...a}))},close:i}}async*stream(e){let n=[],t=!1,o=null,r=null,s=()=>{r?.(),r=null},i=this.subscribe(e,{onMessage:function(a){n.push(a),s()},onDone:function(){t=!0,s()},onError:function(a){o=a,s()}});try{while(!0){if(n.length>0){yield n.shift();continue}if(o)throw o;if(t)return;await new Promise((a)=>{r=a})}}finally{i.close()}}buildUrl(e){let n=be(e),t=e.projectSlug??e.agent?.projectSlug,o=e.stageSlug??e.agent?.stageSlug,r=t?`/${t}`:"",s=o?`/${o}`:"";return`${ke(this.baseUrl)}/v1${r}/agents${s}/${encodeURIComponent(n)}/ws?token=${encodeURIComponent(this.apiKey)}`}resolveWebSocket(){let e=this.WebSocketImpl??globalThis.WebSocket;if(!e)throw Error("WebSocket is not available. Pass a WebSocket implementation in BroodsWebSocketClient options.");return e}}function Re(e){let n=e.agentId??e.agent?.id??e.endpointId;if(!n)throw Error("WebSocket run requires agent, agentId, or endpointId.");return n}function be(e){let n=e.endpointId??e.agent?.endpointId??e.agent?.id;if(!n)throw Error("WebSocket run requires agent or endpointId.");return n}function ke(e){let n=new URL(F(e));if(n.protocol==="https:")n.protocol="wss:";if(n.protocol==="http:")n.protocol="ws:";return d(n.toString())}function F(e){let n=e.trim();if(/^wss?:\/\//.test(n))return d(n);return A(n)}function L(e){return Error(`Cannot access the WebSocket service at ${e}.`)}function G(e,n){if(e.type!=="output")return e;let t=e;return n.onOutput?.(t),t.data}function q(e){try{let n=JSON.parse(e);return typeof n==="object"&&n!==null&&typeof n.type==="string"?n:null}catch{return null}}function J(e){if(typeof e==="string")return e;if(e&&typeof e==="object"&&typeof e.message==="string")return e.message;return e===void 0?"WebSocket stream error.":JSON.stringify(e)}var z=Symbol.for("broods.resource"),V=Symbol.for("broods.config"),Y=Symbol.for("broods.connection"),Z=/^[A-Z][A-Z0-9_]{0,63}$/,ze=new Proxy((e)=>{if(!Z.test(e))throw Error("env name must match /^[A-Z][A-Z0-9_]*$/ and be at most 64 characters.");return{__beeblastEnv:!0,name:e}},{get:function(e,n,t){if(typeof n==="string"&&Z.test(n))throw Error(`env.${n} is not supported; use env("${n}")`);return Reflect.get(e,n,t)}});function g(e,n,t,o){return{[z]:!0,kind:e,name:n,...t?{description:t}:{},config:o}}function f(e,n){let{partition:t,...o}=n;return{[Y]:!0,kind:"connection",type:e,...t?{partition:t}:{},config:o}}function m(e,n,t,o,r){return g("channelRecord",e,n,{...r,externalId:t,...o?{workspaceRef:o}:{}})}function Ve(e){return f("discord",e)}function Ye(e){return f("github",e)}function Xe(e){return f("pancake",e)}function Qe(e){return f("slack",e)}function en(e){return f("telegram",e)}function nn(e){return f("zalo",e)}function tn(e){let{name:n,description:t,channelId:o,guildId:r,...s}=e;return m(n,t,o,r,s)}function on(e){let{name:n,description:t,repo:o,...r}=e,[s,...i]=o.split("/");if(!s||i.length!==1||!i[0])throw Error(`Channel "${n}" repo must be "owner/name", not "${o}"`);return m(n,t,o,s,r)}function rn(e){let{name:n,description:t,conversationId:o,...r}=e;return m(n,t,o,void 0,r)}function sn(e){let{name:n,description:t,channelId:o,teamId:r,...s}=e;return m(n,t,o,r,s)}function an(e){let{name:n,description:t,chatId:o,...r}=e;return m(n,t,o,void 0,r)}function cn(e){let{name:n,description:t,chatId:o,...r}=e;return m(n,t,o,void 0,r)}function un(e){return{[V]:!0,config:e}}function dn(e){let{name:n,description:t,...o}=e;return g("agent",n,t,o)}function ln(e){return e}function gn(e){let{name:n,description:t,...o}=e;return g("workspace",n,t,o)}function pn(e){let{name:n,description:t,...o}=e;return g("sandbox",n,t,o)}function fn(e){let{name:n,description:t,...o}=e;return g("skill",n,t,o)}function mn(e){let{name:n,...t}=e;return g("tool",n,void 0,t)}function yn(e){let{name:n,description:t,...o}=e;return g("policy",n,t,o)}function hn(e){let{name:n,description:t,...o}=e;return g("cron",n,t,o)}function Cn(e){return Boolean(e&&typeof e==="object"&&e[z])}function Sn(e){return Boolean(e&&typeof e==="object"&&e[Y])}function Rn(e){return Boolean(e&&typeof e==="object"&&e[V])}
|
|
4
|
+
`).replace(/\\"/g,'"');if(e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);let n=e.indexOf(" #");return n>=0?e.slice(0,n).trimEnd():e}function de(){try{let e=JSON.parse(E(h,"utf8"));if(typeof e.baseUrl!=="string"||typeof e.token!=="string")return null;return{baseUrl:d(e.baseUrl),...typeof e.dashboardUrl==="string"?{dashboardUrl:d(e.dashboardUrl)}:{},token:e.token}}catch{return null}}var x="https://gateway.broods.app";class B extends Error{accepted;constructor(e){super(`Ingress ${e.eventId} was accepted asynchronously with status ${e.status??"queued"}`);this.accepted=e;this.name="IngressAcceptedError"}}class le{baseUrl;apiKey;fetchImpl;constructor(e={}){I(),this.baseUrl=A(e.baseUrl||e.host||process.env.BROODS_BASE_URL||process.env.BROODS_HOST||x),this.apiKey=e.apiKey||process.env.BROODS_API_KEY||void 0,this.fetchImpl=e.fetch??fetch}channelWebhookUrl(e){return`${this.baseUrl}${e.webhookPath.startsWith("/")?"":"/"}${e.webhookPath}`}accountWebhookUrl(e,n){let t=[e,n].map(encodeURIComponent);return`${this.baseUrl}/webhooks/${t.join("/")}`}stageWebhookUrl(e,n,t){let o=[e,"dev",n,t].map(encodeURIComponent);return`${this.baseUrl}/webhooks/${o.join("/")}`}agent(e,n){if(typeof e==="string"){let o=e,r=n??"";if(!r)throw Error(`Agent ${o} is missing a generated id. Run broods dev --once or broods deploy to sync it first.`);return{id:r,run:(s)=>this.run({...s,agentName:o,agentId:r}),runAsync:(s)=>this.runAsync({...s,agentName:o,agentId:r}),stream:(s)=>this.stream({...s,agentName:o,agentId:r})}}let t=e;if(!t.id)throw Error(`Agent ${t.name} is missing a generated id. Run broods dev --once or broods deploy to sync it first.`);return{id:t.id,run:(o)=>this.run(t,o),runAsync:(o)=>this.runAsync(t,o),stream:(o)=>this.stream(t,o)}}async run(e,n){let t=[],o="",r=n?this.stream(e,n):this.stream(e);for await(let s of r)if(t.push(s),s.type==="text-delta")o+=s.text;return{text:o,events:t}}async*stream(e,n){let t=n?{...n,agentId:e.id,agentName:e.name}:e,o=K(t,"cli"),r=n?this.scopedUrl(e):this.baseUrl,s=await this.openStream(o,r);if(!s.ok)throw Error(`Run failed: ${s.status} ${await s.text()}`);if(s.status===202)throw new B(H(await s.json(),o));if(!s.body)throw Error("Run response has no body");for await(let i of D(s.body)){let a;try{a=JSON.parse(i)}catch{continue}if(a.type==="error")throw Error(`Agent run failed: ${he(a.error)}`);yield a}}async runAsync(e,n){let t=n?{...n,agentId:e.id,agentName:e.name}:e,o=K(t,"async"),r=n?this.scopedUrl(e,"/async"):`${this.baseUrl}/async`,s=await this.fetchJson(r,{method:"POST",headers:this.apiKeyHeaders(),body:JSON.stringify(o)});if(s.status!==202)throw Error(`Async run failed: ${s.status} ${await fe(s,"202 JSON")}`);let i=H(await s.json(),o);return{...i,conversationKey:o.conversationKey,poll:()=>this.getAsyncStatus(i),wait:(a)=>this.waitForAsyncStatus(i,a)}}async getAsyncStatus(e,n={}){let t=this.resolveStatusUrl(e,n),o=await this.fetchJson(t,{method:"GET",headers:this.apiKeyHeaders()});if(o.status===404)return{status:"not_found"};if(!o.ok)throw Error(`Status check failed: ${o.status} ${await o.text()}`);return await o.json()}async waitForAsyncStatus(e,n={}){let t=Date.now()+(n.timeoutMs??180000),o=n.intervalMs??2000;while(Date.now()<t){if(n.signal?.aborted)throw Error("Async status polling aborted.");let r=await this.getAsyncStatus(e,n);if(r.status==="awaiting_approval"||r.status==="completed"||r.status==="failed"||r.status==="expired"||r.status==="not_found")return r;await ye(o,n.signal)}throw Error("Polling timeout")}async createCron(e){let n=await this.fetchJson(`${this.baseUrl}/v1/crons`,{method:"POST",headers:this.apiKeyHeaders(),body:JSON.stringify(me(e))});if(n.status!==201)throw Error(`Create cron job failed: ${n.status} ${await p(n)}`);return await n.json()}async listCrons(){let e=await this.fetchJson(`${this.baseUrl}/v1/crons`,{method:"GET",headers:this.apiKeyHeaders()});if(!e.ok)throw Error(`List cron jobs failed: ${e.status} ${await p(e)}`);return(await e.json()).crons}async getCron(e){let n=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}`,{method:"GET",headers:this.apiKeyHeaders()});if(n.status===404)return null;if(!n.ok)throw Error(`Get cron job failed: ${n.status} ${await p(n)}`);return await n.json()}async listCronRuns(e,n={}){let t=new URLSearchParams;if(n.limit!==void 0)t.set("limit",String(n.limit));let o=t.size>0?`?${t}`:"",r=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}/runs${o}`,{method:"GET",headers:this.apiKeyHeaders()});if(!r.ok)throw Error(`List cron job runs failed: ${r.status} ${await p(r)}`);return(await r.json()).runs}async updateCron(e,n){let t=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}`,{method:"PATCH",headers:this.apiKeyHeaders(),body:JSON.stringify(n)});if(!t.ok)throw Error(`Update cron job failed: ${t.status} ${await p(t)}`);return await t.json()}async deleteCron(e){let n=await this.fetchJson(`${this.baseUrl}/v1/crons/${encodeURIComponent(e)}`,{method:"DELETE",headers:this.apiKeyHeaders()});if(n.status===404)return!1;if(!n.ok)throw Error(`Delete cron job failed: ${n.status} ${await p(n)}`);return(await n.json()).deleted}scopedUrl(e,n=""){if(e.projectSlug&&e.stageSlug&&e.endpointId)return`${this.baseUrl}/v1/${encodeURIComponent(e.projectSlug)}/agents/${encodeURIComponent(e.stageSlug)}/${encodeURIComponent(e.endpointId)}${n}`;return`${this.baseUrl}${n}`}async openStream(e,n){if(this.apiKey)return await this.fetchCore(e,n,{Authorization:`Bearer ${this.apiKey}`});throw Error(`BroodsClient streams directly from the core service at ${this.baseUrl}. Provide apiKey. For a self-hosted core service, set host/baseUrl or BROODS_HOST/BROODS_BASE_URL.`)}async fetchCore(e,n,t){try{return await this.fetchImpl(n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream",...t},body:JSON.stringify(e)})}catch(o){throw Error(`Cannot access the broods core service at ${n}. The SDK uses ${x} by default; set host/baseUrl or BROODS_HOST/BROODS_BASE_URL to your own core service URL if your account uses a custom deployment. Cause: ${o instanceof Error?o.message:String(o)}`)}}apiKeyHeaders(){if(!this.apiKey)throw Error("BroodsClient requires apiKey or BROODS_API_KEY.");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}}async fetchJson(e,n){try{return await this.fetchImpl(e,{...n,headers:{"Content-Type":"application/json",...n.headers}})}catch(t){throw Error(`Cannot access the broods core service at ${e}. Cause: ${t instanceof Error?t.message:String(t)}`)}}resolveStatusUrl(e,n){if(typeof e!=="string")return e.statusUrl;if(/^https?:\/\//.test(e))return e;if(!n.agentId)throw Error("Polling by status id requires agentId.");return pe(this.baseUrl,e,n.agentId)}}function A(e){let n=e.trim(),t=/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(n)?n:`https://${n}`;return d(t)}function K(e,n){let t=e.eventId??`${n}-${Date.now()}`;return{agentId:e.agentId,eventId:t,conversationKey:e.conversationKey??t,events:k(e),...e.mode!==void 0?{mode:e.mode}:{},...e.idempotencyKey!==void 0?{idempotencyKey:e.idempotencyKey}:{},...e.system!==void 0?{system:e.system}:{},...e.model!==void 0?{model:e.model}:{}}}function H(e,n){if(!e||typeof e!=="object")throw Error("Async response must be an object");let t=e.statusUrl;if(typeof t!=="string"||t.length===0)throw Error("Async response missing statusUrl");let o=ge(t);if(!o.statusId)throw Error("Async response statusUrl missing status id");let r=typeof e.eventId==="string"?e.eventId:o.statusId,s=e.status,i=e.requestedMode;return{statusUrl:t,statusId:o.statusId,eventId:r,agentId:o.agentId??n.agentId,...s==="accepted"||s==="queued"||s==="applied"||s==="processing"?{status:s}:{},...i==="reject"||i==="followup"||i==="collect"||i==="steer"?{requestedMode:i}:{}}}function ge(e){let n=new URL(e),t=n.pathname.match(/\/status\/([^/]+)$/);return{statusId:t?.[1]?decodeURIComponent(t[1]):void 0,agentId:n.searchParams.get("agentId")??void 0}}function pe(e,n,t){return`${A(e)}/status/${encodeURIComponent(n)}?agentId=${encodeURIComponent(t)}`}async function fe(e,n){if((e.headers.get("content-type")??"").toLowerCase().includes("text/event-stream"))return await e.body?.cancel().catch(()=>{}),`expected ${n}, but the server returned an SSE stream. This usually means the core deployment routed /async to the direct streaming runner instead of the async handler.`;let o=await e.text();if(o.length<=2000)return o;return`${o.slice(0,2000)}... [truncated ${o.length-2000} chars]`}async function p(e){let n=await e.text();if(n.includes("Request body must include eventId and conversationKey"))return`${n}. Cron job APIs must be served by the configured baseUrl. Prefer defining stable cron jobs with defineCron(...) in broods/ and syncing with \`broods dev\` or \`broods deploy\`.`;return n}function me(e){if("agentId"in e)return e;let n=e.agent,t=typeof n==="string"?n:n.id,{agent:o,...r}=e;return{...r,agentId:t}}function ye(e,n){return new Promise((t,o)=>{if(n?.aborted){o(Error("Async status polling aborted."));return}let r=setTimeout(t,e);n?.addEventListener("abort",()=>{clearTimeout(r),o(Error("Async status polling aborted."))},{once:!0})})}function he(e){if(typeof e==="string")return e;if(!e||typeof e!=="object")return String(e);let n=e,t=n.data?.error?.message??n.message??n.responseBody??JSON.stringify(e),o=n.name?`${n.name}: `:"",r=n.statusCode?` (HTTP ${n.statusCode})`:"";return`${o}${t}${r}`}var Ce=2000,j=0,C=1;class Se{baseUrl;apiKey;WebSocketImpl;connectTimeoutMs;constructor(e={}){if(I(),this.baseUrl=F(e.baseUrl||e.host||process.env.BROODS_BASE_URL||process.env.BROODS_HOST||x),this.apiKey=e.apiKey||process.env.BROODS_API_KEY||"",!this.apiKey)throw Error("BroodsWebSocketClient requires apiKey or BROODS_API_KEY.");this.WebSocketImpl=e.WebSocket,this.connectTimeoutMs=e.connectTimeoutMs??Ce}subscribe(e,n={}){let t=this.resolveWebSocket(),o=this.buildUrl(e),r=Re(e),s=L(this.baseUrl),i=new t(o),a=!1,u=!1,l=setTimeout(()=>{if(!a)y(s)},this.connectTimeoutMs),w=(c=1000,R="client closed")=>{if(u)return;if(u=!0,clearTimeout(l),e.signal?.removeEventListener("abort",S),i.readyState===C||i.readyState===j)i.close(c,R)},y=(c)=>{n.onError?.(c),w(1011,"websocket error")},X=()=>{n.onDone?.(),w(1000,"done")},S=()=>{if(i.readyState===C)i.send(JSON.stringify({type:"cancel"}));y(Error("WebSocket run aborted."))};return e.signal?.addEventListener("abort",S,{once:!0}),i.onopen=()=>{if(a=!0,clearTimeout(l),e.signal?.aborted){S();return}i.send(JSON.stringify({type:"execute",agentId:r,events:k(e),sessionId:e.sessionId,...e.eventId!==void 0?{eventId:e.eventId}:{},...e.mode!==void 0?{mode:e.mode}:{},...e.idempotencyKey!==void 0?{idempotencyKey:e.idempotencyKey}:{},...e.system!==void 0?{system:e.system}:{},...e.model!==void 0?{model:e.model}:{}}))},i.onmessage=(c)=>{if(typeof c.data!=="string")return;let R=q(c.data);if(!R)return;let b=G(R,n);switch(n.onMessage?.(b),b.type){case"meta":n.onMeta?.(b);break;case"done":X();break;case"error":y(Error(J(b.error)));break}},i.onerror=()=>{y(s)},i.onclose=(c)=>{if(clearTimeout(l),e.signal?.removeEventListener("abort",S),u||c.code===1000)return;y(Error(c.reason||"WebSocket connection closed."))},{url:o,sendControl:function(c){if(i.readyState!==C)throw Error("WebSocket is not open");i.send(JSON.stringify({type:"control",...c}))},close:w}}attach(e,n={}){let t=this.resolveWebSocket(),o=this.buildUrl(e),r=new t(o),s=!1,i=(a=1000,u="client closed")=>{if(s)return;if(s=!0,r.readyState===C||r.readyState===j)r.close(a,u)};return r.onopen=()=>r.send(JSON.stringify({type:"attach",...e,signal:void 0,agent:void 0})),r.onmessage=(a)=>{if(typeof a.data!=="string")return;let u=q(a.data);if(!u)return;let l=G(u,n);if(n.onMessage?.(l),l.type==="done")n.onDone?.();if(l.type==="error")n.onError?.(Error(J(l.error)))},r.onerror=()=>n.onError?.(L(this.baseUrl)),r.onclose=(a)=>{if(!s&&a.code!==1000)n.onError?.(Error(a.reason||"WebSocket connection closed."))},{url:o,sendControl:function(a){if(r.readyState!==C)throw Error("WebSocket is not open");r.send(JSON.stringify({type:"control",...a}))},close:i}}async*stream(e){let n=[],t=!1,o=null,r=null,s=()=>{r?.(),r=null},i=this.subscribe(e,{onMessage:function(a){n.push(a),s()},onDone:function(){t=!0,s()},onError:function(a){o=a,s()}});try{while(!0){if(n.length>0){yield n.shift();continue}if(o)throw o;if(t)return;await new Promise((a)=>{r=a})}}finally{i.close()}}buildUrl(e){let n=be(e),t=e.projectSlug??e.agent?.projectSlug,o=e.stageSlug??e.agent?.stageSlug,r=t?`/${t}`:"",s=o?`/${o}`:"";return`${ke(this.baseUrl)}/v1${r}/agents${s}/${encodeURIComponent(n)}/ws?token=${encodeURIComponent(this.apiKey)}`}resolveWebSocket(){let e=this.WebSocketImpl??globalThis.WebSocket;if(!e)throw Error("WebSocket is not available. Pass a WebSocket implementation in BroodsWebSocketClient options.");return e}}function Re(e){let n=e.agentId??e.agent?.id??e.endpointId;if(!n)throw Error("WebSocket run requires agent, agentId, or endpointId.");return n}function be(e){let n=e.endpointId??e.agent?.endpointId??e.agent?.id;if(!n)throw Error("WebSocket run requires agent or endpointId.");return n}function ke(e){let n=new URL(F(e));if(n.protocol==="https:")n.protocol="wss:";if(n.protocol==="http:")n.protocol="ws:";return d(n.toString())}function F(e){let n=e.trim();if(/^wss?:\/\//.test(n))return d(n);return A(n)}function L(e){return Error(`Cannot access the WebSocket service at ${e}.`)}function G(e,n){if(e.type!=="output")return e;let t=e;return n.onOutput?.(t),t.data}function q(e){try{let n=JSON.parse(e);return typeof n==="object"&&n!==null&&typeof n.type==="string"?n:null}catch{return null}}function J(e){if(typeof e==="string")return e;if(e&&typeof e==="object"&&typeof e.message==="string")return e.message;return e===void 0?"WebSocket stream error.":JSON.stringify(e)}var z=Symbol.for("broods.resource"),V=Symbol.for("broods.config"),Y=Symbol.for("broods.connection"),Z=/^[A-Z][A-Z0-9_]{0,63}$/,ze=new Proxy((e)=>{if(!Z.test(e))throw Error("env name must match /^[A-Z][A-Z0-9_]*$/ and be at most 64 characters.");return{__beeblastEnv:!0,name:e}},{get:function(e,n,t){if(typeof n==="string"&&Z.test(n))throw Error(`env.${n} is not supported; use env("${n}")`);return Reflect.get(e,n,t)}});function g(e,n,t,o){return{[z]:!0,kind:e,name:n,...t?{description:t}:{},config:o}}function f(e,n){let{partition:t,...o}=n;return{[Y]:!0,kind:"connection",type:e,...t?{partition:t}:{},config:o}}function m(e,n,t,o,r){return g("channelRecord",e,n,{...r,externalId:t,...o?{workspaceRef:o}:{}})}function Ve(e){return f("discord",e)}function Ye(e){return f("github",e)}function Xe(e){return f("pancake",e)}function Qe(e){return f("slack",e)}function en(e){return f("telegram",e)}function nn(e){return f("zalo",e)}function tn(e){let{name:n,description:t,channelId:o,guildId:r,...s}=e;return m(n,t,o,r,s)}function on(e){let{name:n,description:t,repo:o,...r}=e,[s,...i]=o.split("/");if(!s||i.length!==1||!i[0])throw Error(`Channel "${n}" repo must be "owner/name", not "${o}"`);return m(n,t,o,s,r)}function rn(e){let{name:n,description:t,conversationId:o,...r}=e;return m(n,t,o,void 0,r)}function sn(e){let{name:n,description:t,channelId:o,teamId:r,...s}=e;return m(n,t,o,r,s)}function an(e){let{name:n,description:t,chatId:o,...r}=e;return m(n,t,o,void 0,r)}function cn(e){let{name:n,description:t,chatId:o,...r}=e;return m(n,t,o,void 0,r)}function un(e){return{[V]:!0,config:e}}function dn(e){let{name:n,description:t,...o}=e;return g("agent",n,t,o)}function ln(e){return e}function gn(e){let{name:n,description:t,...o}=e;return g("workspace",n,t,o)}function pn(e){let{name:n,description:t,...o}=e;return g("sandbox",n,t,o)}function fn(e){let{name:n,description:t,...o}=e;return g("skill",n,t,o)}function mn(e){let{name:n,...t}=e;return g("tool",n,void 0,t)}function yn(e){let{name:n,description:t,...o}=e;return g("policy",n,t,o)}function hn(e){let{name:n,description:t,...o}=e;return g("cron",n,t,o)}function Cn(e){return Boolean(e&&typeof e==="object"&&e[z])}function Sn(e){return Boolean(e&&typeof e==="object"&&e[Y])}function Rn(e){return Boolean(e&&typeof e==="object"&&e[V])}
|
|
5
5
|
export{k as d,D as e,Ee as f,De as g,h,Ne as i,Te as j,O as k,d as l,Oe as m,I as n,$e as o,x as p,B as q,le as r,A as s,Se as t,ke as u,ze as v,Ve as w,Ye as x,Xe as y,Qe as z,en as A,nn as B,tn as C,on as D,rn as E,sn as F,an as G,cn as H,un as I,dn as J,ln as K,gn as L,pn as M,fn as N,mn as O,yn as P,hn as Q,Cn as R,Sn as S,Rn as T};
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{R as X,S as Fe,T as is,f as ce,g as Ce,h as En,i as ks,j as Zr,k as lt,l as ct,m as Pa,n as te,o as Cr,p as Cf,r as Na,u as Is}from"../chunk-
|
|
2
|
+
import{R as X,S as Fe,T as is,f as ce,g as Ce,h as En,i as ks,j as Zr,k as lt,l as ct,m as Pa,n as te,o as Cr,p as Cf,r as Na,u as Is}from"../chunk-prg3eaft.js";import{U as Jh}from"../chunk-3cvxks4m.js";import{mkdir as za,readFile as Of,readdir as x_,writeFile as st}from"node:fs/promises";import{createHash as ja}from"node:crypto";import{basename as __,dirname as S_,join as Pf,relative as T_,resolve as H}from"node:path";import{watch as I_}from"node:fs";import{spawn as Nf}from"node:child_process";import{tmpdir as E_}from"node:os";import{performance as If}from"node:perf_hooks";import{fileURLToPath as Kf,pathToFileURL as Hf}from"node:url";import{createHash as Yf}from"node:crypto";import{readFileSync as Xf}from"node:fs";import{mkdtemp as Qf,readdir as ls,readFile as cs,rm as em,writeFile as Qa}from"node:fs/promises";import es from"node:module";import{tmpdir as tm}from"node:os";import{basename as us,isAbsolute as rm,join as kt,relative as $t,resolve as Pr}from"node:path";import{build as nm,transformSync as ds}from"esbuild";var Ha={anthropic:{label:"Anthropic",modelPlaceholder:"claude-sonnet-4-5-20250929"},azure:{label:"Azure OpenAI",modelPlaceholder:"gpt-4.1-mini"},baseten:{label:"Baseten",modelPlaceholder:"deepseek-ai/DeepSeek-V3"},bedrock:{label:"Amazon Bedrock",modelPlaceholder:"anthropic.claude-sonnet-4-5-20250929-v1:0"},cerebras:{label:"Cerebras",modelPlaceholder:"llama3.1-8b"},cohere:{label:"Cohere",modelPlaceholder:"command-a-03-2025"},custom:{label:"Custom OpenAI-compatible",modelPlaceholder:"gpt-oss-120b"},deepinfra:{label:"DeepInfra",modelPlaceholder:"deepseek-ai/DeepSeek-V3"},deepseek:{label:"DeepSeek",modelPlaceholder:"deepseek-chat"},fireworks:{label:"Fireworks",modelPlaceholder:"accounts/fireworks/models/deepseek-v3"},google:{label:"Google",modelPlaceholder:"gemini-2.5-flash"},groq:{label:"Groq",modelPlaceholder:"llama-3.3-70b-versatile"},minimax:{label:"MiniMax",modelPlaceholder:"MiniMax-M2.7"},mistral:{label:"Mistral",modelPlaceholder:"mistral-large-latest"},openai:{label:"OpenAI",modelPlaceholder:"gpt-4.1-mini"},perplexity:{label:"Perplexity",modelPlaceholder:"sonar-pro"},togetherai:{label:"Together.ai",modelPlaceholder:"deepseek-ai/DeepSeek-V3"},v0:{label:"Vercel v0",modelPlaceholder:"v0-1.0-md"},vercel:{label:"Vercel AI Gateway",modelPlaceholder:"openai/gpt-4.1-mini"},vertex:{label:"Google Vertex AI",modelPlaceholder:"gemini-2.5-flash"},xai:{label:"xAI Grok",modelPlaceholder:"grok-4"}},Ya=Object.keys(Ha);function Xa(e){return Object.hasOwn(Ha,e)}var ts="*",om=`const passthrough = (input) => input;
|
|
3
3
|
export const defineTool = passthrough;
|
|
4
4
|
export const defineAgent = passthrough;
|
|
5
5
|
export const defineHarness = passthrough;
|
|
@@ -131,7 +131,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
131
131
|
]))`;continue}else if(o[u]==="$"){a+=`($|(?=[\r
|
|
132
132
|
]))`;continue}}if(n.s&&o[u]==="."){a+=i?`${o[u]}\r
|
|
133
133
|
`:`[${o[u]}\r
|
|
134
|
-
]`;continue}if(a+=o[u],o[u]==="\\")s=!0;else if(i&&o[u]==="]")i=!1;else if(!i&&o[u]==="[")i=!0}try{new RegExp(a)}catch(u){return console.warn(`Could not convert regex pattern at ${t.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),e.source}return a}function lp(e,t){var r,n,o,a,s,i;let c={type:"object",additionalProperties:(r=U(e.valueType._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]}))!=null?r:t.allowedAdditionalProperties};if(((n=e.keyType)==null?void 0:n._def.typeName)==="ZodString"&&((o=e.keyType._def.checks)==null?void 0:o.length)){let{type:u,...d}=ip(e.keyType._def,t);return{...c,propertyNames:d}}else if(((a=e.keyType)==null?void 0:a._def.typeName)==="ZodEnum")return{...c,propertyNames:{enum:e.keyType._def.values}};else if(((s=e.keyType)==null?void 0:s._def.typeName)==="ZodBranded"&&e.keyType._def.type._def.typeName==="ZodString"&&((i=e.keyType._def.type._def.checks)==null?void 0:i.length)){let{type:u,...d}=ap(e.keyType._def,t);return{...c,propertyNames:d}}return c}function wy(e,t){if(t.mapStrategy==="record")return lp(e,t);let r=U(e.keyType._def,{...t,currentPath:[...t.currentPath,"items","items","0"]})||pe(),n=U(e.valueType._def,{...t,currentPath:[...t.currentPath,"items","items","1"]})||pe();return{type:"array",maxItems:125,items:{type:"array",items:[r,n],minItems:2,maxItems:2}}}function xy(e){let t=e.values,n=Object.keys(e.values).filter((a)=>typeof t[t[a]]!=="number").map((a)=>t[a]),o=Array.from(new Set(n.map((a)=>typeof a)));return{type:o.length===1?o[0]==="string"?"string":"number":["string","number"],enum:n}}function _y(){return{not:pe()}}function Sy(){return{type:"null"}}var Qo={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function Ty(e,t){let r=e.options instanceof Map?Array.from(e.options.values()):e.options;if(r.every((n)=>(n._def.typeName in Qo)&&(!n._def.checks||!n._def.checks.length))){let n=r.reduce((o,a)=>{let s=Qo[a._def.typeName];return s&&!o.includes(s)?[...o,s]:o},[]);return{type:n.length>1?n:n[0]}}else if(r.every((n)=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=r.reduce((o,a)=>{let s=typeof a._def.value;switch(s){case"string":case"number":case"boolean":return[...o,s];case"bigint":return[...o,"integer"];case"object":if(a._def.value===null)return[...o,"null"];case"symbol":case"undefined":case"function":default:return o}},[]);if(n.length===r.length){let o=n.filter((a,s,i)=>i.indexOf(a)===s);return{type:o.length>1?o:o[0],enum:r.reduce((a,s)=>a.includes(s._def.value)?a:[...a,s._def.value],[])}}}else if(r.every((n)=>n._def.typeName==="ZodEnum"))return{type:"string",enum:r.reduce((n,o)=>[...n,...o._def.values.filter((a)=>!n.includes(a))],[])};return Iy(e,t)}var Iy=(e,t)=>{let r=(e.options instanceof Map?Array.from(e.options.values()):e.options).map((n,o)=>U(n._def,{...t,currentPath:[...t.currentPath,"anyOf",`${o}`]})).filter((n)=>!!n&&(!t.strictUnions||typeof n==="object"&&Object.keys(n).length>0));return r.length?{anyOf:r}:void 0};function Ey(e,t){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(e.innerType._def.typeName)&&(!e.innerType._def.checks||!e.innerType._def.checks.length))return{type:[Qo[e.innerType._def.typeName],"null"]};let r=U(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","0"]});return r&&{anyOf:[r,{type:"null"}]}}function ky(e){let t={type:"number"};if(!e.checks)return t;for(let r of e.checks)switch(r.kind){case"int":t.type="integer";break;case"min":if(r.inclusive)t.minimum=r.value;else t.exclusiveMinimum=r.value;break;case"max":if(r.inclusive)t.maximum=r.value;else t.exclusiveMaximum=r.value;break;case"multipleOf":t.multipleOf=r.value;break}return t}function $y(e,t){let r={type:"object",properties:{}},n=[],o=e.shape();for(let s in o){let i=o[s];if(i===void 0||i._def===void 0)continue;let c=Ry(i),u=U(i._def,{...t,currentPath:[...t.currentPath,"properties",s],propertyPath:[...t.currentPath,"properties",s]});if(u===void 0)continue;if(r.properties[s]=u,!c)n.push(s)}if(n.length)r.required=n;let a=My(e,t);if(a!==void 0)r.additionalProperties=a;return r}function My(e,t){if(e.catchall._def.typeName!=="ZodNever")return U(e.catchall._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]});switch(e.unknownKeys){case"passthrough":return t.allowedAdditionalProperties;case"strict":return t.rejectedAdditionalProperties;case"strip":return t.removeAdditionalStrategy==="strict"?t.allowedAdditionalProperties:t.rejectedAdditionalProperties}}function Ry(e){try{return e.isOptional()}catch(t){return!0}}var Ay=(e,t)=>{var r;if(t.currentPath.toString()===((r=t.propertyPath)==null?void 0:r.toString()))return U(e.innerType._def,t);let n=U(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","1"]});return n?{anyOf:[{not:pe()},n]}:pe()},Cy=(e,t)=>{if(t.pipeStrategy==="input")return U(e.in._def,t);else if(t.pipeStrategy==="output")return U(e.out._def,t);let r=U(e.in._def,{...t,currentPath:[...t.currentPath,"allOf","0"]}),n=U(e.out._def,{...t,currentPath:[...t.currentPath,"allOf",r?"1":"0"]});return{allOf:[r,n].filter((o)=>o!==void 0)}};function Oy(e,t){return U(e.type._def,t)}function Py(e,t){let n={type:"array",uniqueItems:!0,items:U(e.valueType._def,{...t,currentPath:[...t.currentPath,"items"]})};if(e.minSize)n.minItems=e.minSize.value;if(e.maxSize)n.maxItems=e.maxSize.value;return n}function Ny(e,t){if(e.rest)return{type:"array",minItems:e.items.length,items:e.items.map((r,n)=>U(r._def,{...t,currentPath:[...t.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[]),additionalItems:U(e.rest._def,{...t,currentPath:[...t.currentPath,"additionalItems"]})};else return{type:"array",minItems:e.items.length,maxItems:e.items.length,items:e.items.map((r,n)=>U(r._def,{...t,currentPath:[...t.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[])}}function zy(){return{not:pe()}}function jy(){return pe()}var Dy=(e,t)=>U(e.innerType._def,t),Uy=(e,t,r)=>{switch(t){case"ZodString":return ip(e,r);case"ZodNumber":return ky(e);case"ZodObject":return $y(e,r);case"ZodBigInt":return ly(e);case"ZodBoolean":return cy();case"ZodDate":return sp(e,r);case"ZodUndefined":return zy();case"ZodNull":return Sy();case"ZodArray":return iy(e,r);case"ZodUnion":case"ZodDiscriminatedUnion":return Ty(e,r);case"ZodIntersection":return gy(e,r);case"ZodTuple":return Ny(e,r);case"ZodRecord":return lp(e,r);case"ZodLiteral":return vy(e);case"ZodEnum":return my(e);case"ZodNativeEnum":return xy(e);case"ZodNullable":return Ey(e,r);case"ZodOptional":return Ay(e,r);case"ZodMap":return wy(e,r);case"ZodSet":return Py(e,r);case"ZodLazy":return()=>e.getter()._def;case"ZodPromise":return Oy(e,r);case"ZodNaN":case"ZodNever":return _y();case"ZodEffects":return fy(e,r);case"ZodAny":return pe();case"ZodUnknown":return jy();case"ZodDefault":return py(e,r);case"ZodBranded":return ap(e,r);case"ZodReadonly":return Dy(e,r);case"ZodCatch":return uy(e,r);case"ZodPipeline":return Cy(e,r);case"ZodFunction":case"ZodVoid":case"ZodSymbol":return;default:return((n)=>{return})(t)}},Zy=(e,t)=>{let r=0;for(;r<e.length&&r<t.length;r++)if(e[r]!==t[r])break;return[(e.length-r).toString(),...t.slice(r)].join("/")};function U(e,t,r=!1){var n;let o=t.seen.get(e);if(t.override){let c=(n=t.override)==null?void 0:n.call(t,e,t,o,r);if(c!==ay)return c}if(o&&!r){let c=Ly(o,t);if(c!==void 0)return c}let a={def:e,path:t.currentPath,jsonSchema:void 0};t.seen.set(e,a);let s=Uy(e,e.typeName,t),i=typeof s==="function"?U(s(),t):s;if(i)Fy(e,t,i);if(t.postProcess){let c=t.postProcess(i,e,t);return a.jsonSchema=i,c}return a.jsonSchema=i,i}var Ly=(e,t)=>{switch(t.$refStrategy){case"root":return{$ref:e.path.join("/")};case"relative":return{$ref:Zy(t.currentPath,e.path)};case"none":case"seen":{if(e.path.length<t.currentPath.length&&e.path.every((r,n)=>t.currentPath[n]===r))return console.warn(`Recursive reference detected at ${t.currentPath.join("/")}! Defaulting to any`),pe();return t.$refStrategy==="seen"?pe():void 0}}},Fy=(e,t,r)=>{if(e.description)r.description=e.description;return r},By=(e)=>{let t=sy(e),r=t.name!==void 0?[...t.basePath,t.definitionPath,t.name]:t.basePath;return{...t,currentPath:r,propertyPath:void 0,seen:new Map(Object.entries(t.definitions).map(([n,o])=>[o._def,{def:o._def,path:[...t.basePath,t.definitionPath,n],jsonSchema:void 0}]))}},qy=(e,t)=>{var r;let n=By(t),o=typeof t==="object"&&t.definitions?Object.entries(t.definitions).reduce((u,[d,p])=>{var f;return{...u,[d]:(f=U(p._def,{...n,currentPath:[...n.basePath,n.definitionPath,d]},!0))!=null?f:pe()}},{}):void 0,a=typeof t==="string"?t:(t==null?void 0:t.nameStrategy)==="title"?void 0:t==null?void 0:t.name,s=(r=U(e._def,a===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,a]},!1))!=null?r:pe(),i=typeof t==="object"&&t.name!==void 0&&t.nameStrategy==="title"?t.name:void 0;if(i!==void 0)s.title=i;let c=a===void 0?o?{...s,[n.definitionPath]:o}:s:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,a].join("/"),[n.definitionPath]:{...o,[a]:s}};return c.$schema="http://json-schema.org/draft-07/schema#",c},ea=Symbol.for("vercel.ai.schema");function un(e){let t;return()=>{if(t==null)t=e();return t}}function vr(e,{validate:t}={}){return{[ea]:!0,_type:void 0,get jsonSchema(){if(typeof e==="function")e=e();return e},validate:t}}function Wy(e){return typeof e==="object"&&e!==null&&ea in e&&e[ea]===!0&&"jsonSchema"in e&&"validate"in e}function yr(e){return e==null?vr({type:"object",properties:{},additionalProperties:!1}):Wy(e)?e:("~standard"in e)?e["~standard"].vendor==="zod"?Ut(e):Vy(e):e()}function Vy(e){return vr(()=>{if(!Gy(e))throw Error(`Standard schema vendor '${e["~standard"].vendor}' does not support JSON Schema conversion.`);return oa(e["~standard"].jsonSchema.input({target:"draft-07"}))},{validate:async(t)=>{let r=await e["~standard"].validate(t);return"value"in r?{success:!0,value:r.value}:{success:!1,error:new $e({value:t,cause:r.issues})}}})}function Gy(e){return e["~standard"].jsonSchema!=null}function Jy(e,t){var r;let n=(r=t==null?void 0:t.useReferences)!=null?r:!1;return vr(()=>qy(e,{$refStrategy:n?"root":"none"}),{validate:async(o)=>{let a=await e.safeParseAsync(o);return a.success?{success:!0,value:a.data}:{success:!1,error:a.error}}})}function Ky(e,t){var r;let n=(r=t==null?void 0:t.useReferences)!=null?r:!1;return vr(()=>oa(Fo(e,{target:"draft-7",io:"input",reused:n?"ref":"inline"})),{validate:async(o)=>{let a=await sn(e,o);return a.success?{success:!0,value:a.data}:{success:!1,error:a.error}}})}function Hy(e){return"_zod"in e}function Ut(e,t){if(Hy(e))return Ky(e,t);else return Jy(e,t)}async function dn({value:e,schema:t,context:r}){let n=await Zt({value:e,schema:t,context:r});if(!n.success)throw $e.wrap({value:e,cause:n.error,context:r});return n.value}async function Zt({value:e,schema:t,context:r}){let n=yr(t);try{if(n.validate==null)return{success:!0,value:e,rawValue:e};let o=await n.validate(e);if(o.success)return{success:!0,value:o.value,rawValue:e};return{success:!1,error:$e.wrap({value:e,cause:o.error,context:r}),rawValue:e}}catch(o){return{success:!1,error:$e.wrap({value:e,cause:o,context:r}),rawValue:e}}}async function Ye({text:e,schema:t}){try{let r=oy(e);if(t==null)return{success:!0,value:r,rawValue:r};return await Zt({value:r,schema:t})}catch(r){return{success:!1,error:Ln.isInstance(r)?r:new Ln({text:e,cause:r}),rawValue:void 0}}}async function aa(e){if(typeof e==="function")e=e();return Promise.resolve(e)}var cp="AI_SerializationError",up=`vercel.ai.error.${cp}`,Yy=Symbol.for(up),Gd,Jd,d0=class extends(Jd=k,Gd=Yy,Jd){constructor({message:e="Failed to serialize value.",cause:t}={}){super({name:cp,message:e,cause:t});this[Gd]=!0}static isInstance(e){return k.hasMarker(e,up)}};var eb=Object.defineProperty,tb=(e,t)=>{for(var r in t)eb(e,r,{get:t[r],enumerable:!0})},rb="AI_InvalidArgumentError",nb=`vercel.ai.error.${rb}`,ob=Symbol.for(nb),ab;ab=ob;var sb="AI_InvalidStreamPartError",ib=`vercel.ai.error.${sb}`,lb=Symbol.for(ib),cb;cb=lb;var ub="AI_InvalidToolApprovalError",db=`vercel.ai.error.${ub}`,pb=Symbol.for(db),fb;fb=pb;var mb="AI_InvalidToolApprovalSignatureError",hb=`vercel.ai.error.${mb}`,gb=Symbol.for(hb),vb;vb=gb;var yb="AI_InvalidToolInputError",bb=`vercel.ai.error.${yb}`,wb=Symbol.for(bb),xb;xb=wb;var _b="AI_ToolCallNotFoundForApprovalError",Sb=`vercel.ai.error.${_b}`,Tb=Symbol.for(Sb),Ib;Ib=Tb;var Eb="AI_MissingToolResultsError",kb=`vercel.ai.error.${Eb}`,$b=Symbol.for(kb),Mb;Mb=$b;var Rb="AI_NoImageGeneratedError",Ab=`vercel.ai.error.${Rb}`,Cb=Symbol.for(Ab),Ob;Ob=Cb;var vp="AI_NoObjectGeneratedError",yp=`vercel.ai.error.${vp}`,Pb=Symbol.for(yp),bp,Qe=class extends k{constructor({message:e="No object generated.",cause:t,text:r,response:n,usage:o,finishReason:a}){super({name:vp,message:e,cause:t});this[bp]=!0,this.text=r,this.response=n,this.usage=o,this.finishReason=a}static isInstance(e){return k.hasMarker(e,yp)}};bp=Pb;var Nb="AI_NoOutputGeneratedError",zb=`vercel.ai.error.${Nb}`,jb=Symbol.for(zb),Db;Db=jb;var Ub="AI_NoSpeechGeneratedError",Zb=`vercel.ai.error.${Ub}`,Lb=Symbol.for(Zb),Fb;Fb=Lb;var Bb="AI_NoTranscriptGeneratedError",qb=`vercel.ai.error.${Bb}`,Wb=Symbol.for(qb),Vb;Vb=Wb;var Gb="AI_NoTranslationGeneratedError",Jb=`vercel.ai.error.${Gb}`,Kb=Symbol.for(Jb),Hb;Hb=Kb;var Yb="AI_NoVideoGeneratedError",Xb=`vercel.ai.error.${Yb}`,Qb=Symbol.for(Xb),ew;ew=Qb;var tw="AI_NoSuchToolError",rw=`vercel.ai.error.${tw}`,nw=Symbol.for(rw),ow;ow=nw;var aw="AI_ToolCallRepairError",sw=`vercel.ai.error.${aw}`,iw=Symbol.for(sw),lw;lw=iw;var wp="AI_UIMessageStreamError",xp=`vercel.ai.error.${wp}`,cw=Symbol.for(xp),_p,gt=class extends k{constructor({chunkType:e,chunkId:t,message:r}){super({name:wp,message:r});this[_p]=!0,this.chunkType=e,this.chunkId=t}static isInstance(e){return k.hasMarker(e,xp)}};_p=cw;var uw="AI_InvalidDataContentError",dw=`vercel.ai.error.${uw}`,pw=Symbol.for(dw),fw;fw=pw;var mw="AI_InvalidMessageRoleError",hw=`vercel.ai.error.${mw}`,gw=Symbol.for(hw),vw;vw=gw;var Sp="AI_MessageConversionError",Tp=`vercel.ai.error.${Sp}`,yw=Symbol.for(Tp),Ip,bw=class extends k{constructor({originalMessage:e,message:t}){super({name:Sp,message:t});this[Ip]=!0,this.originalMessage=e}static isInstance(e){return k.hasMarker(e,Tp)}};Ip=yw;var ww="AI_RetryError",xw=`vercel.ai.error.${ww}`,_w=Symbol.for(xw),Sw;Sw=_w;var Tw="7.0.67",Iw=async({url:e,maxBytes:t,abortSignal:r})=>{var n;let o=e.toString();try{let a=Dt({},`ai-sdk/${Tw}`,rp()),s=await ep({url:o,headers:a,abortSignal:r});if(!s.ok)throw await cn(s),new oe({url:o,statusCode:s.status,statusText:s.statusText});return{data:await tp({response:s,url:o,maxBytes:t!=null?t:na}),mediaType:(n=s.headers.get("content-type"))!=null?n:void 0}}catch(a){if(oe.isInstance(a))throw a;throw new oe({url:o,cause:a})}};function Ep(e,t){if(e===void 0&&t===void 0)return;if(e===void 0)return t;if(t===void 0)return e;let r={...e};for(let n in t){if(n==="__proto__"||n==="constructor"||n==="prototype")continue;if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n];if(o===void 0)continue;let a=n in e?e[n]:void 0,s=o!==null&&typeof o==="object"&&!Array.isArray(o)&&!(o instanceof Date)&&!(o instanceof RegExp),i=a!==null&&a!==void 0&&typeof a==="object"&&!Array.isArray(a)&&!(a instanceof Date)&&!(a instanceof RegExp);if(s&&i)r[n]=Ep(a,o);else r[n]=o}}return r}async function dp({toolCallId:e,input:t,output:r,tool:n,errorMode:o}){if(o==="text")return{type:"error-text",value:Qt(r)};else if(o==="json")return{type:"error-json",value:pp(r)};if(n==null?void 0:n.toModelOutput)return await n.toModelOutput({toolCallId:e,input:t,output:r});return typeof r==="string"?{type:"text",value:r}:{type:"json",value:pp(r)}}function pp(e){return e===void 0?null:e}var l={array:Vo,boolean:Ed,custom:Dd,discriminatedUnion:Cd,enum:Jo,instanceof:Ud,lazy:jd,literal:Pd,looseObject:Rd,never:Wo,null:kd,number:Id,object:Md,record:Od,string:qo,union:Go,unknown:hr},vt=l.lazy(()=>l.union([l.null(),l.string(),l.number(),l.boolean(),l.record(l.string(),vt.optional()),l.array(vt)])),S=l.record(l.string(),l.record(l.string(),vt.optional())),xr=l.union([l.string(),l.instanceof(Uint8Array),l.instanceof(ArrayBuffer),l.custom(np,{message:"Must be a Buffer"})]),da=l.record(l.string(),l.string()),kp=l.object({type:l.literal("text"),text:l.string(),providerOptions:S.optional()}),Ew=l.object({type:l.literal("image"),image:l.union([xr,l.instanceof(URL),da]),mediaType:l.string().optional(),providerOptions:S.optional()}),$p=l.discriminatedUnion("type",[l.object({type:l.literal("data"),data:xr}),l.object({type:l.literal("url"),url:l.instanceof(URL)}),l.object({type:l.literal("reference"),reference:da}),l.object({type:l.literal("text"),text:l.string()})]),kw=l.discriminatedUnion("type",[l.object({type:l.literal("data"),data:xr}),l.object({type:l.literal("url"),url:l.instanceof(URL)})]),Mp=l.object({type:l.literal("file"),data:l.union([$p,xr,l.instanceof(URL),da]),filename:l.string().optional(),mediaType:l.string(),providerOptions:S.optional()}),$w=l.object({type:l.literal("reasoning"),text:l.string(),providerOptions:S.optional()}),Mw=l.object({type:l.literal("custom"),kind:l.string().transform((e)=>e),providerOptions:S.optional()}),Rw=l.object({type:l.literal("reasoning-file"),data:l.union([kw,xr,l.instanceof(URL)]),mediaType:l.string(),providerOptions:S.optional()}),Aw=l.object({type:l.literal("tool-call"),toolCallId:l.string(),toolName:l.string(),input:l.unknown(),providerOptions:S.optional(),providerExecuted:l.boolean().optional()}),Cw=l.discriminatedUnion("type",[l.object({type:l.literal("text"),value:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("json"),value:vt,providerOptions:S.optional()}),l.object({type:l.literal("execution-denied"),reason:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("error-text"),value:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("error-json"),value:vt,providerOptions:S.optional()}),l.object({type:l.literal("content"),value:l.array(l.union([l.object({type:l.literal("text"),text:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("file"),data:$p,mediaType:l.string(),filename:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("file-data"),data:l.string(),mediaType:l.string(),filename:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("file-url"),url:l.string(),mediaType:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("file-id"),fileId:l.union([l.string(),l.record(l.string(),l.string())]),providerOptions:S.optional()}),l.object({type:l.literal("file-reference"),providerReference:l.record(l.string(),l.string()),providerOptions:S.optional()}),l.object({type:l.literal("image-data"),data:l.string(),mediaType:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("image-url"),url:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("image-file-id"),fileId:l.union([l.string(),l.record(l.string(),l.string())]),providerOptions:S.optional()}),l.object({type:l.literal("image-file-reference"),providerReference:l.record(l.string(),l.string()),providerOptions:S.optional()}),l.object({type:l.literal("custom"),providerOptions:S.optional()})]))})]),Rp=l.object({type:l.literal("tool-result"),toolCallId:l.string(),toolName:l.string(),output:Cw,providerOptions:S.optional()}),Ow=l.object({type:l.literal("tool-approval-request"),approvalId:l.string(),toolCallId:l.string()}),Pw=l.object({type:l.literal("tool-approval-response"),approvalId:l.string(),approved:l.boolean(),reason:l.string().optional()}),Nw=l.object({role:l.literal("system"),content:l.string(),providerOptions:S.optional()}),zw=l.object({role:l.literal("user"),content:l.union([l.string(),l.array(l.union([kp,Ew,Mp]))]),providerOptions:S.optional()}),jw=l.object({role:l.literal("assistant"),content:l.union([l.string(),l.array(l.union([kp,Mw,Mp,$w,Rw,Aw,Rp,Ow]))]),providerOptions:S.optional()}),Dw=l.object({role:l.literal("tool"),content:l.array(l.union([Rp,Pw])),providerOptions:S.optional()}),A0=l.union([Nw,zw,jw,Dw]);function fp(e,t){return e!=null&&Object.hasOwn(e,t)?e[t]:void 0}var Uw={};tb(Uw,{array:()=>Bw,choice:()=>qw,json:()=>Ww,object:()=>Fw,text:()=>Lw});function Zw(e){let t=["ROOT"],r=-1,n=null,o=0;function a(d){return d>="0"&&d<="9"||d>="A"&&d<="F"||d>="a"&&d<="f"}function s(d,p,f){switch(d){case'"':{r=p,t.pop(),t.push(f),t.push("INSIDE_STRING");break}case"f":case"t":case"n":{r=p,n=p,t.pop(),t.push(f),t.push("INSIDE_LITERAL");break}case"-":{t.pop(),t.push(f),t.push("INSIDE_NUMBER");break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":{r=p,t.pop(),t.push(f),t.push("INSIDE_NUMBER");break}case"{":{r=p,t.pop(),t.push(f),t.push("INSIDE_OBJECT_START");break}case"[":{r=p,t.pop(),t.push(f),t.push("INSIDE_ARRAY_START");break}}}function i(d,p){switch(d){case",":{t.pop(),t.push("INSIDE_OBJECT_AFTER_COMMA");break}case"}":{r=p,t.pop();break}}}function c(d,p){switch(d){case",":{t.pop(),t.push("INSIDE_ARRAY_AFTER_COMMA");break}case"]":{r=p,t.pop();break}}}for(let d=0;d<e.length;d++){let p=e[d];switch(t[t.length-1]){case"ROOT":s(p,d,"FINISH");break;case"INSIDE_OBJECT_START":{switch(p){case'"':{t.pop(),t.push("INSIDE_OBJECT_KEY");break}case"}":{r=d,t.pop();break}}break}case"INSIDE_OBJECT_AFTER_COMMA":{switch(p){case'"':{t.pop(),t.push("INSIDE_OBJECT_KEY");break}}break}case"INSIDE_OBJECT_KEY":{switch(p){case'"':{t.pop(),t.push("INSIDE_OBJECT_AFTER_KEY");break}}break}case"INSIDE_OBJECT_AFTER_KEY":{switch(p){case":":{t.pop(),t.push("INSIDE_OBJECT_BEFORE_VALUE");break}}break}case"INSIDE_OBJECT_BEFORE_VALUE":{s(p,d,"INSIDE_OBJECT_AFTER_VALUE");break}case"INSIDE_OBJECT_AFTER_VALUE":{i(p,d);break}case"INSIDE_STRING":{switch(p){case'"':{t.pop(),r=d;break}case"\\":{t.push("INSIDE_STRING_ESCAPE");break}default:r=d}break}case"INSIDE_ARRAY_START":{switch(p){case"]":{r=d,t.pop();break}default:{r=d,s(p,d,"INSIDE_ARRAY_AFTER_VALUE");break}}break}case"INSIDE_ARRAY_AFTER_VALUE":{switch(p){case",":{t.pop(),t.push("INSIDE_ARRAY_AFTER_COMMA");break}case"]":{r=d,t.pop();break}default:{r=d;break}}break}case"INSIDE_ARRAY_AFTER_COMMA":{s(p,d,"INSIDE_ARRAY_AFTER_VALUE");break}case"INSIDE_STRING_ESCAPE":{if(t.pop(),p==="u")o=0,t.push("INSIDE_STRING_UNICODE_ESCAPE");else r=d;break}case"INSIDE_STRING_UNICODE_ESCAPE":{if(a(p)){if(o++,o===4)t.pop(),r=d}break}case"INSIDE_NUMBER":{switch(p){case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":{r=d;break}case"e":case"E":case"-":case".":break;case",":{if(t.pop(),t[t.length-1]==="INSIDE_ARRAY_AFTER_VALUE")c(p,d);if(t[t.length-1]==="INSIDE_OBJECT_AFTER_VALUE")i(p,d);break}case"}":{if(t.pop(),t[t.length-1]==="INSIDE_OBJECT_AFTER_VALUE")i(p,d);break}case"]":{if(t.pop(),t[t.length-1]==="INSIDE_ARRAY_AFTER_VALUE")c(p,d);break}default:{t.pop();break}}break}case"INSIDE_LITERAL":{let m=e.substring(n,d+1);if(!"false".startsWith(m)&&!"true".startsWith(m)&&!"null".startsWith(m)){if(t.pop(),t[t.length-1]==="INSIDE_OBJECT_AFTER_VALUE")i(p,d);else if(t[t.length-1]==="INSIDE_ARRAY_AFTER_VALUE")c(p,d)}else r=d;break}}}let u=e.slice(0,r+1);for(let d=t.length-1;d>=0;d--)switch(t[d]){case"INSIDE_STRING":{u+='"';break}case"INSIDE_OBJECT_KEY":case"INSIDE_OBJECT_AFTER_KEY":case"INSIDE_OBJECT_AFTER_COMMA":case"INSIDE_OBJECT_START":case"INSIDE_OBJECT_BEFORE_VALUE":case"INSIDE_OBJECT_AFTER_VALUE":{u+="}";break}case"INSIDE_ARRAY_START":case"INSIDE_ARRAY_AFTER_COMMA":case"INSIDE_ARRAY_AFTER_VALUE":{u+="]";break}case"INSIDE_LITERAL":{let f=e.substring(n,e.length);if("true".startsWith(f))u+="true".slice(f.length);else if("false".startsWith(f))u+="false".slice(f.length);else if("null".startsWith(f))u+="null".slice(f.length)}}return u}async function _r(e){if(e===void 0)return{value:void 0,state:"undefined-input"};let t=await Ye({text:e});if(t.success)return{value:t.value,state:"successful-parse"};if(t=await Ye({text:Zw(e)}),t.success)return{value:t.value,state:"repaired-parse"};return{value:void 0,state:"failed-parse"}}var Lw=()=>({name:"text",responseFormat:Promise.resolve({type:"text"}),async parseCompleteOutput({text:e}){return e},async parsePartialOutput({text:e}){return{partial:e}},createElementStreamTransform(){return}}),Fw=({schema:e,name:t,description:r})=>{let n=yr(e);return{name:"object",responseFormat:aa(n.jsonSchema).then((o)=>({type:"json",schema:o,...t!=null&&{name:t},...r!=null&&{description:r}})),async parseCompleteOutput({text:o},a){let s=await Ye({text:o});if(!s.success)throw new Qe({message:"No object generated: could not parse the response.",cause:s.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});let i=await Zt({value:s.value,schema:n});if(!i.success)throw new Qe({message:"No object generated: response did not match schema.",cause:i.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});return i.value},async parsePartialOutput({text:o}){let a=await _r(o);switch(a.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":return{partial:a.value}}},createElementStreamTransform(){return}}},Bw=({element:e,name:t,description:r})=>{let n=yr(e);return{name:"array",responseFormat:aa(n.jsonSchema).then((o)=>{let{$schema:a,definitions:s,$defs:i,...c}=o;return{type:"json",schema:{$schema:"http://json-schema.org/draft-07/schema#",...s!=null&&{definitions:s},...i!=null&&{$defs:i},type:"object",properties:{elements:{type:"array",items:c}},required:["elements"],additionalProperties:!1},...t!=null&&{name:t},...r!=null&&{description:r}}}),async parseCompleteOutput({text:o},a){let s=await Ye({text:o});if(!s.success)throw new Qe({message:"No object generated: could not parse the response.",cause:s.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});let i=s.value;if(i==null||typeof i!=="object"||!("elements"in i)||!Array.isArray(i.elements))throw new Qe({message:"No object generated: response did not match schema.",cause:new $e({value:i,cause:"response must be an object with an elements array"}),text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});let c=[];for(let u of i.elements){let d=await Zt({value:u,schema:n});if(!d.success)throw new Qe({message:"No object generated: response did not match schema.",cause:d.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});c.push(d.value)}return c},async parsePartialOutput({text:o}){let a=await _r(o);switch(a.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":{let s=a.value;if(s==null||typeof s!=="object"||!("elements"in s)||!Array.isArray(s.elements))return;let i=a.state==="repaired-parse"&&s.elements.length>0?s.elements.slice(0,-1):s.elements,c=[];for(let u of i){let d=await Zt({value:u,schema:n});if(d.success)c.push(d.value)}return{partial:c}}}},createElementStreamTransform(){let o=0;return new TransformStream({transform({partialOutput:a},s){if(a!=null)for(;o<a.length;o++)s.enqueue(a[o])}})}}},qw=({options:e,name:t,description:r})=>({name:"choice",responseFormat:Promise.resolve({type:"json",schema:{$schema:"http://json-schema.org/draft-07/schema#",type:"object",properties:{result:{type:"string",enum:e}},required:["result"],additionalProperties:!1},...t!=null&&{name:t},...r!=null&&{description:r}}),async parseCompleteOutput({text:n},o){let a=await Ye({text:n});if(!a.success)throw new Qe({message:"No object generated: could not parse the response.",cause:a.error,text:n,response:o.response,usage:o.usage,finishReason:o.finishReason});let s=a.value;if(s==null||typeof s!=="object"||!("result"in s)||typeof s.result!=="string"||!e.includes(s.result))throw new Qe({message:"No object generated: response did not match schema.",cause:new $e({value:s,cause:"response must be an object that contains a choice value."}),text:n,response:o.response,usage:o.usage,finishReason:o.finishReason});return s.result},async parsePartialOutput({text:n}){let o=await _r(n);switch(o.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":{let a=o.value;if(a==null||typeof a!=="object"||!("result"in a)||typeof a.result!=="string")return;let s=e.filter((i)=>i.startsWith(a.result));if(o.state==="successful-parse")return s.includes(a.result)?{partial:a.result}:void 0;else return s.length===1?{partial:s[0]}:void 0}}},createElementStreamTransform(){return}}),Ww=({name:e,description:t}={})=>({name:"json",responseFormat:Promise.resolve({type:"json",...e!=null&&{name:e},...t!=null&&{description:t}}),async parseCompleteOutput({text:r},n){let o=await Ye({text:r});if(!o.success)throw new Qe({message:"No object generated: could not parse the response.",cause:o.error,text:r,response:n.response,usage:n.usage,finishReason:n.finishReason});return o.value},async parsePartialOutput({text:r}){let n=await _r(r);switch(n.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":return n.value===void 0?void 0:{partial:n.value}}},createElementStreamTransform(){return}});var N0=G({prefix:"aitxt",size:24}),z0=G({prefix:"call",size:24});function Ap({stream:e}){return e.pipeThrough(new TransformStream({transform(t,r){if(t.type==="text-delta")r.enqueue(t.text)}}))}var D0=class extends TransformStream{constructor(){super({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}
|
|
134
|
+
]`;continue}if(a+=o[u],o[u]==="\\")s=!0;else if(i&&o[u]==="]")i=!1;else if(!i&&o[u]==="[")i=!0}try{new RegExp(a)}catch(u){return console.warn(`Could not convert regex pattern at ${t.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),e.source}return a}function lp(e,t){var r,n,o,a,s,i;let c={type:"object",additionalProperties:(r=U(e.valueType._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]}))!=null?r:t.allowedAdditionalProperties};if(((n=e.keyType)==null?void 0:n._def.typeName)==="ZodString"&&((o=e.keyType._def.checks)==null?void 0:o.length)){let{type:u,...d}=ip(e.keyType._def,t);return{...c,propertyNames:d}}else if(((a=e.keyType)==null?void 0:a._def.typeName)==="ZodEnum")return{...c,propertyNames:{enum:e.keyType._def.values}};else if(((s=e.keyType)==null?void 0:s._def.typeName)==="ZodBranded"&&e.keyType._def.type._def.typeName==="ZodString"&&((i=e.keyType._def.type._def.checks)==null?void 0:i.length)){let{type:u,...d}=ap(e.keyType._def,t);return{...c,propertyNames:d}}return c}function wy(e,t){if(t.mapStrategy==="record")return lp(e,t);let r=U(e.keyType._def,{...t,currentPath:[...t.currentPath,"items","items","0"]})||pe(),n=U(e.valueType._def,{...t,currentPath:[...t.currentPath,"items","items","1"]})||pe();return{type:"array",maxItems:125,items:{type:"array",items:[r,n],minItems:2,maxItems:2}}}function xy(e){let t=e.values,n=Object.keys(e.values).filter((a)=>typeof t[t[a]]!=="number").map((a)=>t[a]),o=Array.from(new Set(n.map((a)=>typeof a)));return{type:o.length===1?o[0]==="string"?"string":"number":["string","number"],enum:n}}function _y(){return{not:pe()}}function Sy(){return{type:"null"}}var Qo={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function Ty(e,t){let r=e.options instanceof Map?Array.from(e.options.values()):e.options;if(r.every((n)=>(n._def.typeName in Qo)&&(!n._def.checks||!n._def.checks.length))){let n=r.reduce((o,a)=>{let s=Qo[a._def.typeName];return s&&!o.includes(s)?[...o,s]:o},[]);return{type:n.length>1?n:n[0]}}else if(r.every((n)=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=r.reduce((o,a)=>{let s=typeof a._def.value;switch(s){case"string":case"number":case"boolean":return[...o,s];case"bigint":return[...o,"integer"];case"object":if(a._def.value===null)return[...o,"null"];case"symbol":case"undefined":case"function":default:return o}},[]);if(n.length===r.length){let o=n.filter((a,s,i)=>i.indexOf(a)===s);return{type:o.length>1?o:o[0],enum:r.reduce((a,s)=>a.includes(s._def.value)?a:[...a,s._def.value],[])}}}else if(r.every((n)=>n._def.typeName==="ZodEnum"))return{type:"string",enum:r.reduce((n,o)=>[...n,...o._def.values.filter((a)=>!n.includes(a))],[])};return Iy(e,t)}var Iy=(e,t)=>{let r=(e.options instanceof Map?Array.from(e.options.values()):e.options).map((n,o)=>U(n._def,{...t,currentPath:[...t.currentPath,"anyOf",`${o}`]})).filter((n)=>!!n&&(!t.strictUnions||typeof n==="object"&&Object.keys(n).length>0));return r.length?{anyOf:r}:void 0};function Ey(e,t){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(e.innerType._def.typeName)&&(!e.innerType._def.checks||!e.innerType._def.checks.length))return{type:[Qo[e.innerType._def.typeName],"null"]};let r=U(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","0"]});return r&&{anyOf:[r,{type:"null"}]}}function ky(e){let t={type:"number"};if(!e.checks)return t;for(let r of e.checks)switch(r.kind){case"int":t.type="integer";break;case"min":if(r.inclusive)t.minimum=r.value;else t.exclusiveMinimum=r.value;break;case"max":if(r.inclusive)t.maximum=r.value;else t.exclusiveMaximum=r.value;break;case"multipleOf":t.multipleOf=r.value;break}return t}function $y(e,t){let r={type:"object",properties:{}},n=[],o=e.shape();for(let s in o){let i=o[s];if(i===void 0||i._def===void 0)continue;let c=Ry(i),u=U(i._def,{...t,currentPath:[...t.currentPath,"properties",s],propertyPath:[...t.currentPath,"properties",s]});if(u===void 0)continue;if(r.properties[s]=u,!c)n.push(s)}if(n.length)r.required=n;let a=My(e,t);if(a!==void 0)r.additionalProperties=a;return r}function My(e,t){if(e.catchall._def.typeName!=="ZodNever")return U(e.catchall._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]});switch(e.unknownKeys){case"passthrough":return t.allowedAdditionalProperties;case"strict":return t.rejectedAdditionalProperties;case"strip":return t.removeAdditionalStrategy==="strict"?t.allowedAdditionalProperties:t.rejectedAdditionalProperties}}function Ry(e){try{return e.isOptional()}catch(t){return!0}}var Ay=(e,t)=>{var r;if(t.currentPath.toString()===((r=t.propertyPath)==null?void 0:r.toString()))return U(e.innerType._def,t);let n=U(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","1"]});return n?{anyOf:[{not:pe()},n]}:pe()},Cy=(e,t)=>{if(t.pipeStrategy==="input")return U(e.in._def,t);else if(t.pipeStrategy==="output")return U(e.out._def,t);let r=U(e.in._def,{...t,currentPath:[...t.currentPath,"allOf","0"]}),n=U(e.out._def,{...t,currentPath:[...t.currentPath,"allOf",r?"1":"0"]});return{allOf:[r,n].filter((o)=>o!==void 0)}};function Oy(e,t){return U(e.type._def,t)}function Py(e,t){let n={type:"array",uniqueItems:!0,items:U(e.valueType._def,{...t,currentPath:[...t.currentPath,"items"]})};if(e.minSize)n.minItems=e.minSize.value;if(e.maxSize)n.maxItems=e.maxSize.value;return n}function Ny(e,t){if(e.rest)return{type:"array",minItems:e.items.length,items:e.items.map((r,n)=>U(r._def,{...t,currentPath:[...t.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[]),additionalItems:U(e.rest._def,{...t,currentPath:[...t.currentPath,"additionalItems"]})};else return{type:"array",minItems:e.items.length,maxItems:e.items.length,items:e.items.map((r,n)=>U(r._def,{...t,currentPath:[...t.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[])}}function zy(){return{not:pe()}}function jy(){return pe()}var Dy=(e,t)=>U(e.innerType._def,t),Uy=(e,t,r)=>{switch(t){case"ZodString":return ip(e,r);case"ZodNumber":return ky(e);case"ZodObject":return $y(e,r);case"ZodBigInt":return ly(e);case"ZodBoolean":return cy();case"ZodDate":return sp(e,r);case"ZodUndefined":return zy();case"ZodNull":return Sy();case"ZodArray":return iy(e,r);case"ZodUnion":case"ZodDiscriminatedUnion":return Ty(e,r);case"ZodIntersection":return gy(e,r);case"ZodTuple":return Ny(e,r);case"ZodRecord":return lp(e,r);case"ZodLiteral":return vy(e);case"ZodEnum":return my(e);case"ZodNativeEnum":return xy(e);case"ZodNullable":return Ey(e,r);case"ZodOptional":return Ay(e,r);case"ZodMap":return wy(e,r);case"ZodSet":return Py(e,r);case"ZodLazy":return()=>e.getter()._def;case"ZodPromise":return Oy(e,r);case"ZodNaN":case"ZodNever":return _y();case"ZodEffects":return fy(e,r);case"ZodAny":return pe();case"ZodUnknown":return jy();case"ZodDefault":return py(e,r);case"ZodBranded":return ap(e,r);case"ZodReadonly":return Dy(e,r);case"ZodCatch":return uy(e,r);case"ZodPipeline":return Cy(e,r);case"ZodFunction":case"ZodVoid":case"ZodSymbol":return;default:return((n)=>{return})(t)}},Zy=(e,t)=>{let r=0;for(;r<e.length&&r<t.length;r++)if(e[r]!==t[r])break;return[(e.length-r).toString(),...t.slice(r)].join("/")};function U(e,t,r=!1){var n;let o=t.seen.get(e);if(t.override){let c=(n=t.override)==null?void 0:n.call(t,e,t,o,r);if(c!==ay)return c}if(o&&!r){let c=Ly(o,t);if(c!==void 0)return c}let a={def:e,path:t.currentPath,jsonSchema:void 0};t.seen.set(e,a);let s=Uy(e,e.typeName,t),i=typeof s==="function"?U(s(),t):s;if(i)Fy(e,t,i);if(t.postProcess){let c=t.postProcess(i,e,t);return a.jsonSchema=i,c}return a.jsonSchema=i,i}var Ly=(e,t)=>{switch(t.$refStrategy){case"root":return{$ref:e.path.join("/")};case"relative":return{$ref:Zy(t.currentPath,e.path)};case"none":case"seen":{if(e.path.length<t.currentPath.length&&e.path.every((r,n)=>t.currentPath[n]===r))return console.warn(`Recursive reference detected at ${t.currentPath.join("/")}! Defaulting to any`),pe();return t.$refStrategy==="seen"?pe():void 0}}},Fy=(e,t,r)=>{if(e.description)r.description=e.description;return r},By=(e)=>{let t=sy(e),r=t.name!==void 0?[...t.basePath,t.definitionPath,t.name]:t.basePath;return{...t,currentPath:r,propertyPath:void 0,seen:new Map(Object.entries(t.definitions).map(([n,o])=>[o._def,{def:o._def,path:[...t.basePath,t.definitionPath,n],jsonSchema:void 0}]))}},qy=(e,t)=>{var r;let n=By(t),o=typeof t==="object"&&t.definitions?Object.entries(t.definitions).reduce((u,[d,p])=>{var f;return{...u,[d]:(f=U(p._def,{...n,currentPath:[...n.basePath,n.definitionPath,d]},!0))!=null?f:pe()}},{}):void 0,a=typeof t==="string"?t:(t==null?void 0:t.nameStrategy)==="title"?void 0:t==null?void 0:t.name,s=(r=U(e._def,a===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,a]},!1))!=null?r:pe(),i=typeof t==="object"&&t.name!==void 0&&t.nameStrategy==="title"?t.name:void 0;if(i!==void 0)s.title=i;let c=a===void 0?o?{...s,[n.definitionPath]:o}:s:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,a].join("/"),[n.definitionPath]:{...o,[a]:s}};return c.$schema="http://json-schema.org/draft-07/schema#",c},ea=Symbol.for("vercel.ai.schema");function un(e){let t;return()=>{if(t==null)t=e();return t}}function vr(e,{validate:t}={}){return{[ea]:!0,_type:void 0,get jsonSchema(){if(typeof e==="function")e=e();return e},validate:t}}function Wy(e){return typeof e==="object"&&e!==null&&ea in e&&e[ea]===!0&&"jsonSchema"in e&&"validate"in e}function yr(e){return e==null?vr({type:"object",properties:{},additionalProperties:!1}):Wy(e)?e:("~standard"in e)?e["~standard"].vendor==="zod"?Ut(e):Vy(e):e()}function Vy(e){return vr(()=>{if(!Gy(e))throw Error(`Standard schema vendor '${e["~standard"].vendor}' does not support JSON Schema conversion.`);return oa(e["~standard"].jsonSchema.input({target:"draft-07"}))},{validate:async(t)=>{let r=await e["~standard"].validate(t);return"value"in r?{success:!0,value:r.value}:{success:!1,error:new $e({value:t,cause:r.issues})}}})}function Gy(e){return e["~standard"].jsonSchema!=null}function Jy(e,t){var r;let n=(r=t==null?void 0:t.useReferences)!=null?r:!1;return vr(()=>qy(e,{$refStrategy:n?"root":"none"}),{validate:async(o)=>{let a=await e.safeParseAsync(o);return a.success?{success:!0,value:a.data}:{success:!1,error:a.error}}})}function Ky(e,t){var r;let n=(r=t==null?void 0:t.useReferences)!=null?r:!1;return vr(()=>oa(Fo(e,{target:"draft-7",io:"input",reused:n?"ref":"inline"})),{validate:async(o)=>{let a=await sn(e,o);return a.success?{success:!0,value:a.data}:{success:!1,error:a.error}}})}function Hy(e){return"_zod"in e}function Ut(e,t){if(Hy(e))return Ky(e,t);else return Jy(e,t)}async function dn({value:e,schema:t,context:r}){let n=await Zt({value:e,schema:t,context:r});if(!n.success)throw $e.wrap({value:e,cause:n.error,context:r});return n.value}async function Zt({value:e,schema:t,context:r}){let n=yr(t);try{if(n.validate==null)return{success:!0,value:e,rawValue:e};let o=await n.validate(e);if(o.success)return{success:!0,value:o.value,rawValue:e};return{success:!1,error:$e.wrap({value:e,cause:o.error,context:r}),rawValue:e}}catch(o){return{success:!1,error:$e.wrap({value:e,cause:o,context:r}),rawValue:e}}}async function Ye({text:e,schema:t}){try{let r=oy(e);if(t==null)return{success:!0,value:r,rawValue:r};return await Zt({value:r,schema:t})}catch(r){return{success:!1,error:Ln.isInstance(r)?r:new Ln({text:e,cause:r}),rawValue:void 0}}}async function aa(e){if(typeof e==="function")e=e();return Promise.resolve(e)}var cp="AI_SerializationError",up=`vercel.ai.error.${cp}`,Yy=Symbol.for(up),Gd,Jd,d0=class extends(Jd=k,Gd=Yy,Jd){constructor({message:e="Failed to serialize value.",cause:t}={}){super({name:cp,message:e,cause:t});this[Gd]=!0}static isInstance(e){return k.hasMarker(e,up)}};var eb=Object.defineProperty,tb=(e,t)=>{for(var r in t)eb(e,r,{get:t[r],enumerable:!0})},rb="AI_InvalidArgumentError",nb=`vercel.ai.error.${rb}`,ob=Symbol.for(nb),ab;ab=ob;var sb="AI_InvalidStreamPartError",ib=`vercel.ai.error.${sb}`,lb=Symbol.for(ib),cb;cb=lb;var ub="AI_InvalidToolApprovalError",db=`vercel.ai.error.${ub}`,pb=Symbol.for(db),fb;fb=pb;var mb="AI_InvalidToolApprovalSignatureError",hb=`vercel.ai.error.${mb}`,gb=Symbol.for(hb),vb;vb=gb;var yb="AI_InvalidToolInputError",bb=`vercel.ai.error.${yb}`,wb=Symbol.for(bb),xb;xb=wb;var _b="AI_ToolCallNotFoundForApprovalError",Sb=`vercel.ai.error.${_b}`,Tb=Symbol.for(Sb),Ib;Ib=Tb;var Eb="AI_MissingToolResultsError",kb=`vercel.ai.error.${Eb}`,$b=Symbol.for(kb),Mb;Mb=$b;var Rb="AI_NoImageGeneratedError",Ab=`vercel.ai.error.${Rb}`,Cb=Symbol.for(Ab),Ob;Ob=Cb;var vp="AI_NoObjectGeneratedError",yp=`vercel.ai.error.${vp}`,Pb=Symbol.for(yp),bp,Qe=class extends k{constructor({message:e="No object generated.",cause:t,text:r,response:n,usage:o,finishReason:a}){super({name:vp,message:e,cause:t});this[bp]=!0,this.text=r,this.response=n,this.usage=o,this.finishReason=a}static isInstance(e){return k.hasMarker(e,yp)}};bp=Pb;var Nb="AI_NoOutputGeneratedError",zb=`vercel.ai.error.${Nb}`,jb=Symbol.for(zb),Db;Db=jb;var Ub="AI_NoSpeechGeneratedError",Zb=`vercel.ai.error.${Ub}`,Lb=Symbol.for(Zb),Fb;Fb=Lb;var Bb="AI_NoTranscriptGeneratedError",qb=`vercel.ai.error.${Bb}`,Wb=Symbol.for(qb),Vb;Vb=Wb;var Gb="AI_NoTranslationGeneratedError",Jb=`vercel.ai.error.${Gb}`,Kb=Symbol.for(Jb),Hb;Hb=Kb;var Yb="AI_NoVideoGeneratedError",Xb=`vercel.ai.error.${Yb}`,Qb=Symbol.for(Xb),ew;ew=Qb;var tw="AI_NoSuchToolError",rw=`vercel.ai.error.${tw}`,nw=Symbol.for(rw),ow;ow=nw;var aw="AI_ToolCallRepairError",sw=`vercel.ai.error.${aw}`,iw=Symbol.for(sw),lw;lw=iw;var wp="AI_UIMessageStreamError",xp=`vercel.ai.error.${wp}`,cw=Symbol.for(xp),_p,gt=class extends k{constructor({chunkType:e,chunkId:t,message:r}){super({name:wp,message:r});this[_p]=!0,this.chunkType=e,this.chunkId=t}static isInstance(e){return k.hasMarker(e,xp)}};_p=cw;var uw="AI_InvalidDataContentError",dw=`vercel.ai.error.${uw}`,pw=Symbol.for(dw),fw;fw=pw;var mw="AI_InvalidMessageRoleError",hw=`vercel.ai.error.${mw}`,gw=Symbol.for(hw),vw;vw=gw;var Sp="AI_MessageConversionError",Tp=`vercel.ai.error.${Sp}`,yw=Symbol.for(Tp),Ip,bw=class extends k{constructor({originalMessage:e,message:t}){super({name:Sp,message:t});this[Ip]=!0,this.originalMessage=e}static isInstance(e){return k.hasMarker(e,Tp)}};Ip=yw;var ww="AI_RetryError",xw=`vercel.ai.error.${ww}`,_w=Symbol.for(xw),Sw;Sw=_w;var Tw="7.0.68",Iw=async({url:e,maxBytes:t,abortSignal:r})=>{var n;let o=e.toString();try{let a=Dt({},`ai-sdk/${Tw}`,rp()),s=await ep({url:o,headers:a,abortSignal:r});if(!s.ok)throw await cn(s),new oe({url:o,statusCode:s.status,statusText:s.statusText});return{data:await tp({response:s,url:o,maxBytes:t!=null?t:na}),mediaType:(n=s.headers.get("content-type"))!=null?n:void 0}}catch(a){if(oe.isInstance(a))throw a;throw new oe({url:o,cause:a})}};function Ep(e,t){if(e===void 0&&t===void 0)return;if(e===void 0)return t;if(t===void 0)return e;let r={...e};for(let n in t){if(n==="__proto__"||n==="constructor"||n==="prototype")continue;if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n];if(o===void 0)continue;let a=n in e?e[n]:void 0,s=o!==null&&typeof o==="object"&&!Array.isArray(o)&&!(o instanceof Date)&&!(o instanceof RegExp),i=a!==null&&a!==void 0&&typeof a==="object"&&!Array.isArray(a)&&!(a instanceof Date)&&!(a instanceof RegExp);if(s&&i)r[n]=Ep(a,o);else r[n]=o}}return r}async function dp({toolCallId:e,input:t,output:r,tool:n,errorMode:o}){if(o==="text")return{type:"error-text",value:Qt(r)};else if(o==="json")return{type:"error-json",value:pp(r)};if(n==null?void 0:n.toModelOutput)return await n.toModelOutput({toolCallId:e,input:t,output:r});return typeof r==="string"?{type:"text",value:r}:{type:"json",value:pp(r)}}function pp(e){return e===void 0?null:e}var l={array:Vo,boolean:Ed,custom:Dd,discriminatedUnion:Cd,enum:Jo,instanceof:Ud,lazy:jd,literal:Pd,looseObject:Rd,never:Wo,null:kd,number:Id,object:Md,record:Od,string:qo,union:Go,unknown:hr},vt=l.lazy(()=>l.union([l.null(),l.string(),l.number(),l.boolean(),l.record(l.string(),vt.optional()),l.array(vt)])),S=l.record(l.string(),l.record(l.string(),vt.optional())),xr=l.union([l.string(),l.instanceof(Uint8Array),l.instanceof(ArrayBuffer),l.custom(np,{message:"Must be a Buffer"})]),da=l.record(l.string(),l.string()),kp=l.object({type:l.literal("text"),text:l.string(),providerOptions:S.optional()}),Ew=l.object({type:l.literal("image"),image:l.union([xr,l.instanceof(URL),da]),mediaType:l.string().optional(),providerOptions:S.optional()}),$p=l.discriminatedUnion("type",[l.object({type:l.literal("data"),data:xr}),l.object({type:l.literal("url"),url:l.instanceof(URL)}),l.object({type:l.literal("reference"),reference:da}),l.object({type:l.literal("text"),text:l.string()})]),kw=l.discriminatedUnion("type",[l.object({type:l.literal("data"),data:xr}),l.object({type:l.literal("url"),url:l.instanceof(URL)})]),Mp=l.object({type:l.literal("file"),data:l.union([$p,xr,l.instanceof(URL),da]),filename:l.string().optional(),mediaType:l.string(),providerOptions:S.optional()}),$w=l.object({type:l.literal("reasoning"),text:l.string(),providerOptions:S.optional()}),Mw=l.object({type:l.literal("custom"),kind:l.string().transform((e)=>e),providerOptions:S.optional()}),Rw=l.object({type:l.literal("reasoning-file"),data:l.union([kw,xr,l.instanceof(URL)]),mediaType:l.string(),providerOptions:S.optional()}),Aw=l.object({type:l.literal("tool-call"),toolCallId:l.string(),toolName:l.string(),input:l.unknown(),providerOptions:S.optional(),providerExecuted:l.boolean().optional()}),Cw=l.discriminatedUnion("type",[l.object({type:l.literal("text"),value:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("json"),value:vt,providerOptions:S.optional()}),l.object({type:l.literal("execution-denied"),reason:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("error-text"),value:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("error-json"),value:vt,providerOptions:S.optional()}),l.object({type:l.literal("content"),value:l.array(l.union([l.object({type:l.literal("text"),text:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("file"),data:$p,mediaType:l.string(),filename:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("file-data"),data:l.string(),mediaType:l.string(),filename:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("file-url"),url:l.string(),mediaType:l.string().optional(),providerOptions:S.optional()}),l.object({type:l.literal("file-id"),fileId:l.union([l.string(),l.record(l.string(),l.string())]),providerOptions:S.optional()}),l.object({type:l.literal("file-reference"),providerReference:l.record(l.string(),l.string()),providerOptions:S.optional()}),l.object({type:l.literal("image-data"),data:l.string(),mediaType:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("image-url"),url:l.string(),providerOptions:S.optional()}),l.object({type:l.literal("image-file-id"),fileId:l.union([l.string(),l.record(l.string(),l.string())]),providerOptions:S.optional()}),l.object({type:l.literal("image-file-reference"),providerReference:l.record(l.string(),l.string()),providerOptions:S.optional()}),l.object({type:l.literal("custom"),providerOptions:S.optional()})]))})]),Rp=l.object({type:l.literal("tool-result"),toolCallId:l.string(),toolName:l.string(),output:Cw,providerOptions:S.optional()}),Ow=l.object({type:l.literal("tool-approval-request"),approvalId:l.string(),toolCallId:l.string()}),Pw=l.object({type:l.literal("tool-approval-response"),approvalId:l.string(),approved:l.boolean(),reason:l.string().optional()}),Nw=l.object({role:l.literal("system"),content:l.string(),providerOptions:S.optional()}),zw=l.object({role:l.literal("user"),content:l.union([l.string(),l.array(l.union([kp,Ew,Mp]))]),providerOptions:S.optional()}),jw=l.object({role:l.literal("assistant"),content:l.union([l.string(),l.array(l.union([kp,Mw,Mp,$w,Rw,Aw,Rp,Ow]))]),providerOptions:S.optional()}),Dw=l.object({role:l.literal("tool"),content:l.array(l.union([Rp,Pw])),providerOptions:S.optional()}),A0=l.union([Nw,zw,jw,Dw]);function fp(e,t){return e!=null&&Object.hasOwn(e,t)?e[t]:void 0}var Uw={};tb(Uw,{array:()=>Bw,choice:()=>qw,json:()=>Ww,object:()=>Fw,text:()=>Lw});function Zw(e){let t=["ROOT"],r=-1,n=null,o=0;function a(d){return d>="0"&&d<="9"||d>="A"&&d<="F"||d>="a"&&d<="f"}function s(d,p,f){switch(d){case'"':{r=p,t.pop(),t.push(f),t.push("INSIDE_STRING");break}case"f":case"t":case"n":{r=p,n=p,t.pop(),t.push(f),t.push("INSIDE_LITERAL");break}case"-":{t.pop(),t.push(f),t.push("INSIDE_NUMBER");break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":{r=p,t.pop(),t.push(f),t.push("INSIDE_NUMBER");break}case"{":{r=p,t.pop(),t.push(f),t.push("INSIDE_OBJECT_START");break}case"[":{r=p,t.pop(),t.push(f),t.push("INSIDE_ARRAY_START");break}}}function i(d,p){switch(d){case",":{t.pop(),t.push("INSIDE_OBJECT_AFTER_COMMA");break}case"}":{r=p,t.pop();break}}}function c(d,p){switch(d){case",":{t.pop(),t.push("INSIDE_ARRAY_AFTER_COMMA");break}case"]":{r=p,t.pop();break}}}for(let d=0;d<e.length;d++){let p=e[d];switch(t[t.length-1]){case"ROOT":s(p,d,"FINISH");break;case"INSIDE_OBJECT_START":{switch(p){case'"':{t.pop(),t.push("INSIDE_OBJECT_KEY");break}case"}":{r=d,t.pop();break}}break}case"INSIDE_OBJECT_AFTER_COMMA":{switch(p){case'"':{t.pop(),t.push("INSIDE_OBJECT_KEY");break}}break}case"INSIDE_OBJECT_KEY":{switch(p){case'"':{t.pop(),t.push("INSIDE_OBJECT_AFTER_KEY");break}}break}case"INSIDE_OBJECT_AFTER_KEY":{switch(p){case":":{t.pop(),t.push("INSIDE_OBJECT_BEFORE_VALUE");break}}break}case"INSIDE_OBJECT_BEFORE_VALUE":{s(p,d,"INSIDE_OBJECT_AFTER_VALUE");break}case"INSIDE_OBJECT_AFTER_VALUE":{i(p,d);break}case"INSIDE_STRING":{switch(p){case'"':{t.pop(),r=d;break}case"\\":{t.push("INSIDE_STRING_ESCAPE");break}default:r=d}break}case"INSIDE_ARRAY_START":{switch(p){case"]":{r=d,t.pop();break}default:{r=d,s(p,d,"INSIDE_ARRAY_AFTER_VALUE");break}}break}case"INSIDE_ARRAY_AFTER_VALUE":{switch(p){case",":{t.pop(),t.push("INSIDE_ARRAY_AFTER_COMMA");break}case"]":{r=d,t.pop();break}default:{r=d;break}}break}case"INSIDE_ARRAY_AFTER_COMMA":{s(p,d,"INSIDE_ARRAY_AFTER_VALUE");break}case"INSIDE_STRING_ESCAPE":{if(t.pop(),p==="u")o=0,t.push("INSIDE_STRING_UNICODE_ESCAPE");else r=d;break}case"INSIDE_STRING_UNICODE_ESCAPE":{if(a(p)){if(o++,o===4)t.pop(),r=d}break}case"INSIDE_NUMBER":{switch(p){case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":{r=d;break}case"e":case"E":case"-":case".":break;case",":{if(t.pop(),t[t.length-1]==="INSIDE_ARRAY_AFTER_VALUE")c(p,d);if(t[t.length-1]==="INSIDE_OBJECT_AFTER_VALUE")i(p,d);break}case"}":{if(t.pop(),t[t.length-1]==="INSIDE_OBJECT_AFTER_VALUE")i(p,d);break}case"]":{if(t.pop(),t[t.length-1]==="INSIDE_ARRAY_AFTER_VALUE")c(p,d);break}default:{t.pop();break}}break}case"INSIDE_LITERAL":{let m=e.substring(n,d+1);if(!"false".startsWith(m)&&!"true".startsWith(m)&&!"null".startsWith(m)){if(t.pop(),t[t.length-1]==="INSIDE_OBJECT_AFTER_VALUE")i(p,d);else if(t[t.length-1]==="INSIDE_ARRAY_AFTER_VALUE")c(p,d)}else r=d;break}}}let u=e.slice(0,r+1);for(let d=t.length-1;d>=0;d--)switch(t[d]){case"INSIDE_STRING":{u+='"';break}case"INSIDE_OBJECT_KEY":case"INSIDE_OBJECT_AFTER_KEY":case"INSIDE_OBJECT_AFTER_COMMA":case"INSIDE_OBJECT_START":case"INSIDE_OBJECT_BEFORE_VALUE":case"INSIDE_OBJECT_AFTER_VALUE":{u+="}";break}case"INSIDE_ARRAY_START":case"INSIDE_ARRAY_AFTER_COMMA":case"INSIDE_ARRAY_AFTER_VALUE":{u+="]";break}case"INSIDE_LITERAL":{let f=e.substring(n,e.length);if("true".startsWith(f))u+="true".slice(f.length);else if("false".startsWith(f))u+="false".slice(f.length);else if("null".startsWith(f))u+="null".slice(f.length)}}return u}async function _r(e){if(e===void 0)return{value:void 0,state:"undefined-input"};let t=await Ye({text:e});if(t.success)return{value:t.value,state:"successful-parse"};if(t=await Ye({text:Zw(e)}),t.success)return{value:t.value,state:"repaired-parse"};return{value:void 0,state:"failed-parse"}}var Lw=()=>({name:"text",responseFormat:Promise.resolve({type:"text"}),async parseCompleteOutput({text:e}){return e},async parsePartialOutput({text:e}){return{partial:e}},createElementStreamTransform(){return}}),Fw=({schema:e,name:t,description:r})=>{let n=yr(e);return{name:"object",responseFormat:aa(n.jsonSchema).then((o)=>({type:"json",schema:o,...t!=null&&{name:t},...r!=null&&{description:r}})),async parseCompleteOutput({text:o},a){let s=await Ye({text:o});if(!s.success)throw new Qe({message:"No object generated: could not parse the response.",cause:s.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});let i=await Zt({value:s.value,schema:n});if(!i.success)throw new Qe({message:"No object generated: response did not match schema.",cause:i.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});return i.value},async parsePartialOutput({text:o}){let a=await _r(o);switch(a.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":return{partial:a.value}}},createElementStreamTransform(){return}}},Bw=({element:e,name:t,description:r})=>{let n=yr(e);return{name:"array",responseFormat:aa(n.jsonSchema).then((o)=>{let{$schema:a,definitions:s,$defs:i,...c}=o;return{type:"json",schema:{$schema:"http://json-schema.org/draft-07/schema#",...s!=null&&{definitions:s},...i!=null&&{$defs:i},type:"object",properties:{elements:{type:"array",items:c}},required:["elements"],additionalProperties:!1},...t!=null&&{name:t},...r!=null&&{description:r}}}),async parseCompleteOutput({text:o},a){let s=await Ye({text:o});if(!s.success)throw new Qe({message:"No object generated: could not parse the response.",cause:s.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});let i=s.value;if(i==null||typeof i!=="object"||!("elements"in i)||!Array.isArray(i.elements))throw new Qe({message:"No object generated: response did not match schema.",cause:new $e({value:i,cause:"response must be an object with an elements array"}),text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});let c=[];for(let u of i.elements){let d=await Zt({value:u,schema:n});if(!d.success)throw new Qe({message:"No object generated: response did not match schema.",cause:d.error,text:o,response:a.response,usage:a.usage,finishReason:a.finishReason});c.push(d.value)}return c},async parsePartialOutput({text:o}){let a=await _r(o);switch(a.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":{let s=a.value;if(s==null||typeof s!=="object"||!("elements"in s)||!Array.isArray(s.elements))return;let i=a.state==="repaired-parse"&&s.elements.length>0?s.elements.slice(0,-1):s.elements,c=[];for(let u of i){let d=await Zt({value:u,schema:n});if(d.success)c.push(d.value)}return{partial:c}}}},createElementStreamTransform(){let o=0;return new TransformStream({transform({partialOutput:a},s){if(a!=null)for(;o<a.length;o++)s.enqueue(a[o])}})}}},qw=({options:e,name:t,description:r})=>({name:"choice",responseFormat:Promise.resolve({type:"json",schema:{$schema:"http://json-schema.org/draft-07/schema#",type:"object",properties:{result:{type:"string",enum:e}},required:["result"],additionalProperties:!1},...t!=null&&{name:t},...r!=null&&{description:r}}),async parseCompleteOutput({text:n},o){let a=await Ye({text:n});if(!a.success)throw new Qe({message:"No object generated: could not parse the response.",cause:a.error,text:n,response:o.response,usage:o.usage,finishReason:o.finishReason});let s=a.value;if(s==null||typeof s!=="object"||!("result"in s)||typeof s.result!=="string"||!e.includes(s.result))throw new Qe({message:"No object generated: response did not match schema.",cause:new $e({value:s,cause:"response must be an object that contains a choice value."}),text:n,response:o.response,usage:o.usage,finishReason:o.finishReason});return s.result},async parsePartialOutput({text:n}){let o=await _r(n);switch(o.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":{let a=o.value;if(a==null||typeof a!=="object"||!("result"in a)||typeof a.result!=="string")return;let s=e.filter((i)=>i.startsWith(a.result));if(o.state==="successful-parse")return s.includes(a.result)?{partial:a.result}:void 0;else return s.length===1?{partial:s[0]}:void 0}}},createElementStreamTransform(){return}}),Ww=({name:e,description:t}={})=>({name:"json",responseFormat:Promise.resolve({type:"json",...e!=null&&{name:e},...t!=null&&{description:t}}),async parseCompleteOutput({text:r},n){let o=await Ye({text:r});if(!o.success)throw new Qe({message:"No object generated: could not parse the response.",cause:o.error,text:r,response:n.response,usage:n.usage,finishReason:n.finishReason});return o.value},async parsePartialOutput({text:r}){let n=await _r(r);switch(n.state){case"failed-parse":case"undefined-input":return;case"repaired-parse":case"successful-parse":return n.value===void 0?void 0:{partial:n.value}}},createElementStreamTransform(){return}});var N0=G({prefix:"aitxt",size:24}),z0=G({prefix:"call",size:24});function Ap({stream:e}){return e.pipeThrough(new TransformStream({transform(t,r){if(t.type==="text-delta")r.enqueue(t.text)}}))}var D0=class extends TransformStream{constructor(){super({transform(e,t){t.enqueue(`data: ${JSON.stringify(e)}
|
|
135
135
|
|
|
136
136
|
`)},flush(e){e.enqueue(`data: [DONE]
|
|
137
137
|
|
|
@@ -152,7 +152,7 @@ Reason: ${(a=e.approval.reason)!=null?a:"denied"}`}}}function qp(e,t,r,n){switch
|
|
|
152
152
|
`).flatMap((p)=>Fx(p,n));return[i,...d.map((p)=>Lx(p,n,r.color)),c]}function Lx(e,t,r){let n=Bt(e,t),o=" ".repeat(Math.max(0,t-et(n)));return`${r}│${me.reset} ${n}${o} ${r}│${me.reset}`}function Fx(e,t){if(e.length===0)return[""];let r=[],n=e;while(et(n)>t){let o=Bx(n,t);r.push(n.slice(0,o).trimEnd()),n=n.slice(o).trimStart()}return r.push(n),r}function Bx(e,t){let n=Bt(e,t+1).lastIndexOf(" ");if(n>0)return n;return Bt(e,t).length}function qx(e){var t,r;let n="usage"in e?e.usage:void 0,o="messageMetadata"in e?(t=e.messageMetadata)==null?void 0:t.usage:void 0,a="messageMetadata"in e?(r=e.messageMetadata)==null?void 0:r.performance:void 0;return{totalTokens:pf(n!=null?n:o),outputTokens:Ia(n!=null?n:o),outputTokensPerSecond:a==null?void 0:a.outputTokensPerSecond}}function Wx(e){var t;let r=e;return{totalTokens:pf(r==null?void 0:r.usage),outputTokens:Ia(r==null?void 0:r.usage),outputTokensPerSecond:(t=r==null?void 0:r.performance)==null?void 0:t.outputTokensPerSecond}}function pf(e){let t=e==null?void 0:e.totalTokens;if(typeof t==="number")return t;if(typeof(t==null?void 0:t.total)==="number")return t.total;let r=Vx(e),n=Ia(e);if(r!=null&&n!=null)return r+n;return}function Vx(e){let t=e==null?void 0:e.inputTokens;if(typeof t==="number")return t;if(typeof(t==null?void 0:t.total)==="number")return t.total;return e==null?void 0:e.promptTokens}function Ia(e){let t=e==null?void 0:e.outputTokens;if(typeof t==="number")return t;if(typeof(t==null?void 0:t.total)==="number")return t.total;return e==null?void 0:e.completionTokens}function ff(e,t){if(e==null)return;let r=`${e.toLocaleString()} ${e===1?"token":"tokens"}`,n=Gx(e,t);return n==null?r:`${r} ${n}`}function Gx(e,t){if(t==null||t<=0||!Number.isFinite(t))return;return`${Math.round(e/t*100).toLocaleString()}%`}function Jx(e,t){if(t==="outputTokensPerSecond")return Kx(e.outputTokensPerSecond);return ff(e.outputTokens)}function Kx(e){if(e==null)return;return`${Hx(e)} tok/s`}function Hx(e){return Number.isInteger(e)?e.toLocaleString():e.toLocaleString(void 0,{maximumFractionDigits:1})}function _n(e){let t=e.toString("utf8");switch(t){case"\f":return{type:"ctrl-l"};case"\x03":return{type:"ctrl-c"};case"\x1B":return{type:"escape"};case"\r":case`
|
|
153
153
|
`:return{type:"enter"};case"":case"\b":return{type:"backspace"};case"\x1B[A":return{type:"up"};case"\x1B[B":return{type:"down"};case"\x1B[5~":return{type:"page-up"};case"\x1B[6~":return{type:"page-down"};default:if(t>=" "&&t!=="")return{type:"character",value:t};return{type:"ignore"}}}var Yx="outputTokensPerSecond",Xx=class{constructor(e){this.chatId=jt();var t,r,n,o;this.agent=e.agent,this.transport=e.transport,this.renderer=(t=e_(e))!=null?t:Qx(e),this.title=e.title,this.tools=(r=e.tools)!=null?r:"auto-collapsed",this.reasoning=(n=e.reasoning)!=null?n:"auto-collapsed",this.responseStatistics=(o=e.responseStatistics)!=null?o:Yx,this.contextSize=e.contextSize,this.sandbox=e.sandbox}async run(){let e=this.title,t=[],r=0,n=()=>`message-${++r}`,o,a=!1,s=!1;while(!0){if(!s){if(o==null){if(!this.renderer.readPrompt){if(a)return;throw Error("No prompt was provided and the renderer does not support prompt input.")}try{o=await this.renderer.readPrompt({title:e})}catch(c){if(Hp(c))return;throw c}if(o==null)return}t.push(n_(n(),o)),a=!0}let i=await this.streamMessages([...t],n);try{let c=await this.renderer.renderStream(i,{title:e,submittedPrompt:o,continueSession:Boolean(this.renderer.readPrompt),tools:this.tools,reasoning:this.reasoning,responseStatistics:this.responseStatistics,contextSize:this.contextSize,waitForExit:!1});if(c&&c.parts.length>0){let u=o_(c);if(u.length>0){if(!this.renderer.readToolApproval)throw Error("Tool approval was requested, but the renderer does not support tool approval input.");for(let d of u){let p=await this.renderer.readToolApproval(d,{title:e});a_(c,d,p)}Gp(t,c,s),s=!0,o=void 0;continue}Gp(t,c,s)}}catch(c){if(Hp(c))return;throw c}s=!1,o=void 0}}async streamMessages(e,t){let r=new AbortController,n=()=>r.abort();if(this.transport)return{uiMessageStream:await this.transport.sendMessages({trigger:"submit-message",chatId:this.chatId,messageId:void 0,messages:e,abortSignal:r.signal}),message:ba(e),abort:n};let o=this.agent,a=await o.stream({prompt:await pn(e,{tools:o.tools}),abortSignal:r.signal,options:void 0,experimental_sandbox:this.sandbox});return{uiMessageStream:t_(a.fullStream,t,e),message:ba(e),abort:n}}};function Qx(e){return e.tools===void 0&&e.reasoning===void 0&&e.responseStatistics===void 0&&e.contextSize===void 0?new ya:new ya({tools:e.tools,reasoning:e.reasoning,responseStatistics:e.responseStatistics,contextSize:e.contextSize})}function e_(e){if(e.renderer)return e.renderer;if(!e.screen&&!e.userInput)return;return new ya({tools:e.tools,reasoning:e.reasoning,responseStatistics:e.responseStatistics,contextSize:e.contextSize,input:e.userInput,output:e.screen})}async function*t_(e,t,r=[]){var n,o;let a=new Set,s=new Set,i=new Set,c,u,d=!1;yield{type:"start",messageId:(o=(n=ba(r))==null?void 0:n.id)!=null?o:t()};for await(let p of e)switch(p.type){case"text-start":a.add(p.id),yield{type:"text-start",id:p.id,providerMetadata:p.providerMetadata};break;case"text-delta":if(!a.has(p.id))a.add(p.id),yield{type:"text-start",id:p.id,providerMetadata:p.providerMetadata};yield{type:"text-delta",id:p.id,delta:p.text,providerMetadata:p.providerMetadata};break;case"text-end":a.delete(p.id),yield{type:"text-end",id:p.id,providerMetadata:p.providerMetadata};break;case"reasoning-start":s.add(p.id),yield{type:"reasoning-start",id:p.id,providerMetadata:p.providerMetadata};break;case"reasoning-delta":if(!s.has(p.id))s.add(p.id),yield{type:"reasoning-start",id:p.id,providerMetadata:p.providerMetadata};yield{type:"reasoning-delta",id:p.id,delta:p.text,providerMetadata:p.providerMetadata};break;case"reasoning-end":s.delete(p.id),yield{type:"reasoning-end",id:p.id,providerMetadata:p.providerMetadata};break;case"tool-input-start":yield{type:"tool-input-start",toolCallId:p.id,toolName:p.toolName,providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic,title:p.title};break;case"tool-input-delta":yield{type:"tool-input-delta",toolCallId:p.id,inputTextDelta:p.delta};break;case"tool-call":i.add(p.toolCallId),yield{type:"tool-input-available",toolCallId:p.toolCallId,toolName:p.toolName,input:p.input,providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic,title:p.title};break;case"tool-approval-request":if(!i.has(p.toolCall.toolCallId))i.add(p.toolCall.toolCallId),yield{type:"tool-input-available",toolCallId:p.toolCall.toolCallId,toolName:p.toolCall.toolName,input:p.toolCall.input,providerExecuted:p.toolCall.providerExecuted,providerMetadata:p.toolCall.providerMetadata,toolMetadata:p.toolCall.toolMetadata,dynamic:p.toolCall.dynamic,title:p.toolCall.title};yield{type:"tool-approval-request",approvalId:p.approvalId,toolCallId:p.toolCall.toolCallId,isAutomatic:p.isAutomatic};break;case"tool-approval-response":yield{type:"tool-approval-response",approvalId:p.approvalId,approved:p.approved,reason:p.reason,providerExecuted:p.providerExecuted};break;case"tool-result":yield{type:"tool-output-available",toolCallId:p.toolCallId,output:p.output,providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic,preliminary:p.preliminary};break;case"tool-error":yield{type:"tool-output-error",toolCallId:p.toolCallId,errorText:Jp(p.error),providerExecuted:p.providerExecuted,providerMetadata:p.providerMetadata,toolMetadata:p.toolMetadata,dynamic:p.dynamic};break;case"tool-output-denied":yield{type:"tool-output-denied",toolCallId:p.toolCallId};break;case"source":if(p.sourceType==="url")yield{type:"source-url",sourceId:p.id,url:p.url,title:p.title,providerMetadata:p.providerMetadata};else yield{type:"source-document",sourceId:p.id,mediaType:p.mediaType,title:p.title,filename:p.filename,providerMetadata:p.providerMetadata};break;case"file":yield{type:"file",url:Kp(p.file.mediaType,p.file.base64),mediaType:p.file.mediaType,providerMetadata:p.providerMetadata};break;case"reasoning-file":yield{type:"reasoning-file",url:Kp(p.file.mediaType,p.file.base64),mediaType:p.file.mediaType,providerMetadata:p.providerMetadata};break;case"start-step":yield{type:"start-step"};break;case"finish-step":c=p.usage,u=p.performance,yield{type:"finish-step"};break;case"finish":yield*Vp(a,s),d=!0,yield{type:"finish",finishReason:p.finishReason,messageMetadata:r_(c!=null?c:p.totalUsage,u)};break;case"abort":yield{type:"abort",reason:p.reason};break;case"error":yield{type:"error",errorText:Jp(p.error)};break}if(!d)yield*Vp(a,s),yield{type:"finish"}}function r_(e,t){if((e==null?void 0:e.totalTokens)==null&&(e==null?void 0:e.outputTokens)==null&&(t==null?void 0:t.outputTokensPerSecond)==null)return;return{...(e==null?void 0:e.totalTokens)==null&&(e==null?void 0:e.outputTokens)==null?{}:{usage:{...e.totalTokens==null?{}:{totalTokens:e.totalTokens},...e.outputTokens==null?{}:{outputTokens:e.outputTokens}}},...(t==null?void 0:t.outputTokensPerSecond)==null?{}:{performance:{outputTokensPerSecond:t.outputTokensPerSecond}}}}function*Vp(e,t){for(let r of e)yield{type:"text-end",id:r};e.clear();for(let r of t)yield{type:"reasoning-end",id:r};t.clear()}function n_(e,t){return{id:e,role:"user",parts:[{type:"text",text:t}]}}function Gp(e,t,r){var n;if(r&&((n=e.at(-1))==null?void 0:n.role)==="assistant"){e[e.length-1]=t;return}e.push(t)}function ba(e){let t=e.at(-1);return(t==null?void 0:t.role)==="assistant"?t:void 0}function o_(e){let t=[];for(let[r,n]of e.parts.entries()){if(!ie(n)||n.state!=="approval-requested"||n.approval.isAutomatic===!0)continue;t.push({approvalId:n.approval.id,toolCallId:n.toolCallId,toolName:Xe(n),title:n.title,input:n.input,providerExecuted:n.providerExecuted,messageId:e.id,partIndex:r})}return t}function a_(e,t,r){let n=e.parts[t.partIndex];if(!n||!ie(n)||n.toolCallId!==t.toolCallId)throw Error(`Could not find tool approval request ${t.approvalId}.`);n.state="approval-responded",n.approval={id:t.approvalId,approved:r.approved,...r.reason?{reason:r.reason}:{}}}function Jp(e){if(e instanceof Error)return e.message;if(typeof e==="string")return e;return JSON.stringify(e)}function Kp(e,t){return`data:${e};base64,${t}`}function Hp(e){return e instanceof Error&&e.message==="Interrupted"}async function mf(e){await new Xx(e).run()}async function hf(e){if(e.prompt!==void 0)s_(e.prompt);await mf({title:`broods · ${e.agent.name}`,tools:"full",transport:new vf(e.client,e.agent)})}async function gf(e){let t=Ap({stream:yf(e.client.stream(e.agent,{input:e.prompt}),void 0,()=>{})});for await(let r of t)process.stdout.write(r);process.stdout.write(`
|
|
154
154
|
`)}async function s_(e){let t=process.stdin.listenerCount("data"),r=Date.now()+1e4;while(process.stdin.listenerCount("data")<=t){if(Date.now()>r)return;await new Promise((n)=>setTimeout(n,20))}process.stdin.emit("data",Buffer.from(e)),process.stdin.emit("data",Buffer.from("\r"))}class vf{client;agent;conversationKey=`tui-${jt()}`;sentApprovals=new Set;sentUserTurns=0;constructor(e,t){this.client=e;this.agent=t}async reconnectToStream(){return null}async sendMessages(e){let t=this.pendingEvents(await pn(e.messages));if(t.events.length===0)throw Error("Nothing new to send: the agent already saw this turn.");let r=this.client.stream(this.agent,{conversationKey:this.conversationKey,events:t.events});return Np({stream:yf(r,e.abortSignal,t.commit),originalMessages:e.messages,generateMessageId:jt,sendSources:!0})}pendingEvents(e){let t=[],r=[],n=0;for(let o of e){if(o.role==="user"){if(n+=1,n>this.sentUserTurns)t.push(o);continue}if(o.role!=="tool")continue;for(let a of o.content)if(a.type==="tool-approval-response"&&!this.sentApprovals.has(a.approvalId))r.push(a)}if(r.length>0)t.push({role:"tool",content:r});return{events:t,commit:()=>{this.sentUserTurns=n;for(let o of r)this.sentApprovals.add(o.approvalId)}}}}function yf(e,t,r){let n=!1,o=()=>void e.return(void 0);return new ReadableStream({pull:async function(a){let s=await Promise.race([e.next(),i_(t)]);if(t?.aborted){o(),a.close();return}if(!n)n=!0,r();if(s.done)a.close();else a.enqueue(s.value)},cancel:o})}function i_(e){return new Promise((t)=>{if(!e)return;let r=()=>t({done:!0,value:void 0});if(e.aborted)r();else e.addEventListener("abort",r,{once:!0})})}import{existsSync as bf}from"node:fs";import{mkdir as l_,readFile as c_,writeFile as u_}from"node:fs/promises";import{dirname as _f,join as Ea,resolve as d_,sep as ot}from"node:path";import{fileURLToPath as p_}from"node:url";var ka=Ea(_f(En),"update-check.json"),f_=86400000,m_="https://registry.npmjs.org/broods/latest",h_=2000;function $a(e,t){let r=xf(e),n=xf(t);for(let o=0;o<3;o+=1){let a=r[o]??0,s=n[o]??0;if(a!==s)return a>s}return!wf(e)&&wf(t)}async function Ma(e={}){let t=await y_(),r=e.maxAgeMs??f_;if(t&&Date.now()-t.checkedAt<r)return t.latest;let n=await g_();if(n===null)return t?.latest??null;return await b_({checkedAt:Date.now(),latest:n}),n}function Sf(e=d_(process.cwd()),t=p_(import.meta.url)){let r=`${ot}node_modules${ot}`,n=t.lastIndexOf(r),o=n===-1?null:t.slice(0,n),a=o===null?t.startsWith(`${e}${ot}`):e===o||e.startsWith(`${o}${ot}`),i=t.includes(`${ot}.bun${ot}install${ot}global${ot}`)||a&&v_(o??e)?"bun":"npm",c=i==="bun"?"add":"install";return{manager:i,global:!a,command:i,args:a?[c,"broods@latest"]:[c,"-g","broods@latest"]}}async function g_(){try{let e=await fetch(m_,{signal:AbortSignal.timeout(h_),headers:{accept:"application/json"}});if(!e.ok)return null;let t=await e.json();return typeof t.version==="string"?t.version:null}catch{return null}}function v_(e){return bf(Ea(e,"bun.lock"))||bf(Ea(e,"bun.lockb"))}function wf(e){return e.includes("-")}async function y_(){try{let e=JSON.parse(await c_(ka,"utf8"));if(typeof e.latest!=="string")return null;if(typeof e.checkedAt!=="number")return null;return{checkedAt:e.checkedAt,latest:e.latest}}catch{return null}}function xf(e){let[t]=e.trim().replace(/^v/,"").split("-");return(t??"").split(".").slice(0,3).map((r)=>Number.parseInt(r,10)||0)}async function b_(e){try{await l_(_f(ka),{recursive:!0}),await u_(ka,`${JSON.stringify(e)}
|
|
155
|
-
`,"utf8")}catch{}}var Tf={name:"broods",version:"0.17.
|
|
155
|
+
`,"utf8")}catch{}}var Tf={name:"broods",version:"0.17.4",description:"CLI + TypeScript SDK for the broods agent platform.",type:"module",license:"MIT",homepage:"https://github.com/beeblastco/broods#readme",repository:{type:"git",url:"git+https://github.com/beeblastco/broods.git",directory:"packages/broods"},bugs:{url:"https://github.com/beeblastco/broods/issues"},keywords:["agents","ai","sdk","cli","broods"],bin:{broods:"dist/cli/index.js"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./account":{types:"./dist/account.d.ts",import:"./dist/account.js"}},typesVersions:{"*":{account:["./dist/account.d.ts"]}},main:"./dist/index.js",types:"./dist/index.d.ts",files:["dist","README.md","LICENSE.md"],scripts:{build:"bun scripts/build.ts && rollup -c rollup.dts.config.mjs && rm -rf .dts-temp",check:"tsc --noEmit","pack:check":"bun run build && publint && attw --pack .",test:"bun test"},engines:{node:">=22.15"},dependencies:{esbuild:"^0.28.2"},peerDependencies:{ai:"^7.0.68"},devDependencies:{"@ai-sdk/tui":"^1.0.69","@arethetypeswrong/cli":"^0.18.5","@chat-adapter/discord":"^4.38.1","@chat-adapter/github":"^4.38.1","@chat-adapter/slack":"^4.38.1","@chat-adapter/telegram":"^4.38.1","@types/bun":"^1.3.14","@typescript/typescript6":"6.0.2",ai:"^7.0.68",publint:"^0.3.23",rollup:"^4.62.4","rollup-plugin-dts":"^6.5.1",typescript:"^7.0.2"}};var at=Tf.version,it="https://dashboard.broods.app",Jt="eu-west-1",k_=[{region:"eu-west-1",label:"eu-west-1 (Ireland)"},{region:"us-east-1",label:"us-east-1 (US East)"},{region:"ap-southeast-1",label:"ap-southeast-1 (Singapore)"}],ge=`Global options:
|
|
156
156
|
--project <name> Project name override (default: package name or folder)
|
|
157
157
|
--stage <name> Target stage override (BROODS_STAGE otherwise)
|
|
158
158
|
--base-url <url> broods API base URL for sync/env calls (default: discovered at login)
|
|
@@ -306,7 +306,7 @@ Only orgs where you are owner or admin can be selected from the CLI.`);return}if
|
|
|
306
306
|
${Ee("stage")}`);let s=te(),i=E(e,"--dashboard-url")??s.dashboardUrl??it,c=Ua(e),u=await Da(i),d=new ae({baseUrl:u.baseUrl,token:u.token});if(n){let v=await d.listStages(c.project);if(v.length===0){console.log(`${c.project} has no stages yet. \`broods dev\` creates Development.`);return}console.log(`Stages for ${c.project}:`);for(let _ of v)console.log($f(_,c.stage));return}if(o){let v=await d.listStages(c.project),_=r?v.find((C)=>Uf(C.name,r)):await At("Select stage",v,(C)=>$f(C,c.stage).trim());if(!_)throw Error(`${c.project} has no stage "${r}". Existing: ${v.map((C)=>C.name).join(", ")}. Create it with \`broods stage create ${r} --from ${c.stage}\`.`);let j=Cr("BROODS_STAGE");await Kt("BROODS_STAGE",_.name),console.log(`Stage: ${_.name} (wrote BROODS_STAGE)`),Ca("BROODS_STAGE",j),await Aa(d,{project:c.project,stage:_.name});return}let p=r??await pt("Stage name","staging");if(!p.trim())throw Error("Stage name is required.");let f=E(e,"--from"),m=await d.createStage(c.project,p,f);if(console.log(`Created stage ${m.stage.name} in ${c.project}${m.clonedFrom?` from ${m.clonedFrom}`:""}`),m.clonedFrom)console.log(` ${m.stage.agentCount} agent(s), ${m.stage.variableCount} env var(s) copied`);if(!we(e,"--use")){console.log(`Switch to it with \`broods stage use ${m.stage.name}\`.`);return}let y=Cr("BROODS_STAGE");await Kt("BROODS_STAGE",m.stage.name),console.log(`Stage: ${m.stage.name} (wrote BROODS_STAGE)`),Ca("BROODS_STAGE",y),await Aa(d,{project:c.project,stage:m.stage.name})}async function N_(e){let{manifest:t,config:r}=await Be({project:E(e,"--project"),stage:E(e,"--stage"),command:"dev"}),n=await ke(E(e,"--base-url")??r.baseUrl),a=await new ae({baseUrl:n.baseUrl,token:n.token}).getManifest(t.project,t.stage);Fr(Un(t,a?.manifest??null))}async function z_(e){let{manifest:t,config:r,resourceAliases:n,channels:o}=await Be({project:E(e,"--project"),stage:E(e,"--stage"),command:"deploy",useRuntimeStage:!1}),a=await ke(E(e,"--base-url")??r.baseUrl),i=await new ae({baseUrl:a.baseUrl,token:a.token}).putManifest(t,we(e,"--prune"),we(e,"--rotate-key"));await jr(t,i.ids,process.cwd(),n,i.deployment,o),await Wf(),await Ga(),console.log(`Synced ${i.manifest.resources.length} resources to ${t.project}/${t.stage}`),await jf(i.deployment),Zf(o,i),Df(i)}async function jf(e){if(!e)return;if(e.apiKey){await Kt("BROODS_API_KEY",e.apiKey),console.log(`Wrote BROODS_API_KEY (${e.keyHint}) to .env.local`);return}}function Df(e){let t=e.warnings?.missingEnv??[];if(t.length>0){J(`⚠ ${t.length} env var(s) referenced in agent config but not set: ${t.join(", ")}`);for(let n of t)console.log(` broods env set ${n}`)}let r=e.warnings?.missingPolicies??[];if(r.length>0)J(`⚠ ${r.length} policy ref(s) in agent config match no policy resource in this deploy and will be ignored at runtime: ${r.join(", ")}`)}async function j_(){let e=await Ma({maxAgeMs:0});if(e===null)throw Error("Could not reach the npm registry to check for a newer broods.");if(!$a(e,at)){console.log(`broods v${at} is already the newest release.`);return}let t=Sf();console.log(`Updating broods ${at} → ${e} ${t.global?"globally":"in this project"}`),console.log(`$ ${[t.command,...t.args].join(" ")}`),await new Promise((r,n)=>{let o=Nf(t.command,t.args,{stdio:"inherit"});o.on("error",n),o.on("exit",(a)=>{if(a===0){r();return}n(Error(`${t.command} exited with code ${a??"unknown"}`))})}),console.log(`broods ${e} installed.`)}async function Ef(){let e=await Ma();if(e===null||!$a(e,at))return;J(`broods ${e} is out, you are on ${at}. Run \`broods update\`.`)}async function D_(e){if(await Z_(e),we(e,"--once")){if(!process.env.BROODS_SUPPRESS_DEV_TARGET)await Rf(e),await Ef();let d=If.now();await G_(e),Rs(If.now()-d);return}let t=Pf(E_(),`broods-declined-${process.pid}.txt`),r={...process.env,BROODS_DECLINED_FILE:t,BROODS_SUPPRESS_DEV_TARGET:"1",BROODS_RELOAD_ENV:"1"};await Rf(e),await Ef(),await Mf(e,r);let n,o=!1,a=!1,s=await Af(),i=()=>{if(o){a=!0;return}o=!0,Af().then(async(d)=>{if(d===s)return;s=d,await Mf(e,r)}).catch((d)=>console.error(d instanceof Error?d.message:String(d))).finally(()=>{if(o=!1,a)a=!1,i()})},c=I_(H(process.cwd(),ce),{recursive:!0},(d,p)=>{if(!p||lS(p))return;clearTimeout(n),n=setTimeout(i,150)}),u=new AbortController;U_(e,u.signal),process.on("SIGINT",()=>{u.abort(),c.close(),process.exit(0)})}async function U_(e,t){let r;try{r=Fa()}catch{console.log("· live logs off — no runtime key found for this stage yet. Run `broods dev --once` after login to create or reconnect it.");return}let n,o;try{({project:n,stage:o}=await qa(e,r))}catch{return}let a=Ba(e);console.log(`· live logs [${a}+]${Wa(a)}. Full INFO/DEBUG history is in the dashboard.`);try{for await(let s of Ur({baseUrl:r.baseUrl,apiKey:r.apiKey,project:n,stage:o},{backfill:0,minLevel:a,signal:t}))console.log(Va(s))}catch(s){if(!t.aborted)console.error(`live logs: ${s instanceof Error?s.message:String(s)}`)}}async function Z_(e){await L_(),await F_(e)}async function L_(){let e=H(process.cwd(),ce);await za(H(e,Ce),{recursive:!0});let t=[];if(await Ka(e,t),t.length>0)return;await $n(H(e,"index.ts"),Gf(),!1),await $n(H(e,".gitignore"),`_generated
|
|
307
307
|
.cache
|
|
308
308
|
`,!1),console.log(`Created starter ${ce}/`)}async function F_(e){let t=H(process.cwd(),".env.local"),r=await Et(t),n=Vf(r),o=n.BROODS_STAGE;if(["BROODS_DASHBOARD_URL","BROODS_BASE_URL","BROODS_PROJECT","BROODS_REGION"].filter((y)=>n[y]===void 0).length===0&&o!==void 0)return;let s=n.BROODS_PROJECT===void 0,i=o===void 0,c=n.BROODS_REGION===void 0,u=te(),d=E(e,"--dashboard-url")??u.dashboardUrl??it,p=E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),f=E(e,"--stage")??lt()??"development",m=E(e,"--region")??process.env.BROODS_REGION??Jt;if(process.stdin.isTTY&&s){let y=await Da(d),v=new ae({baseUrl:y.baseUrl,token:y.token}),_=await B_(v,y),j=await q_(v,_);if(p=await V_(j,p),!p.trim())throw Error("Project name is required.")}if(process.stdin.isTTY&&i){if(f=await pt("Stage",f),!f.trim())throw Error("Stage is required.")}if(process.stdin.isTTY&&c)m=await At("Select service region",[...k_],(y)=>y.label).then((y)=>y.region);await Ja({dashboardUrl:d,baseUrl:u.baseUrl??Pa(d),project:p,stage:f,region:m,force:!1})}async function Da(e){try{return await ke()}catch(t){if(!process.stdin.isTTY)throw t;return J("No CLI login found. Starting browser login."),await Zn(e)}}async function B_(e,t){try{return await e.getOnboarding()}catch(r){if(!t.org)throw r;return J("CLI onboarding endpoint is not available yet; using the org from the current login."),{currentOrgId:t.org.id,orgs:[{id:t.org.id,name:t.org.name,slug:t.org.slug,role:"admin",accountStatus:"active"}],projects:[]}}}async function kf(e,t,r,n){let o=r.orgs.find((a)=>a.id===r.currentOrgId);if(!o)throw Error("Selected organization is not visible to this login");if(process.env.BROODS_TOKEN)J("BROODS_TOKEN is set, so the switch applies to this token only and was not stored.");else await Zr({...t,org:{id:o.id,name:o.name,slug:o.slug},...r.account?{account:{id:r.account.id,username:r.account.username}}:{}});console.log(`Org: ${Or(o)}`),console.log(`Projects: ${r.projects.length>0?r.projects.map((a)=>a.name).join(", "):"none yet"}`),await Aa(e,Ua(n))}async function Aa(e,t){let r;try{r=await e.getRuntimeKey(t.project,t.stage)}catch(o){J(`⚠ Could not read the runtime key for ${t.project}/${t.stage} (${o instanceof Error?o.message:String(o)}). `+"BROODS_API_KEY still points at the previous scope — run `broods whoami` to check it.");return}if(!r?.apiKey){J(`⚠ ${t.project}/${t.stage} is not synced here yet, so BROODS_API_KEY still points at the previous scope. Run \`broods dev\`.`);return}let n=Cr("BROODS_API_KEY");if(!n&&process.env.BROODS_API_KEY===r.apiKey)return;await Kt("BROODS_API_KEY",r.apiKey),console.log(`Wrote BROODS_API_KEY (${r.keyHint}) to .env.local`),Ca("BROODS_API_KEY",n)}function Ca(e,t){if(!t)return;J(`⚠ ${e} is exported in your shell, which wins over .env.local. Run \`unset ${e}\` or the next broods command keeps the old value.`)}function Or(e){let t=e.role==="owner"||e.role==="admin"?e.role:"member",r=e.plan?`, ${e.plan} plan`:"";return`${e.name} (${e.slug}, ${t}${r})`}function $f(e,t){let r=Uf(e.name,t)?"*":" ",n=e.deploymentRegion?`, ${e.deploymentRegion}`:"";return`${r} ${e.name} (${e.kind}${n}) — ${e.agentCount} agent(s), ${e.variableCount} env var(s)`}function Uf(e,t){return e.trim().toLowerCase()===t.trim().toLowerCase()}function Ua(e){return te(),{project:E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),stage:E(e,"--stage")??lt()??"development"}}async function q_(e,t){let r=t.orgs.filter((a)=>a.accountStatus==="active"),n={kind:"create",name:"New organization"},o=await At("Select organization",[...r,n],(a)=>("kind"in a)?"Create new organization":Or(a));if("kind"in o){let a=await pt("Organization name",Ht(process.cwd()));if(!a.trim())throw Error("Organization name is required.");return await e.createOnboardingOrg(a)}return o.id===t.currentOrgId?t:await e.selectOnboardingOrg(o.id)}function W_(e,t){return e.projects.find((n)=>n.name===t||n.slug===t)?.name??t}async function V_(e,t){if(e.projects.length===0)return pt("Project name",t);let r={kind:"create",name:W_(e,t),slug:""},n=[...e.projects,r],o=await At("Select project",n,(a)=>("kind"in a)&&a.kind==="create"?`Create new project (${a.name})`:`${a.name} (${a.slug})`);if("kind"in o&&o.kind==="create")return pt("New project name",o.name);return o.name}function Mf(e,t){return new Promise((r,n)=>{let o=process.argv[1]??"",a=Nf(process.execPath,[o,"dev","--once",...e],{stdio:"inherit",env:t});a.on("error",n),a.on("exit",(s,i)=>{if(s===0){r();return}n(Error(i?`Sync child exited from signal ${i}`:`Sync child exited with code ${s??"unknown"}`))})})}async function G_(e){let{manifest:t,config:r,resourceAliases:n,channels:o}=await Be({project:E(e,"--project"),stage:E(e,"--stage"),command:"dev"}),a=await ke(E(e,"--base-url")??r.baseUrl),s=new ae({baseUrl:a.baseUrl,token:a.token}),i=await s.getManifest(t.project,t.stage),c=Un(t,i?.manifest??null);Fr(c.filter((y)=>y.operation!=="delete")),await J_(s,t,Lf(a.baseUrl,a.token));let u=await s.putManifest(t,!1);await jr(t,u.ids,process.cwd(),n,u.deployment,o),await Wf(),await Ga();let d=await Y_(),p=c.filter((y)=>y.operation==="delete"),f=p.filter((y)=>!d.has(`${y.kind}:${y.name}`)),m=!1;if(f.length>0)if(J("⚠ These remote resources are no longer declared locally:"),Fr(f),await Ms(`Delete ${f.length} resource(s) from ${t.project}/${t.stage}?`))u=await s.putManifest(t,!0),await jr(t,u.ids,process.cwd(),n,u.deployment,o),await Q_(),m=!0;else await X_(f.map((y)=>`${y.kind}:${y.name}`));if(!m&&p.length>0){let y=p.map((v)=>`${v.kind}:${v.name}`).join(", ");J(`⚠ ${p.length} undeclared resource(s) kept remotely: ${y} — re-declare in code or run \`deploy --prune\` to remove.`)}return await jf(u.deployment),Zf(o,u),Df(u),u}function Zf(e,t){let r=t.deployment;if(!r||e.length===0)return;let n=new Na,o=new Map;for(let s of e){if(!t.ids.agents[s.agentName])continue;let i=o.get(s.type)??[];i.push(s.alias),o.set(s.type,i)}let a=r.stageKind===void 0||r.stageKind==="production";for(let[s,i]of o){let c=a?n.accountWebhookUrl(r.accountId,s):n.stageWebhookUrl(r.accountId,r.endpointId,s);console.log(`Channel ${i.join(", ")} (${s}): ${c}${s==="pancake"?"?secret=<PANCAKE_WEBHOOK_SECRET>":""}`)}}async function J_(e,t,r){let n=ps(t).filter((c)=>{let u=process.env[c];return!c.startsWith("BROODS_")&&u!==void 0&&u!==""});if(n.length===0)return;let o=await Za(),a=o[kn(r,t.project,t.stage)]??{},s=new Set((await e.listEnv(t.project,t.stage)).map((c)=>c.name)),i=n.filter((c)=>!s.has(c)||a[c]!==Oa(process.env[c]));if(i.length===0)return;await Promise.all(i.map((c)=>e.setEnv(t.project,t.stage,c,process.env[c])));for(let c of i)a[c]=Oa(process.env[c]);o[kn(r,t.project,t.stage)]=a,await La(o),Cs(i)}function Lf(e,t){return`${e}:${ja("sha256").update(t).digest("hex").slice(0,16)}`}function kn(e,t,r){return`${e}:${t}:${r}`}function Ff(){return H(S_(En),"env-sync.json")}function Oa(e){return ja("sha256").update(e).digest("hex")}async function Za(){let e=await Et(Ff());if(!e)return{};try{let t=JSON.parse(e);return t&&typeof t==="object"?t:{}}catch{return{}}}async function La(e){let t=Ff();await za(H(t,".."),{recursive:!0}),await st(t,`${JSON.stringify(e,null,2)}
|
|
309
|
-
`,"utf8")}async function K_(e,t,r,n,o){let a=await Za(),s=kn(e,t,r);a[s]={...a[s]
|
|
309
|
+
`,"utf8")}async function K_(e,t,r,n,o){let a=await Za(),s=kn(e,t,r);a[s]={...a[s],[n]:Oa(o)},await La(a)}async function H_(e,t,r,n){let o=await Za(),a=kn(e,t,r);if(!o[a]||!(n in o[a]))return;delete o[a][n],await La(o)}async function Rf(e){let t=te(),{manifest:r,config:n}=await Be({project:E(e,"--project"),stage:E(e,"--stage"),command:"dev"}),o=await ke(E(e,"--base-url")??n.baseUrl);As({project:r.project,stage:r.stage,dashboardUrl:E(e,"--dashboard-url")??t.dashboardUrl??o.dashboardUrl??n.dashboardUrl??it})}async function Y_(){let e=process.env.BROODS_DECLINED_FILE;if(!e)return new Set;let t=await Et(e);return new Set(t.split(/\r?\n/).map((r)=>r.trim()).filter(Boolean))}async function X_(e){let t=process.env.BROODS_DECLINED_FILE;if(!t||e.length===0)return;await st(t,`${e.join(`
|
|
310
310
|
`)}
|
|
311
311
|
`,{flag:"a"})}async function Q_(){let e=process.env.BROODS_DECLINED_FILE;if(!e)return;await st(e,"","utf8")}async function eS(e){let[t,r]=Rt(e);if(!t){console.log(Ee("env"));return}let n=t==="list"||t==="ls",o=t==="rm"||t==="remove",a=t==="get",s=t==="set"||o||a;if(!n&&!s)throw Error(`Unknown env subcommand: ${t}
|
|
312
312
|
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as O,b as R,c as L}from"./chunk-ce3yb3yz.js";import{A as _,B as U,C as B,D as H,E as K,F as P,G as j,H as G,I as F,J as z,K as Z,L as V,M as X,N as Y,O as J,P as Q,Q as ee,R as te,S as re,T as ne,d as v,e as k,p as S,q as A,r as M,s as h,t as W,u as w,v as E,w as D,x as T,y as q,z as N}from"./chunk-
|
|
1
|
+
import{a as O,b as R,c as L}from"./chunk-ce3yb3yz.js";import{A as _,B as U,C as B,D as H,E as K,F as P,G as j,H as G,I as F,J as z,K as Z,L as V,M as X,N as Y,O as J,P as Q,Q as ee,R as te,S as re,T as ne,d as v,e as k,p as S,q as A,r as M,s as h,t as W,u as w,v as E,w as D,x as T,y as q,z as N}from"./chunk-prg3eaft.js";import"./chunk-3cvxks4m.js";var a=500;function i(e){if(typeof e!=="object"||e===null)return!1;let t=e;if(t.type==="subscribe"){let r=t.stream;if(r!=="logs"&&r!=="traces")return!1;let n=t.backfill;if(n!==void 0&&(typeof n!=="number"||!Number.isSafeInteger(n)||n<0||n>500))return!1;if(t.liveOnly!==void 0&&typeof t.liveOnly!=="boolean")return!1;let s=t.minLevel;if(s!==void 0&&!o(s))return!1;return!0}if(t.type==="unsubscribe"){let r=t.stream;return r==="logs"||r==="traces"}return!1}function o(e){return e==="DEBUG"||e==="INFO"||e==="WARN"||e==="ERROR"}function p(e){return e==="task"||e==="cron"||e==="subtask"}export{R as BroodsAccountApiError,L as BroodsAccountClient,M as BroodsClient,W as BroodsWebSocketClient,S as DEFAULT_CORE_BASE_URL,A as IngressAcceptedError,a as MAX_OBSERVABILITY_BACKFILL,W as WebSocketClient,W as WebsocketClient,z as defineAgent,F as defineBroods,ee as defineCron,B as defineDiscordChannel,D as defineDiscordConnection,H as defineGitHubChannel,T as defineGitHubConnection,Z as defineHarness,K as definePancakeChannel,q as definePancakeConnection,Q as definePolicy,X as defineSandbox,Y as defineSkill,P as defineSlackChannel,N as defineSlackConnection,j as defineTelegramChannel,_ as defineTelegramConnection,J as defineTool,V as defineWorkspace,G as defineZaloChannel,U as defineZaloConnection,E as env,O as envPlaceholder,ne as isBroodsConfig,re as isConnectionDefinition,o as isLogLevel,i as isObservabilityClientMessage,te as isResource,p as isRootSpanKind,h as normalizeHttpServiceUrl,k as readSseStream,v as resolveRunEvents,w as toWebSocketBaseUrl};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "broods",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.4",
|
|
4
4
|
"description": "CLI + TypeScript SDK for the broods agent platform.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -60,20 +60,21 @@
|
|
|
60
60
|
"esbuild": "^0.28.2"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
|
-
"ai": "^7.0.
|
|
63
|
+
"ai": "^7.0.68"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@ai-sdk/tui": "^1.0.
|
|
66
|
+
"@ai-sdk/tui": "^1.0.69",
|
|
67
67
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
68
68
|
"@chat-adapter/discord": "^4.38.1",
|
|
69
69
|
"@chat-adapter/github": "^4.38.1",
|
|
70
70
|
"@chat-adapter/slack": "^4.38.1",
|
|
71
71
|
"@chat-adapter/telegram": "^4.38.1",
|
|
72
72
|
"@types/bun": "^1.3.14",
|
|
73
|
-
"
|
|
73
|
+
"@typescript/typescript6": "6.0.2",
|
|
74
|
+
"ai": "^7.0.68",
|
|
74
75
|
"publint": "^0.3.23",
|
|
75
76
|
"rollup": "^4.62.4",
|
|
76
77
|
"rollup-plugin-dts": "^6.5.1",
|
|
77
|
-
"typescript": "^
|
|
78
|
+
"typescript": "^7.0.2"
|
|
78
79
|
}
|
|
79
80
|
}
|