broods 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/account.d.ts CHANGED
@@ -307,6 +307,8 @@ interface AgentTelegramChannelConfig {
307
307
  webhookSecret?: string;
308
308
  allowedChannelIds?: string[];
309
309
  allowedUserIds?: string[];
310
+ /** Bot's @username, e.g. `tracy_bot`. Set it to answer only when the agent is mentioned. */
311
+ botUsername?: string;
310
312
  reactionEmoji?: string;
311
313
  trace?: "enabled" | "disabled";
312
314
  partition?: ChannelPartition;
package/dist/cli/index.js CHANGED
@@ -57,8 +57,8 @@ ${n.map((a)=>` ${zn(r?.[a]??a)}: ids.${e}[${JSON.stringify(a)}],`).join(`
57
57
  `)}
58
58
  }`}function zn(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)?e:JSON.stringify(e)}function ch(){return`// Generated by broods. Do not edit by hand.
59
59
  export type { AgentReference, ChannelReference, AgentRunInput, AgentRunResult, ResourceApi } from "broods";
60
- `}class ae{baseUrl;token;fetchImpl;constructor(e){this.baseUrl=ut(e.baseUrl),this.token=e.token,this.fetchImpl=e.fetch??fetch}async getManifest(e,t){let r=await this.request(e,t,"/manifest",{method:"GET"});if(r.status===404)return null;return await ve(r,"Fetch manifest failed"),await r.json()}async putManifest(e,t,r=!1){let n=await this.request(e.project,e.stage,"/manifest",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({manifest:e,prune:t,rotateRuntimeKey:r})});return await ve(n,"Sync manifest failed"),await n.json()}async getRuntimeKey(e,t){let r=await this.request(e,t,"/runtime-key",{method:"GET"});if(r.status===404)return null;await ve(r,"Fetch runtime key failed");let n=await r.json();if(!n.apiKey)throw Error("Fetch runtime key failed: response omitted apiKey");return{apiKey:n.apiKey,keyHint:n.keyHint??"",...n.endpointId?{endpointId:n.endpointId}:{},...n.projectSlug?{projectSlug:n.projectSlug}:{},...n.stageSlug?{stageSlug:n.stageSlug}:{}}}async setEnv(e,t,r,n){let o=await this.request(e,t,`/env/${encodeURIComponent(r)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:n})});await ve(o,"Set environment variable failed")}async listEnv(e,t){let r=await this.request(e,t,"/env",{method:"GET"});return await ve(r,"List environment variables failed"),(await r.json()).variables??[]}async getEnv(e,t,r){let n=await this.request(e,t,`/env/${encodeURIComponent(r)}`,{method:"GET"});if(n.status===404)return null;return await ve(n,"Read environment variable failed"),(await n.json()).value??null}async removeEnv(e,t,r){let n=await this.request(e,t,`/env/${encodeURIComponent(r)}`,{method:"DELETE"});await ve(n,"Remove environment variable failed")}async getOnboarding(){let e=await this.fetchImpl(`${this.baseUrl}/v1/account/onboarding`,{method:"GET",headers:{Authorization:`Bearer ${this.token}`}});return await ve(e,"Fetch CLI onboarding context failed"),await e.json()}async selectOnboardingOrg(e){let t=await this.fetchImpl(`${this.baseUrl}/v1/account/onboarding`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`,"Content-Type":"application/json"},body:JSON.stringify({orgId:e})});return await ve(t,"Select CLI org failed"),await t.json()}async listStages(e){let t=await this.fetchImpl(`${this.baseUrl}/v1/account/stages?project=${encodeURIComponent(e)}`,{method:"GET",headers:{Authorization:`Bearer ${this.token}`}});return $s(t),await ve(t,"List stages failed"),(await t.json()).stages??[]}async createStage(e,t,r){let n=await this.fetchImpl(`${this.baseUrl}/v1/account/stages`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`,"Content-Type":"application/json"},body:JSON.stringify({project:e,name:t,...r?{from:r}:{}})});return $s(n),await ve(n,"Create stage failed"),await n.json()}async createOnboardingOrg(e){let t=await this.fetchImpl(`${this.baseUrl}/v1/account/onboarding`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`,"Content-Type":"application/json"},body:JSON.stringify({createOrgName:e})});return await ve(t,"Create CLI org failed"),await t.json()}async request(e,t,r,n){let o=`${this.baseUrl}/v1/account/projects/${encodeURIComponent(e)}/stages/${encodeURIComponent(t)}${r}`;return await this.fetchImpl(o,{...n,headers:{Authorization:`Bearer ${this.token}`,...n.headers}})}}function Ln(e,t){let r=new Map((t?.resources??[]).map((u)=>[`${u.kind}:${u.name}`,u])),n=new Map(e.resources.map((u)=>[`${u.kind}:${u.name}`,u])),o=[],a=[],s=[];for(let[u,d]of n){let p=r.get(u);if(!p)a.push({key:u,resource:d});else if(Lr(jn(p))!==Lr(jn(d)))o.push({operation:"update",kind:d.kind,name:d.name})}for(let[u,d]of r)if(!n.has(u))s.push({key:u,resource:d});let i=new Set,c=new Set;for(let u of a){let d=s.find((p)=>!i.has(p.key)&&uh(u.resource.kind)&&u.resource.kind===p.resource.kind&&Lr(Es(u.resource))===Lr(Es(p.resource)));if(!d)continue;c.add(u.key),i.add(d.key),o.push({operation:"rename",kind:u.resource.kind,name:u.resource.name,previousName:d.resource.name})}for(let{key:u,resource:d}of a)if(!c.has(u))o.push({operation:"create",kind:d.kind,name:d.name});for(let{key:u,resource:d}of s)if(!i.has(u))o.push({operation:"delete",kind:d.kind,name:d.name});return o.sort((u,d)=>ks(u).localeCompare(ks(d)))}function jn(e){let t=Dn(e);if(e.kind!=="skill"&&e.kind!=="tool"&&e.kind!=="hook")return t;return{...t,config:Un(t.config)}}function Es(e){let t=jn(e),{name:r,...n}=t;return n}function uh(e){return e==="agent"||e==="workspace"||e==="sandbox"||e==="policy"}function ks(e){return`${{create:0,rename:1,update:2,delete:3}[e.operation]}:${e.kind}:${e.previousName??""}:${e.name}`}function Dn(e){if(Array.isArray(e))return e.map(Dn);if(e&&typeof e==="object"){let t=e;if(t.__beeblastEnv===!0&&typeof t.name==="string")return`\${${t.name}}`;return Object.fromEntries(Object.entries(t).map(([r,n])=>[r,Dn(n)]))}return e}function Un(e){if(Array.isArray(e))return e.map(Un);if(e&&typeof e==="object")return Object.fromEntries(Object.entries(e).flatMap(([t,r])=>{if(t==="contentBase64"||t==="bundle")return[];return[[t,Un(r)]]}));return e}function Lr(e){return JSON.stringify(Zn(e))}function Zn(e){if(Array.isArray(e))return e.map(Zn);if(e&&typeof e==="object")return Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,Zn(r)]));return e}function $s(e){if(e.status!==404)return;if((e.headers.get("Content-Type")??"").includes("application/json"))return;throw Error("This broods deployment has no /v1/account/stages route yet. Update the backend to use `broods stage`.")}async function ve(e,t){if(!e.ok)throw Error(`${t}: ${e.status} ${await e.text()}`)}var dh=1,ph=0;function fh(e,t,r,n){return`${Ms(e)}/v1/${encodeURIComponent(t)}/${encodeURIComponent(r)}/observability/ws?token=${encodeURIComponent(n)}`}function mh(e){if(typeof e!=="string")return null;try{let t=JSON.parse(e);return typeof t==="object"&&t!==null&&typeof t.type==="string"?t:null}catch{return null}}function hh(){let e=globalThis.WebSocket;if(!e)throw Error("WebSocket is not available in this environment.");return e}async function Rs(e,t,r=fetch){try{let n=await r(`${e.replace(/\/+$/,"")}/v1/internal/observability-scope`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},signal:AbortSignal.timeout(5000)});if(!n.ok)return null;let o=await n.json();if(typeof o?.projectSlug!=="string"||typeof o?.stageSlug!=="string"||o.projectSlug===""||o.stageSlug==="")return null;return o}catch{return null}}async function*Fr(e,t={}){let r=new Set,n=500;while(!t.signal?.aborted){try{for await(let o of gh(e,t)){let a=`${o.ts}|${o.eventType}|${o.message}`;if(r.has(a))continue;if(r.add(a),r.size>5000)r.delete(r.values().next().value);n=500,yield o}}catch(o){if(t.signal?.aborted)return;let a=o instanceof Error?o.message:String(o);if(/unauthorized|invalid websocket token|scope does not match/i.test(a))throw o}await vh(n,t.signal),n=Math.min(n*2,5000)}}async function*gh(e,t){let{baseUrl:r,apiKey:n,project:o,stage:a}=e,{backfill:s=0,minLevel:i,signal:c}=t,u=t.liveOnly??s<=0;if(c?.aborted)return;let d=fh(r,o,a,n),p=d.slice(0,d.indexOf("?")),f=hh(),m=[],y=null,v=!1,_=null,j=()=>{_?.(),_=null},C=new f(d),Z=()=>{if(C.readyState===dh||C.readyState===ph)C.close(1000,"client closed");c?.removeEventListener("abort",R)},R=()=>{v=!0,j(),Z()};c?.addEventListener("abort",R,{once:!0}),C.onopen=()=>{if(c?.aborted){Z();return}let P={type:"subscribe",stream:"logs",...s>0?{backfill:s}:{},...u?{liveOnly:!0}:{},...i!==void 0?{minLevel:i}:{}};C.send(JSON.stringify(P))},C.onmessage=(P)=>{let h=mh(P.data);if(!h)return;switch(h.type){case"backfill":if(h.stream==="logs"){for(let N of h.entries)m.push(N);j()}break;case"log":m.push(h.entry),j();break;case"error":y=Error(`Observability gateway error: ${h.error}`),v=!0,j();break;case"ready":break;default:break}},C.onerror=()=>{y=Error(`Cannot connect to the observability gateway at ${p}.`),v=!0,j()},C.onclose=(P)=>{if(!v){if(P.code!==1000)y=Error(P.reason?`Observability WebSocket closed: ${P.reason}`:`Observability WebSocket closed with code ${P.code}.`);v=!0,j()}};try{while(!0){if(m.length>0){yield m.shift();continue}if(y)throw y;if(v)return;await new Promise((P)=>{_=P})}}finally{Z()}}function vh(e,t){return new Promise((r)=>{if(t?.aborted)return r();let n=setTimeout(r,e);t?.addEventListener("abort",()=>{clearTimeout(n),r()},{once:!0})})}import{createServer as Eh}from"node:http";import{randomUUID as kh}from"node:crypto";import{spawn as $h}from"node:child_process";import{createInterface as er}from"node:readline/promises";import{stdin as Ge,stdout as Oe}from"node:process";function Qt(e,t,r={}){let n=`${t?"*":" "} ${e}`;return t?se(n,"\x1B[1m\x1B[36m",Mt(r)):n}function yh(e,t={}){let r=Mt(t),n=Sh(e.stage),o=n==="Development",a=se("▌",o?"\x1B[32m":"\x1B[33m",r),s=r?`${o?"\x1B[42m\x1B[30m\x1B[1m":"\x1B[43m\x1B[30m\x1B[1m"} ${n} \x1B[0m`:`[${n}]`,i=r?se("dashboard","\x1B[4m",r):"dashboard",c=`${e.dashboardUrl}?project=${encodeURIComponent(e.project)}&stage=${encodeURIComponent(e.stage)}`,u=se(c,"\x1B[2m\x1B[4m",r);return[`${a} Syncing ${n}: ${se(e.project,"",r)}`,`${a} ${s} ${e.stage} (${i})`,`${a} ${se("└─","\x1B[2m",r)} ${u}`].join(`
61
- `)}function bh(e,t={}){let r=(t.now??new Date).toTimeString().slice(0,8);return`${se("✔","\x1B[32m",Mt(t))} ${r} Resources ready! (${Ih(e)})`}function wh(e,t={}){let r=Mt(t),n=se("▌","\x1B[32m",r),o=se("↑","\x1B[32m",r);return`${n} ${o} Synced ${e.length} env var(s) from .env.local: ${e.join(", ")}`}function xh(e,t={}){let r=Mt(t);return e.map((n)=>{let o=Th(n.operation,r);if(n.operation==="rename"&&n.previousName)return` ${o} ${n.kind}:${n.previousName} -> ${n.name}`;return` ${o} ${n.kind}:${n.name}`})}function _h(e,t={}){return se(e,"\x1B[33m",Mt(t))}function As(e){console.error(bh(e))}function Cs(e){console.error(yh(e))}function Os(e){console.error(wh(e))}function Br(e){for(let t of xh(e))console.log(t)}function J(e){console.log(_h(e))}function Mt(e){if(e.color!==void 0)return e.color;if(Object.hasOwn(process.env,"NO_COLOR"))return!1;if(process.env.FORCE_COLOR&&process.env.FORCE_COLOR!=="0")return!0;return process.stderr.isTTY&&process.env.TERM!=="dumb"}function se(e,t,r){return r?`${t}${e}\x1B[0m`:e}function Sh(e){let t=e.trim().toLowerCase();if(t==="development")return"Development";if(t==="production")return"Production";return e.trim()}function Th(e,t){if(e==="create")return`[${se("+","\x1B[32m",t)}]`;if(e==="rename")return`[${se("~","\x1B[33m",t)}]`;if(e==="update")return`[${se("*","\x1B[36m",t)}]`;return`[${se("-","\x1B[31m",t)}]`}function Ih(e){if(e>=1000)return`${(e/1000).toFixed(2)}s`;return`${Math.max(e,0).toFixed(1)}ms`}var Mh=180000,Rh=new Set(["--base-url","--dashboard-url","--stage","--from","--level","--limit","--project","--region","-n"]);function Rt(e){let t=[];for(let r=0;r<e.length;r+=1){let n=e[r];if(n===void 0)continue;if(Rh.has(n)){r+=1;continue}if(n.startsWith("-"))continue;t.push(n)}return t}function E(e,t){let r=e.indexOf(t);return r>=0?e[r+1]:void 0}function we(e,t){return e.includes(t)}function dt(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}async function ke(e){te();let t=await Ps();if(!t)throw Error("Run `broods login` first, or set BROODS_TOKEN and BROODS_BASE_URL.");return{...t,...e?{baseUrl:ut(e)}:{}}}async function Ns(e){let t=er({input:Ge,output:Oe});try{let r=await t.question(`${e}: `);if(!r)throw Error(`${e} is required`);return r}finally{t.close()}}async function At(e,t){let r=er({input:Ge,output:Oe});try{let n=r.question(`${e}: `);if(t){if(Ge.isTTY&&Oe.isTTY)Oe.write("\x1B[90m");if(r.write(t),Ge.isTTY&&Oe.isTTY)Oe.write("\x1B[0m")}return(await n).trim()||t||""}finally{r.close()}}async function tr(e,t,r,n){if(t.length===0)throw Error(`${e}: no options available`);if(t.length===1)return t[0];let o=n!==void 0&&n>=0&&n<t.length?n:void 0;console.log(e),t.forEach((i,c)=>{console.log(Qt(`${c+1}. ${r(i)}`,c===o))});let a=o===void 0?`Choose 1-${t.length}: `:`Choose 1-${t.length} [${o+1}]: `,s=er({input:Ge,output:Oe});try{while(!0){let i=(await s.question(a)).trim();if(i===""&&o!==void 0)return t[o];let c=Number(i);if(Number.isInteger(c)&&c>=1&&c<=t.length)return t[c-1];console.log(`Enter a number from 1 to ${t.length}.`)}}finally{s.close()}}async function zs(e,t,r,n){console.log(e),t.forEach((s,i)=>{console.log(` ${i+1}. ${r(s)}`)});let o=t.length>0?`Choose 1-${t.length}, or `:"",a=er({input:Ge,output:Oe});try{let s=(await a.question(`${o}${n.hint} [${n.defaultValue}]: `)).trim();if(s==="")return n.defaultValue;let i=Number(s);if(Number.isInteger(i)&&i>=1&&i<=t.length)return t[i-1];return s}finally{a.close()}}async function Fn(e){if(!Ge.isTTY)return!1;let t=er({input:Ge,output:Oe});try{let r=(await t.question(`${e} [y/N] `)).trim().toLowerCase();return r==="y"||r==="yes"}finally{t.close()}}async function Bn(e){let t=kh(),{code:r,close:n}=await Ch(t);try{let o=r.callbackUrl,a=`${ut(e)}/cli-auth/start?`+new URLSearchParams({callback:o,state:t});await Ah(a),Nh(a),console.log(`Opening ${a}`);let s=await Oh(r.promise,Mh),i=await fetch(`${s.baseUrl}/v1/account/auth/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:s.code})});if(!i.ok)throw Error(`Login exchange failed: ${i.status} ${await i.text()}`);let c=await i.json(),u={baseUrl:s.baseUrl,dashboardUrl:ut(e),token:c.token,createdAt:new Date().toISOString(),...c.user?{user:c.user}:{},...c.org?{org:c.org}:{},...c.account?{account:c.account}:{}};return await qr(u),u}finally{n()}}async function Ah(e){let t=await fetch(e,{method:"GET",redirect:"manual"});if(t.status===404){let r=new URL(e);throw Error(`${r.origin} does not expose /cli-auth/start yet. Deploy the dashboard changes first, or use --dashboard-url http://localhost:3000 with a local dashboard dev server.`)}if(t.status>=500)throw Error(`Dashboard CLI auth route failed: ${t.status} ${await t.text()}`)}function Ch(e){return new Promise((t,r)=>{let n=Eh((c,u)=>{try{let d=new URL(c.url??"/","http://127.0.0.1"),p=d.searchParams.get("state"),f=d.searchParams.get("code"),m=d.searchParams.get("base_url");if(p!==e||!f){u.writeHead(400).end("Invalid broods login callback.");return}if(!m){u.writeHead(400).end("Login callback omitted base_url; update the dashboard deployment."),a(Error("Login callback did not advertise the API base URL (base_url). Deploy a dashboard build that includes the Convex-direct CLI auth flow."));return}u.writeHead(200,{"Content-Type":"text/plain"}).end("broods CLI login complete. You can close this tab."),o({code:f,baseUrl:ut(m)})}catch(d){a(d)}}),o,a,s=new Promise((c,u)=>{o=c,a=u}),i=Ph();n.on("error",(c)=>{if(!process.env.BROODS_LOGIN_PORT&&i!==0&&c.code==="EADDRINUSE"){n.listen(0,"127.0.0.1");return}r(c)}),n.listen(i,"127.0.0.1",()=>{let c=n.address();if(!c||typeof c==="string"){r(Error("Failed to allocate callback port"));return}t({code:{callbackUrl:`http://127.0.0.1:${c.port}/callback`,promise:s},close:()=>n.close()})})})}async function Oh(e,t){let r,n=new Promise((o,a)=>{r=setTimeout(()=>a(Error(`Timed out waiting for browser login to complete.
60
+ `}class ae{baseUrl;token;fetchImpl;constructor(e){this.baseUrl=ut(e.baseUrl),this.token=e.token,this.fetchImpl=e.fetch??fetch}async getManifest(e,t){let r=await this.request(e,t,"/manifest",{method:"GET"});if(r.status===404)return null;return await ve(r,"Fetch manifest failed"),await r.json()}async putManifest(e,t,r=!1){let n=await this.request(e.project,e.stage,"/manifest",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({manifest:e,prune:t,rotateRuntimeKey:r})});return await ve(n,"Sync manifest failed"),await n.json()}async getRuntimeKey(e,t){let r=await this.request(e,t,"/runtime-key",{method:"GET"});if(r.status===404)return null;await ve(r,"Fetch runtime key failed");let n=await r.json();if(!n.apiKey)throw Error("Fetch runtime key failed: response omitted apiKey");return{apiKey:n.apiKey,keyHint:n.keyHint??"",...n.endpointId?{endpointId:n.endpointId}:{},...n.projectSlug?{projectSlug:n.projectSlug}:{},...n.stageSlug?{stageSlug:n.stageSlug}:{}}}async setEnv(e,t,r,n){let o=await this.request(e,t,`/env/${encodeURIComponent(r)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:n})});await ve(o,"Set environment variable failed")}async listEnv(e,t){let r=await this.request(e,t,"/env",{method:"GET"});return await ve(r,"List environment variables failed"),(await r.json()).variables??[]}async getEnv(e,t,r){let n=await this.request(e,t,`/env/${encodeURIComponent(r)}`,{method:"GET"});if(n.status===404)return null;return await ve(n,"Read environment variable failed"),(await n.json()).value??null}async removeEnv(e,t,r){let n=await this.request(e,t,`/env/${encodeURIComponent(r)}`,{method:"DELETE"});await ve(n,"Remove environment variable failed")}async getOnboarding(){let e=await this.fetchImpl(`${this.baseUrl}/v1/account/onboarding`,{method:"GET",headers:{Authorization:`Bearer ${this.token}`}});return await ve(e,"Fetch CLI onboarding context failed"),await e.json()}async selectOnboardingOrg(e){let t=await this.fetchImpl(`${this.baseUrl}/v1/account/onboarding`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`,"Content-Type":"application/json"},body:JSON.stringify({orgId:e})});return await ve(t,"Select CLI org failed"),await t.json()}async listStages(e){let t=await this.fetchImpl(`${this.baseUrl}/v1/account/stages?project=${encodeURIComponent(e)}`,{method:"GET",headers:{Authorization:`Bearer ${this.token}`}});return $s(t),await ve(t,"List stages failed"),(await t.json()).stages??[]}async createStage(e,t,r){let n=await this.fetchImpl(`${this.baseUrl}/v1/account/stages`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`,"Content-Type":"application/json"},body:JSON.stringify({project:e,name:t,...r?{from:r}:{}})});return $s(n),await ve(n,"Create stage failed"),await n.json()}async createOnboardingOrg(e){let t=await this.fetchImpl(`${this.baseUrl}/v1/account/onboarding`,{method:"POST",headers:{Authorization:`Bearer ${this.token}`,"Content-Type":"application/json"},body:JSON.stringify({createOrgName:e})});return await ve(t,"Create CLI org failed"),await t.json()}async request(e,t,r,n){let o=`${this.baseUrl}/v1/account/projects/${encodeURIComponent(e)}/stages/${encodeURIComponent(t)}${r}`;return await this.fetchImpl(o,{...n,headers:{Authorization:`Bearer ${this.token}`,...n.headers}})}}function Ln(e,t){let r=new Map((t?.resources??[]).map((u)=>[`${u.kind}:${u.name}`,u])),n=new Map(e.resources.map((u)=>[`${u.kind}:${u.name}`,u])),o=[],a=[],s=[];for(let[u,d]of n){let p=r.get(u);if(!p)a.push({key:u,resource:d});else if(Lr(jn(p))!==Lr(jn(d)))o.push({operation:"update",kind:d.kind,name:d.name})}for(let[u,d]of r)if(!n.has(u))s.push({key:u,resource:d});let i=new Set,c=new Set;for(let u of a){let d=s.find((p)=>!i.has(p.key)&&uh(u.resource.kind)&&u.resource.kind===p.resource.kind&&Lr(Es(u.resource))===Lr(Es(p.resource)));if(!d)continue;c.add(u.key),i.add(d.key),o.push({operation:"rename",kind:u.resource.kind,name:u.resource.name,previousName:d.resource.name})}for(let{key:u,resource:d}of a)if(!c.has(u))o.push({operation:"create",kind:d.kind,name:d.name});for(let{key:u,resource:d}of s)if(!i.has(u))o.push({operation:"delete",kind:d.kind,name:d.name});return o.sort((u,d)=>ks(u).localeCompare(ks(d)))}function jn(e){let t=Dn(e);if(e.kind!=="skill"&&e.kind!=="tool"&&e.kind!=="hook")return t;return{...t,config:Un(t.config)}}function Es(e){let t=jn(e),{name:r,...n}=t;return n}function uh(e){return e==="agent"||e==="workspace"||e==="sandbox"||e==="policy"}function ks(e){return`${{create:0,rename:1,update:2,delete:3}[e.operation]}:${e.kind}:${e.previousName??""}:${e.name}`}function Dn(e){if(Array.isArray(e))return e.map(Dn);if(e&&typeof e==="object"){let t=e;if(t.__beeblastEnv===!0&&typeof t.name==="string")return`\${${t.name}}`;return Object.fromEntries(Object.entries(t).map(([r,n])=>[r,Dn(n)]))}return e}function Un(e){if(Array.isArray(e))return e.map(Un);if(e&&typeof e==="object")return Object.fromEntries(Object.entries(e).flatMap(([t,r])=>{if(t==="contentBase64"||t==="bundle")return[];return[[t,Un(r)]]}));return e}function Lr(e){return JSON.stringify(Zn(e))}function Zn(e){if(Array.isArray(e))return e.map(Zn);if(e&&typeof e==="object")return Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,Zn(r)]));return e}function $s(e){if(e.status!==404)return;if((e.headers.get("Content-Type")??"").includes("application/json"))return;throw Error("This broods deployment has no /v1/account/stages route yet. Update the backend to use `broods stage`.")}async function ve(e,t){if(e.ok)return;let r=await e.text(),n=r;try{let o=JSON.parse(r);n=o.detail??o.error??r}catch{}throw Error(`${t}: ${e.status} ${n}`)}var dh=1,ph=0;function fh(e,t,r,n){return`${Ms(e)}/v1/${encodeURIComponent(t)}/${encodeURIComponent(r)}/observability/ws?token=${encodeURIComponent(n)}`}function mh(e){if(typeof e!=="string")return null;try{let t=JSON.parse(e);return typeof t==="object"&&t!==null&&typeof t.type==="string"?t:null}catch{return null}}function hh(){let e=globalThis.WebSocket;if(!e)throw Error("WebSocket is not available in this environment.");return e}async function Rs(e,t,r=fetch){try{let n=await r(`${e.replace(/\/+$/,"")}/v1/internal/observability-scope`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},signal:AbortSignal.timeout(5000)});if(!n.ok)return null;let o=await n.json();if(typeof o?.projectSlug!=="string"||typeof o?.stageSlug!=="string"||o.projectSlug===""||o.stageSlug==="")return null;return o}catch{return null}}async function*Fr(e,t={}){let r=new Set,n=500;while(!t.signal?.aborted){try{for await(let o of gh(e,t)){let a=`${o.ts}|${o.eventType}|${o.message}`;if(r.has(a))continue;if(r.add(a),r.size>5000)r.delete(r.values().next().value);n=500,yield o}}catch(o){if(t.signal?.aborted)return;let a=o instanceof Error?o.message:String(o);if(/unauthorized|invalid websocket token|scope does not match/i.test(a))throw o}await vh(n,t.signal),n=Math.min(n*2,5000)}}async function*gh(e,t){let{baseUrl:r,apiKey:n,project:o,stage:a}=e,{backfill:s=0,minLevel:i,signal:c}=t,u=t.liveOnly??s<=0;if(c?.aborted)return;let d=fh(r,o,a,n),p=d.slice(0,d.indexOf("?")),f=hh(),m=[],y=null,v=!1,_=null,j=()=>{_?.(),_=null},C=new f(d),Z=()=>{if(C.readyState===dh||C.readyState===ph)C.close(1000,"client closed");c?.removeEventListener("abort",R)},R=()=>{v=!0,j(),Z()};c?.addEventListener("abort",R,{once:!0}),C.onopen=()=>{if(c?.aborted){Z();return}let P={type:"subscribe",stream:"logs",...s>0?{backfill:s}:{},...u?{liveOnly:!0}:{},...i!==void 0?{minLevel:i}:{}};C.send(JSON.stringify(P))},C.onmessage=(P)=>{let h=mh(P.data);if(!h)return;switch(h.type){case"backfill":if(h.stream==="logs"){for(let N of h.entries)m.push(N);j()}break;case"log":m.push(h.entry),j();break;case"error":y=Error(`Observability gateway error: ${h.error}`),v=!0,j();break;case"ready":break;default:break}},C.onerror=()=>{y=Error(`Cannot connect to the observability gateway at ${p}.`),v=!0,j()},C.onclose=(P)=>{if(!v){if(P.code!==1000)y=Error(P.reason?`Observability WebSocket closed: ${P.reason}`:`Observability WebSocket closed with code ${P.code}.`);v=!0,j()}};try{while(!0){if(m.length>0){yield m.shift();continue}if(y)throw y;if(v)return;await new Promise((P)=>{_=P})}}finally{Z()}}function vh(e,t){return new Promise((r)=>{if(t?.aborted)return r();let n=setTimeout(r,e);t?.addEventListener("abort",()=>{clearTimeout(n),r()},{once:!0})})}import{createServer as Eh}from"node:http";import{randomUUID as kh}from"node:crypto";import{spawn as $h}from"node:child_process";import{createInterface as er}from"node:readline/promises";import{stdin as Ge,stdout as Oe}from"node:process";function Qt(e,t,r={}){let n=`${t?"*":" "} ${e}`;return t?se(n,"\x1B[1m\x1B[36m",Mt(r)):n}function yh(e,t={}){let r=Mt(t),n=Sh(e.stage),o=n==="Development",a=se("▌",o?"\x1B[32m":"\x1B[33m",r),s=r?`${o?"\x1B[42m\x1B[30m\x1B[1m":"\x1B[43m\x1B[30m\x1B[1m"} ${n} \x1B[0m`:`[${n}]`,i=r?se("dashboard","\x1B[4m",r):"dashboard",c=`${e.dashboardUrl}?project=${encodeURIComponent(e.project)}&stage=${encodeURIComponent(e.stage)}`,u=se(c,"\x1B[2m\x1B[4m",r);return[`${a} Syncing ${n}: ${se(e.project,"",r)}`,`${a} ${s} ${e.stage} (${i})`,`${a} ${se("└─","\x1B[2m",r)} ${u}`].join(`
61
+ `)}function bh(e,t={}){let r=(t.now??new Date).toTimeString().slice(0,8);return`${se("✔","\x1B[32m",Mt(t))} ${r} Resources ready! (${Ih(e)})`}function wh(e,t={}){let r=Mt(t),n=se("▌","\x1B[32m",r),o=se("↑","\x1B[32m",r);return`${n} ${o} Synced ${e.length} env var(s) from .env.local: ${e.join(", ")}`}function xh(e,t={}){let r=Mt(t);return e.map((n)=>{let o=Th(n.operation,r);if(n.operation==="rename"&&n.previousName)return` ${o} ${n.kind}:${n.previousName} -> ${n.name}`;return` ${o} ${n.kind}:${n.name}`})}function _h(e,t={}){return se(e,"\x1B[33m",Mt(t))}function As(e){console.error(bh(e))}function Cs(e){console.error(yh(e))}function Os(e){console.error(wh(e))}function Br(e){for(let t of xh(e))console.log(t)}function K(e){console.log(_h(e))}function Mt(e){if(e.color!==void 0)return e.color;if(Object.hasOwn(process.env,"NO_COLOR"))return!1;if(process.env.FORCE_COLOR&&process.env.FORCE_COLOR!=="0")return!0;return process.stderr.isTTY&&process.env.TERM!=="dumb"}function se(e,t,r){return r?`${t}${e}\x1B[0m`:e}function Sh(e){let t=e.trim().toLowerCase();if(t==="development")return"Development";if(t==="production")return"Production";return e.trim()}function Th(e,t){if(e==="create")return`[${se("+","\x1B[32m",t)}]`;if(e==="rename")return`[${se("~","\x1B[33m",t)}]`;if(e==="update")return`[${se("*","\x1B[36m",t)}]`;return`[${se("-","\x1B[31m",t)}]`}function Ih(e){if(e>=1000)return`${(e/1000).toFixed(2)}s`;return`${Math.max(e,0).toFixed(1)}ms`}var Mh=180000,Rh=new Set(["--base-url","--dashboard-url","--stage","--from","--level","--limit","--project","--region","-n"]);function Rt(e){let t=[];for(let r=0;r<e.length;r+=1){let n=e[r];if(n===void 0)continue;if(Rh.has(n)){r+=1;continue}if(n.startsWith("-"))continue;t.push(n)}return t}function E(e,t){let r=e.indexOf(t);return r>=0?e[r+1]:void 0}function we(e,t){return e.includes(t)}function dt(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}async function ke(e){te();let t=await Ps();if(!t)throw Error("Run `broods login` first, or set BROODS_TOKEN and BROODS_BASE_URL.");return{...t,...e?{baseUrl:ut(e)}:{}}}async function Ns(e){let t=er({input:Ge,output:Oe});try{let r=await t.question(`${e}: `);if(!r)throw Error(`${e} is required`);return r}finally{t.close()}}async function At(e,t){let r=er({input:Ge,output:Oe});try{let n=r.question(`${e}: `);if(t){if(Ge.isTTY&&Oe.isTTY)Oe.write("\x1B[90m");if(r.write(t),Ge.isTTY&&Oe.isTTY)Oe.write("\x1B[0m")}return(await n).trim()||t||""}finally{r.close()}}async function tr(e,t,r,n){if(t.length===0)throw Error(`${e}: no options available`);if(t.length===1)return t[0];let o=n!==void 0&&n>=0&&n<t.length?n:void 0;console.log(e),t.forEach((i,c)=>{console.log(Qt(`${c+1}. ${r(i)}`,c===o))});let a=o===void 0?`Choose 1-${t.length}: `:`Choose 1-${t.length} [${o+1}]: `,s=er({input:Ge,output:Oe});try{while(!0){let i=(await s.question(a)).trim();if(i===""&&o!==void 0)return t[o];let c=Number(i);if(Number.isInteger(c)&&c>=1&&c<=t.length)return t[c-1];console.log(`Enter a number from 1 to ${t.length}.`)}}finally{s.close()}}async function zs(e,t,r,n){console.log(e),t.forEach((s,i)=>{console.log(` ${i+1}. ${r(s)}`)});let o=t.length>0?`Choose 1-${t.length}, or `:"",a=er({input:Ge,output:Oe});try{let s=(await a.question(`${o}${n.hint} [${n.defaultValue}]: `)).trim();if(s==="")return n.defaultValue;let i=Number(s);if(Number.isInteger(i)&&i>=1&&i<=t.length)return t[i-1];return s}finally{a.close()}}async function Fn(e){if(!Ge.isTTY)return!1;let t=er({input:Ge,output:Oe});try{let r=(await t.question(`${e} [y/N] `)).trim().toLowerCase();return r==="y"||r==="yes"}finally{t.close()}}async function Bn(e){let t=kh(),{code:r,close:n}=await Ch(t);try{let o=r.callbackUrl,a=`${ut(e)}/cli-auth/start?`+new URLSearchParams({callback:o,state:t});await Ah(a),Nh(a),console.log(`Opening ${a}`);let s=await Oh(r.promise,Mh),i=await fetch(`${s.baseUrl}/v1/account/auth/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:s.code})});if(!i.ok)throw Error(`Login exchange failed: ${i.status} ${await i.text()}`);let c=await i.json(),u={baseUrl:s.baseUrl,dashboardUrl:ut(e),token:c.token,createdAt:new Date().toISOString(),...c.user?{user:c.user}:{},...c.org?{org:c.org}:{},...c.account?{account:c.account}:{}};return await qr(u),u}finally{n()}}async function Ah(e){let t=await fetch(e,{method:"GET",redirect:"manual"});if(t.status===404){let r=new URL(e);throw Error(`${r.origin} does not expose /cli-auth/start yet. Deploy the dashboard changes first, or use --dashboard-url http://localhost:3000 with a local dashboard dev server.`)}if(t.status>=500)throw Error(`Dashboard CLI auth route failed: ${t.status} ${await t.text()}`)}function Ch(e){return new Promise((t,r)=>{let n=Eh((c,u)=>{try{let d=new URL(c.url??"/","http://127.0.0.1"),p=d.searchParams.get("state"),f=d.searchParams.get("code"),m=d.searchParams.get("base_url");if(p!==e||!f){u.writeHead(400).end("Invalid broods login callback.");return}if(!m){u.writeHead(400).end("Login callback omitted base_url; update the dashboard deployment."),a(Error("Login callback did not advertise the API base URL (base_url). Deploy a dashboard build that includes the Convex-direct CLI auth flow."));return}u.writeHead(200,{"Content-Type":"text/plain"}).end("broods CLI login complete. You can close this tab."),o({code:f,baseUrl:ut(m)})}catch(d){a(d)}}),o,a,s=new Promise((c,u)=>{o=c,a=u}),i=Ph();n.on("error",(c)=>{if(!process.env.BROODS_LOGIN_PORT&&i!==0&&c.code==="EADDRINUSE"){n.listen(0,"127.0.0.1");return}r(c)}),n.listen(i,"127.0.0.1",()=>{let c=n.address();if(!c||typeof c==="string"){r(Error("Failed to allocate callback port"));return}t({code:{callbackUrl:`http://127.0.0.1:${c.port}/callback`,promise:s},close:()=>n.close()})})})}async function Oh(e,t){let r,n=new Promise((o,a)=>{r=setTimeout(()=>a(Error(`Timed out waiting for browser login to complete.
62
62
  Check the browser tab and the dashboard logs for an error. If the browser shows
63
63
  404 on /cli-auth/start, deploy the dashboard build that includes CLI auth or pass
64
64
  --dashboard-url for the environment you deployed. Other common causes are missing
@@ -135,7 +135,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
135
135
 
136
136
  `)},flush(e){e.enqueue(`data: [DONE]
137
137
 
138
- `)}})}};function Kw({originalMessages:e,responseMessageId:t}){if(e==null)return;let r=e[e.length-1];return(r==null?void 0:r.role)==="assistant"?r.id:typeof t==="function"?t():t}var _r=l.record(l.string(),gt.optional()),J0=pn(()=>Ut(l.union([l.looseObject({type:l.literal("text-start"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("text-delta"),id:l.string(),delta:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("text-end"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("error"),errorText:l.string()}),l.looseObject({type:l.literal("tool-input-start"),toolCallId:l.string(),toolName:l.string(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),title:l.string().optional()}),l.looseObject({type:l.literal("tool-input-delta"),toolCallId:l.string(),inputTextDelta:l.string()}),l.looseObject({type:l.literal("tool-input-available"),toolCallId:l.string(),toolName:l.string(),input:l.unknown(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),title:l.string().optional()}),l.looseObject({type:l.literal("tool-input-error"),toolCallId:l.string(),toolName:l.string(),input:l.unknown(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),errorText:l.string(),title:l.string().optional()}),l.looseObject({type:l.literal("tool-approval-request"),approvalId:l.string(),toolCallId:l.string(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}),l.looseObject({type:l.literal("tool-approval-response"),approvalId:l.string(),approved:l.boolean(),reason:l.string().optional(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("tool-output-available"),toolCallId:l.string(),output:l.unknown(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),preliminary:l.boolean().optional()}),l.looseObject({type:l.literal("tool-output-error"),toolCallId:l.string(),errorText:l.string(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional()}),l.looseObject({type:l.literal("tool-output-denied"),toolCallId:l.string()}),l.looseObject({type:l.literal("reasoning-start"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("reasoning-delta"),id:l.string(),delta:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("reasoning-end"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("custom"),kind:l.string().transform((e)=>e),providerMetadata:S.optional()}),l.looseObject({type:l.literal("source-url"),sourceId:l.string(),url:l.string(),title:l.string().optional(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("source-document"),sourceId:l.string(),mediaType:l.string(),title:l.string(),filename:l.string().optional(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("file"),url:l.string(),mediaType:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("reasoning-file"),url:l.string(),mediaType:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.custom((e)=>typeof e==="string"&&e.startsWith("data-"),{message:'Type must start with "data-"'}),id:l.string().optional(),data:l.unknown(),transient:l.boolean().optional()}),l.looseObject({type:l.literal("start-step")}),l.looseObject({type:l.literal("finish-step")}),l.looseObject({type:l.literal("start"),messageId:l.string().optional(),messageMetadata:l.unknown().optional()}),l.looseObject({type:l.literal("finish"),finishReason:l.enum(["stop","length","content-filter","tool-calls","error","other"]).optional(),messageMetadata:l.unknown().optional()}),l.looseObject({type:l.literal("abort"),reason:l.string().optional()}),l.looseObject({type:l.literal("message-metadata"),messageMetadata:l.unknown()})])));function Hw(e){return e.type.startsWith("data-")}function Sr(){return Object.create(null)}function ca(e){return e.type.startsWith("data-")}function ua(e){return e.type==="text"}function yp(e){return e.type==="custom"}function da(e){return e.type==="file"}function bp(e){return e.type==="reasoning-file"}function wp(e){return e.type==="reasoning"}function pa(e){return e.type.startsWith("tool-")}function zp(e){return e.type==="dynamic-tool"}function le(e){return pa(e)||zp(e)}function fa(e){return e.type.split("-").slice(1).join("-")}function Qe(e){return zp(e)?e.toolName:fa(e)}function jp({lastMessage:e,messageId:t}){return{message:(e==null?void 0:e.role)==="assistant"?e:{id:t,metadata:void 0,role:"assistant",parts:[]},activeTextParts:Sr(),activeReasoningParts:Sr(),partialToolCalls:Sr()}}function Dp({stream:e,messageMetadataSchema:t,dataPartSchemas:r,runUpdateMessageJob:n,onError:o,onToolCall:a,onData:s}){return e.pipeThrough(new TransformStream({async transform(i,c){await n(async({state:u,write:d})=>{var p,f,m,y;function v(){let h=u.message.parts,N=h.length-1;while(N>=0&&h[N].type!=="step-start")N--;return h.slice(N+1)}function _(){return v().filter(le)}function j(h){let V=_().find((K)=>K.toolCallId===h);if(V==null){let K=u.message.parts;for(let M=K.length-1;M>=0;M--){let D=K[M];if(le(D)&&D.toolCallId===h){V=D;break}}}if(V==null)throw new ht({chunkType:"tool-invocation",chunkId:h,message:`No tool invocation found for tool call ID "${h}".`});return V}function C(h){let V=u.message.parts.filter(le).find((K)=>{var M;return((M=K.approval)==null?void 0:M.id)===h});if(V==null)throw new ht({chunkType:"tool-approval-response",chunkId:h,message:`No tool invocation found for approval ID "${h}".`});return V}function Z(h,N){var V;let K=N!=null?N:v().find((Y)=>pa(Y)&&Y.toolCallId===h.toolCallId),M=h,D=K;if(K!=null){if(K.state=h.state,D.input=M.input,D.output=M.output,D.errorText=M.errorText,D.rawInput=M.rawInput,D.preliminary=M.preliminary,h.title!==void 0)D.title=h.title;if(h.toolMetadata!==void 0)D.toolMetadata=h.toolMetadata;D.providerExecuted=(V=M.providerExecuted)!=null?V:K.providerExecuted;let Y=M.providerMetadata;if(Y!=null)if(h.state==="output-available"||h.state==="output-error"){let Ze=K;Ze.resultProviderMetadata=Y}else K.callProviderMetadata=Y}else u.message.parts.push({type:`tool-${h.toolName}`,toolCallId:h.toolCallId,state:h.state,title:h.title,...h.toolMetadata!==void 0?{toolMetadata:h.toolMetadata}:{},input:M.input,output:M.output,rawInput:M.rawInput,errorText:M.errorText,providerExecuted:M.providerExecuted,preliminary:M.preliminary,...M.providerMetadata!=null&&(h.state==="output-available"||h.state==="output-error")?{resultProviderMetadata:M.providerMetadata}:{},...M.providerMetadata!=null&&!(h.state==="output-available"||h.state==="output-error")?{callProviderMetadata:M.providerMetadata}:{}})}function R(h,N){var V,K;let M=N!=null?N:v().find((Ze)=>Ze.type==="dynamic-tool"&&Ze.toolCallId===h.toolCallId),D=h,Y=M;if(M!=null){if(M.state=h.state,Y.toolName=h.toolName,Y.input=D.input,Y.output=D.output,Y.errorText=D.errorText,Y.rawInput=(V=D.rawInput)!=null?V:Y.rawInput,Y.preliminary=D.preliminary,h.title!==void 0)Y.title=h.title;if(h.toolMetadata!==void 0)Y.toolMetadata=h.toolMetadata;Y.providerExecuted=(K=D.providerExecuted)!=null?K:M.providerExecuted;let Ze=D.providerMetadata;if(Ze!=null)if(h.state==="output-available"||h.state==="output-error"){let Xf=M;Xf.resultProviderMetadata=Ze}else M.callProviderMetadata=Ze}else u.message.parts.push({type:"dynamic-tool",toolName:h.toolName,toolCallId:h.toolCallId,state:h.state,input:D.input,output:D.output,errorText:D.errorText,preliminary:D.preliminary,providerExecuted:D.providerExecuted,title:h.title,...h.toolMetadata!==void 0?{toolMetadata:h.toolMetadata}:{},...D.providerMetadata!=null&&(h.state==="output-available"||h.state==="output-error")?{resultProviderMetadata:D.providerMetadata}:{},...D.providerMetadata!=null&&!(h.state==="output-available"||h.state==="output-error")?{callProviderMetadata:D.providerMetadata}:{}})}async function P(h){if(h!=null){let N=u.message.metadata!=null?Rp(u.message.metadata,h):h;if(t!=null)await fn({value:N,schema:t,context:{field:"message.metadata",entityId:u.message.id}});u.message.metadata=N}}switch(i.type){case"text-start":{let h={type:"text",text:"",providerMetadata:i.providerMetadata,state:"streaming"};u.activeTextParts[i.id]=h,u.message.parts.push(h),d();break}case"text-delta":{let h=u.activeTextParts[i.id];if(h==null)throw new ht({chunkType:"text-delta",chunkId:i.id,message:`Received text-delta for missing text part with ID "${i.id}". Ensure a "text-start" chunk is sent before any "text-delta" chunks.`});h.text+=i.delta,h.providerMetadata=(p=i.providerMetadata)!=null?p:h.providerMetadata,d();break}case"text-end":{let h=u.activeTextParts[i.id];if(h==null)throw new ht({chunkType:"text-end",chunkId:i.id,message:`Received text-end for missing text part with ID "${i.id}". Ensure a "text-start" chunk is sent before any "text-end" chunks.`});h.state="done",h.providerMetadata=(f=i.providerMetadata)!=null?f:h.providerMetadata,delete u.activeTextParts[i.id],d();break}case"custom":{let h={type:"custom",kind:i.kind,providerMetadata:i.providerMetadata};u.message.parts.push(h),d();break}case"reasoning-start":{let h={type:"reasoning",id:i.id,text:"",providerMetadata:i.providerMetadata,state:"streaming"};u.activeReasoningParts[i.id]=h,u.message.parts.push(h),d();break}case"reasoning-delta":{let h=u.activeReasoningParts[i.id];if(h==null)throw new ht({chunkType:"reasoning-delta",chunkId:i.id,message:`Received reasoning-delta for missing reasoning part with ID "${i.id}". Ensure a "reasoning-start" chunk is sent before any "reasoning-delta" chunks.`});h.text+=i.delta,h.providerMetadata=(m=i.providerMetadata)!=null?m:h.providerMetadata,d();break}case"reasoning-end":{let h=u.activeReasoningParts[i.id];if(h==null)throw new ht({chunkType:"reasoning-end",chunkId:i.id,message:`Received reasoning-end for missing reasoning part with ID "${i.id}". Ensure a "reasoning-start" chunk is sent before any "reasoning-end" chunks.`});h.providerMetadata=(y=i.providerMetadata)!=null?y:h.providerMetadata,h.state="done",delete u.activeReasoningParts[i.id],d();break}case"file":case"reasoning-file":{u.message.parts.push({type:i.type,mediaType:i.mediaType,url:i.url,...i.providerMetadata!=null?{providerMetadata:i.providerMetadata}:{}}),d();break}case"source-url":{u.message.parts.push({type:"source-url",sourceId:i.sourceId,url:i.url,title:i.title,providerMetadata:i.providerMetadata}),d();break}case"source-document":{u.message.parts.push({type:"source-document",sourceId:i.sourceId,mediaType:i.mediaType,title:i.title,filename:i.filename,providerMetadata:i.providerMetadata}),d();break}case"tool-input-start":{let h=v().filter(pa);if(u.partialToolCalls[i.toolCallId]={text:"",toolName:i.toolName,index:h.length,dynamic:i.dynamic,title:i.title,toolMetadata:i.toolMetadata},i.dynamic)R({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-streaming",input:void 0,providerExecuted:i.providerExecuted,title:i.title,toolMetadata:i.toolMetadata,providerMetadata:i.providerMetadata});else Z({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-streaming",input:void 0,providerExecuted:i.providerExecuted,title:i.title,toolMetadata:i.toolMetadata,providerMetadata:i.providerMetadata});d();break}case"tool-input-delta":{let h=u.partialToolCalls[i.toolCallId];if(h==null)throw new ht({chunkType:"tool-input-delta",chunkId:i.toolCallId,message:`Received tool-input-delta for missing tool call with ID "${i.toolCallId}". Ensure a "tool-input-start" chunk is sent before any "tool-input-delta" chunks.`});h.text+=i.inputTextDelta;let{value:N}=await Ir(h.text);if(h.dynamic)R({toolCallId:i.toolCallId,toolName:h.toolName,state:"input-streaming",input:N,title:h.title,toolMetadata:h.toolMetadata});else Z({toolCallId:i.toolCallId,toolName:h.toolName,state:"input-streaming",input:N,title:h.title,toolMetadata:h.toolMetadata});d();break}case"tool-input-available":{if(i.dynamic)R({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-available",input:i.input,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:i.title,toolMetadata:i.toolMetadata});else Z({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-available",input:i.input,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:i.title,toolMetadata:i.toolMetadata});if(d(),a&&!i.providerExecuted)await a({toolCall:i});break}case"tool-input-error":{let h=v().filter(le).find((V)=>V.toolCallId===i.toolCallId);if(h!=null?h.type==="dynamic-tool":!!i.dynamic)R({toolCallId:i.toolCallId,toolName:i.toolName,state:"output-error",input:i.input,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,toolMetadata:i.toolMetadata});else Z({toolCallId:i.toolCallId,toolName:i.toolName,state:"output-error",input:void 0,rawInput:i.input,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,toolMetadata:i.toolMetadata});d();break}case"tool-approval-request":{let h=j(i.toolCallId);h.state="approval-requested",h.approval={id:i.approvalId,...i.isAutomatic===!0?{isAutomatic:!0}:{},...i.signature!=null?{signature:i.signature}:{}},d();break}case"tool-approval-response":{let h=C(i.approvalId),N=h.approval==null?{id:i.approvalId}:h.approval;if(h.state="approval-responded",h.approval={id:i.approvalId,approved:i.approved,...i.reason!=null?{reason:i.reason}:{},...N.isAutomatic===!0?{isAutomatic:!0}:{},...N.signature!=null?{signature:N.signature}:{}},i.providerExecuted!=null)h.providerExecuted=i.providerExecuted;if(i.providerMetadata!=null)h.callProviderMetadata=i.providerMetadata;d();break}case"tool-output-denied":{let h=j(i.toolCallId);h.state="output-denied",d();break}case"tool-output-available":{let h=j(i.toolCallId);if(h.type==="dynamic-tool")R({toolCallId:i.toolCallId,toolName:h.toolName,state:"output-available",input:h.input,output:i.output,preliminary:i.preliminary,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);else Z({toolCallId:i.toolCallId,toolName:fa(h),state:"output-available",input:h.input,output:i.output,providerExecuted:i.providerExecuted,preliminary:i.preliminary,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);d();break}case"tool-output-error":{let h=j(i.toolCallId);if(h.type==="dynamic-tool")R({toolCallId:i.toolCallId,toolName:h.toolName,state:"output-error",input:h.input,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);else Z({toolCallId:i.toolCallId,toolName:fa(h),state:"output-error",input:h.input,rawInput:h.rawInput,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);d();break}case"start-step":{u.message.parts.push({type:"step-start"});break}case"finish-step":{u.activeTextParts=Sr(),u.activeReasoningParts=Sr();break}case"start":{if(i.messageId!=null)u.message.id=i.messageId;if(await P(i.messageMetadata),i.messageId!=null||i.messageMetadata!=null)d({updateStatus:!1});break}case"finish":{if(i.finishReason!=null)u.finishReason=i.finishReason;if(await P(i.messageMetadata),i.messageMetadata!=null)d();break}case"message-metadata":{if(await P(i.messageMetadata),i.messageMetadata!=null)d();break}case"error":{o==null||o(Error(i.errorText));break}default:if(Hw(i)){if((r==null?void 0:r[i.type])!=null){let V=u.message.parts.findIndex((M)=>("id"in M)&&("data"in M)&&M.id===i.id&&M.type===i.type),K=V>=0?V:u.message.parts.length;await fn({value:i.data,schema:r[i.type],context:{field:`message.parts[${K}].data`,entityName:i.type,entityId:i.id}})}let h=i;if(h.transient){s==null||s(h);break}let N=h.id!=null?u.message.parts.find((V)=>h.type===V.type&&h.id===V.id):void 0;if(N!=null)N.data=h.data;else u.message.parts.push(h);s==null||s(h),d()}}c.enqueue(i)})}}))}function Yw({messageId:e,originalMessages:t=[],onStepEnd:r,onStepFinish:n,onEnd:o,onFinish:a,onError:s,stream:i}){let c=t==null?void 0:t[t.length-1];if((c==null?void 0:c.role)!=="assistant")c=void 0;else e=c.id;let u=!1,d=i.pipeThrough(new TransformStream({transform(C,Z){if(C.type==="start"){let R=C;if(R.messageId==null&&e!=null)R.messageId=e}if(C.type==="abort")u=!0;Z.enqueue(C)}})),p=r!=null?r:n,f=o!=null?o:a;if(f==null&&p==null)return d;let m=jp({lastMessage:c?structuredClone(c):void 0,messageId:e!=null?e:""}),y=async(C)=>{await C({state:m,write:()=>{}})},v=!1,_=async()=>{if(v||!f)return;v=!0;let C=m.message.id===(c==null?void 0:c.id);await f({isAborted:u,isContinuation:C,responseMessage:m.message,messages:[...C?t.slice(0,-1):t,m.message],finishReason:m.finishReason})},j=async()=>{if(!p)return;let C=m.message.id===(c==null?void 0:c.id);try{await p({isContinuation:C,responseMessage:structuredClone(m.message),messages:[...C?t.slice(0,-1):t,structuredClone(m.message)]})}catch(Z){s(Z)}};return Dp({stream:d,runUpdateMessageJob:y,onError:s}).pipeThrough(new TransformStream({async transform(C,Z){if(C.type==="finish-step")await j();Z.enqueue(C)},async cancel(){await _()},async flush(){await _()}}))}function Xw(e,{tools:t,sendReasoning:r=!0,sendSources:n=!1,sendStart:o=!0,sendFinish:a=!0,onError:s=()=>"An error occurred.",messageMetadata:i,responseMessageId:c}={}){let u=(p)=>{let f=t==null?void 0:t[p.toolName];if(f==null)return p.dynamic;return(f==null?void 0:f.type)==="dynamic"?!0:void 0},d=e.type;switch(d){case"text-start":return{type:"text-start",id:e.id,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"text-delta":return{type:"text-delta",id:e.id,delta:e.text,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"text-end":return{type:"text-end",id:e.id,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"reasoning-start":case"reasoning-end":{if(!r)return;return{type:d,id:e.id,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}}}case"reasoning-delta":{if(!r)return;return{type:"reasoning-delta",id:e.id,delta:e.text,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}}}case"file":case"reasoning-file":{if(d==="reasoning-file"&&!r)return;return{type:e.type,mediaType:e.file.mediaType,url:`data:${e.file.mediaType};base64,${e.file.base64}`,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}}}case"source":{if(!n)return;if(e.sourceType==="url")return{type:"source-url",sourceId:e.id,url:e.url,title:e.title,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};if(e.sourceType==="document")return{type:"source-document",sourceId:e.id,mediaType:e.mediaType,title:e.title,filename:e.filename,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};return}case"custom":return{type:"custom",kind:e.kind,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"tool-input-start":{let p=u(e);return{type:"tool-input-start",toolCallId:e.id,toolName:e.toolName,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{},...e.title!=null?{title:e.title}:{}}}case"tool-input-delta":return{type:"tool-input-delta",toolCallId:e.id,inputTextDelta:e.delta};case"tool-call":{let p=u(e);if(e.invalid)return{type:"tool-input-error",toolCallId:e.toolCallId,toolName:e.toolName,input:e.input,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{},errorText:s(e.error),...e.title!=null?{title:e.title}:{}};return{type:"tool-input-available",toolCallId:e.toolCallId,toolName:e.toolName,input:e.input,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{},...e.title!=null?{title:e.title}:{}}}case"tool-approval-request":return{type:"tool-approval-request",approvalId:e.approvalId,toolCallId:e.toolCall.toolCallId,...e.isAutomatic!=null?{isAutomatic:e.isAutomatic}:{},...e.signature!=null?{signature:e.signature}:{}};case"tool-approval-response":return{type:"tool-approval-response",approvalId:e.approvalId,approved:e.approved,...e.reason!=null?{reason:e.reason}:{},...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{}};case"tool-result":{let p=u(e);return{type:"tool-output-available",toolCallId:e.toolCallId,output:e.output===void 0?null:e.output,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...e.preliminary!=null?{preliminary:e.preliminary}:{},...p!=null?{dynamic:p}:{}}}case"tool-error":{let p=u(e);return{type:"tool-output-error",toolCallId:e.toolCallId,errorText:e.providerExecuted?typeof e.error==="string"?e.error:JSON.stringify(e.error):s(e.error),...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{}}}case"tool-output-denied":return{type:"tool-output-denied",toolCallId:e.toolCallId};case"error":return{type:"error",errorText:s(e.error)};case"start-step":return{type:"start-step"};case"finish-step":return{type:"finish-step"};case"start":{if(!o)return;return{type:"start",...i!=null?{messageMetadata:i}:{},...c!=null?{messageId:c}:{}}}case"finish":{if(!a)return;return{type:"finish",finishReason:e.finishReason,...i!=null?{messageMetadata:i}:{}}}case"abort":return e;case"tool-input-end":case"raw":return;default:throw Error(`Unknown chunk type: ${d}`)}}function Up({stream:e,tools:t,sendReasoning:r=!0,sendSources:n=!1,sendStart:o=!0,sendFinish:a=!0,onError:s=()=>"An error occurred.",messageMetadata:i,originalMessages:c,generateMessageId:u,onEnd:d,onFinish:p}){let f=u!=null?Kw({originalMessages:c,responseMessageId:u}):void 0,m=e.pipeThrough(new TransformStream({transform:async(y,v)=>{let _=i==null?void 0:i({part:y}),j=Xw(y,{tools:t,sendReasoning:r,sendSources:n,sendStart:o,sendFinish:a,onError:s,messageMetadata:_,responseMessageId:f});if(j!=null)v.enqueue(j);if(_!=null&&y.type!=="start"&&y.type!=="finish")v.enqueue({type:"message-metadata",messageMetadata:_})}}));return Yw({stream:m,messageId:f!=null?f:u==null?void 0:u(),originalMessages:c,onEnd:d!=null?d:p,onError:s})}function Qw(e){return ex(e.pipeThrough(new TransformStream))}function ex(e){return e[Symbol.asyncIterator]=function(){let t=this.getReader(),r=!1;async function n(o){var a;if(r)return;r=!0;try{if(o)await((a=t.cancel)==null?void 0:a.call(t))}finally{try{t.releaseLock()}catch(s){}}}return{async next(){if(r)return{done:!0,value:void 0};let o;try{o=await t.read()}catch(i){throw await n(!1),i}let{done:a,value:s}=o;if(a)return await n(!0),{done:!0,value:void 0};return{done:!1,value:s}},async return(){return await n(!0),{done:!0,value:void 0}},async throw(o){throw await n(!0),o}}},e}async function tx({stream:e,onError:t,abortSignal:r}){let n=e.getReader(),o=()=>{n.cancel().catch(()=>{})};if(r==null?void 0:r.aborted)o();else r==null||r.addEventListener("abort",o,{once:!0});try{while(!0){let{done:a}=await n.read();if(a)break}}catch(a){t==null||t(a)}finally{r==null||r.removeEventListener("abort",o),n.releaseLock()}}var H0=G({prefix:"aitxt",size:24}),Y0=G({prefix:"call",size:24});var X0=G({prefix:"aitxt",size:24}),Q0=G({prefix:"call",size:24});function rx(e){let t=new Map,r={...e,parts:e.parts.map((o,a)=>{if(o.type==="text"||o.type==="reasoning")return t.set(a,o.text),{...o,text:""};return o})},n=structuredClone(r);for(let[o,a]of t){let s=n.parts[o];if(s.type==="text"||s.type==="reasoning")s.text=a}return n}function Zp({message:e,stream:t,onError:r,terminateOnError:n=!1}){var o;let a,s=!1,i=new ReadableStream({start(d){a=d}}),c=jp({messageId:(o=e==null?void 0:e.id)!=null?o:"",lastMessage:e}),u=(d)=>{if(r==null||r(d),!s&&n)s=!0,a==null||a.error(d)};return tx({stream:Dp({stream:t,runUpdateMessageJob(d){return d({state:c,write:()=>{a==null||a.enqueue(rx(c.message))}})},onError:u}),onError:u}).finally(()=>{if(!s)a==null||a.close()}),Qw(i)}async function mn(e,t){let r=[];if(t==null?void 0:t.ignoreIncompleteToolCalls)e=e.map((n)=>({...n,parts:n.parts.filter((o)=>!le(o)||o.state==="approval-responded"||o.state==="output-available"||o.state==="output-error"||o.state==="output-denied")}));for(let n of e)switch(n.role){case"system":{let o=n.parts.filter((s)=>s.type==="text"),a=o.reduce((s,i)=>{if(i.providerMetadata!=null)return{...s,...i.providerMetadata};return s},{});r.push({role:"system",content:o.map((s)=>s.text).join(""),...Object.keys(a).length>0?{providerOptions:a}:{}});break}case"user":{r.push({role:"user",content:n.parts.map((o)=>{var a;if(ua(o))return{type:"text",text:o.text,...o.providerMetadata!=null?{providerOptions:o.providerMetadata}:{}};if(da(o))return{type:"file",mediaType:o.mediaType,filename:o.filename,data:o.providerReference!=null?{type:"reference",reference:o.providerReference}:{type:"url",url:new URL(o.url)},...o.providerMetadata!=null?{providerOptions:o.providerMetadata}:{}};if(ca(o))return(a=t==null?void 0:t.convertDataPart)==null?void 0:a.call(t,o)}).filter(lp)});break}case"assistant":{if(n.parts!=null){let o=[];async function a(){var s,i,c,u,d,p,f;if(o.length===0)return;let m=[];for(let v of o)if(ua(v))m.push({type:"text",text:v.text,...v.providerMetadata!=null?{providerOptions:v.providerMetadata}:{}});else if(yp(v))m.push({type:"custom",kind:v.kind,...v.providerMetadata!=null?{providerOptions:v.providerMetadata}:{}});else if(da(v))m.push({type:"file",mediaType:v.mediaType,filename:v.filename,data:v.providerReference!=null?{type:"reference",reference:v.providerReference}:{type:"url",url:new URL(v.url)},...v.providerMetadata!=null?{providerOptions:v.providerMetadata}:{}});else if(bp(v))m.push({type:"reasoning-file",data:{type:"url",url:new URL(v.url)},mediaType:v.mediaType,providerOptions:v.providerMetadata});else if(wp(v))m.push({type:"reasoning",text:v.text,providerOptions:v.providerMetadata});else if(le(v)){let _=Qe(v);if(v.state!=="input-streaming"){if(m.push({type:"tool-call",toolCallId:v.toolCallId,toolName:_,input:v.state==="output-error"?(s=v.input)!=null?s:("rawInput"in v)?v.rawInput:void 0:v.input,providerExecuted:v.providerExecuted,...v.callProviderMetadata!=null?{providerOptions:v.callProviderMetadata}:{}}),v.approval!=null)m.push({type:"tool-approval-request",approvalId:v.approval.id,toolCallId:v.toolCallId,isAutomatic:v.approval.isAutomatic,...v.approval.signature!=null?{signature:v.approval.signature}:{}});if(v.providerExecuted===!0&&v.state!=="approval-responded"&&(v.state==="output-available"||v.state==="output-error")){let j=(i=v.resultProviderMetadata)!=null?i:v.callProviderMetadata;m.push({type:"tool-result",toolCallId:v.toolCallId,toolName:_,output:await hp({toolCallId:v.toolCallId,input:v.input,output:v.state==="output-error"?v.errorText:v.output,tool:vp(t==null?void 0:t.tools,_),errorMode:v.state==="output-error"?"json":"none"}),...j!=null?{providerOptions:j}:{}})}}}else if(ca(v)){let _=(c=t==null?void 0:t.convertDataPart)==null?void 0:c.call(t,v);if(_!=null)m.push(_)}else throw Error(`Unsupported part: ${v}`);if(m.length>0)r.push({role:"assistant",content:m});let y=o.filter((v)=>{var _;return le(v)&&(v.providerExecuted!==!0||((_=v.approval)==null?void 0:_.approved)!=null)});if(y.length>0){let v=[];for(let _ of y){if(((u=_.approval)==null?void 0:u.approved)!=null)v.push({type:"tool-approval-response",approvalId:_.approval.id,approved:_.approval.approved,reason:_.approval.reason,providerExecuted:_.providerExecuted});if(_.state==="approval-responded"&&((d=_.approval)==null?void 0:d.approved)===!1)v.push({type:"tool-result",toolCallId:_.toolCallId,toolName:Qe(_),output:{type:"execution-denied",reason:_.approval.reason},..._.callProviderMetadata!=null?{providerOptions:_.callProviderMetadata}:{}});if(_.providerExecuted===!0)continue;switch(_.state){case"output-denied":{v.push({type:"tool-result",toolCallId:_.toolCallId,toolName:Qe(_),output:{type:"error-text",value:(f=(p=_.approval)==null?void 0:p.reason)!=null?f:"Tool call execution denied."},..._.callProviderMetadata!=null?{providerOptions:_.callProviderMetadata}:{}});break}case"output-error":case"output-available":{let j=Qe(_);v.push({type:"tool-result",toolCallId:_.toolCallId,toolName:j,output:await hp({toolCallId:_.toolCallId,input:_.input,output:_.state==="output-error"?_.errorText:_.output,tool:vp(t==null?void 0:t.tools,j),errorMode:_.state==="output-error"?"text":"none"}),..._.callProviderMetadata!=null?{providerOptions:_.callProviderMetadata}:{}});break}}}if(v.length>0)r.push({role:"tool",content:v})}o=[]}for(let s of n.parts)if(yp(s)||ua(s)||wp(s)||bp(s)||da(s)||le(s)||ca(s))o.push(s);else if(s.type==="step-start")await a();await a();break}break}default:{let o=n.role;throw new _w({originalMessage:n,message:`Unsupported role: ${o}`})}}return r}var ie=l.record(l.string(),gt.optional()),nx=l.record(l.string(),l.string()),rE=pn(()=>Ut(l.array(l.object({id:l.string(),role:l.enum(["system","user","assistant"]),metadata:l.unknown().optional(),parts:l.array(l.union([l.object({type:l.literal("text"),text:l.string(),state:l.enum(["streaming","done"]).optional(),providerMetadata:S.optional()}),l.object({type:l.literal("reasoning"),id:l.string().optional(),text:l.string(),state:l.enum(["streaming","done"]).optional(),providerMetadata:S.optional()}),l.object({type:l.literal("custom"),kind:l.string(),providerMetadata:S.optional()}),l.object({type:l.literal("source-url"),sourceId:l.string(),url:l.string(),title:l.string().optional(),providerMetadata:S.optional()}),l.object({type:l.literal("source-document"),sourceId:l.string(),mediaType:l.string(),title:l.string(),filename:l.string().optional(),providerMetadata:S.optional()}),l.object({type:l.literal("file"),mediaType:l.string(),filename:l.string().optional(),url:l.string(),providerReference:nx.optional(),providerMetadata:S.optional()}),l.object({type:l.literal("reasoning-file"),mediaType:l.string(),url:l.string(),providerMetadata:S.optional()}),l.object({type:l.literal("step-start")}),l.object({type:l.string().startsWith("data-"),id:l.string().optional(),data:l.unknown()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-streaming"),input:l.unknown().optional(),providerExecuted:l.boolean().optional(),callProviderMetadata:S.optional(),output:l.never().optional(),errorText:l.never().optional(),approval:l.never().optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-available"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.never().optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-requested"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.never().optional(),reason:l.never().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-responded"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.boolean(),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-available"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.unknown(),errorText:l.never().optional(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),preliminary:l.boolean().optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-error"),input:l.unknown().optional(),rawInput:l.unknown().optional(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.string(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-denied"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!1),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-streaming"),providerExecuted:l.boolean().optional(),callProviderMetadata:S.optional(),input:l.unknown().optional(),output:l.never().optional(),errorText:l.never().optional(),approval:l.never().optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-available"),providerExecuted:l.boolean().optional(),input:l.unknown(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.never().optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-requested"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.never().optional(),reason:l.never().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-responded"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.boolean(),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-available"),providerExecuted:l.boolean().optional(),input:l.unknown(),output:l.unknown(),errorText:l.never().optional(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),preliminary:l.boolean().optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-error"),providerExecuted:l.boolean().optional(),input:l.unknown().optional(),rawInput:l.unknown().optional(),output:l.never().optional(),errorText:l.string(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-denied"),providerExecuted:l.boolean().optional(),input:l.unknown(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!1),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})})]))}).superRefine((e,t)=>{if(e.role!=="assistant"&&e.parts.length===0)t.addIssue({origin:"array",code:"too_small",minimum:1,inclusive:!0,input:e.parts,path:["parts"],message:"Message must contain at least one part"})})).nonempty("Messages array must not be empty")));var oE=G({prefix:"call",size:24});var sE=G({prefix:"call",size:24});var lE=G({prefix:"aiobj",size:24});function Lp(e){return({url:t,abortSignal:r})=>$w({url:t,maxBytes:e==null?void 0:e.maxBytes,abortSignal:r})}var uE=G({prefix:"aiobj",size:24});var dE=Lp();var ox="AI_NoSuchProviderError",ax=`vercel.ai.error.${ox}`,sx=Symbol.for(ax),ix;ix=sx;var fE=G({prefix:"call",size:24});var mE=Lp();var tf=(e)=>{throw TypeError(e)},Sa=(e,t,r)=>t.has(e)||tf("Cannot "+r),x=(e,t,r)=>(Sa(e,t,"read from private field"),r?r.call(e):t.get(e)),z=(e,t,r)=>t.has(e)?tf("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),T=(e,t,r,n)=>(Sa(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),w=(e,t,r)=>(Sa(e,t,"access private method"),r),rf=String.fromCharCode(27),wE=new RegExp(`${rf}\\[[0-?]*[ -/]*[@-~]`,"g"),va=new RegExp(`^${rf}\\[[0-?]*[ -/]*[@-~]`);function tt(e){let t=0,r=0;while(r<e.length){let n=e.slice(r).match(va);if(n){r+=n[0].length;continue}let o=e.codePointAt(r);if(o==null)break;let a=String.fromCodePoint(o);t+=nf(o),r+=a.length}return t}function Bt(e,t){if(t<=0)return"";let r="",n=0,o=0;while(o<e.length&&n<t){let a=e.slice(o).match(va);if(a){r+=a[0],o+=a[0].length;continue}let s=e.codePointAt(o);if(s==null)break;let i=String.fromCodePoint(s),c=nf(s);if(c>0&&n+c>t)break;r+=i,o+=i.length,n+=c}while(o<e.length){let a=e.slice(o).match(va);if(!a)break;r+=a[0],o+=a[0].length}return r}function nf(e){if(e===9)return 4;if(e<32||e>=127&&e<160)return 0;if(lx(e))return 0;return cx(e)?2:1}function lx(e){return e>=768&&e<=879||e>=1155&&e<=1161||e>=1425&&e<=1469||e===1471||e>=1473&&e<=1474||e>=1476&&e<=1477||e===1479||e>=1552&&e<=1562||e>=1611&&e<=1631||e===1648||e>=1750&&e<=1756||e>=1759&&e<=1764||e>=1767&&e<=1768||e>=1770&&e<=1773||e===1809||e>=1840&&e<=1866||e>=1958&&e<=1968||e>=2027&&e<=2035||e>=2070&&e<=2073||e>=2075&&e<=2083||e>=2085&&e<=2087||e>=2089&&e<=2093||e>=2137&&e<=2139||e>=2259&&e<=2306||e===2362||e===2364||e>=2369&&e<=2376||e===2381||e>=2385&&e<=2391||e===8205||e>=65024&&e<=65039||e>=917760&&e<=917999}function cx(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}var Me={bold:"\x1B[1m",boldOff:"\x1B[22m",italic:"\x1B[3m",italicOff:"\x1B[23m"},ux="─";function dx(e){var t;let r=e.split(`
138
+ `)}})}};function Kw({originalMessages:e,responseMessageId:t}){if(e==null)return;let r=e[e.length-1];return(r==null?void 0:r.role)==="assistant"?r.id:typeof t==="function"?t():t}var _r=l.record(l.string(),gt.optional()),J0=pn(()=>Ut(l.union([l.looseObject({type:l.literal("text-start"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("text-delta"),id:l.string(),delta:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("text-end"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("error"),errorText:l.string()}),l.looseObject({type:l.literal("tool-input-start"),toolCallId:l.string(),toolName:l.string(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),title:l.string().optional()}),l.looseObject({type:l.literal("tool-input-delta"),toolCallId:l.string(),inputTextDelta:l.string()}),l.looseObject({type:l.literal("tool-input-available"),toolCallId:l.string(),toolName:l.string(),input:l.unknown(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),title:l.string().optional()}),l.looseObject({type:l.literal("tool-input-error"),toolCallId:l.string(),toolName:l.string(),input:l.unknown(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),errorText:l.string(),title:l.string().optional()}),l.looseObject({type:l.literal("tool-approval-request"),approvalId:l.string(),toolCallId:l.string(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}),l.looseObject({type:l.literal("tool-approval-response"),approvalId:l.string(),approved:l.boolean(),reason:l.string().optional(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("tool-output-available"),toolCallId:l.string(),output:l.unknown(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional(),preliminary:l.boolean().optional()}),l.looseObject({type:l.literal("tool-output-error"),toolCallId:l.string(),errorText:l.string(),providerExecuted:l.boolean().optional(),providerMetadata:S.optional(),toolMetadata:_r.optional(),dynamic:l.boolean().optional()}),l.looseObject({type:l.literal("tool-output-denied"),toolCallId:l.string()}),l.looseObject({type:l.literal("reasoning-start"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("reasoning-delta"),id:l.string(),delta:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("reasoning-end"),id:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("custom"),kind:l.string().transform((e)=>e),providerMetadata:S.optional()}),l.looseObject({type:l.literal("source-url"),sourceId:l.string(),url:l.string(),title:l.string().optional(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("source-document"),sourceId:l.string(),mediaType:l.string(),title:l.string(),filename:l.string().optional(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("file"),url:l.string(),mediaType:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.literal("reasoning-file"),url:l.string(),mediaType:l.string(),providerMetadata:S.optional()}),l.looseObject({type:l.custom((e)=>typeof e==="string"&&e.startsWith("data-"),{message:'Type must start with "data-"'}),id:l.string().optional(),data:l.unknown(),transient:l.boolean().optional()}),l.looseObject({type:l.literal("start-step")}),l.looseObject({type:l.literal("finish-step")}),l.looseObject({type:l.literal("start"),messageId:l.string().optional(),messageMetadata:l.unknown().optional()}),l.looseObject({type:l.literal("finish"),finishReason:l.enum(["stop","length","content-filter","tool-calls","error","other"]).optional(),messageMetadata:l.unknown().optional()}),l.looseObject({type:l.literal("abort"),reason:l.string().optional()}),l.looseObject({type:l.literal("message-metadata"),messageMetadata:l.unknown()})])));function Hw(e){return e.type.startsWith("data-")}function Sr(){return Object.create(null)}function ca(e){return e.type.startsWith("data-")}function ua(e){return e.type==="text"}function yp(e){return e.type==="custom"}function da(e){return e.type==="file"}function bp(e){return e.type==="reasoning-file"}function wp(e){return e.type==="reasoning"}function pa(e){return e.type.startsWith("tool-")}function zp(e){return e.type==="dynamic-tool"}function le(e){return pa(e)||zp(e)}function fa(e){return e.type.split("-").slice(1).join("-")}function Qe(e){return zp(e)?e.toolName:fa(e)}function jp({lastMessage:e,messageId:t}){return{message:(e==null?void 0:e.role)==="assistant"?e:{id:t,metadata:void 0,role:"assistant",parts:[]},activeTextParts:Sr(),activeReasoningParts:Sr(),partialToolCalls:Sr()}}function Dp({stream:e,messageMetadataSchema:t,dataPartSchemas:r,runUpdateMessageJob:n,onError:o,onToolCall:a,onData:s}){return e.pipeThrough(new TransformStream({async transform(i,c){await n(async({state:u,write:d})=>{var p,f,m,y;function v(){let h=u.message.parts,N=h.length-1;while(N>=0&&h[N].type!=="step-start")N--;return h.slice(N+1)}function _(){return v().filter(le)}function j(h){let V=_().find((J)=>J.toolCallId===h);if(V==null){let J=u.message.parts;for(let M=J.length-1;M>=0;M--){let D=J[M];if(le(D)&&D.toolCallId===h){V=D;break}}}if(V==null)throw new ht({chunkType:"tool-invocation",chunkId:h,message:`No tool invocation found for tool call ID "${h}".`});return V}function C(h){let V=u.message.parts.filter(le).find((J)=>{var M;return((M=J.approval)==null?void 0:M.id)===h});if(V==null)throw new ht({chunkType:"tool-approval-response",chunkId:h,message:`No tool invocation found for approval ID "${h}".`});return V}function Z(h,N){var V;let J=N!=null?N:v().find((Y)=>pa(Y)&&Y.toolCallId===h.toolCallId),M=h,D=J;if(J!=null){if(J.state=h.state,D.input=M.input,D.output=M.output,D.errorText=M.errorText,D.rawInput=M.rawInput,D.preliminary=M.preliminary,h.title!==void 0)D.title=h.title;if(h.toolMetadata!==void 0)D.toolMetadata=h.toolMetadata;D.providerExecuted=(V=M.providerExecuted)!=null?V:J.providerExecuted;let Y=M.providerMetadata;if(Y!=null)if(h.state==="output-available"||h.state==="output-error"){let Ze=J;Ze.resultProviderMetadata=Y}else J.callProviderMetadata=Y}else u.message.parts.push({type:`tool-${h.toolName}`,toolCallId:h.toolCallId,state:h.state,title:h.title,...h.toolMetadata!==void 0?{toolMetadata:h.toolMetadata}:{},input:M.input,output:M.output,rawInput:M.rawInput,errorText:M.errorText,providerExecuted:M.providerExecuted,preliminary:M.preliminary,...M.providerMetadata!=null&&(h.state==="output-available"||h.state==="output-error")?{resultProviderMetadata:M.providerMetadata}:{},...M.providerMetadata!=null&&!(h.state==="output-available"||h.state==="output-error")?{callProviderMetadata:M.providerMetadata}:{}})}function R(h,N){var V,J;let M=N!=null?N:v().find((Ze)=>Ze.type==="dynamic-tool"&&Ze.toolCallId===h.toolCallId),D=h,Y=M;if(M!=null){if(M.state=h.state,Y.toolName=h.toolName,Y.input=D.input,Y.output=D.output,Y.errorText=D.errorText,Y.rawInput=(V=D.rawInput)!=null?V:Y.rawInput,Y.preliminary=D.preliminary,h.title!==void 0)Y.title=h.title;if(h.toolMetadata!==void 0)Y.toolMetadata=h.toolMetadata;Y.providerExecuted=(J=D.providerExecuted)!=null?J:M.providerExecuted;let Ze=D.providerMetadata;if(Ze!=null)if(h.state==="output-available"||h.state==="output-error"){let Xf=M;Xf.resultProviderMetadata=Ze}else M.callProviderMetadata=Ze}else u.message.parts.push({type:"dynamic-tool",toolName:h.toolName,toolCallId:h.toolCallId,state:h.state,input:D.input,output:D.output,errorText:D.errorText,preliminary:D.preliminary,providerExecuted:D.providerExecuted,title:h.title,...h.toolMetadata!==void 0?{toolMetadata:h.toolMetadata}:{},...D.providerMetadata!=null&&(h.state==="output-available"||h.state==="output-error")?{resultProviderMetadata:D.providerMetadata}:{},...D.providerMetadata!=null&&!(h.state==="output-available"||h.state==="output-error")?{callProviderMetadata:D.providerMetadata}:{}})}async function P(h){if(h!=null){let N=u.message.metadata!=null?Rp(u.message.metadata,h):h;if(t!=null)await fn({value:N,schema:t,context:{field:"message.metadata",entityId:u.message.id}});u.message.metadata=N}}switch(i.type){case"text-start":{let h={type:"text",text:"",providerMetadata:i.providerMetadata,state:"streaming"};u.activeTextParts[i.id]=h,u.message.parts.push(h),d();break}case"text-delta":{let h=u.activeTextParts[i.id];if(h==null)throw new ht({chunkType:"text-delta",chunkId:i.id,message:`Received text-delta for missing text part with ID "${i.id}". Ensure a "text-start" chunk is sent before any "text-delta" chunks.`});h.text+=i.delta,h.providerMetadata=(p=i.providerMetadata)!=null?p:h.providerMetadata,d();break}case"text-end":{let h=u.activeTextParts[i.id];if(h==null)throw new ht({chunkType:"text-end",chunkId:i.id,message:`Received text-end for missing text part with ID "${i.id}". Ensure a "text-start" chunk is sent before any "text-end" chunks.`});h.state="done",h.providerMetadata=(f=i.providerMetadata)!=null?f:h.providerMetadata,delete u.activeTextParts[i.id],d();break}case"custom":{let h={type:"custom",kind:i.kind,providerMetadata:i.providerMetadata};u.message.parts.push(h),d();break}case"reasoning-start":{let h={type:"reasoning",id:i.id,text:"",providerMetadata:i.providerMetadata,state:"streaming"};u.activeReasoningParts[i.id]=h,u.message.parts.push(h),d();break}case"reasoning-delta":{let h=u.activeReasoningParts[i.id];if(h==null)throw new ht({chunkType:"reasoning-delta",chunkId:i.id,message:`Received reasoning-delta for missing reasoning part with ID "${i.id}". Ensure a "reasoning-start" chunk is sent before any "reasoning-delta" chunks.`});h.text+=i.delta,h.providerMetadata=(m=i.providerMetadata)!=null?m:h.providerMetadata,d();break}case"reasoning-end":{let h=u.activeReasoningParts[i.id];if(h==null)throw new ht({chunkType:"reasoning-end",chunkId:i.id,message:`Received reasoning-end for missing reasoning part with ID "${i.id}". Ensure a "reasoning-start" chunk is sent before any "reasoning-end" chunks.`});h.providerMetadata=(y=i.providerMetadata)!=null?y:h.providerMetadata,h.state="done",delete u.activeReasoningParts[i.id],d();break}case"file":case"reasoning-file":{u.message.parts.push({type:i.type,mediaType:i.mediaType,url:i.url,...i.providerMetadata!=null?{providerMetadata:i.providerMetadata}:{}}),d();break}case"source-url":{u.message.parts.push({type:"source-url",sourceId:i.sourceId,url:i.url,title:i.title,providerMetadata:i.providerMetadata}),d();break}case"source-document":{u.message.parts.push({type:"source-document",sourceId:i.sourceId,mediaType:i.mediaType,title:i.title,filename:i.filename,providerMetadata:i.providerMetadata}),d();break}case"tool-input-start":{let h=v().filter(pa);if(u.partialToolCalls[i.toolCallId]={text:"",toolName:i.toolName,index:h.length,dynamic:i.dynamic,title:i.title,toolMetadata:i.toolMetadata},i.dynamic)R({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-streaming",input:void 0,providerExecuted:i.providerExecuted,title:i.title,toolMetadata:i.toolMetadata,providerMetadata:i.providerMetadata});else Z({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-streaming",input:void 0,providerExecuted:i.providerExecuted,title:i.title,toolMetadata:i.toolMetadata,providerMetadata:i.providerMetadata});d();break}case"tool-input-delta":{let h=u.partialToolCalls[i.toolCallId];if(h==null)throw new ht({chunkType:"tool-input-delta",chunkId:i.toolCallId,message:`Received tool-input-delta for missing tool call with ID "${i.toolCallId}". Ensure a "tool-input-start" chunk is sent before any "tool-input-delta" chunks.`});h.text+=i.inputTextDelta;let{value:N}=await Ir(h.text);if(h.dynamic)R({toolCallId:i.toolCallId,toolName:h.toolName,state:"input-streaming",input:N,title:h.title,toolMetadata:h.toolMetadata});else Z({toolCallId:i.toolCallId,toolName:h.toolName,state:"input-streaming",input:N,title:h.title,toolMetadata:h.toolMetadata});d();break}case"tool-input-available":{if(i.dynamic)R({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-available",input:i.input,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:i.title,toolMetadata:i.toolMetadata});else Z({toolCallId:i.toolCallId,toolName:i.toolName,state:"input-available",input:i.input,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:i.title,toolMetadata:i.toolMetadata});if(d(),a&&!i.providerExecuted)await a({toolCall:i});break}case"tool-input-error":{let h=v().filter(le).find((V)=>V.toolCallId===i.toolCallId);if(h!=null?h.type==="dynamic-tool":!!i.dynamic)R({toolCallId:i.toolCallId,toolName:i.toolName,state:"output-error",input:i.input,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,toolMetadata:i.toolMetadata});else Z({toolCallId:i.toolCallId,toolName:i.toolName,state:"output-error",input:void 0,rawInput:i.input,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,toolMetadata:i.toolMetadata});d();break}case"tool-approval-request":{let h=j(i.toolCallId);h.state="approval-requested",h.approval={id:i.approvalId,...i.isAutomatic===!0?{isAutomatic:!0}:{},...i.signature!=null?{signature:i.signature}:{}},d();break}case"tool-approval-response":{let h=C(i.approvalId),N=h.approval==null?{id:i.approvalId}:h.approval;if(h.state="approval-responded",h.approval={id:i.approvalId,approved:i.approved,...i.reason!=null?{reason:i.reason}:{},...N.isAutomatic===!0?{isAutomatic:!0}:{},...N.signature!=null?{signature:N.signature}:{}},i.providerExecuted!=null)h.providerExecuted=i.providerExecuted;if(i.providerMetadata!=null)h.callProviderMetadata=i.providerMetadata;d();break}case"tool-output-denied":{let h=j(i.toolCallId);h.state="output-denied",d();break}case"tool-output-available":{let h=j(i.toolCallId);if(h.type==="dynamic-tool")R({toolCallId:i.toolCallId,toolName:h.toolName,state:"output-available",input:h.input,output:i.output,preliminary:i.preliminary,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);else Z({toolCallId:i.toolCallId,toolName:fa(h),state:"output-available",input:h.input,output:i.output,providerExecuted:i.providerExecuted,preliminary:i.preliminary,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);d();break}case"tool-output-error":{let h=j(i.toolCallId);if(h.type==="dynamic-tool")R({toolCallId:i.toolCallId,toolName:h.toolName,state:"output-error",input:h.input,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);else Z({toolCallId:i.toolCallId,toolName:fa(h),state:"output-error",input:h.input,rawInput:h.rawInput,errorText:i.errorText,providerExecuted:i.providerExecuted,providerMetadata:i.providerMetadata,title:h.title,toolMetadata:h.toolMetadata},h);d();break}case"start-step":{u.message.parts.push({type:"step-start"});break}case"finish-step":{u.activeTextParts=Sr(),u.activeReasoningParts=Sr();break}case"start":{if(i.messageId!=null)u.message.id=i.messageId;if(await P(i.messageMetadata),i.messageId!=null||i.messageMetadata!=null)d({updateStatus:!1});break}case"finish":{if(i.finishReason!=null)u.finishReason=i.finishReason;if(await P(i.messageMetadata),i.messageMetadata!=null)d();break}case"message-metadata":{if(await P(i.messageMetadata),i.messageMetadata!=null)d();break}case"error":{o==null||o(Error(i.errorText));break}default:if(Hw(i)){if((r==null?void 0:r[i.type])!=null){let V=u.message.parts.findIndex((M)=>("id"in M)&&("data"in M)&&M.id===i.id&&M.type===i.type),J=V>=0?V:u.message.parts.length;await fn({value:i.data,schema:r[i.type],context:{field:`message.parts[${J}].data`,entityName:i.type,entityId:i.id}})}let h=i;if(h.transient){s==null||s(h);break}let N=h.id!=null?u.message.parts.find((V)=>h.type===V.type&&h.id===V.id):void 0;if(N!=null)N.data=h.data;else u.message.parts.push(h);s==null||s(h),d()}}c.enqueue(i)})}}))}function Yw({messageId:e,originalMessages:t=[],onStepEnd:r,onStepFinish:n,onEnd:o,onFinish:a,onError:s,stream:i}){let c=t==null?void 0:t[t.length-1];if((c==null?void 0:c.role)!=="assistant")c=void 0;else e=c.id;let u=!1,d=i.pipeThrough(new TransformStream({transform(C,Z){if(C.type==="start"){let R=C;if(R.messageId==null&&e!=null)R.messageId=e}if(C.type==="abort")u=!0;Z.enqueue(C)}})),p=r!=null?r:n,f=o!=null?o:a;if(f==null&&p==null)return d;let m=jp({lastMessage:c?structuredClone(c):void 0,messageId:e!=null?e:""}),y=async(C)=>{await C({state:m,write:()=>{}})},v=!1,_=async()=>{if(v||!f)return;v=!0;let C=m.message.id===(c==null?void 0:c.id);await f({isAborted:u,isContinuation:C,responseMessage:m.message,messages:[...C?t.slice(0,-1):t,m.message],finishReason:m.finishReason})},j=async()=>{if(!p)return;let C=m.message.id===(c==null?void 0:c.id);try{await p({isContinuation:C,responseMessage:structuredClone(m.message),messages:[...C?t.slice(0,-1):t,structuredClone(m.message)]})}catch(Z){s(Z)}};return Dp({stream:d,runUpdateMessageJob:y,onError:s}).pipeThrough(new TransformStream({async transform(C,Z){if(C.type==="finish-step")await j();Z.enqueue(C)},async cancel(){await _()},async flush(){await _()}}))}function Xw(e,{tools:t,sendReasoning:r=!0,sendSources:n=!1,sendStart:o=!0,sendFinish:a=!0,onError:s=()=>"An error occurred.",messageMetadata:i,responseMessageId:c}={}){let u=(p)=>{let f=t==null?void 0:t[p.toolName];if(f==null)return p.dynamic;return(f==null?void 0:f.type)==="dynamic"?!0:void 0},d=e.type;switch(d){case"text-start":return{type:"text-start",id:e.id,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"text-delta":return{type:"text-delta",id:e.id,delta:e.text,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"text-end":return{type:"text-end",id:e.id,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"reasoning-start":case"reasoning-end":{if(!r)return;return{type:d,id:e.id,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}}}case"reasoning-delta":{if(!r)return;return{type:"reasoning-delta",id:e.id,delta:e.text,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}}}case"file":case"reasoning-file":{if(d==="reasoning-file"&&!r)return;return{type:e.type,mediaType:e.file.mediaType,url:`data:${e.file.mediaType};base64,${e.file.base64}`,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}}}case"source":{if(!n)return;if(e.sourceType==="url")return{type:"source-url",sourceId:e.id,url:e.url,title:e.title,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};if(e.sourceType==="document")return{type:"source-document",sourceId:e.id,mediaType:e.mediaType,title:e.title,filename:e.filename,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};return}case"custom":return{type:"custom",kind:e.kind,...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{}};case"tool-input-start":{let p=u(e);return{type:"tool-input-start",toolCallId:e.id,toolName:e.toolName,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{},...e.title!=null?{title:e.title}:{}}}case"tool-input-delta":return{type:"tool-input-delta",toolCallId:e.id,inputTextDelta:e.delta};case"tool-call":{let p=u(e);if(e.invalid)return{type:"tool-input-error",toolCallId:e.toolCallId,toolName:e.toolName,input:e.input,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{},errorText:s(e.error),...e.title!=null?{title:e.title}:{}};return{type:"tool-input-available",toolCallId:e.toolCallId,toolName:e.toolName,input:e.input,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{},...e.title!=null?{title:e.title}:{}}}case"tool-approval-request":return{type:"tool-approval-request",approvalId:e.approvalId,toolCallId:e.toolCall.toolCallId,...e.isAutomatic!=null?{isAutomatic:e.isAutomatic}:{},...e.signature!=null?{signature:e.signature}:{}};case"tool-approval-response":return{type:"tool-approval-response",approvalId:e.approvalId,approved:e.approved,...e.reason!=null?{reason:e.reason}:{},...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{}};case"tool-result":{let p=u(e);return{type:"tool-output-available",toolCallId:e.toolCallId,output:e.output===void 0?null:e.output,...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...e.preliminary!=null?{preliminary:e.preliminary}:{},...p!=null?{dynamic:p}:{}}}case"tool-error":{let p=u(e);return{type:"tool-output-error",toolCallId:e.toolCallId,errorText:e.providerExecuted?typeof e.error==="string"?e.error:JSON.stringify(e.error):s(e.error),...e.providerExecuted!=null?{providerExecuted:e.providerExecuted}:{},...e.providerMetadata!=null?{providerMetadata:e.providerMetadata}:{},...e.toolMetadata!=null?{toolMetadata:e.toolMetadata}:{},...p!=null?{dynamic:p}:{}}}case"tool-output-denied":return{type:"tool-output-denied",toolCallId:e.toolCallId};case"error":return{type:"error",errorText:s(e.error)};case"start-step":return{type:"start-step"};case"finish-step":return{type:"finish-step"};case"start":{if(!o)return;return{type:"start",...i!=null?{messageMetadata:i}:{},...c!=null?{messageId:c}:{}}}case"finish":{if(!a)return;return{type:"finish",finishReason:e.finishReason,...i!=null?{messageMetadata:i}:{}}}case"abort":return e;case"tool-input-end":case"raw":return;default:throw Error(`Unknown chunk type: ${d}`)}}function Up({stream:e,tools:t,sendReasoning:r=!0,sendSources:n=!1,sendStart:o=!0,sendFinish:a=!0,onError:s=()=>"An error occurred.",messageMetadata:i,originalMessages:c,generateMessageId:u,onEnd:d,onFinish:p}){let f=u!=null?Kw({originalMessages:c,responseMessageId:u}):void 0,m=e.pipeThrough(new TransformStream({transform:async(y,v)=>{let _=i==null?void 0:i({part:y}),j=Xw(y,{tools:t,sendReasoning:r,sendSources:n,sendStart:o,sendFinish:a,onError:s,messageMetadata:_,responseMessageId:f});if(j!=null)v.enqueue(j);if(_!=null&&y.type!=="start"&&y.type!=="finish")v.enqueue({type:"message-metadata",messageMetadata:_})}}));return Yw({stream:m,messageId:f!=null?f:u==null?void 0:u(),originalMessages:c,onEnd:d!=null?d:p,onError:s})}function Qw(e){return ex(e.pipeThrough(new TransformStream))}function ex(e){return e[Symbol.asyncIterator]=function(){let t=this.getReader(),r=!1;async function n(o){var a;if(r)return;r=!0;try{if(o)await((a=t.cancel)==null?void 0:a.call(t))}finally{try{t.releaseLock()}catch(s){}}}return{async next(){if(r)return{done:!0,value:void 0};let o;try{o=await t.read()}catch(i){throw await n(!1),i}let{done:a,value:s}=o;if(a)return await n(!0),{done:!0,value:void 0};return{done:!1,value:s}},async return(){return await n(!0),{done:!0,value:void 0}},async throw(o){throw await n(!0),o}}},e}async function tx({stream:e,onError:t,abortSignal:r}){let n=e.getReader(),o=()=>{n.cancel().catch(()=>{})};if(r==null?void 0:r.aborted)o();else r==null||r.addEventListener("abort",o,{once:!0});try{while(!0){let{done:a}=await n.read();if(a)break}}catch(a){t==null||t(a)}finally{r==null||r.removeEventListener("abort",o),n.releaseLock()}}var H0=G({prefix:"aitxt",size:24}),Y0=G({prefix:"call",size:24});var X0=G({prefix:"aitxt",size:24}),Q0=G({prefix:"call",size:24});function rx(e){let t=new Map,r={...e,parts:e.parts.map((o,a)=>{if(o.type==="text"||o.type==="reasoning")return t.set(a,o.text),{...o,text:""};return o})},n=structuredClone(r);for(let[o,a]of t){let s=n.parts[o];if(s.type==="text"||s.type==="reasoning")s.text=a}return n}function Zp({message:e,stream:t,onError:r,terminateOnError:n=!1}){var o;let a,s=!1,i=new ReadableStream({start(d){a=d}}),c=jp({messageId:(o=e==null?void 0:e.id)!=null?o:"",lastMessage:e}),u=(d)=>{if(r==null||r(d),!s&&n)s=!0,a==null||a.error(d)};return tx({stream:Dp({stream:t,runUpdateMessageJob(d){return d({state:c,write:()=>{a==null||a.enqueue(rx(c.message))}})},onError:u}),onError:u}).finally(()=>{if(!s)a==null||a.close()}),Qw(i)}async function mn(e,t){let r=[];if(t==null?void 0:t.ignoreIncompleteToolCalls)e=e.map((n)=>({...n,parts:n.parts.filter((o)=>!le(o)||o.state==="approval-responded"||o.state==="output-available"||o.state==="output-error"||o.state==="output-denied")}));for(let n of e)switch(n.role){case"system":{let o=n.parts.filter((s)=>s.type==="text"),a=o.reduce((s,i)=>{if(i.providerMetadata!=null)return{...s,...i.providerMetadata};return s},{});r.push({role:"system",content:o.map((s)=>s.text).join(""),...Object.keys(a).length>0?{providerOptions:a}:{}});break}case"user":{r.push({role:"user",content:n.parts.map((o)=>{var a;if(ua(o))return{type:"text",text:o.text,...o.providerMetadata!=null?{providerOptions:o.providerMetadata}:{}};if(da(o))return{type:"file",mediaType:o.mediaType,filename:o.filename,data:o.providerReference!=null?{type:"reference",reference:o.providerReference}:{type:"url",url:new URL(o.url)},...o.providerMetadata!=null?{providerOptions:o.providerMetadata}:{}};if(ca(o))return(a=t==null?void 0:t.convertDataPart)==null?void 0:a.call(t,o)}).filter(lp)});break}case"assistant":{if(n.parts!=null){let o=[];async function a(){var s,i,c,u,d,p,f;if(o.length===0)return;let m=[];for(let v of o)if(ua(v))m.push({type:"text",text:v.text,...v.providerMetadata!=null?{providerOptions:v.providerMetadata}:{}});else if(yp(v))m.push({type:"custom",kind:v.kind,...v.providerMetadata!=null?{providerOptions:v.providerMetadata}:{}});else if(da(v))m.push({type:"file",mediaType:v.mediaType,filename:v.filename,data:v.providerReference!=null?{type:"reference",reference:v.providerReference}:{type:"url",url:new URL(v.url)},...v.providerMetadata!=null?{providerOptions:v.providerMetadata}:{}});else if(bp(v))m.push({type:"reasoning-file",data:{type:"url",url:new URL(v.url)},mediaType:v.mediaType,providerOptions:v.providerMetadata});else if(wp(v))m.push({type:"reasoning",text:v.text,providerOptions:v.providerMetadata});else if(le(v)){let _=Qe(v);if(v.state!=="input-streaming"){if(m.push({type:"tool-call",toolCallId:v.toolCallId,toolName:_,input:v.state==="output-error"?(s=v.input)!=null?s:("rawInput"in v)?v.rawInput:void 0:v.input,providerExecuted:v.providerExecuted,...v.callProviderMetadata!=null?{providerOptions:v.callProviderMetadata}:{}}),v.approval!=null)m.push({type:"tool-approval-request",approvalId:v.approval.id,toolCallId:v.toolCallId,isAutomatic:v.approval.isAutomatic,...v.approval.signature!=null?{signature:v.approval.signature}:{}});if(v.providerExecuted===!0&&v.state!=="approval-responded"&&(v.state==="output-available"||v.state==="output-error")){let j=(i=v.resultProviderMetadata)!=null?i:v.callProviderMetadata;m.push({type:"tool-result",toolCallId:v.toolCallId,toolName:_,output:await hp({toolCallId:v.toolCallId,input:v.input,output:v.state==="output-error"?v.errorText:v.output,tool:vp(t==null?void 0:t.tools,_),errorMode:v.state==="output-error"?"json":"none"}),...j!=null?{providerOptions:j}:{}})}}}else if(ca(v)){let _=(c=t==null?void 0:t.convertDataPart)==null?void 0:c.call(t,v);if(_!=null)m.push(_)}else throw Error(`Unsupported part: ${v}`);if(m.length>0)r.push({role:"assistant",content:m});let y=o.filter((v)=>{var _;return le(v)&&(v.providerExecuted!==!0||((_=v.approval)==null?void 0:_.approved)!=null)});if(y.length>0){let v=[];for(let _ of y){if(((u=_.approval)==null?void 0:u.approved)!=null)v.push({type:"tool-approval-response",approvalId:_.approval.id,approved:_.approval.approved,reason:_.approval.reason,providerExecuted:_.providerExecuted});if(_.state==="approval-responded"&&((d=_.approval)==null?void 0:d.approved)===!1)v.push({type:"tool-result",toolCallId:_.toolCallId,toolName:Qe(_),output:{type:"execution-denied",reason:_.approval.reason},..._.callProviderMetadata!=null?{providerOptions:_.callProviderMetadata}:{}});if(_.providerExecuted===!0)continue;switch(_.state){case"output-denied":{v.push({type:"tool-result",toolCallId:_.toolCallId,toolName:Qe(_),output:{type:"error-text",value:(f=(p=_.approval)==null?void 0:p.reason)!=null?f:"Tool call execution denied."},..._.callProviderMetadata!=null?{providerOptions:_.callProviderMetadata}:{}});break}case"output-error":case"output-available":{let j=Qe(_);v.push({type:"tool-result",toolCallId:_.toolCallId,toolName:j,output:await hp({toolCallId:_.toolCallId,input:_.input,output:_.state==="output-error"?_.errorText:_.output,tool:vp(t==null?void 0:t.tools,j),errorMode:_.state==="output-error"?"text":"none"}),..._.callProviderMetadata!=null?{providerOptions:_.callProviderMetadata}:{}});break}}}if(v.length>0)r.push({role:"tool",content:v})}o=[]}for(let s of n.parts)if(yp(s)||ua(s)||wp(s)||bp(s)||da(s)||le(s)||ca(s))o.push(s);else if(s.type==="step-start")await a();await a();break}break}default:{let o=n.role;throw new _w({originalMessage:n,message:`Unsupported role: ${o}`})}}return r}var ie=l.record(l.string(),gt.optional()),nx=l.record(l.string(),l.string()),rE=pn(()=>Ut(l.array(l.object({id:l.string(),role:l.enum(["system","user","assistant"]),metadata:l.unknown().optional(),parts:l.array(l.union([l.object({type:l.literal("text"),text:l.string(),state:l.enum(["streaming","done"]).optional(),providerMetadata:S.optional()}),l.object({type:l.literal("reasoning"),id:l.string().optional(),text:l.string(),state:l.enum(["streaming","done"]).optional(),providerMetadata:S.optional()}),l.object({type:l.literal("custom"),kind:l.string(),providerMetadata:S.optional()}),l.object({type:l.literal("source-url"),sourceId:l.string(),url:l.string(),title:l.string().optional(),providerMetadata:S.optional()}),l.object({type:l.literal("source-document"),sourceId:l.string(),mediaType:l.string(),title:l.string(),filename:l.string().optional(),providerMetadata:S.optional()}),l.object({type:l.literal("file"),mediaType:l.string(),filename:l.string().optional(),url:l.string(),providerReference:nx.optional(),providerMetadata:S.optional()}),l.object({type:l.literal("reasoning-file"),mediaType:l.string(),url:l.string(),providerMetadata:S.optional()}),l.object({type:l.literal("step-start")}),l.object({type:l.string().startsWith("data-"),id:l.string().optional(),data:l.unknown()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-streaming"),input:l.unknown().optional(),providerExecuted:l.boolean().optional(),callProviderMetadata:S.optional(),output:l.never().optional(),errorText:l.never().optional(),approval:l.never().optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-available"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.never().optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-requested"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.never().optional(),reason:l.never().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-responded"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.boolean(),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-available"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.unknown(),errorText:l.never().optional(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),preliminary:l.boolean().optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-error"),input:l.unknown().optional(),rawInput:l.unknown().optional(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.string(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.literal("dynamic-tool"),toolName:l.string(),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-denied"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!1),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-streaming"),providerExecuted:l.boolean().optional(),callProviderMetadata:S.optional(),input:l.unknown().optional(),output:l.never().optional(),errorText:l.never().optional(),approval:l.never().optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("input-available"),providerExecuted:l.boolean().optional(),input:l.unknown(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.never().optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-requested"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.never().optional(),reason:l.never().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("approval-responded"),input:l.unknown(),providerExecuted:l.boolean().optional(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.boolean(),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-available"),providerExecuted:l.boolean().optional(),input:l.unknown(),output:l.unknown(),errorText:l.never().optional(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),preliminary:l.boolean().optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-error"),providerExecuted:l.boolean().optional(),input:l.unknown().optional(),rawInput:l.unknown().optional(),output:l.never().optional(),errorText:l.string(),callProviderMetadata:S.optional(),resultProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!0),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()}).optional()}),l.object({type:l.string().startsWith("tool-"),toolCallId:l.string(),toolMetadata:ie.optional(),state:l.literal("output-denied"),providerExecuted:l.boolean().optional(),input:l.unknown(),output:l.never().optional(),errorText:l.never().optional(),callProviderMetadata:S.optional(),approval:l.object({id:l.string(),approved:l.literal(!1),reason:l.string().optional(),isAutomatic:l.boolean().optional(),signature:l.string().optional()})})]))}).superRefine((e,t)=>{if(e.role!=="assistant"&&e.parts.length===0)t.addIssue({origin:"array",code:"too_small",minimum:1,inclusive:!0,input:e.parts,path:["parts"],message:"Message must contain at least one part"})})).nonempty("Messages array must not be empty")));var oE=G({prefix:"call",size:24});var sE=G({prefix:"call",size:24});var lE=G({prefix:"aiobj",size:24});function Lp(e){return({url:t,abortSignal:r})=>$w({url:t,maxBytes:e==null?void 0:e.maxBytes,abortSignal:r})}var uE=G({prefix:"aiobj",size:24});var dE=Lp();var ox="AI_NoSuchProviderError",ax=`vercel.ai.error.${ox}`,sx=Symbol.for(ax),ix;ix=sx;var fE=G({prefix:"call",size:24});var mE=Lp();var tf=(e)=>{throw TypeError(e)},Sa=(e,t,r)=>t.has(e)||tf("Cannot "+r),x=(e,t,r)=>(Sa(e,t,"read from private field"),r?r.call(e):t.get(e)),z=(e,t,r)=>t.has(e)?tf("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),T=(e,t,r,n)=>(Sa(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),w=(e,t,r)=>(Sa(e,t,"access private method"),r),rf=String.fromCharCode(27),wE=new RegExp(`${rf}\\[[0-?]*[ -/]*[@-~]`,"g"),va=new RegExp(`^${rf}\\[[0-?]*[ -/]*[@-~]`);function tt(e){let t=0,r=0;while(r<e.length){let n=e.slice(r).match(va);if(n){r+=n[0].length;continue}let o=e.codePointAt(r);if(o==null)break;let a=String.fromCodePoint(o);t+=nf(o),r+=a.length}return t}function Bt(e,t){if(t<=0)return"";let r="",n=0,o=0;while(o<e.length&&n<t){let a=e.slice(o).match(va);if(a){r+=a[0],o+=a[0].length;continue}let s=e.codePointAt(o);if(s==null)break;let i=String.fromCodePoint(s),c=nf(s);if(c>0&&n+c>t)break;r+=i,o+=i.length,n+=c}while(o<e.length){let a=e.slice(o).match(va);if(!a)break;r+=a[0],o+=a[0].length}return r}function nf(e){if(e===9)return 4;if(e<32||e>=127&&e<160)return 0;if(lx(e))return 0;return cx(e)?2:1}function lx(e){return e>=768&&e<=879||e>=1155&&e<=1161||e>=1425&&e<=1469||e===1471||e>=1473&&e<=1474||e>=1476&&e<=1477||e===1479||e>=1552&&e<=1562||e>=1611&&e<=1631||e===1648||e>=1750&&e<=1756||e>=1759&&e<=1764||e>=1767&&e<=1768||e>=1770&&e<=1773||e===1809||e>=1840&&e<=1866||e>=1958&&e<=1968||e>=2027&&e<=2035||e>=2070&&e<=2073||e>=2075&&e<=2083||e>=2085&&e<=2087||e>=2089&&e<=2093||e>=2137&&e<=2139||e>=2259&&e<=2306||e===2362||e===2364||e>=2369&&e<=2376||e===2381||e>=2385&&e<=2391||e===8205||e>=65024&&e<=65039||e>=917760&&e<=917999}function cx(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}var Me={bold:"\x1B[1m",boldOff:"\x1B[22m",italic:"\x1B[3m",italicOff:"\x1B[23m"},ux="─";function dx(e){var t;let r=e.split(`
139
139
  `),n=[];for(let o=0;o<r.length;o+=1){let a=fx(r,o);if(a!=null){n.push(...gx(a)),o=a.endIndex-1;continue}n.push(px((t=r[o])!=null?t:""))}return n.join(`
140
140
  `)}function px(e){if(e.startsWith("### "))return De(`▶ ${e.slice(4)}`);if(e.startsWith("## "))return De(`■ ${e.slice(3)}`);if(e.startsWith("# "))return De(`█ ${e.slice(2)}`);let t=e.match(/^(\s*)[-+*]\s+(.*)$/);if(t){let[,r,n=""]=t;return De(`${r}•${n.length>0?` ${n}`:""}`)}if(/^\d+\. /.test(e))return De(e.replace(/^(\d+)\. /,"$1. "));if(e.startsWith("> "))return De(`│ ${e.slice(2)}`);return De(e)}function De(e){return e.replace(/`([^`]+)`/g,"$1").replace(/\*\*([^*\n]+)\*\*/g,`${Me.bold}$1${Me.boldOff}`).replace(/__([^_\n]+)__/g,`${Me.bold}$1${Me.boldOff}`).replace(/\*([^*\n]+)\*/g,`${Me.italic}$1${Me.italicOff}`).replace(/_([^_\n]+)_/g,`${Me.italic}$1${Me.italicOff}`)}function fx(e,t){var r,n,o;let a=ha((r=e[t])!=null?r:"");if(a==null||a.length<2)return;let s=ha((n=e[t+1])!=null?n:"");if(s==null||s.length!==a.length)return;let i=mx(s);if(i==null)return;let c=[],u=t+2;while(u<e.length){let d=ha((o=e[u])!=null?o:"");if(d==null)break;c.push(hx(d,a.length)),u+=1}return{alignments:i,endIndex:u,header:a,rows:c}}function ha(e){if(!e.includes("|"))return;let t=e.trim();if(t.startsWith("|"))t=t.slice(1);if(t.endsWith("|")&&!t.endsWith("\\|"))t=t.slice(0,-1);let r=[],n="";for(let o=0;o<t.length;o+=1){let a=t[o],s=t[o+1];if(a==="\\"&&s==="|"){n+="|",o+=1;continue}if(a==="|"){r.push(n.trim()),n="";continue}n+=a}return r.push(n.trim()),r}function mx(e){let t=[];for(let r of e){let n=r.match(/^(:)?-{3,}(:)?$/);if(n==null)return;let[,o,a]=n;t.push(o!=null&&a!=null?"center":a!=null?"right":"left")}return t}function hx(e,t){return Array.from({length:t},(r,n)=>{var o;return(o=e[n])!=null?o:""})}function gx(e){let t=e.header.map((a)=>`${Me.bold}${De(a)}${Me.boldOff}`),r=e.rows.map((a)=>a.map(De)),n=[t,...r],o=e.alignments.map((a,s)=>Math.max(3,...n.map((i)=>{var c;return tt((c=i[s])!=null?c:"")})));return[Fp(t,o,e.alignments),o.map((a)=>ux.repeat(a)).join(" "),...r.map((a)=>Fp(a,o,e.alignments))]}function Fp(e,t,r){return e.map((n,o)=>{var a,s;return vx(n,(a=t[o])!=null?a:0,(s=r[o])!=null?s:"left")}).join(" ")}function vx(e,t,r){let n=Math.max(0,t-tt(e));if(r==="right")return`${" ".repeat(n)}${e}`;if(r==="center"){let o=Math.floor(n/2),a=n-o;return`${" ".repeat(o)}${e}${" ".repeat(a)}`}return`${e}${" ".repeat(n)}`}var of="─";function yx(e){var t;let r=Math.max(20,e.width),n=Math.max(8,e.height),o=3,s=n-3-2,i=e.visibleBodyLines.slice(0,s);while(i.length<s)i.push("");return[Bp(r,e.title,e.rightTitle),...i.map((u)=>Wp(u,r)),qp(r),Bp(r,e.inputActive?"Input":"Status"),Wp(e.inputActive?`> ${e.input}${e.inputCursorVisible===!1?" ":"█"}`:(t=e.status)!=null?t:"Streaming... ↑/↓ scroll · Ctrl+C quit",r),qp(r)].join(`
141
141
  `)}function Bp(e,t,r){let n=Math.max(0,e-2),o=t?Bt(` ${t} `,n):"",a=r?Bt(` ${r} `,Math.max(0,n-tt(o))):"",s=Math.max(0,n-tt(o)-tt(a));return`┌${o}${of.repeat(s)}${a}┐`}function qp(e){return`└${of.repeat(e-2)}┘`}function Wp(e,t){let r=t-4,n=Bt(e,r),o=" ".repeat(Math.max(0,r-tt(n)));return`│ ${n}${o} │`}var Gt="\x1B",bx=`${Gt}[H`,wx=`${Gt}[2J`,xx=`${Gt}[2K`,_x=`${Gt}[?2026h`,Sx=`${Gt}[?2026l`,xn,Ft,Lt,Rr,Er,ya,af,Tx=class{constructor(e,t){z(this,ya),z(this,xn),z(this,Ft),z(this,Lt),z(this,Rr,!1),z(this,Er,!1);var r;T(this,Ft,e.write.bind(e)),T(this,xn,(r=t==null?void 0:t.useSynchronizedUpdates)!=null?r:!0),e.write=(n,o,a)=>{if(!x(this,Rr))T(this,Er,!0);return x(this,Ft).call(this,n,o,a)}}present(e){let t=Ix(e),r=x(this,Lt)&&!x(this,Er)?Ex(x(this,Lt),t):`${bx}${wx}${e}`;if(T(this,Lt,t),T(this,Er,!1),r.length===0)return;w(this,ya,af).call(this,r)}reset(){T(this,Lt,void 0)}};xn=new WeakMap;Ft=new WeakMap;Lt=new WeakMap;Rr=new WeakMap;Er=new WeakMap;ya=new WeakSet;af=function(e){T(this,Rr,!0);try{if(!x(this,xn)){x(this,Ft).call(this,e);return}x(this,Ft).call(this,`${_x}${e}${Sx}`)}finally{T(this,Rr,!1)}};function Ix(e){return{lines:e.split(`
@@ -152,7 +152,7 @@ Reason: ${(a=e.approval.reason)!=null?a:"denied"}`}}}function Jp(e,t,r,n){switch
152
152
  `).flatMap((p)=>Wx(p,n));return[i,...d.map((p)=>qx(p,n,r.color)),c]}function qx(e,t,r){let n=Bt(e,t),o=" ".repeat(Math.max(0,t-tt(n)));return`${r}│${me.reset} ${n}${o} ${r}│${me.reset}`}function Wx(e,t){if(e.length===0)return[""];let r=[],n=e;while(tt(n)>t){let o=Vx(n,t);r.push(n.slice(0,o).trimEnd()),n=n.slice(o).trimStart()}return r.push(n),r}function Vx(e,t){let n=Bt(e,t+1).lastIndexOf(" ");if(n>0)return n;return Bt(e,t).length}function Gx(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:gf(n!=null?n:o),outputTokens:$a(n!=null?n:o),outputTokensPerSecond:a==null?void 0:a.outputTokensPerSecond}}function Jx(e){var t;let r=e;return{totalTokens:gf(r==null?void 0:r.usage),outputTokens:$a(r==null?void 0:r.usage),outputTokensPerSecond:(t=r==null?void 0:r.performance)==null?void 0:t.outputTokensPerSecond}}function gf(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=Kx(e),n=$a(e);if(r!=null&&n!=null)return r+n;return}function Kx(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 $a(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 vf(e,t){if(e==null)return;let r=`${e.toLocaleString()} ${e===1?"token":"tokens"}`,n=Hx(e,t);return n==null?r:`${r} ${n}`}function Hx(e,t){if(t==null||t<=0||!Number.isFinite(t))return;return`${Math.round(e/t*100).toLocaleString()}%`}function Yx(e,t){if(t==="outputTokensPerSecond")return Xx(e.outputTokensPerSecond);return vf(e.outputTokens)}function Xx(e){if(e==null)return;return`${Qx(e)} tok/s`}function Qx(e){return Number.isInteger(e)?e.toLocaleString():e.toLocaleString(void 0,{maximumFractionDigits:1})}function Tn(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 e_="outputTokensPerSecond",t_=class{constructor(e){this.chatId=jt();var t,r,n,o;this.agent=e.agent,this.transport=e.transport,this.renderer=(t=n_(e))!=null?t:r_(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:e_,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(ef(c))return;throw c}if(o==null)return}t.push(s_(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=i_(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});l_(c,d,p)}Yp(t,c,s),s=!0,o=void 0;continue}Yp(t,c,s)}}catch(c){if(ef(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:_a(e),abort:n};let o=this.agent,a=await o.stream({prompt:await mn(e,{tools:o.tools}),abortSignal:r.signal,options:void 0,experimental_sandbox:this.sandbox});return{uiMessageStream:o_(a.fullStream,t,e),message:_a(e),abort:n}}};function r_(e){return e.tools===void 0&&e.reasoning===void 0&&e.responseStatistics===void 0&&e.contextSize===void 0?new xa:new xa({tools:e.tools,reasoning:e.reasoning,responseStatistics:e.responseStatistics,contextSize:e.contextSize})}function n_(e){if(e.renderer)return e.renderer;if(!e.screen&&!e.userInput)return;return new xa({tools:e.tools,reasoning:e.reasoning,responseStatistics:e.responseStatistics,contextSize:e.contextSize,input:e.userInput,output:e.screen})}async function*o_(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=_a(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:Xp(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:Qp(p.file.mediaType,p.file.base64),mediaType:p.file.mediaType,providerMetadata:p.providerMetadata};break;case"reasoning-file":yield{type:"reasoning-file",url:Qp(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*Hp(a,s),d=!0,yield{type:"finish",finishReason:p.finishReason,messageMetadata:a_(c!=null?c:p.totalUsage,u)};break;case"abort":yield{type:"abort",reason:p.reason};break;case"error":yield{type:"error",errorText:Xp(p.error)};break}if(!d)yield*Hp(a,s),yield{type:"finish"}}function a_(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*Hp(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 s_(e,t){return{id:e,role:"user",parts:[{type:"text",text:t}]}}function Yp(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 _a(e){let t=e.at(-1);return(t==null?void 0:t.role)==="assistant"?t:void 0}function i_(e){let t=[];for(let[r,n]of e.parts.entries()){if(!le(n)||n.state!=="approval-requested"||n.approval.isAutomatic===!0)continue;t.push({approvalId:n.approval.id,toolCallId:n.toolCallId,toolName:Qe(n),title:n.title,input:n.input,providerExecuted:n.providerExecuted,messageId:e.id,partIndex:r})}return t}function l_(e,t,r){let n=e.parts[t.partIndex];if(!n||!le(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 Xp(e){if(e instanceof Error)return e.message;if(typeof e==="string")return e;return JSON.stringify(e)}function Qp(e,t){return`data:${e};base64,${t}`}function ef(e){return e instanceof Error&&e.message==="Interrupted"}async function yf(e){await new t_(e).run()}async function bf(e){if(e.prompt!==void 0)c_(e.prompt);await yf({title:`broods · ${e.agent.name}`,tools:"full",transport:new xf(e.client,e.agent)})}async function wf(e){let t=Np({stream:_f(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 c_(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 xf{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 mn(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 Up({stream:_f(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 _f(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(),u_(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 u_(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 Sf}from"node:fs";import{mkdir as d_,readFile as p_,writeFile as f_}from"node:fs/promises";import{dirname as Ef,join as Ma,resolve as m_,sep as at}from"node:path";import{fileURLToPath as h_}from"node:url";var Ra=Ma(Ef($n),"update-check.json"),g_=86400000,v_="https://registry.npmjs.org/broods/latest",y_=2000;function Aa(e,t){let r=If(e),n=If(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!Tf(e)&&Tf(t)}async function Ca(e={}){let t=await x_(),r=e.maxAgeMs??g_;if(t&&Date.now()-t.checkedAt<r)return t.latest;let n=await b_();if(n===null)return t?.latest??null;return await __({checkedAt:Date.now(),latest:n}),n}function kf(e=m_(process.cwd()),t=h_(import.meta.url)){let r=`${at}node_modules${at}`,n=t.lastIndexOf(r),o=n===-1?null:t.slice(0,n),a=o===null?t.startsWith(`${e}${at}`):e===o||e.startsWith(`${o}${at}`),i=t.includes(`${at}.bun${at}install${at}global${at}`)||a&&w_(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 b_(){try{let e=await fetch(v_,{signal:AbortSignal.timeout(y_),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 w_(e){return Sf(Ma(e,"bun.lock"))||Sf(Ma(e,"bun.lockb"))}function Tf(e){return e.includes("-")}async function x_(){try{let e=JSON.parse(await p_(Ra,"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 If(e){let[t]=e.trim().replace(/^v/,"").split("-");return(t??"").split(".").slice(0,3).map((r)=>Number.parseInt(r,10)||0)}async function __(e){try{await d_(Ef(Ra),{recursive:!0}),await f_(Ra,`${JSON.stringify(e)}
155
- `,"utf8")}catch{}}var $f={name:"broods",version:"0.20.0",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 st=$f.version,lt="https://dashboard.broods.app",Jt="eu-west-1",R_=[{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:
155
+ `,"utf8")}catch{}}var $f={name:"broods",version:"0.22.0",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 st=$f.version,lt="https://dashboard.broods.app",Jt="eu-west-1",R_=[{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)
@@ -298,14 +298,14 @@ ${ge}`};async function A_(){let[,,e,...t]=process.argv;switch(e){case void 0:cas
298
298
 
299
299
  ${Oa}`)}}function Ee(e){return Uf[e]??Oa}async function C_(e){let t=we(e,"--force"),r=H(process.cwd(),ue);await Za(H(r,Ce),{recursive:!0}),await Rn(H(r,"index.ts"),Yf(),t),await Rn(H(r,".gitignore"),`_generated
300
300
  .cache
301
- `,t);let n=E(e,"--dashboard-url")??lt;await Ya({dashboardUrl:n,baseUrl:Da(n),project:E(e,"--project")??Ht(process.cwd()),stage:E(e,"--stage")??"development",region:E(e,"--region")??Jt,force:t}),await Ha(),console.log(`Created ${ue}/`)}async function O_(e){let t=te(),r=E(e,"--dashboard-url")??t.dashboardUrl??lt,n=await Bn(r),o=E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),a=E(e,"--stage")??ct()??"development";await Ya({dashboardUrl:n.dashboardUrl??r,baseUrl:n.baseUrl,project:o,stage:a,region:E(e,"--region")??process.env.BROODS_REGION??Jt,force:!1});let s=n.user?.email||n.user?.name||n.user?.authId,i=n.org?`${n.org.name} (${n.org.slug})`:void 0,c=n.account?.username;if(console.log(`Logged in to ${n.dashboardUrl}`),s)console.log(`User: ${s}`);if(i)console.log(`Org: ${i}`);if(c)console.log(`Account: ${c}`);await P_(n.baseUrl,n.token,o,a)}async function P_(e,t,r,n){try{let a=await new ae({baseUrl:e,token:t}).getRuntimeKey(r,n);if(a?.apiKey)await Kt("BROODS_API_KEY",a.apiKey),console.log(`Wrote BROODS_API_KEY (${a.keyHint}) to .env.local`)}catch{}}async function N_(e){let t=te(),r=Ba(e),n=E(e,"--dashboard-url")??t.dashboardUrl??lt;console.log(`broods v${st}`),console.log(`Dashboard: ${n}`),console.log(`Project: ${r.project}`),console.log(`Stage: ${r.stage}`);let o;try{o=await ke(E(e,"--base-url"))}catch{J("Not logged in. Run `broods login`.");return}console.log(`Server: ${o.baseUrl}`);let a=new ae({baseUrl:o.baseUrl,token:o.token}),s=await a.getOnboarding(),i=s.orgs.find((m)=>m.id===s.currentOrgId);if(s.user)console.log(`User: ${s.user.email}`);if(console.log(`Org: ${i?zr(i):s.currentOrgId}`),s.account)console.log(`Account: ${s.account.username} (${s.account.status})`);let c=process.env.BROODS_API_KEY,u=Nr("BROODS_API_KEY")?"your shell":".env.local",d=null,p=null;try{d=await a.getRuntimeKey(r.project,r.stage)}catch(m){p=m instanceof Error?m.message:String(m)}if(p)console.log("Runtime key: unavailable"),J(`⚠ Could not read the runtime key: ${p}`);else if(!d?.apiKey)console.log("Runtime key: none for this scope"),J(`${r.project}/${r.stage} does not exist in ${i?.name??"this org"} yet. \`broods dev\` will create it.`);else if(!c)console.log(`Runtime key: ${d.keyHint} (not in .env.local)`),J("BROODS_API_KEY is not set locally. Run `broods dev`.");else if(c===d.apiKey)console.log(`Runtime key: ${d.keyHint} (matches this org and stage)`);else console.log(`Runtime key: ${d.keyHint} expected`),J(`⚠ BROODS_API_KEY from ${u} belongs to a different org or stage. Run \`broods stage use ${r.stage}\` to repoint it.`);let f=s.projects.map((m)=>m.name);if(!f.includes(r.project))J(`This org has no project named ${r.project}. It has: ${f.length>0?f.join(", "):"none"}.`)}async function z_(e){let[t,r]=Rt(e);if(!t){console.log(Ee("org"));return}let n=t==="list"||t==="ls",o=t==="use"||t==="select";if(!n&&!o&&!(t==="create"||t==="new"))throw Error(`Unknown org subcommand: ${t}
301
+ `,t);let n=E(e,"--dashboard-url")??lt;await Ya({dashboardUrl:n,baseUrl:Da(n),project:E(e,"--project")??Ht(process.cwd()),stage:E(e,"--stage")??"development",region:E(e,"--region")??Jt,force:t}),await Ha(),console.log(`Created ${ue}/`)}async function O_(e){let t=te(),r=E(e,"--dashboard-url")??t.dashboardUrl??lt,n=await Bn(r),o=E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),a=E(e,"--stage")??ct()??"development";await Ya({dashboardUrl:n.dashboardUrl??r,baseUrl:n.baseUrl,project:o,stage:a,region:E(e,"--region")??process.env.BROODS_REGION??Jt,force:!1});let s=n.user?.email||n.user?.name||n.user?.authId,i=n.org?`${n.org.name} (${n.org.slug})`:void 0,c=n.account?.username;if(console.log(`Logged in to ${n.dashboardUrl}`),s)console.log(`User: ${s}`);if(i)console.log(`Org: ${i}`);if(c)console.log(`Account: ${c}`);await P_(n.baseUrl,n.token,o,a)}async function P_(e,t,r,n){try{let a=await new ae({baseUrl:e,token:t}).getRuntimeKey(r,n);if(a?.apiKey)await Kt("BROODS_API_KEY",a.apiKey),console.log(`Wrote BROODS_API_KEY (${a.keyHint}) to .env.local`)}catch{}}async function N_(e){let t=te(),r=Ba(e),n=E(e,"--dashboard-url")??t.dashboardUrl??lt;console.log(`broods v${st}`),console.log(`Dashboard: ${n}`),console.log(`Project: ${r.project}`),console.log(`Stage: ${r.stage}`);let o;try{o=await ke(E(e,"--base-url"))}catch{K("Not logged in. Run `broods login`.");return}console.log(`Server: ${o.baseUrl}`);let a=new ae({baseUrl:o.baseUrl,token:o.token}),s=await a.getOnboarding(),i=s.orgs.find((m)=>m.id===s.currentOrgId);if(s.user)console.log(`User: ${s.user.email}`);if(console.log(`Org: ${i?zr(i):s.currentOrgId}`),s.account)console.log(`Account: ${s.account.username} (${s.account.status})`);let c=process.env.BROODS_API_KEY,u=Nr("BROODS_API_KEY")?"your shell":".env.local",d=null,p=null;try{d=await a.getRuntimeKey(r.project,r.stage)}catch(m){p=m instanceof Error?m.message:String(m)}if(p)console.log("Runtime key: unavailable"),K(`⚠ Could not read the runtime key: ${p}`);else if(!d?.apiKey)console.log("Runtime key: none for this scope"),K(`${r.project}/${r.stage} does not exist in ${i?.name??"this org"} yet. \`broods dev\` will create it.`);else if(!c)console.log(`Runtime key: ${d.keyHint} (not in .env.local)`),K("BROODS_API_KEY is not set locally. Run `broods dev`.");else if(c===d.apiKey)console.log(`Runtime key: ${d.keyHint} (matches this org and stage)`);else console.log(`Runtime key: ${d.keyHint} expected`),K(`⚠ BROODS_API_KEY from ${u} belongs to a different org or stage. Run \`broods stage use ${r.stage}\` to repoint it.`);let f=s.projects.map((m)=>m.name);if(!f.includes(r.project))K(`This org has no project named ${r.project}. It has: ${f.length>0?f.join(", "):"none"}.`)}async function z_(e){let[t,r]=Rt(e);if(!t){console.log(Ee("org"));return}let n=t==="list"||t==="ls",o=t==="use"||t==="select";if(!n&&!o&&!(t==="create"||t==="new"))throw Error(`Unknown org subcommand: ${t}
302
302
 
303
303
  ${Ee("org")}`);let s=te(),i=E(e,"--dashboard-url")??s.dashboardUrl??lt,c=await Fa(i),u=new ae({baseUrl:c.baseUrl,token:c.token}),d=await u.getOnboarding();if(n){for(let f of d.orgs){let m=f.accountStatus==="active"?"":` [${f.accountStatus} account]`;console.log(Qt(`${zr(f)}${m}`,f.id===d.currentOrgId))}console.log(`
304
304
  Only orgs where you are owner or admin can be selected from the CLI.`);return}if(o){let f=d.orgs.filter((y)=>y.accountStatus==="active"),m=r?f.find((y)=>y.slug===r||y.name===r||y.id===r):await tr("Select organization",f,zr,f.findIndex((y)=>y.id===d.currentOrgId));if(!m)throw Error(`No selectable organization matches "${r}". Run \`broods org list\`.`);await Af(u,c,await u.selectOnboardingOrg(m.id),e);return}let p=r??await At("Organization name",Ht(process.cwd()));if(!p.trim())throw Error("Organization name is required.");await Af(u,c,await u.createOnboardingOrg(p),e)}async function j_(e){let[t,r]=Rt(e);if(!t){console.log(Ee("stage"));return}let n=t==="list"||t==="ls",o=t==="use"||t==="select";if(!n&&!o&&!(t==="create"||t==="new"))throw Error(`Unknown stage subcommand: ${t}
305
305
 
306
- ${Ee("stage")}`);let s=te(),i=E(e,"--dashboard-url")??s.dashboardUrl??lt,c=Ba(e),u=await Fa(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(J_(_,c.stage));return}if(o){let v=await d.listStages(c.project),_=r?v.find((C)=>za(C.name,r)):await tr("Select stage",v,Ff,v.findIndex((C)=>za(C.name,c.stage)));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=Nr("BROODS_STAGE");await Kt("BROODS_STAGE",_.name),console.log(`Stage: ${_.name} (wrote BROODS_STAGE)`),Na("BROODS_STAGE",j),await Pa(d,{project:c.project,stage:_.name});return}let p=r??await At("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=Nr("BROODS_STAGE");await Kt("BROODS_STAGE",m.stage.name),console.log(`Stage: ${m.stage.name} (wrote BROODS_STAGE)`),Na("BROODS_STAGE",y),await Pa(d,{project:c.project,stage:m.stage.name})}async function D_(e){let{manifest:t,config:r}=await qe({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);Br(Ln(t,a?.manifest??null))}async function U_(e){let{manifest:t,config:r,resourceAliases:n,channels:o}=await qe({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 Zr(t,i.ids,process.cwd(),n,i.deployment,o),await Kf(),await Ha(),console.log(`Synced ${i.manifest.resources.length} resources to ${t.project}/${t.stage}`),await Zf(i.deployment),Bf(o,i),Lf(i)}async function Zf(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 Lf(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 Z_(){let e=await Ca({maxAgeMs:0});if(e===null)throw Error("Could not reach the npm registry to check for a newer broods.");if(!Aa(e,st)){console.log(`broods v${st} is already the newest release.`);return}let t=kf();console.log(`Updating broods ${st} → ${e} ${t.global?"globally":"in this project"}`),console.log(`$ ${[t.command,...t.args].join(" ")}`),await new Promise((r,n)=>{let o=Df(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 Rf(){let e=await Ca();if(e===null||!Aa(e,st))return;J(`broods ${e} is out, you are on ${st}. Run \`broods update\`.`)}async function L_(e){if(await B_(e),we(e,"--once")){if(!process.env.BROODS_SUPPRESS_DEV_TARGET)await Of(e),await Rf();let d=Mf.now();await Q_(e),As(Mf.now()-d);return}let t=jf(M_(),`broods-declined-${process.pid}.txt`),r={...process.env,BROODS_DECLINED_FILE:t,BROODS_SUPPRESS_DEV_TARGET:"1",BROODS_RELOAD_ENV:"1"};await Of(e),await Rf(),await Cf(e,r);let n,o=!1,a=!1,s=await Pf(),i=()=>{if(o){a=!0;return}o=!0,Pf().then(async(d)=>{if(d===s)return;s=d,await Cf(e,r)}).catch((d)=>console.error(d instanceof Error?d.message:String(d))).finally(()=>{if(o=!1,a)a=!1,i()})},c=$_(H(process.cwd(),ue),{recursive:!0},(d,p)=>{if(!p||mS(p))return;clearTimeout(n),n=setTimeout(i,150)}),u=new AbortController;F_(e,u.signal),process.on("SIGINT",()=>{u.abort(),c.close(),process.exit(0)})}async function F_(e,t){let r;try{r=Va()}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 Ja(e,r))}catch{return}let a=Ga(e);try{for await(let s of Fr({baseUrl:r.baseUrl,apiKey:r.apiKey,project:n,stage:o},{backfill:0,minLevel:a,signal:t}))console.log(Ka(s))}catch(s){if(!t.aborted)console.error(`live logs: ${s instanceof Error?s.message:String(s)}`)}}async function B_(e){await q_(),await W_(e)}async function q_(){let e=H(process.cwd(),ue);await Za(H(e,Ce),{recursive:!0});let t=[];if(await Xa(e,t),t.length>0)return;await Rn(H(e,"index.ts"),Yf(),!1),await Rn(H(e,".gitignore"),`_generated
306
+ ${Ee("stage")}`);let s=te(),i=E(e,"--dashboard-url")??s.dashboardUrl??lt,c=Ba(e),u=await Fa(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(J_(_,c.stage));return}if(o){let v=await d.listStages(c.project),_=r?v.find((C)=>za(C.name,r)):await tr("Select stage",v,Ff,v.findIndex((C)=>za(C.name,c.stage)));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=Nr("BROODS_STAGE");await Kt("BROODS_STAGE",_.name),console.log(`Stage: ${_.name} (wrote BROODS_STAGE)`),Na("BROODS_STAGE",j),await Pa(d,{project:c.project,stage:_.name});return}let p=r??await At("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=Nr("BROODS_STAGE");await Kt("BROODS_STAGE",m.stage.name),console.log(`Stage: ${m.stage.name} (wrote BROODS_STAGE)`),Na("BROODS_STAGE",y),await Pa(d,{project:c.project,stage:m.stage.name})}async function D_(e){let{manifest:t,config:r}=await qe({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);Br(Ln(t,a?.manifest??null))}async function U_(e){let{manifest:t,config:r,resourceAliases:n,channels:o}=await qe({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 Zr(t,i.ids,process.cwd(),n,i.deployment,o),await Kf(),await Ha(),console.log(`Synced ${i.manifest.resources.length} resources to ${t.project}/${t.stage}`),await Zf(i.deployment),Bf(o,i),Lf(i)}async function Zf(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 Lf(e){let t=e.warnings?.missingPolicies??[];if(t.length>0)K(`⚠ ${t.length} policy ref(s) in agent config match no policy resource in this deploy and will be ignored at runtime: ${t.join(", ")}`)}async function Z_(){let e=await Ca({maxAgeMs:0});if(e===null)throw Error("Could not reach the npm registry to check for a newer broods.");if(!Aa(e,st)){console.log(`broods v${st} is already the newest release.`);return}let t=kf();console.log(`Updating broods ${st} → ${e} ${t.global?"globally":"in this project"}`),console.log(`$ ${[t.command,...t.args].join(" ")}`),await new Promise((r,n)=>{let o=Df(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 Rf(){let e=await Ca();if(e===null||!Aa(e,st))return;K(`broods ${e} is out, you are on ${st}. Run \`broods update\`.`)}async function L_(e){if(await B_(e),we(e,"--once")){if(!process.env.BROODS_SUPPRESS_DEV_TARGET)await Of(e),await Rf();let d=Mf.now();await Q_(e),As(Mf.now()-d);return}let t=jf(M_(),`broods-declined-${process.pid}.txt`),r={...process.env,BROODS_DECLINED_FILE:t,BROODS_SUPPRESS_DEV_TARGET:"1",BROODS_RELOAD_ENV:"1"};await Of(e),await Rf(),await Cf(e,r);let n,o=!1,a=!1,s=await Pf(),i=()=>{if(o){a=!0;return}o=!0,Pf().then(async(d)=>{if(d===s)return;s=d,await Cf(e,r)}).catch((d)=>console.error(d instanceof Error?d.message:String(d))).finally(()=>{if(o=!1,a)a=!1,i()})},c=$_(H(process.cwd(),ue),{recursive:!0},(d,p)=>{if(!p||mS(p))return;clearTimeout(n),n=setTimeout(i,150)}),u=new AbortController;F_(e,u.signal),process.on("SIGINT",()=>{u.abort(),c.close(),process.exit(0)})}async function F_(e,t){let r;try{r=Va()}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 Ja(e,r))}catch{return}let a=Ga(e);try{for await(let s of Fr({baseUrl:r.baseUrl,apiKey:r.apiKey,project:n,stage:o},{backfill:0,minLevel:a,signal:t}))console.log(Ka(s))}catch(s){if(!t.aborted)console.error(`live logs: ${s instanceof Error?s.message:String(s)}`)}}async function B_(e){await q_(),await W_(e)}async function q_(){let e=H(process.cwd(),ue);await Za(H(e,Ce),{recursive:!0});let t=[];if(await Xa(e,t),t.length>0)return;await Rn(H(e,"index.ts"),Yf(),!1),await Rn(H(e,".gitignore"),`_generated
307
307
  .cache
308
- `,!1),console.log(`Created starter ${ue}/`)}async function W_(e){let t=H(process.cwd(),".env.local"),r=await It(t),n=Hf(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??lt,p=E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),f=E(e,"--stage")??ct()??"development",m=E(e,"--region")??process.env.BROODS_REGION??Jt;if(process.stdin.isTTY&&s){let y=await Fa(d),v=new ae({baseUrl:y.baseUrl,token:y.token}),_=await V_(v,y),j=await K_(v,_);if(p=await X_(j,p),!p.trim())throw Error("Project name is required.")}if(process.stdin.isTTY&&i){if(f=await At("Stage",f),!f.trim())throw Error("Stage is required.")}if(process.stdin.isTTY&&c){let y=[...R_];m=await tr("Select service region",y,(v)=>v.label,y.findIndex((v)=>v.region===m)).then((v)=>v.region)}await Ya({dashboardUrl:d,baseUrl:u.baseUrl??Da(d),project:p,stage:f,region:m,force:!1})}async function Fa(e){try{return await ke()}catch(t){if(!process.stdin.isTTY)throw t;return J("No CLI login found. Starting browser login."),await Bn(e)}}async function V_(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 Af(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 qr({...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: ${zr(o)}`),console.log(`Projects: ${r.projects.length>0?r.projects.map((a)=>a.name).join(", "):"none yet"}`),await Pa(e,Ba(n))}async function Pa(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=Nr("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`),Na("BROODS_API_KEY",n)}function Na(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 zr(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 G_(e){return e.slug===e.name?e.name:`${e.name} (${e.slug})`}function J_(e,t){return Qt(Ff(e),za(e.name,t))}function Ff(e){let t=e.deploymentRegion?`, ${e.deploymentRegion}`:"";return`${e.name} (${e.kind}${t}) — ${e.agentCount} agent(s), ${e.variableCount} env var(s)`}function za(e,t){return e.trim().toLowerCase()===t.trim().toLowerCase()}function Ba(e){return te(),{project:E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),stage:E(e,"--stage")??ct()??"development"}}async function K_(e,t){let r=t.orgs.filter((a)=>a.accountStatus==="active"),n={kind:"create",name:"New organization"},o=await tr("Select organization",[...r,n],(a)=>("kind"in a)?"Create new organization":zr(a),r.findIndex((a)=>a.id===t.currentOrgId));if("kind"in o){let a=await At("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 H_(e,t){return e.projects.find((n)=>n.name===t||n.slug===t)?.name??t}function Y_(e,t){return e.projects.find((r)=>r.name===t||r.slug===t)}async function X_(e,t){let r=H_(e,t);if(e.projects.length===0)return At("Project name",r);while(!0){let n=await zs("Select project",e.projects,G_,{hint:"type a new project name",defaultValue:r}),o=typeof n==="string"?n:n.name,a=Y_(e,o);if(!a)return o;if(await Fn(`Continue with the existing project ${a.name}?`))return a.name}}function Cf(e,t){return new Promise((r,n)=>{let o=process.argv[1]??"",a=Df(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 Q_(e){let{manifest:t,config:r,resourceAliases:n,channels:o}=await qe({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=Ln(t,i?.manifest??null);Br(c.filter((y)=>y.operation!=="delete")),await eS(s,t,qf(a.baseUrl,a.token));let u=await s.putManifest(t,!1);await Zr(t,u.ids,process.cwd(),n,u.deployment,o),await Kf(),await Ha();let d=await nS(),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:"),Br(f),await Fn(`Delete ${f.length} resource(s) from ${t.project}/${t.stage}?`))u=await s.putManifest(t,!0),await Zr(t,u.ids,process.cwd(),n,u.deployment,o),await aS(),m=!0;else await oS(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 Zf(u.deployment),Bf(o,u),Lf(u),u}function Bf(e,t){let r=t.deployment;if(!r||e.length===0)return;let n=new Ua,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 eS(e,t,r){let n=gs(t).filter((c)=>{let u=process.env[c];return!c.startsWith("BROODS_")&&u!==void 0&&u!==""});if(n.length===0)return;let o=await qa(),a=o[Mn(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]!==ja(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]=ja(process.env[c]);o[Mn(r,t.project,t.stage)]=a,await Wa(o),Os(i)}function qf(e,t){return`${e}:${La("sha256").update(t).digest("hex").slice(0,16)}`}function Mn(e,t,r){return`${e}:${t}:${r}`}function Wf(){return H(E_($n),"env-sync.json")}function ja(e){return La("sha256").update(e).digest("hex")}async function qa(){let e=await It(Wf());if(!e)return{};try{let t=JSON.parse(e);return t&&typeof t==="object"?t:{}}catch{return{}}}async function Wa(e){let t=Wf();await Za(H(t,".."),{recursive:!0}),await it(t,`${JSON.stringify(e,null,2)}
308
+ `,!1),console.log(`Created starter ${ue}/`)}async function W_(e){let t=H(process.cwd(),".env.local"),r=await It(t),n=Hf(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??lt,p=E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),f=E(e,"--stage")??ct()??"development",m=E(e,"--region")??process.env.BROODS_REGION??Jt;if(process.stdin.isTTY&&s){let y=await Fa(d),v=new ae({baseUrl:y.baseUrl,token:y.token}),_=await V_(v,y),j=await K_(v,_);if(p=await X_(j,p),!p.trim())throw Error("Project name is required.")}if(process.stdin.isTTY&&i){if(f=await At("Stage",f),!f.trim())throw Error("Stage is required.")}if(process.stdin.isTTY&&c){let y=[...R_];m=await tr("Select service region",y,(v)=>v.label,y.findIndex((v)=>v.region===m)).then((v)=>v.region)}await Ya({dashboardUrl:d,baseUrl:u.baseUrl??Da(d),project:p,stage:f,region:m,force:!1})}async function Fa(e){try{return await ke()}catch(t){if(!process.stdin.isTTY)throw t;return K("No CLI login found. Starting browser login."),await Bn(e)}}async function V_(e,t){try{return await e.getOnboarding()}catch(r){if(!t.org)throw r;return K("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 Af(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)K("BROODS_TOKEN is set, so the switch applies to this token only and was not stored.");else await qr({...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: ${zr(o)}`),console.log(`Projects: ${r.projects.length>0?r.projects.map((a)=>a.name).join(", "):"none yet"}`),await Pa(e,Ba(n))}async function Pa(e,t){let r;try{r=await e.getRuntimeKey(t.project,t.stage)}catch(o){K(`⚠ 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){K(`⚠ ${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=Nr("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`),Na("BROODS_API_KEY",n)}function Na(e,t){if(!t)return;K(`⚠ ${e} is exported in your shell, which wins over .env.local. Run \`unset ${e}\` or the next broods command keeps the old value.`)}function zr(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 G_(e){return e.slug===e.name?e.name:`${e.name} (${e.slug})`}function J_(e,t){return Qt(Ff(e),za(e.name,t))}function Ff(e){let t=e.deploymentRegion?`, ${e.deploymentRegion}`:"";return`${e.name} (${e.kind}${t}) — ${e.agentCount} agent(s), ${e.variableCount} env var(s)`}function za(e,t){return e.trim().toLowerCase()===t.trim().toLowerCase()}function Ba(e){return te(),{project:E(e,"--project")??process.env.BROODS_PROJECT??Ht(process.cwd()),stage:E(e,"--stage")??ct()??"development"}}async function K_(e,t){let r=t.orgs.filter((a)=>a.accountStatus==="active"),n={kind:"create",name:"New organization"},o=await tr("Select organization",[...r,n],(a)=>("kind"in a)?"Create new organization":zr(a),r.findIndex((a)=>a.id===t.currentOrgId));if("kind"in o){let a=await At("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 H_(e,t){return e.projects.find((n)=>n.name===t||n.slug===t)?.name??t}function Y_(e,t){return e.projects.find((r)=>r.name===t||r.slug===t)}async function X_(e,t){let r=H_(e,t);if(e.projects.length===0)return At("Project name",r);while(!0){let n=await zs("Select project",e.projects,G_,{hint:"type a new project name",defaultValue:r}),o=typeof n==="string"?n:n.name,a=Y_(e,o);if(!a)return o;if(await Fn(`Continue with the existing project ${a.name}?`))return a.name}}function Cf(e,t){return new Promise((r,n)=>{let o=process.argv[1]??"",a=Df(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 Q_(e){let{manifest:t,config:r,resourceAliases:n,channels:o}=await qe({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=Ln(t,i?.manifest??null);Br(c.filter((y)=>y.operation!=="delete")),await eS(s,t,qf(a.baseUrl,a.token));let u=await s.putManifest(t,!1);await Zr(t,u.ids,process.cwd(),n,u.deployment,o),await Kf(),await Ha();let d=await nS(),p=c.filter((y)=>y.operation==="delete"),f=p.filter((y)=>!d.has(`${y.kind}:${y.name}`)),m=!1;if(f.length>0)if(K("⚠ These remote resources are no longer declared locally:"),Br(f),await Fn(`Delete ${f.length} resource(s) from ${t.project}/${t.stage}?`))u=await s.putManifest(t,!0),await Zr(t,u.ids,process.cwd(),n,u.deployment,o),await aS(),m=!0;else await oS(f.map((y)=>`${y.kind}:${y.name}`));if(!m&&p.length>0){let y=p.map((v)=>`${v.kind}:${v.name}`).join(", ");K(`⚠ ${p.length} undeclared resource(s) kept remotely: ${y} — re-declare in code or run \`deploy --prune\` to remove.`)}return await Zf(u.deployment),Bf(o,u),Lf(u),u}function Bf(e,t){let r=t.deployment;if(!r||e.length===0)return;let n=new Ua,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 eS(e,t,r){let n=gs(t).filter((c)=>{let u=process.env[c];return!c.startsWith("BROODS_")&&u!==void 0&&u!==""});if(n.length===0)return;let o=await qa(),a=o[Mn(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]!==ja(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]=ja(process.env[c]);o[Mn(r,t.project,t.stage)]=a,await Wa(o),Os(i)}function qf(e,t){return`${e}:${La("sha256").update(t).digest("hex").slice(0,16)}`}function Mn(e,t,r){return`${e}:${t}:${r}`}function Wf(){return H(E_($n),"env-sync.json")}function ja(e){return La("sha256").update(e).digest("hex")}async function qa(){let e=await It(Wf());if(!e)return{};try{let t=JSON.parse(e);return t&&typeof t==="object"?t:{}}catch{return{}}}async function Wa(e){let t=Wf();await Za(H(t,".."),{recursive:!0}),await it(t,`${JSON.stringify(e,null,2)}
309
309
  `,"utf8")}async function tS(e,t,r,n,o){let a=await qa(),s=Mn(e,t,r);a[s]={...a[s],[n]:ja(o)},await Wa(a)}async function rS(e,t,r,n){let o=await qa(),a=Mn(e,t,r);if(!o[a]||!(n in o[a]))return;delete o[a][n],await Wa(o)}async function Of(e){let t=te(),{manifest:r,config:n}=await qe({project:E(e,"--project"),stage:E(e,"--stage"),command:"dev"}),o=await ke(E(e,"--base-url")??n.baseUrl);Cs({project:r.project,stage:r.stage,dashboardUrl:E(e,"--dashboard-url")??t.dashboardUrl??o.dashboardUrl??n.dashboardUrl??lt})}async function nS(){let e=process.env.BROODS_DECLINED_FILE;if(!e)return new Set;let t=await It(e);return new Set(t.split(/\r?\n/).map((r)=>r.trim()).filter(Boolean))}async function oS(e){let t=process.env.BROODS_DECLINED_FILE;if(!t||e.length===0)return;await it(t,`${e.join(`
310
310
  `)}
311
311
  `,{flag:"a"})}async function aS(){let e=process.env.BROODS_DECLINED_FILE;if(!e)return;await it(e,"","utf8")}async function sS(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}
@@ -318,7 +318,7 @@ ${Ee("agent")}`)}async function Gf(e){let{manifest:t,config:r}=await qe({project
318
318
 
319
319
  ${Ee("agent")}`);let{manifest:r,agents:n}=await Gf(t),o=n.find((f)=>f.name===e);if(!o)throw Error(`Unknown local agent: ${e}`);let a=o.config,s=typeof a.sandbox==="string"?a.sandbox:void 0,i=Array.isArray(a.workspaces)?a.workspaces.map((f)=>typeof f==="string"?f:f.name).filter(Boolean):[],c=dt(a.tools)?Object.keys(a.tools):[],u=dt(a.channels)?Object.keys(a.channels):[],d=dt(a.subagent)&&Array.isArray(a.subagent.allowed)?a.subagent.allowed.map((f)=>typeof f==="string"?f:f.name).filter(Boolean):[],p=dt(a.hooks)&&Array.isArray(a.hooks.webhooks)?a.hooks.webhooks.filter(dt):[];if(console.log(`Agent: ${o.name}`),console.log(` Project/Stage: ${r.project}/${r.stage}`),console.log(` Deployed id: ${o.agentId??"not deployed"}`),console.log(` Public access: ${a.publicAccess===!0?"public (SSE/WebSocket enabled)":"private (secured by default)"}`),console.log(` Model: ${Jf(a)}`),console.log(` Sandbox: ${s??"—"}`),console.log(` Workspaces: ${i.length>0?i.join(", "):"—"}`),console.log(` Tools: ${c.length>0?c.join(", "):"—"}`),console.log(` Subagents: ${d.length>0?d.join(", "):"—"}`),console.log(` Channels: ${u.length>0?u.join(", "):"—"}`),p.length>0)console.log(" Webhooks:"),p.forEach((f,m)=>{let y=Array.isArray(f.events)&&f.events.length>0?f.events.join(", "):"all events",v=f.enabled===!1?"disabled":"enabled";console.log(` [${m}] ${v} → ${f.url??"—"} (${y})`)})}function Jf(e){let t=dt(e.model)?e.model:{},r=typeof t.provider==="string"?t.provider:void 0,n=typeof t.modelId==="string"?t.modelId:void 0;if(r&&n)return`${r}/${n}`;return n??r??"unconfigured model"}async function fS(e){let[t,...r]=Rt(e);if(!t)throw Error(`Missing agent name.
320
320
 
321
- ${Ee("run")}`);let n=r.join(" "),o=Boolean(process.stdin.isTTY&&process.stdout.isTTY);if(!o&&!n)throw Error("Usage: broods run <agent> <prompt>. Omit the prompt for an interactive session, which requires a TTY.");let{manifest:a,config:s}=await qe({project:E(e,"--project"),stage:E(e,"--stage"),command:"dev"}),i=await ke(E(e,"--base-url")??s.baseUrl),c=a.resources.find((y)=>y.kind==="agent"&&y.name===t);if(!c)throw Error(`Unknown local agent: ${t}`);let d=(await new ae({baseUrl:i.baseUrl,token:i.token}).getManifest(a.project,a.stage))?.ids.agents[t];if(!d)throw Error(`Agent ${t} is not synced yet. Run broods dev --once or broods deploy first.`);let p=await new ae({baseUrl:i.baseUrl,token:i.token}).getRuntimeKey(a.project,a.stage).catch(()=>null);if(p?.apiKey)await Kt("BROODS_API_KEY",p.apiKey);if(c.config.publicAccess!==!0)J(`⚠ Agent "${t}" does not set publicAccess: true. The public endpoint is secured by default; if the deployed agent has not enabled it, this run will be refused.`);let f=new Ua({baseUrl:E(e,"--base-url")??process.env.BROODS_BASE_URL??process.env.BROODS_HOST??i.baseUrl,...p?.apiKey?{apiKey:p.apiKey}:{}}),m={kind:"agent",name:t,id:d,project:a.project,stage:a.stage,...p?.endpointId?{endpointId:p.endpointId}:{},...p?.projectSlug?{projectSlug:p.projectSlug}:{},...p?.stageSlug?{stageSlug:p.stageSlug}:{}};try{if(o){await bf({client:f,agent:m,...n?{prompt:n}:{}});return}await wf({client:f,agent:m,prompt:n})}catch(y){if((y instanceof Error?y.message:String(y)).includes("public_access_disabled"))throw Error(`Agent "${t}" is not publicly accessible (secured by default). Set publicAccess: true in its config and redeploy, or enable Public access in the dashboard.`);throw y}}async function Rn(e,t,r){try{await it(e,t,{flag:r?"w":"wx"})}catch(n){if(n.code==="EEXIST")return;throw n}}async function Kf(){let e=H(process.cwd(),ue,".gitignore"),t=await It(e),n=["_generated",".cache"].filter((a)=>!t.split(/\r?\n/).some((s)=>s.trim()===a));if(n.length===0)return;let o=t?t.trimEnd()+`
321
+ ${Ee("run")}`);let n=r.join(" "),o=Boolean(process.stdin.isTTY&&process.stdout.isTTY);if(!o&&!n)throw Error("Usage: broods run <agent> <prompt>. Omit the prompt for an interactive session, which requires a TTY.");let{manifest:a,config:s}=await qe({project:E(e,"--project"),stage:E(e,"--stage"),command:"dev"}),i=await ke(E(e,"--base-url")??s.baseUrl),c=a.resources.find((y)=>y.kind==="agent"&&y.name===t);if(!c)throw Error(`Unknown local agent: ${t}`);let d=(await new ae({baseUrl:i.baseUrl,token:i.token}).getManifest(a.project,a.stage))?.ids.agents[t];if(!d)throw Error(`Agent ${t} is not synced yet. Run broods dev --once or broods deploy first.`);let p=await new ae({baseUrl:i.baseUrl,token:i.token}).getRuntimeKey(a.project,a.stage).catch(()=>null);if(p?.apiKey)await Kt("BROODS_API_KEY",p.apiKey);if(c.config.publicAccess!==!0)K(`⚠ Agent "${t}" does not set publicAccess: true. The public endpoint is secured by default; if the deployed agent has not enabled it, this run will be refused.`);let f=new Ua({baseUrl:E(e,"--base-url")??process.env.BROODS_BASE_URL??process.env.BROODS_HOST??i.baseUrl,...p?.apiKey?{apiKey:p.apiKey}:{}}),m={kind:"agent",name:t,id:d,project:a.project,stage:a.stage,...p?.endpointId?{endpointId:p.endpointId}:{},...p?.projectSlug?{projectSlug:p.projectSlug}:{},...p?.stageSlug?{stageSlug:p.stageSlug}:{}};try{if(o){await bf({client:f,agent:m,...n?{prompt:n}:{}});return}await wf({client:f,agent:m,prompt:n})}catch(y){if((y instanceof Error?y.message:String(y)).includes("public_access_disabled"))throw Error(`Agent "${t}" is not publicly accessible (secured by default). Set publicAccess: true in its config and redeploy, or enable Public access in the dashboard.`);throw y}}async function Rn(e,t,r){try{await it(e,t,{flag:r?"w":"wx"})}catch(n){if(n.code==="EEXIST")return;throw n}}async function Kf(){let e=H(process.cwd(),ue,".gitignore"),t=await It(e),n=["_generated",".cache"].filter((a)=>!t.split(/\r?\n/).some((s)=>s.trim()===a));if(n.length===0)return;let o=t?t.trimEnd()+`
322
322
  `+n.join(`
323
323
  `)+`
324
324
  `:n.join(`
package/dist/index.d.ts CHANGED
@@ -307,6 +307,8 @@ interface AgentTelegramChannelConfig {
307
307
  webhookSecret?: string;
308
308
  allowedChannelIds?: string[];
309
309
  allowedUserIds?: string[];
310
+ /** Bot's @username, e.g. `tracy_bot`. Set it to answer only when the agent is mentioned. */
311
+ botUsername?: string;
310
312
  reactionEmoji?: string;
311
313
  trace?: "enabled" | "disabled";
312
314
  partition?: ChannelPartition;
@@ -1841,7 +1843,7 @@ type ConnectionIdentityInput = {
1841
1843
  /** Provider user ids allowed to trigger the agent. `["*"]` or omitted is everyone. */
1842
1844
  allowedUserIds?: readonly string[];
1843
1845
  };
1844
- type TelegramConnectionInput = EnvRefString<RequiredChannelKeys<Pick<AgentTelegramChannelConfig, "apiUrl" | "botToken" | "webhookSecret" | "reactionEmoji">, "botToken" | "webhookSecret">> & ConnectionIdentityInput;
1846
+ type TelegramConnectionInput = EnvRefString<RequiredChannelKeys<Pick<AgentTelegramChannelConfig, "apiUrl" | "botToken" | "webhookSecret" | "botUsername" | "reactionEmoji">, "botToken" | "webhookSecret">> & ConnectionIdentityInput;
1845
1847
  type GitHubConnectionInput = EnvRefString<RequiredChannelKeys<Pick<AgentGitHubChannelConfig, "apiUrl" | "webhookSecret" | "appId" | "privateKey" | "userName" | "botUserId" | "triggerOnIssueOpen" | "triggerOnPROpen">, "webhookSecret" | "appId" | "privateKey">> & ConnectionIdentityInput;
1846
1848
  type SlackConnectionInput = EnvRefString<RequiredChannelKeys<Pick<AgentSlackChannelConfig, "apiUrl" | "botToken" | "signingSecret" | "reactionEmoji">, "botToken" | "signingSecret">> & ConnectionIdentityInput;
1847
1849
  type DiscordConnectionInput = EnvRefString<RequiredChannelKeys<Pick<AgentDiscordChannelConfig, "apiUrl" | "botToken" | "publicKey" | "botUserId" | "mentionRoleIds">, "botToken" | "publicKey">> & ConnectionIdentityInput;
@@ -2158,6 +2160,11 @@ type AnyResource = AgentResource | WorkspaceResource | SandboxResource | CronRes
2158
2160
  * It compiles to a `${NAME}` placeholder the harness fills in at run time. This is
2159
2161
  * NOT `process.env`: agent configs are compiled locally, so `process.env.NAME` would
2160
2162
  * bake the literal local value into the deployed config instead of deferring it.
2163
+ *
2164
+ * The reference must resolve: syncing a manifest whose `env("NAME")` has no value
2165
+ * stored for the stage is rejected outright, so an unset or misspelled name fails
2166
+ * the sync instead of reaching the runtime as a literal `${NAME}`. `broods dev`
2167
+ * pushes matching `.env.local` values first, so a local value is enough there.
2161
2168
  */
2162
2169
  declare const env: EnvAccessor;
2163
2170
  declare function defineDiscordConnection(config: DiscordConnectionInput): DiscordConnectionDefinition;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "broods",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "CLI + TypeScript SDK for the broods agent platform.",
5
5
  "type": "module",
6
6
  "license": "MIT",