relavium 0.1.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/LICENSE +76 -0
- package/README.md +54 -0
- package/dist/index.js +62 -0
- package/drizzle/0000_organic_the_santerians.sql +190 -0
- package/drizzle/0001_pale_scorpion.sql +49 -0
- package/drizzle/0002_round_umar.sql +28 -0
- package/drizzle/0003_cloudy_wind_dancer.sql +3 -0
- package/drizzle/0004_numerous_ultimatum.sql +1 -0
- package/drizzle/meta/0000_snapshot.json +1432 -0
- package/drizzle/meta/0001_snapshot.json +1805 -0
- package/drizzle/meta/0002_snapshot.json +1988 -0
- package/drizzle/meta/0003_snapshot.json +2009 -0
- package/drizzle/meta/0004_snapshot.json +2017 -0
- package/drizzle/meta/_journal.json +41 -0
- package/package.json +65 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var jd=Object.defineProperty;var Ld=(e,t)=>{for(var n in t)jd(e,n,{get:t[n],enumerable:!0})};var E={success:0,workflowFailed:1,invalidInvocation:2,gatePaused:3,chatEnded:4};function Ni(){return{writeOut:e=>{process.stdout.write(e)},writeErr:e=>{process.stderr.write(e)},env:process.env,stdoutIsTty:process.stdout.isTTY===!0}}import{CommanderError as $y}from"commander";var Ud={invalid_invocation:E.invalidInvocation,config_error:E.invalidInvocation,not_implemented:E.invalidInvocation,internal:E.workflowFailed},m=class extends Error{code;exitCode;constructor(t,n,o){super(n,o?.cause===void 0?void 0:{cause:o.cause}),this.name="CliError",this.code=t,this.exitCode=Ud[t]}};function Gd(e){return e instanceof m}function Vt(e){return Gd(e)?{code:e.code,message:e.message,exitCode:e.exitCode}:{code:"internal",message:"An unexpected internal error occurred.",exitCode:E.workflowFailed}}var Fd={"--json":e=>{e.json=!0},"--no-color":e=>{e.color=!1},"--verbose":e=>{e.verbose=!0},"-v":e=>{e.verbose=!0},"--quiet":e=>{e.quiet=!0},"-q":e=>{e.quiet=!0}};function ji(e){let t=e.slice(0,2),n=e.slice(2),o=[],r={};for(let i=0;i<n.length;i+=1){let s=n[i];if(s===void 0)continue;if(s==="--"){o.push(...n.slice(i));break}let a=Fd[s];if(a!==void 0){a(r);continue}let d=Bd(r,s,n[i+1]);if(d.kind==="error")return{raw:r,rest:[...t,...o],error:d.error};if(d.kind==="consumed"){i+=d.advance;continue}o.push(s)}return{raw:r,rest:[...t,...o]}}function Bd(e,t,n){if(t.startsWith("--cwd=")||t.startsWith("--config=")){let o=t.indexOf("="),r=t.slice(0,o),i=t.slice(o+1);return i.trim()===""?{kind:"error",error:Di(r)}:($i(e,r,i),{kind:"consumed",advance:0})}return t==="--cwd"||t==="--config"?n===void 0||n.startsWith("-")||n.trim()===""?{kind:"error",error:Di(t)}:($i(e,t,n),{kind:"consumed",advance:1}):{kind:"skip"}}function $i(e,t,n){t==="--cwd"?e.cwd=n:e.config=n}function Di(e){return new m("invalid_invocation",`\`${e}\` requires a non-empty argument.`)}function Hd(e){if(e.verbose===!0&&e.quiet===!0)throw new m("invalid_invocation","`--verbose` and `--quiet` cannot be combined.")}function Wd(e){return e.quiet===!0?"quiet":e.verbose===!0?"verbose":"normal"}function Li(e,t){return Hd(e),{json:e.json===!0,color:e.color!==!1,cwd:e.cwd??t,configPath:e.config,verbosity:Wd(e)}}function Kt(e,t,n){let o=Vt(e);t.json?n.writeErr(JSON.stringify({type:"error",code:o.code,message:o.message})+`
|
|
3
|
+
`):n.writeErr(`relavium: ${o.message}
|
|
4
|
+
`),t.verbose&&!t.json&&e instanceof Error&&e.stack!==void 0&&n.writeErr(e.stack+`
|
|
5
|
+
`)}import{Command as Oy}from"commander";import{randomUUID as xy}from"crypto";var ir={};Ld(ir,{agentSessions:()=>Kn,agents:()=>zn,llmProviders:()=>z,mediaObjects:()=>qn,mediaReferences:()=>rr,messages:()=>Is,modelCatalog:()=>Qe,runCosts:()=>Vn,runEvents:()=>me,runs:()=>w,sessionMessages:()=>or,stepExecutions:()=>G,workflows:()=>de});var Ui=["validation","content_filter","provider_auth","provider_rate_limit","provider_unavailable","tool_denied","tool_failed","budget_exceeded","run_timeout","turn_limit","cancelled","sandbox_error","internal"],Pn=["provider_rate_limit","provider_unavailable","tool_failed","sandbox_error"],Gi=["stop","length","tool_use","content_filter","error"],Uo=["image","audio","video","document"],yt=["text","image","audio","video"],Ce=["image","audio","video"],Fi=["chat","generative"],qt={pollInitialMs:5e3,pollMaxMs:3e4,deadlineMs:18e5},Bi=["run","node","session","workspace"],Hi=["session","workspace"];var Wi=["agent","condition","tool","transform","input","output","loop","fan_out","fan_in","human_in_the_loop","subworkflow"],wt=["anthropic","openai","gemini","deepseek"],_t=["sandboxed","project","full"],bt=["local","cloud","managed"],Nn=["fail","pause_for_approval","warn"];import{z as g}from"zod";import{z as Ae}from"zod";var $n="[a-z0-9]+(?:-[a-z0-9]+)*",H=Ae.string().regex(new RegExp(`^${$n}$`),"must be kebab-case (lowercase alphanumerics, dash-separated)"),f=Ae.string().min(1),Jd="[A-Za-z0-9_-]+",Go=Ae.string().regex(new RegExp(`^${Jd}$`),"must be referenceable in {{ \u2026 }} (letters, digits, `_` or `-`)"),T=Ae.number().int().positive(),x=Ae.number().int().nonnegative(),Dn=/^[a-z][a-z0-9+.-]*:\/\/[^/?#]*@/i,jn=Ae.number().finite().min(0).max(2),Xt=Ae.record(Ae.string(),Ae.unknown()),Ln=e=>{let t=new Set,n=new Set;for(let o of e)t.has(o)&&n.add(o),t.add(o);return[...n]};var je=/^media:\/\/sha256-[0-9a-f]{64}$/,zi={image:256*1024,audio:256*1024,video:0,document:0},vt={maxPartsPerMessage:16,maxInlineBytesPerMessage:2*1024*1024},Vi=25*1024*1024,Ki=!0;function Q(e){let t=e.toLowerCase();if(t.startsWith("image/"))return"image";if(t.startsWith("audio/"))return"audio";if(t.startsWith("video/"))return"video";if(t==="application/pdf")return"document"}var Le=g.string().min(1).max(255).regex(/^[\w!#$%&'*+.^`|~-]+\/[\w!#$%&'*+.^`|~-]+$/,"must be a bare type/subtype MIME type"),zd=/^[A-Za-z0-9+/]+={0,2}$/;function Fo(e){if(e.length===0||e.length%4!==0||!zd.test(e))return;let t=0;return e.endsWith("==")?t=2:e.endsWith("=")&&(t=1),e.length/4*3-t}var Vd=(()=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=new Int16Array(128).fill(-1);for(let n=0;n<e.length;n+=1)t[e.codePointAt(n)??0]=n;return t})();function qi(e){let t=Fo(e);if(t===void 0)return;let n=i=>{let s=Vd[i];return s===void 0||s<0?0:s},o=new Uint8Array(t),r=0;for(let i=0;i<e.length;i+=4){let s=n(e.codePointAt(i)??0),a=n(e.codePointAt(i+1)??0),d=e[i+2]==="="?0:n(e.codePointAt(i+2)??0),u=e[i+3]==="="?0:n(e.codePointAt(i+3)??0),p=s<<18|a<<12|d<<6|u;r<t&&(o[r++]=p>>16&255),r<t&&(o[r++]=p>>8&255),r<t&&(o[r++]=p&255)}return o}var Un=/^data:[^,]*;base64,/i;function Yt(e){return Un.test(e)}function It(e){return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer}function kt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function St(e){return e.kind==="base64"&&typeof e.data=="string"}function Kd(e){let t=e.source;return e.type==="media"&&kt(t)&&t.kind==="url"}function qd(e,t){if(It(e))return!0;if(Array.isArray(e)){for(let n of e)t.push(n);return!1}if(e instanceof Map){for(let[n,o]of e)t.push(n,o);return!1}if(e instanceof Set){for(let n of e)t.push(n);return!1}if(!kt(e))return!1;if(St(e))return!0;for(let n of Object.values(e))t.push(n);return!1}function qe(e){try{let t=new Set,n=[e];for(;n.length>0;){let o=n.pop();if(typeof o=="string"){if(Un.test(o))return!0;continue}if(!(typeof o!="object"||o===null||t.has(o))&&(t.add(o),qd(o,n)))return!0}return!1}catch{return!0}}function Gn(e){try{let t=new Set,n=[e];for(;n.length>0;){let o=n.pop();if(typeof o=="string"){if(Un.test(o))return!0;continue}if(!(typeof o!="object"||o===null||t.has(o))&&(t.add(o),Xd(o,n)))return!0}return!1}catch{return!0}}function Xd(e,t){if(It(e))return!0;if(Array.isArray(e)){for(let n of e)t.push(n);return!1}if(e instanceof Map){for(let[n,o]of e)t.push(n,o);return!1}if(e instanceof Set){for(let n of e)t.push(n);return!1}if(!kt(e))return!1;if(St(e)||Kd(e))return!0;for(let n of Object.values(e))t.push(n);return!1}function Xi(e,t,n=[]){for(let[o,r]of[["name",e.name],["transcript",e.transcript]])r!==void 0&&Un.test(r)&&t.addIssue({code:g.ZodIssueCode.custom,message:`${o} must not carry a base64 data: URI \u2014 media bytes ride the source carrier only (ADR-0031 I3)`,path:[...n,o]})}function Yi(e,t){e.source.kind==="base64"&&t.addIssue({code:g.ZodIssueCode.custom,message:"media bytes (base64) may not cross a durable/event/IPC boundary; deInlineMedia must run first",path:["source"]}),e.source.kind==="url"&&t.addIssue({code:g.ZodIssueCode.custom,message:"a URL may not persist \u2014 the durable media form is handle-only; materialize it to a MediaStore handle first (ADR-0031)",path:["source"]})}var Yd=g.object({kind:g.literal("base64"),data:f}),Zi=g.object({kind:g.literal("handle"),ref:g.string().regex(je,"must be a media://sha256-<64hex> handle")}),Zd=g.object({kind:g.literal("url"),url:f}),Qi=g.discriminatedUnion("kind",[Yd,Zi,Zd]),es=g.discriminatedUnion("kind",[Zi]),ts=g.object({type:g.literal("media"),mimeType:Le,source:es,name:g.string().max(255).optional(),transcript:g.string().optional(),byteLength:x.optional(),durationMs:T.optional()});function ns(e,t){Xi(e,t);let n=Q(e.mimeType);if(n===void 0){t.addIssue({code:g.ZodIssueCode.custom,message:`unsupported media mimeType '${e.mimeType}' \u2014 expected image/*, audio/*, video/*, or application/pdf`,path:["mimeType"]});return}e.durationMs!==void 0&&n!=="audio"&&n!=="video"&&t.addIssue({code:g.ZodIssueCode.custom,message:`durationMs is audio/video metadata \u2014 a ${n} part must not carry it`,path:["durationMs"]})}var Zt=ts.superRefine(ns),Qt=g.object({type:g.literal("media"),mimeType:Le,source:Qi,name:g.string().max(255).optional(),transcript:g.string().optional()}),os=g.object({type:g.literal("text"),text:g.string()}),rs=g.object({type:g.literal("tool_call"),id:f,name:f,args:g.unknown(),providerExecuted:g.boolean().optional()}),is=g.object({type:g.literal("tool_result"),toolCallId:f,result:g.unknown(),isError:g.boolean().optional(),providerExecuted:g.boolean().optional(),media:g.array(Zt).optional()}),Qd=g.object({type:g.literal("reasoning"),text:g.string(),signature:g.string().optional(),redacted:g.boolean().optional()}),Fn=g.discriminatedUnion("type",[os,rs,is,Qd,Qt]),eu=g.object({type:g.literal("reasoning"),text:g.string(),redacted:g.boolean().optional()}),Bo=g.discriminatedUnion("type",[os,rs,is,eu,ts]).superRefine((e,t)=>{if(e.type==="media"){Yi(e,t),ns(e,t);return}e.type==="tool_call"&&qe(e.args)&&t.addIssue({code:g.ZodIssueCode.custom,message:"media bytes (base64) may not cross a durable/event/IPC boundary; deInlineMedia must run first",path:["args"]}),e.type==="tool_result"&&qe(e.result)&&t.addIssue({code:g.ZodIssueCode.custom,message:"media bytes (base64) may not cross a durable/event/IPC boundary; deInlineMedia must run first",path:["result"]})});function Ho(e,t,n=[]){Xi(e,t,n);let o=Q(e.mimeType);if(o===void 0)return t.addIssue({code:g.ZodIssueCode.custom,message:`unsupported media mimeType '${e.mimeType}' \u2014 expected image/*, audio/*, video/*, or application/pdf`,path:[...n,"mimeType"]}),0;if(e.source.kind==="url"&&!Ki)return t.addIssue({code:g.ZodIssueCode.custom,message:"the url media carrier is feature-flag-OFF until the shared SSRF range-primitive lands (ADR-0031; 1.AE)",path:[...n,"source"]}),0;if(e.source.kind==="url"){let s=Et(e.source.url);if(s===null)return t.addIssue({code:g.ZodIssueCode.custom,message:"media url source must be a valid HTTPS URL",path:[...n,"source","url"]}),0;if(s.hasCredentials)return t.addIssue({code:g.ZodIssueCode.custom,message:"media url source must not contain embedded credentials",path:[...n,"source","url"]}),0;if(xt(s.host))return t.addIssue({code:g.ZodIssueCode.custom,message:"media url source must not resolve to a private, loopback, or link-local address",path:[...n,"source","url"]}),0}if(e.source.kind!=="base64")return 0;let r=zi[o];if(r===0)return t.addIssue({code:g.ZodIssueCode.custom,message:`${o} media is never inline \u2014 pass a media://sha256-<hex> handle (INLINE_MEDIA_CEILING.${o} = 0)`,path:[...n,"source"]}),0;let i=Fo(e.source.data);return i===void 0?(t.addIssue({code:g.ZodIssueCode.custom,message:"source.data is not valid padded base64",path:[...n,"source","data"]}),0):i>r?(t.addIssue({code:g.ZodIssueCode.custom,message:`inline ${o} media is ${i} decoded bytes \u2014 over the ${r}-byte INLINE_MEDIA_CEILING; pass a handle instead`,path:[...n,"source","data"]}),0):i}function Wo(e,t){if(!Number.isInteger(t)||t<0)return{ok:!1,reason:"byteLength must be a non-negative integer"};let{start:n,end:o}=e;return!Number.isInteger(n)||!Number.isInteger(o)?{ok:!1,reason:"range bounds must be integers"}:n<0||o<0?{ok:!1,reason:"range bounds must be non-negative"}:o<n?{ok:!1,reason:"range end must be >= start (not reversed)"}:o>=t?{ok:!1,reason:"range end is out of bounds for the stored byte length"}:{ok:!0,range:{start:n,end:o}}}var Zy=g.object({kind:g.enum(Hi),id:f.max(255)});function ss(e,t){return e.some(n=>n.kind===t.kind&&n.id===t.id)}function tu(e,t){if(Array.isArray(e))for(let n of e)t.push(n);else if(e instanceof Map)for(let[n,o]of e)t.push(n,o);else if(e instanceof Set)for(let n of e)t.push(n);else if(kt(e))for(let n of Object.values(e))t.push(n)}function nu(e){if(!kt(e)||e.type!=="media")return;let t=e.source,n=e.mimeType,o=e.byteLength;if(!kt(t)||t.kind!=="handle"||typeof t.ref!="string"||!je.test(t.ref)||typeof n!="string"||typeof o!="number")return;let r=Q(n);if(r===void 0)return;let i={handle:t.ref,mimeType:n,modality:r,byteLength:o};return typeof e.durationMs=="number"?{...i,durationMs:e.durationMs}:i}function Jo(e){let t=[],n=new Set,o=new Set,r=[e];for(;r.length>0;){let i=r.pop();if(typeof i!="object"||i===null||o.has(i))continue;o.add(i);let s=nu(i);s!==void 0&&!n.has(s.handle)&&(n.add(s.handle),t.push(s)),tu(i,r)}return t}function xt(e){let t=as(e.toLowerCase());if(t.startsWith("[")&&t.endsWith("]")&&(t=t.slice(1,-1)),t==="localhost"||t.endsWith(".localhost")||t.endsWith(".local")||t.endsWith(".internal"))return!0;if(t.includes(":")){let o=uu(t);return o!==null&&cu(o)}let n=ds(t);return n===null?!1:n.startsWith("0.")||n.startsWith("127.")||n.startsWith("10.")||ou(n)||n.startsWith("192.168.")||ru(n)||n.startsWith("169.254.")}function ou(e){let t=/^172\.(\d{1,3})\./.exec(e);if(t===null)return!1;let n=Number(t[1]);return n>=16&&n<=31}function ru(e){let t=/^100\.(\d{1,3})\./.exec(e);if(t===null)return!1;let n=Number(t[1]);return n>=64&&n<=127}function as(e){let t=e;for(;t.endsWith(".");)t=t.slice(0,-1);return t}function iu(e){let t;if(/^0x[0-9a-f]+$/.test(e))t=Number.parseInt(e.slice(2),16);else if(/^0[0-7]*$/.test(e))t=e.length===1?0:Number.parseInt(e.slice(1),8);else if(/^[1-9]\d*$/.test(e))t=Number.parseInt(e,10);else return null;return Number.isSafeInteger(t)&&t>=0?t:null}function su(e){let t=e.length-1;for(let o=0;o<t;o++)if((e[o]??0)>255)return null;if((e[t]??0)>=2**(8*(4-t)))return null;let n=e[t]??0;for(let o=0;o<t;o++)n+=(e[o]??0)*2**(8*(3-o));return`${Math.floor(n/2**24)%256}.${Math.floor(n/2**16)%256}.${Math.floor(n/2**8)%256}.${n%256}`}function ds(e){let t=e.split(".");if(t.length<1||t.length>4)return null;let n=[];for(let o of t){let r=iu(o);if(r===null)return null;n.push(r)}return su(n)}function au(e){let t=e.lastIndexOf(":");if(t===-1||!e.slice(t+1).includes("."))return e;let n=ds(e.slice(t+1));if(n===null)return null;let o=n.split(".").map(Number),r=((o[0]??0)<<8|(o[1]??0)).toString(16),i=((o[2]??0)<<8|(o[3]??0)).toString(16);return`${e.slice(0,t+1)}${r}:${i}`}function du(e){let t=e.indexOf("::");if(t===-1)return e===""?[]:e.split(":").map(i=>Number.parseInt(i,16));let n=e.slice(0,t)===""?[]:e.slice(0,t).split(":"),o=e.slice(t+2)===""?[]:e.slice(t+2).split(":"),r=n.length+o.length;return r>=8?null:[...n.map(i=>Number.parseInt(i,16)),...new Array(8-r).fill(0),...o.map(i=>Number.parseInt(i,16))]}function uu(e){let t=au(e.split("%")[0]??e);if(t===null)return null;let n=du(t);if(n?.length!==8)return null;for(let o of n)if(!Number.isInteger(o)||o<0||o>65535)return null;return n}function cu(e){return e.every(n=>n===0)||e.slice(0,7).every(n=>n===0)&&e[7]===1||((e[0]??0)&65472)===65152||((e[0]??0)&65024)===64512?!0:e[0]===0&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===65535||e[0]===100&&e[1]===65435&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===0?xt(Ji(e[6]??0,e[7]??0)):!1}function Ji(e,t){return`${e>>8}.${e&255}.${t>>8}.${t&255}`}var us=/^https:\/\/([^/?#]+)/i;function zo(e){let t=us.exec(e);return t===null?!1:t[1]?.includes("@")??!1}function Et(e){let t=us.exec(e);if(t===null)return null;let n=t[1]??"";if(lu(n)||n.includes("%"))return null;let o=n,r=!1,i=o.lastIndexOf("@");i!==-1&&(r=!0,o=o.slice(i+1));let s;if(o.startsWith("[")){let a=o.indexOf("]");if(a===-1)return null;s=o.slice(1,a)}else{let a=o.indexOf(":");s=a===-1?o:o.slice(0,a)}return{host:as(s.toLowerCase()),hasCredentials:r}}function lu(e){for(let t=0;t<e.length;t++){let n=e.codePointAt(t)??Number.NaN;if(n<=32||n===127||n===92)return!0}return!1}async function Vo(e,t,n){return Gn(e)?Ct(e,t,new Map,n):e}function Bn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function pu(e){let t=e.source;return e.type==="media"&&typeof e.mimeType=="string"&&Bn(t)&&typeof t.kind=="string"}async function fu(e,t,n){let o=e.source,r=e.mimeType;if(!Bn(o)||typeof r!="string")return e;let i=o.kind;if(i==="handle")return e;if(Q(r)===void 0)throw new Error(`deInlineMedia: unsupported media mimeType '${r}'`);let s=await mu(o,i,n),a=await t.put(s,r),d={type:"media",mimeType:r,source:{kind:"handle",ref:a},byteLength:s.length};return typeof e.name=="string"&&(d.name=e.name),typeof e.transcript=="string"&&(d.transcript=e.transcript),typeof e.durationMs=="number"&&(d.durationMs=e.durationMs),d}async function mu(e,t,n){if(t==="base64"){let o=e.data;if(typeof o!="string")throw new TypeError("deInlineMedia: base64 media source.data must be a string");let r=qi(o);if(r===void 0)throw new Error("deInlineMedia: media source.data is not valid base64");return r}if(t==="url"){let o=e.url;if(n===void 0||typeof o!="string")throw new Error("deInlineMedia cannot re-host a url media source \u2014 the engine media-egress step (1.AF, ADR-0043) must materialize it to a handle first");return n(o)}throw new Error(`deInlineMedia: unsupported media source kind '${String(t).slice(0,64)}' on a media part`)}async function Ct(e,t,n,o){if(typeof e=="string"){if(Yt(e))throw new Error("deInlineMedia: a base64 data: URI may not cross the durable boundary \u2014 emit a media part (it becomes a handle) instead");return e}if(typeof e!="object"||e===null)return e;let r=n.get(e);if(r!==void 0)return r;if(It(e))throw new Error("deInlineMedia: a raw binary buffer may not cross the durable boundary");let i=await hu(e,t,n,o);if(i!==null)return i.clone;if(!Bn(e))return e;if(pu(e)){let d=await fu(e,t,o);return n.set(e,d),d}let s=e.source;if(e.type==="media"&&Bn(s)&&s.kind==="url")throw new Error("deInlineMedia cannot re-host a url media source with no mimeType \u2014 there is no content type to content-address against (1.AF, ADR-0043, I3)");if(St(e))throw new Error("deInlineMedia: a loose base64 media source may not cross the durable boundary \u2014 wrap it in a media part");let a={};n.set(e,a);for(let[d,u]of Object.entries(e))a[d]=await Ct(u,t,n,o);return a}async function hu(e,t,n,o){if(Array.isArray(e)){let r=[];n.set(e,r);for(let i of e)r.push(await Ct(i,t,n,o));return{clone:r}}if(e instanceof Map){let r=new Map;n.set(e,r);for(let[i,s]of e)r.set(await Ct(i,t,n,o),await Ct(s,t,n,o));return{clone:r}}if(e instanceof Set){let r=new Set;n.set(e,r);for(let i of e)r.add(await Ct(i,t,n,o));return{clone:r}}return null}import{z as C}from"zod";var cs=C.enum(wt),gu=C.enum(["linear","exponential"]),At=C.object({max:T,backoff:gu,backoff_ms:T.optional(),retry_on:C.array(C.enum(Pn)).min(1).optional()}).strict(),yu=C.enum(["stdio","sse","websocket"]),wu=/^(https?|wss?):\/\//i,_u=C.object({id:H,transport:yu,command:C.string().optional(),args:C.array(C.string()).optional(),env:C.record(C.string(),C.string()).optional(),url:C.string().url().optional(),tools_allowlist:C.array(f).optional()}).strict().superRefine((e,t)=>{if(e.transport==="stdio"&&!e.command&&t.addIssue({code:C.ZodIssueCode.custom,message:"command is required for the 'stdio' transport",path:["command"]}),(e.transport==="sse"||e.transport==="websocket")&&!e.url&&t.addIssue({code:C.ZodIssueCode.custom,message:`url is required for the '${e.transport}' transport`,path:["url"]}),e.url!==void 0){let n;e.transport==="websocket"?n=/^wss?:\/\//i.test(e.url):e.transport==="sse"?n=/^https?:\/\//i.test(e.url):n=wu.test(e.url),n||t.addIssue({code:C.ZodIssueCode.custom,message:`url scheme is invalid for the '${e.transport}' transport (sse \u2192 http(s), websocket \u2192 ws(s))`,path:["url"]}),Dn.test(e.url)&&t.addIssue({code:C.ZodIssueCode.custom,message:"url must not embed credentials (user:pass@\u2026) \u2014 use env/keychain auth",path:["url"]})}}),bu=C.discriminatedUnion("type",[C.object({type:C.literal("none")}).strict(),C.object({type:C.literal("summary")}).strict(),C.object({type:C.literal("window"),window_size:T}).strict()]),ku=C.object({model:f,provider:cs,max_attempts:T}).strict(),Mt=C.object({id:H,name:C.string().optional(),description:C.string().optional(),model:f,provider:cs,system_prompt:f,temperature:jn.optional(),max_tokens:T.optional(),input_schema:Xt.optional(),output_schema:Xt.optional(),tools:C.array(f).optional(),mcp_servers:C.array(_u).optional(),memory:bu.optional(),retry:At.optional(),fallback_chain:C.array(ku).optional()}).strict().superRefine((e,t)=>{let n=(e.mcp_servers??[]).map(r=>r.id),o=Ln(n);o.length>0&&t.addIssue({code:C.ZodIssueCode.custom,message:`duplicate mcp_servers id(s): ${o.join(", ")}`,path:["mcp_servers"]})});import{z as S}from"zod";var ls=S.enum(["js"]),xu=S.array(S.enum(yt)).min(1,"output_modalities must declare at least one modality (omit the field for text-only)"),vu=f.refine(e=>!e.startsWith("/")&&!e.startsWith("\\")&&!/^[A-Za-z]:[\\/]/.test(e),{message:'save_to must be a relative path (no leading "/" or "\\", and no drive letter)'}).refine(e=>!e.split(/[\\/]/).includes(".."),{message:'save_to must not contain a ".." path segment'}),Ko=S.enum(["approval","input","review"]),qo=S.enum(["reject","approve"]),Iu=S.enum(["concat","object_merge","first","custom"]),ps=Xt,Su=S.object({id:H,type:S.literal("input"),label:S.string().optional()}).strict(),Eu=S.object({id:H,type:S.literal("agent"),agent_ref:H,system_prompt_append:S.string().optional(),prompt_template:S.string().optional(),tools:S.array(f).optional(),model:f.optional(),temperature:jn.optional(),max_tokens:T.optional(),output_schema:ps.optional(),output_modalities:xu.optional(),count:T.optional(),duration_seconds:S.number().positive().optional(),timeout_ms:T.optional(),retry:At.optional()}).strict(),Cu=S.object({id:H,type:S.literal("human_gate"),gate_type:Ko,assignee:S.string().optional(),message_template:S.string().optional(),timeout_ms:T.optional(),timeout_action:qo.optional()}).strict(),Au=S.object({when:S.union([S.boolean(),S.string(),S.number()]),target_node:H}).strict(),Mu=S.object({id:H,type:S.literal("condition"),expression:f,expression_type:ls.optional(),branches:S.array(Au).min(1,"a condition node must declare at least one branch"),default:H.optional(),retry:At.optional()}).strict(),Tu=S.object({id:H,type:S.literal("transform"),transform:f,expression_type:ls.optional(),output_schema:ps.optional(),retry:At.optional()}).strict(),Ru=S.object({id:H,type:S.literal("parallel"),parallel_of:S.array(H).min(1)}).strict(),Ou=S.object({id:H,type:S.literal("merge"),merge_strategy:Iu,merge_fn:S.string().optional(),retry:At.optional()}).strict(),Pu=S.object({id:H,type:S.literal("output"),output_format:S.string().optional(),save_to:vu.optional()}).strict(),fs=S.discriminatedUnion("type",[Su,Eu,Cu,Mu,Tu,Ru,Ou,Pu]);import{z as en}from"zod";var Nu=en.string().regex(new RegExp(`^${$n}(?::.+)?$`),'from must be a node id, optionally "nodeId:handle"'),$u=en.string().regex(new RegExp(`^${$n}$`),"to must be a kebab-case node id"),ms=en.object({from:Nu,to:$u,label:en.string().optional(),condition:en.string().optional()}).strict();import{z as y}from"zod";var gs=y.enum(["manual","webhook","schedule","file_change","mcp_call"]),Du=y.discriminatedUnion("type",[y.object({type:y.literal("manual")}).strict(),y.object({type:y.literal("webhook"),webhook:y.object({path:f,secret_env:f}).strict()}).strict(),y.object({type:y.literal("schedule"),schedule:f}).strict(),y.object({type:y.literal("file_change"),file_change:y.object({glob:f,debounce_ms:x}).strict()}).strict(),y.object({type:y.literal("mcp_call")}).strict()]),ju=y.enum(["string","number","boolean","file_path","code_diff","secret"]),Lu=y.object({format:f.optional(),pattern:f.optional(),enum:y.array(y.unknown()).optional(),min:y.number().optional(),max:y.number().optional(),min_length:x.optional(),max_length:x.optional()}).strict().superRefine((e,t)=>{e.min!==void 0&&e.max!==void 0&&e.min>e.max&&t.addIssue({code:y.ZodIssueCode.custom,message:"min must be <= max",path:["min"]}),e.min_length!==void 0&&e.max_length!==void 0&&e.min_length>e.max_length&&t.addIssue({code:y.ZodIssueCode.custom,message:"min_length must be <= max_length",path:["min_length"]})}),Uu={number:["min","max","enum"],string:["format","pattern","enum","min_length","max_length"],file_path:["format","pattern","enum","min_length","max_length"],code_diff:["format","pattern","enum","min_length","max_length"],secret:["format","pattern","enum","min_length","max_length"],boolean:[]},Gu=y.object({name:Go,type:ju,required:y.boolean().optional(),default:y.unknown().optional(),description:y.string().optional(),validation:Lu.optional()}).strict().superRefine((e,t)=>{if(!e.validation)return;let n=Uu[e.type];if(n===void 0)return;let o=new Set(n);for(let r of Object.keys(e.validation))o.has(r)||t.addIssue({code:y.ZodIssueCode.custom,message:`validation key '${r}' is not allowed for input type '${e.type}'`,path:["validation",r]})}),Fu=y.object({key:Go,value:y.string()}).strict(),Bu=y.object({allowedCommands:y.array(f).optional(),allowedCommandGlobs:y.array(f).optional(),allowedDomains:y.array(f).optional()}).strict(),Hu=y.object({max_cost_microcents:T,on_exceed:y.enum(Nn)}).strict(),Wu=y.object({$ref:f}).strict(),Ju=y.union([Mt,Wu]),zu=y.object({id:H,version:y.string().optional(),name:y.string().optional(),description:y.string().optional(),tags:y.array(y.string()).optional(),metadata:y.record(y.string(),y.unknown()).optional(),trigger:Du.optional(),inputs:y.array(Gu).optional(),context:y.array(Fu).optional(),agents:y.array(Ju).optional(),tools:Bu.optional(),budget:Hu.optional(),timeout_ms:T.optional(),max_parallel:T.optional(),nodes:y.array(fs).min(1,"a workflow must declare at least one node"),edges:y.array(ms)}).strict(),Hn=y.object({schema_version:y.literal("1.0"),workflow:zu}).strict().superRefine((e,t)=>{let{nodes:n}=e.workflow;n.forEach((i,s)=>{i.type==="merge"&&i.merge_strategy==="custom"&&!i.merge_fn&&t.addIssue({code:y.ZodIssueCode.custom,message:'merge_fn is required when merge_strategy is "custom"',path:["workflow","nodes",s,"merge_fn"]})});let o=(i,s,a)=>{let d=Ln(i);d.length>0&&t.addIssue({code:y.ZodIssueCode.custom,message:`duplicate ${s}: ${d.join(", ")}`,path:a})};o(n.map(i=>i.id),"node id(s)",["workflow","nodes"]),o((e.workflow.inputs??[]).map(i=>i.name),"input name(s)",["workflow","inputs"]),o((e.workflow.context??[]).map(i=>i.key),"context key(s)",["workflow","context"]),o((e.workflow.agents??[]).flatMap(i=>"id"in i?[i.id]:[]),"agent id(s)",["workflow","agents"]);let r=new Map;for(let i of n)i.type==="parallel"&&r.set(i.id,i.parallel_of);e.workflow.edges.forEach((i,s)=>{let a=i.from.split(":")[0]??i.from,d=r.get(a);d&&!d.includes(i.to)&&t.addIssue({code:y.ZodIssueCode.custom,message:`edge from parallel node '${a}' targets '${i.to}', which is not in its parallel_of`,path:["workflow","edges",s,"to"]})})});import{z as l}from"zod";var Xo={timestamp:l.string().datetime({offset:!0}),sequenceNumber:x},q={runId:f,...Xo},tn={sessionId:f,...Xo},nn={runId:f.optional(),sessionId:f.optional(),...Xo},Sw=l.object({type:l.string(),...nn}),ys=l.object({input:x,output:x,model:f.optional()}),ws=l.object({secret:l.literal(!0),ref:f}).strict(),_s=l.enum(["approved","rejected","input_provided"]),Yo=l.enum(Ui),on=l.enum(Gi),Wn={code:Yo,message:l.string(),retryable:l.boolean(),correlationId:f.optional()},Zo=l.object({workingDir:f,activeFile:f.optional(),selection:l.object({file:f,startLine:x,endLine:x}).refine(e=>e.startLine<=e.endLine,{message:"startLine must be <= endLine",path:["endLine"]}).optional(),gitRef:f.optional(),fsScopeTier:l.enum(_t),variables:l.record(l.string(),l.string()).optional()}),Vu=l.object({type:l.literal("run:started"),...q,workflowId:l.string().uuid(),inputs:l.record(l.string(),l.unknown()),executionMode:l.enum(bt)}),Ku=l.object({type:l.literal("node:started"),...q,nodeId:f,nodeType:l.enum(Wi),attemptNumber:T.optional()}),qu=l.object({type:l.literal("agent:token"),...nn,nodeId:f,token:l.string(),model:f}),Xu=l.object({type:l.literal("agent:tool_call"),...nn,nodeId:f,model:f,toolId:f,toolInput:l.unknown(),attemptNumber:T.optional()}),Yu=l.object({type:l.literal("agent:tool_result"),...nn,nodeId:f,toolId:f,success:l.boolean(),outputSummary:l.string(),attemptNumber:T.optional()}),Zu=l.object({type:l.literal("agent:file_patch_proposed"),...q,nodeId:f,patches:l.array(l.object({uri:f,unifiedDiff:l.string()})).min(1),attemptNumber:T.optional()}),Qu=l.object({type:l.literal("cost:updated"),...nn,nodeId:f,model:f,inputTokens:x,outputTokens:x,costMicrocents:x,cumulativeCostMicrocents:x,attemptNumber:T.optional()}),ec=l.object({type:l.literal("node:completed"),...q,nodeId:f,output:l.unknown(),tokensUsed:ys,durationMs:x,cumulativeCostMicrocents:x.optional(),attemptNumber:T.optional(),selected:l.array(f).optional()}),tc=l.object({type:l.literal("node:failed"),...q,nodeId:f,error:l.object(Wn),attemptNumber:T.optional()}),nc=l.object({type:l.literal("node:retrying"),...q,nodeId:f,attemptNumber:T,error:l.object(Wn).omit({correlationId:!0}),delayMs:x}),oc=l.object({type:l.literal("media_job:submitted"),...q,nodeId:f,jobId:f,provider:l.enum(wt),model:f,modality:l.enum(Ce),startedAt:l.string().datetime({offset:!0}),deadlineAt:l.string().datetime({offset:!0})}),rc=l.enum(["branch_not_taken","upstream_unreachable"]),ic=l.object({type:l.literal("node:skipped"),...q,nodeId:f,reason:rc}),sc=l.object({type:l.literal("human_gate:paused"),...q,nodeId:f,gateId:f,gateType:Ko,message:l.string(),assignee:l.string().optional(),timeoutMs:x.optional(),timeoutAction:qo.optional(),expiresAt:l.string().datetime({offset:!0}).optional()}),ac=l.object({type:l.literal("human_gate:resumed"),...q,nodeId:f,decision:_s,decidedBy:f,payload:l.unknown().optional()}),dc=l.object({type:l.literal("run:completed"),...q,outputs:l.record(l.string(),l.unknown()),totalTokensUsed:l.object({input:x,output:x}),totalCostMicrocents:x,durationMs:x}),uc=l.object({type:l.literal("run:failed"),...q,error:l.object({...Wn,nodeId:f.optional()}),partialOutputs:l.record(l.string(),l.unknown())}),cc=l.object({type:l.literal("run:cancelled"),...q}),lc=l.object({type:l.literal("run:paused"),...q,pendingGateCount:l.number().int().min(0),gateIds:l.array(f),pendingMediaJobNodeIds:l.array(f).min(1).optional()}),pc=l.object({type:l.literal("run:timeout"),...q,elapsedMs:x,timeoutMs:x}),fc=l.object({type:l.literal("budget:warning"),...q,spentMicrocents:x,limitMicrocents:x,thresholdPct:l.number().int().min(0).max(100)}),mc=l.object({type:l.literal("budget:paused"),...q,nodeId:f,spentMicrocents:x,limitMicrocents:x,gateId:f}),hc=l.discriminatedUnion("type",[Vu,Ku,qu,Xu,Yu,Zu,Qu,ec,tc,ic,nc,oc,sc,ac,dc,uc,cc,lc,pc,fc,mc]),Tt=hc.superRefine((e,t)=>{let n="runId"in e&&e.runId!==void 0,o="sessionId"in e&&e.sessionId!==void 0;n===o&&t.addIssue({code:l.ZodIssueCode.custom,message:"exactly one of runId / sessionId must be present",path:[n?"sessionId":"runId"]}),e.type==="human_gate:paused"&&e.timeoutAction!==void 0&&e.timeoutMs===void 0&&t.addIssue({code:l.ZodIssueCode.custom,message:"timeoutAction is only valid when timeoutMs is also present",path:["timeoutAction"]}),e.type==="run:paused"&&e.gateIds.length===0&&(e.pendingMediaJobNodeIds?.length??0)===0&&t.addIssue({code:l.ZodIssueCode.custom,message:"run:paused must carry at least one suspension reason (a gate or a media job)",path:["gateIds"]}),e.type==="run:paused"&&e.pendingGateCount!==e.gateIds.length&&t.addIssue({code:l.ZodIssueCode.custom,message:"run:paused pendingGateCount must equal gateIds.length",path:["pendingGateCount"]}),e.type==="media_job:submitted"&&Date.parse(e.deadlineAt)<Date.parse(e.startedAt)&&t.addIssue({code:l.ZodIssueCode.custom,message:"media_job:submitted deadlineAt must be >= startedAt",path:["deadlineAt"]})}),gc=l.object({type:l.literal("session:started"),...tn,agentRef:f,model:f,context:Zo}),yc=l.object({type:l.literal("session:turn_started"),...tn}),wc=l.object({type:l.literal("session:turn_completed"),...tn,stopReason:on,tokensUsed:ys,error:l.object(Wn).optional()}),_c=l.object({type:l.literal("session:cancelled"),...tn}),bc=l.object({type:l.literal("session:exported"),...tn,workflowPath:f}),kc=l.discriminatedUnion("type",[gc,yc,wc,_c,bc]),bs=l.union([Tt,kc]),Qo=l.object({decision:_s,decidedBy:f,payload:l.unknown().optional(),comment:l.string().optional()});import{z as Rt}from"zod";var er=Rt.enum(["active","idle","exported","ended"]),xc=Rt.enum(["system","user","assistant","tool"]),Jn=Rt.string().datetime({offset:!0}),vc=Rt.object({id:f,sessionId:f,sequenceNumber:x,role:xc,content:Rt.array(Bo),modelId:f.optional(),timestamp:Jn}),Ic=Rt.object({id:f,agentSlug:H,agentId:f.optional(),agentSnapshot:Mt.optional(),title:f.optional(),modelId:f.optional(),context:Zo,status:er,totalInputTokens:x,totalOutputTokens:x,totalCostMicrocents:x,exportedWorkflowPath:f.optional(),createdAt:Jn,updatedAt:Jn,deletedAt:Jn.optional()});import{z as ee}from"zod";var tr=ee.enum(["pending","running","paused","completed","failed","cancelled"]),Lw=ee.object({id:ee.string().uuid(),workflowId:ee.string().uuid(),status:tr,executionMode:ee.enum(bt),triggerType:gs,inputs:ee.record(ee.string(),ee.unknown()),outputs:ee.record(ee.string(),ee.unknown()).optional(),error:ee.object({code:Yo,message:ee.string(),retryable:ee.boolean(),nodeId:f.optional()}).optional(),startedAt:x.optional(),completedAt:x.optional(),totalInputTokens:x,totalOutputTokens:x,totalCostMicrocents:x,createdAt:x,updatedAt:x}).superRefine((e,t)=>{e.startedAt!==void 0&&e.completedAt!==void 0&&e.completedAt<e.startedAt&&t.addIssue({code:ee.ZodIssueCode.custom,message:"completedAt must be >= startedAt",path:["completedAt"]}),e.updatedAt<e.createdAt&&t.addIssue({code:ee.ZodIssueCode.custom,message:"updatedAt must be >= createdAt",path:["updatedAt"]})});import{z as R}from"zod";var Sc=R.enum(["stable","beta"]),ks=R.enum(_t),Ec=/^https?:\/\//i,xs=R.object({name:f,transport:R.enum(["stdio","http"]),command:R.string().optional(),args:R.array(R.string()).optional(),autostart:R.boolean().optional(),url:R.string().url().optional(),env:R.record(R.string(),R.string()).optional()}).strict().superRefine((e,t)=>{e.transport==="stdio"&&!e.command&&t.addIssue({code:R.ZodIssueCode.custom,message:"command is required for the 'stdio' transport",path:["command"]}),e.transport==="http"&&!e.url&&t.addIssue({code:R.ZodIssueCode.custom,message:"url is required for the 'http' transport",path:["url"]}),e.url!==void 0&&!Ec.test(e.url)&&t.addIssue({code:R.ZodIssueCode.custom,message:"url must use http or https",path:["url"]}),e.url!==void 0&&Dn.test(e.url)&&t.addIssue({code:R.ZodIssueCode.custom,message:"url must not embed credentials (user:pass@\u2026) \u2014 use env/keychain auth",path:["url"]})}),vs=R.object({update_channel:Sc.optional(),preferences:R.object({default_model:R.string().optional(),theme:R.string().optional()}).strict().optional(),mcp_servers:R.array(xs).optional()}).strict(),Cc=R.object({default_model:R.string().optional(),fs_scope:ks.optional(),max_messages:T.optional(),max_cost_microcents:x.optional(),on_exceed:R.enum(Nn).optional()}).strict().optional(),Ac=R.object({image:x.optional(),audio:x.optional(),video:x.optional()}).strict(),nr=R.object({defaults:R.object({model:R.string().optional(),fs_scope:ks.optional(),max_tokens_estimate:T.optional(),media_cost_estimate:Ac.optional(),media_job_poll_initial_ms:T.optional(),media_job_poll_max_ms:T.optional(),media_job_deadline_ms:T.optional()}).strict().refine(e=>e.media_job_poll_max_ms===void 0||e.media_job_poll_initial_ms===void 0||e.media_job_poll_max_ms>=e.media_job_poll_initial_ms,{message:"media_job_poll_max_ms must be >= media_job_poll_initial_ms",path:["media_job_poll_max_ms"]}).optional(),variables:R.record(R.string(),R.string()).optional(),chat:Cc,mcp_servers:R.array(xs).optional()}).strict();import{desc as Fe,sql as P}from"drizzle-orm";import{check as Xe,index as D,integer as te,sqliteTable as se,text as h,uniqueIndex as Ze}from"drizzle-orm/sqlite-core";var ae=()=>h("id").primaryKey(),M=e=>te(e),Ge=e=>te(e).notNull().default(0),fe=e=>te(e).notNull().default(0),O=e=>h(e),Ue=(e,t)=>te(e,{mode:"boolean"}).notNull().default(t?P`1`:P`0`),Ye=e=>P.raw(e.map(t=>`'${t.replaceAll("'","''")}'`).join(", ")),z=se("llm_providers",{id:ae(),name:h("name").notNull(),displayName:h("display_name").notNull(),baseUrl:h("base_url").notNull(),apiKeyKeychainRef:h("api_key_keychain_ref"),defaultHeaders:O("default_headers").notNull().default("{}"),isActive:Ue("is_active",!0),deletedAt:M("deleted_at"),createdAt:M("created_at").notNull(),updatedAt:M("updated_at").notNull()},e=>[Ze("idx_llm_providers_name").on(e.name).where(P`${e.deletedAt} is null`)]),Qe=se("model_catalog",{id:ae(),providerId:h("provider_id").notNull().references(()=>z.id),modelId:h("model_id").notNull(),displayName:h("display_name").notNull(),contextWindowTokens:te("context_window_tokens").notNull(),maxOutputTokens:te("max_output_tokens").notNull(),inputCostPerMtokMicrocents:Ge("input_cost_per_mtok_microcents"),outputCostPerMtokMicrocents:Ge("output_cost_per_mtok_microcents"),cachedInputCostPerMtokMicrocents:Ge("cached_input_cost_per_mtok_microcents"),mediaImageCostMicrocents:te("media_image_cost_microcents"),mediaAudioCostMicrocents:te("media_audio_cost_microcents"),mediaVideoCostMicrocents:te("media_video_cost_microcents"),mediaSurface:h("media_surface").$type().notNull().default("chat"),supportsToolCalling:Ue("supports_tool_calling",!1),supportsVision:Ue("supports_vision",!1),supportsStreaming:Ue("supports_streaming",!0),supportsJsonMode:Ue("supports_json_mode",!1),capabilities:O("capabilities").notNull().default("{}"),deprecationDate:M("deprecation_date"),isActive:Ue("is_active",!0),deletedAt:M("deleted_at"),createdAt:M("created_at").notNull(),updatedAt:M("updated_at").notNull()},e=>[Ze("idx_model_catalog_provider_model").on(e.providerId,e.modelId).where(P`${e.deletedAt} is null`),D("idx_model_catalog_provider").on(e.providerId),D("idx_model_catalog_active").on(e.isActive).where(P`${e.deletedAt} is null`)]),zn=se("agents",{id:ae(),name:h("name").notNull(),slug:h("slug").notNull(),description:h("description"),modelId:h("model_id").notNull().references(()=>Qe.id),systemPrompt:h("system_prompt").notNull().default(""),tools:O("tools").notNull().default("[]"),config:O("config").notNull().default("{}"),inputSchema:O("input_schema"),outputSchema:O("output_schema"),tags:O("tags").notNull().default("[]"),sourcePath:h("source_path"),isActive:Ue("is_active",!0),deletedAt:M("deleted_at"),createdAt:M("created_at").notNull(),updatedAt:M("updated_at").notNull()},e=>[Ze("idx_agents_slug").on(e.slug).where(P`${e.deletedAt} is null`),D("idx_agents_model").on(e.modelId),D("idx_agents_active").on(e.isActive,Fe(e.createdAt)).where(P`${e.deletedAt} is null`)]),de=se("workflows",{id:ae(),name:h("name").notNull(),slug:h("slug").notNull(),description:h("description"),definition:O("definition").notNull(),inputSchema:O("input_schema"),tags:O("tags").notNull().default("[]"),sourcePath:h("source_path"),isActive:Ue("is_active",!0),deletedAt:M("deleted_at"),createdAt:M("created_at").notNull(),updatedAt:M("updated_at").notNull()},e=>[Ze("idx_workflows_slug").on(e.slug).where(P`${e.deletedAt} is null`),D("idx_workflows_active").on(e.isActive,Fe(e.updatedAt)).where(P`${e.deletedAt} is null`)]),w=se("runs",{id:ae(),workflowId:h("workflow_id").notNull().references(()=>de.id),workflowPath:h("workflow_path"),projectRoot:h("project_root"),workflowDefinitionSnapshot:O("workflow_definition_snapshot").notNull(),status:h("status").$type().notNull().default("pending"),executionMode:h("execution_mode").$type().notNull().default("local"),triggerType:h("trigger_type").notNull().default("manual"),triggerMetadata:O("trigger_metadata").notNull().default("{}"),inputJson:O("input_json").notNull().default("{}"),outputJson:O("output_json"),errorJson:O("error_json"),startedAt:M("started_at"),completedAt:M("completed_at"),totalInputTokens:fe("total_input_tokens"),totalOutputTokens:fe("total_output_tokens"),totalCostMicrocents:Ge("total_cost_microcents"),deletedAt:M("deleted_at"),createdAt:M("created_at").notNull(),updatedAt:M("updated_at").notNull()},e=>[Xe("runs_status_check",P`${e.status} in (${Ye(tr.options)})`),Xe("runs_execution_mode_check",P`${e.executionMode} in (${Ye(bt)})`),D("idx_runs_workflow").on(e.workflowId,Fe(e.createdAt)),D("idx_runs_status").on(e.status,Fe(e.createdAt)).where(P`${e.deletedAt} is null`),D("idx_runs_cost").on(e.workflowId,e.createdAt,e.totalCostMicrocents).where(P`${e.deletedAt} is null`)]),Mc=["pending","running","completed","failed","skipped"],G=se("step_executions",{id:ae(),runId:h("run_id").notNull().references(()=>w.id,{onDelete:"cascade"}),nodeId:h("node_id").notNull(),nodeType:h("node_type").notNull(),agentId:h("agent_id").references(()=>zn.id),agentSnapshot:O("agent_snapshot"),modelId:h("model_id").references(()=>Qe.id),attemptNumber:te("attempt_number").notNull().default(1),status:h("status").$type().notNull().default("pending"),inputJson:O("input_json").notNull().default("{}"),outputJson:O("output_json"),errorJson:O("error_json"),startedAt:M("started_at"),completedAt:M("completed_at"),durationMs:te("duration_ms"),inputTokens:fe("input_tokens"),outputTokens:fe("output_tokens"),cachedTokens:fe("cached_tokens"),costMicrocents:Ge("cost_microcents"),createdAt:M("created_at").notNull(),updatedAt:M("updated_at").notNull()},e=>[Xe("step_executions_status_check",P`${e.status} in (${Ye(Mc)})`),D("idx_step_exec_run").on(e.runId,e.createdAt),D("idx_step_exec_run_node").on(e.runId,e.nodeId,e.attemptNumber),D("idx_step_exec_agent").on(e.agentId,Fe(e.createdAt)).where(P`${e.agentId} is not null`),D("idx_step_exec_model").on(e.modelId,Fe(e.createdAt)).where(P`${e.modelId} is not null`),D("idx_step_exec_cost").on(e.modelId,e.createdAt,e.costMicrocents).where(P`${e.modelId} is not null`)]),Is=se("messages",{id:ae(),stepExecutionId:h("step_execution_id").notNull().references(()=>G.id,{onDelete:"cascade"}),runId:h("run_id").notNull(),sequenceNumber:te("sequence_number").notNull(),role:h("role").notNull(),content:h("content"),contentParts:O("content_parts"),toolCalls:O("tool_calls"),toolCallId:h("tool_call_id"),name:h("name"),finishReason:h("finish_reason"),createdAt:M("created_at").notNull()},e=>[D("idx_messages_step").on(e.stepExecutionId,e.sequenceNumber),D("idx_messages_run").on(e.runId,e.createdAt)]),me=se("run_events",{id:ae(),runId:h("run_id").notNull().references(()=>w.id,{onDelete:"cascade"}),stepExecutionId:h("step_execution_id"),seq:te("seq").notNull(),eventType:h("event_type").notNull(),level:h("level").notNull().default("info"),nodeId:h("node_id"),payloadJson:O("payload_json").notNull().default("{}"),ts:M("ts").notNull()},e=>[Ze("idx_run_events_run_seq").on(e.runId,e.seq),D("idx_run_events_step").on(e.stepExecutionId,e.ts).where(P`${e.stepExecutionId} is not null`),D("idx_run_events_run_type").on(e.runId,e.eventType,e.ts)]),Vn=se("run_costs",{id:ae(),runId:h("run_id").notNull().references(()=>w.id,{onDelete:"cascade"}),nodeId:h("node_id").notNull(),modelId:h("model_id").references(()=>Qe.id),inputTokens:fe("input_tokens"),outputTokens:fe("output_tokens"),costMicrocents:Ge("cost_microcents"),createdAt:M("created_at").notNull()},e=>[D("idx_run_costs_run").on(e.runId)]),Kn=se("agent_sessions",{id:ae(),agentId:h("agent_id").references(()=>zn.id),agentSlug:h("agent_slug").notNull(),agentSnapshot:O("agent_snapshot"),title:h("title"),modelId:h("model_id").references(()=>Qe.id),workingDir:h("working_dir"),gitRef:h("git_ref"),fsScopeTier:h("fs_scope_tier").$type().notNull().default("sandboxed"),status:h("status").$type().notNull().default("active"),contextJson:O("context_json").notNull().default("{}"),totalInputTokens:fe("total_input_tokens"),totalOutputTokens:fe("total_output_tokens"),totalCostMicrocents:Ge("total_cost_microcents"),exportedWorkflowPath:h("exported_workflow_path"),deletedAt:M("deleted_at"),createdAt:M("created_at").notNull(),updatedAt:M("updated_at").notNull()},e=>[Xe("agent_sessions_fs_scope_tier_check",P`${e.fsScopeTier} in (${Ye(_t)})`),Xe("agent_sessions_status_check",P`${e.status} in (${Ye(er.options)})`),D("idx_agent_sessions_status").on(e.status,Fe(e.updatedAt)).where(P`${e.deletedAt} is null`),D("idx_agent_sessions_agent").on(e.agentId,Fe(e.createdAt)).where(P`${e.agentId} is not null`)]),or=se("session_messages",{id:ae(),sessionId:h("session_id").notNull().references(()=>Kn.id,{onDelete:"cascade"}),sequenceNumber:te("sequence_number").notNull(),role:h("role").notNull(),content:h("content"),contentParts:O("content_parts"),toolCalls:O("tool_calls"),toolCallId:h("tool_call_id"),name:h("name"),finishReason:h("finish_reason"),modelId:h("model_id").references(()=>Qe.id),inputTokens:fe("input_tokens"),outputTokens:fe("output_tokens"),costMicrocents:Ge("cost_microcents"),createdAt:M("created_at").notNull()},e=>[Ze("idx_session_messages_seq").on(e.sessionId,e.sequenceNumber),D("idx_session_messages_session").on(e.sessionId,e.createdAt)]),qn=se("media_objects",{id:ae(),handle:h("handle").notNull().unique(),mimeType:h("mime_type").notNull(),modality:h("modality").$type().notNull(),byteLength:te("byte_length").notNull(),durationMs:te("duration_ms"),lastReferencedAt:M("last_referenced_at").notNull(),deletedAt:M("deleted_at"),createdAt:M("created_at").notNull()},e=>[Xe("media_objects_modality_check",P`${e.modality} in (${Ye(Uo)})`),D("idx_media_objects_gc").on(e.lastReferencedAt).where(P`${e.deletedAt} is null`)]),rr=se("media_references",{id:ae(),handle:h("handle").notNull().references(()=>qn.handle,{onDelete:"cascade"}),scopeKind:h("scope_kind").$type().notNull(),scopeId:h("scope_id").notNull(),createdAt:M("created_at").notNull()},e=>[Xe("media_references_scope_kind_check",P`${e.scopeKind} in (${Ye(Bi)})`),Ze("idx_media_references_unique").on(e.handle,e.scopeKind,e.scopeId),D("idx_media_references_scope").on(e.scopeKind,e.scopeId),D("idx_media_references_handle").on(e.handle)]);import{mkdirSync as Tc}from"fs";import{dirname as Rc}from"path";import{fileURLToPath as Oc}from"url";import Pc from"better-sqlite3";import{drizzle as Nc}from"drizzle-orm/better-sqlite3";import{migrate as $c}from"drizzle-orm/better-sqlite3/migrator";function sr(e=":memory:"){if(e.startsWith("file:"))throw new Error(`SQLite URI paths are not supported by createClient \u2014 pass ':memory:' or a filesystem path (got '${e}')`);let t;try{e!==":memory:"&&Tc(Rc(e),{recursive:!0}),t=new Pc(e)}catch(o){let r=o instanceof Error?o.message:String(o);throw new Error(`failed to open SQLite database at '${e}': ${r}`,{cause:o})}return t.pragma("journal_mode = WAL"),t.pragma("foreign_keys = ON"),t.pragma("busy_timeout = 5000"),t.pragma("synchronous = NORMAL"),{db:Nc(t,{schema:ir}),sqlite:t}}var Dc=Oc(new URL("../drizzle",import.meta.url));function ar(e){$c(e,{migrationsFolder:Dc})}import{asc as h_,eq as g_}from"drizzle-orm";function dr(e){return new Date(e).getTime()}function he(e){return new Date(e).toISOString()}import{and as et,asc as ur,desc as Xn,eq as K,getTableColumns as jc,inArray as Es,isNull as Be,sql as rn}from"drizzle-orm";var Cs=["pending","running","paused"];function Yn(e){return{id:e.id,workflowId:e.workflowId,status:e.status,executionMode:e.executionMode,triggerType:e.triggerType,...e.startedAt===null?{}:{startedAt:he(e.startedAt)},...e.completedAt===null?{}:{completedAt:he(e.completedAt)},totalInputTokens:e.totalInputTokens,totalOutputTokens:e.totalOutputTokens,totalCostMicrocents:e.totalCostMicrocents,createdAt:he(e.createdAt),updatedAt:he(e.updatedAt)}}function sn(e,t){let n=Zn(e),o=s=>e.select({c:w.totalCostMicrocents}).from(w).where(K(w.id,s)).get()?.c??0,r=(s,a,d)=>{switch(s.type){case"run:started":{let u={id:a,workflowId:s.workflowId,workflowDefinitionSnapshot:t.workflow.definitionJson,status:"running",executionMode:s.executionMode,triggerType:"manual",inputJson:JSON.stringify(s.inputs),startedAt:d,createdAt:d,updatedAt:d};e.insert(w).values(u).run();return}case"node:started":{let u={id:t.uuid(),runId:a,nodeId:s.nodeId,nodeType:s.nodeType,attemptNumber:s.attemptNumber??1,status:"running",startedAt:d,createdAt:d,updatedAt:d};e.insert(G).values(u).run();return}case"node:completed":{let u=o(a),p=s.cumulativeCostMicrocents??u,_=Math.max(0,p-u);e.insert(Vn).values({id:t.uuid(),runId:a,nodeId:s.nodeId,inputTokens:s.tokensUsed.input,outputTokens:s.tokensUsed.output,costMicrocents:_,createdAt:d}).run(),e.update(G).set({status:"completed",outputJson:JSON.stringify(s.output),inputTokens:s.tokensUsed.input,outputTokens:s.tokensUsed.output,costMicrocents:_,durationMs:s.durationMs,completedAt:d,updatedAt:d}).where(Ss(a,s.nodeId,s.attemptNumber)).run(),e.update(w).set({totalInputTokens:rn`${w.totalInputTokens} + ${s.tokensUsed.input}`,totalOutputTokens:rn`${w.totalOutputTokens} + ${s.tokensUsed.output}`,totalCostMicrocents:u+_,updatedAt:d}).where(K(w.id,a)).run();return}case"node:failed":case"node:retrying":{e.update(G).set({status:"failed",errorJson:JSON.stringify(s.error),completedAt:d,updatedAt:d}).where(Ss(a,s.nodeId,s.attemptNumber)).run();return}case"human_gate:paused":case"budget:paused":case"run:paused":{e.update(w).set({status:"paused",updatedAt:d}).where(K(w.id,a)).run();return}case"human_gate:resumed":{e.update(w).set({status:"running",updatedAt:d}).where(K(w.id,a)).run();return}case"run:completed":{e.update(w).set({status:"completed",outputJson:JSON.stringify(s.outputs),totalInputTokens:s.totalTokensUsed.input,totalOutputTokens:s.totalTokensUsed.output,totalCostMicrocents:s.totalCostMicrocents,completedAt:d,updatedAt:d}).where(K(w.id,a)).run();return}case"run:failed":{e.update(w).set({status:"failed",errorJson:JSON.stringify(s.error),outputJson:JSON.stringify(s.partialOutputs),completedAt:d,updatedAt:d}).where(K(w.id,a)).run();return}case"run:cancelled":{e.update(w).set({status:"cancelled",completedAt:d,updatedAt:d}).where(K(w.id,a)).run();return}default:return}},i=(s,a,d)=>{r(s,a,d);let u={id:t.uuid(),runId:a,seq:s.sequenceNumber,eventType:s.type,nodeId:"nodeId"in s?s.nodeId:null,payloadJson:JSON.stringify(s),ts:d};e.insert(me).values(u).run()};return{resolveWorkflowId:s=>{let a=()=>e.select({id:de.id}).from(de).where(et(K(de.slug,s),Be(de.deletedAt))).get()?.id,d=a();if(d!==void 0)return Promise.resolve(d);let u=t.uuid(),p=t.now();return e.insert(de).values({id:u,name:t.workflow.name,slug:s,definition:t.workflow.definitionJson,createdAt:p,updatedAt:p}).onConflictDoNothing().run(),Promise.resolve(a()??u)},persistEvent:s=>{try{let a=Tt.parse(s),d=a.runId;if(d===void 0)throw new Error(`run-history store received a non-run event: ${a.type}`);let u=dr(a.timestamp);return e.transaction(()=>{i(a,d,u)}),Promise.resolve()}catch(a){return Promise.reject(a instanceof Error?a:new Error(String(a)))}},listInterruptedRuns:()=>{let s=e.select({id:w.id,workflowId:w.workflowId,status:w.status,lastSeq:rn`coalesce(max(${me.seq}), 0)`}).from(w).leftJoin(me,K(me.runId,w.id)).where(et(Es(w.status,[...Cs]),Be(w.deletedAt))).groupBy(w.id).all();return Promise.resolve(s.map(a=>({runId:a.id,workflowId:a.workflowId,resumable:a.status==="paused",lastSequenceNumber:a.lastSeq})))},listRuns:n.listRuns,loadRun:n.loadRun,loadRunEvents:n.loadRunEvents}}function Zn(e){return{listRuns:()=>e.select().from(w).where(Be(w.deletedAt)).orderBy(Xn(w.createdAt),Xn(w.id)).all().map(Yn),loadRun:t=>{let n=e.select().from(w).where(et(K(w.id,t),Be(w.deletedAt))).get();return n===void 0?void 0:Yn(n)},loadRunEvents:t=>e.select({payloadJson:me.payloadJson}).from(me).where(K(me.runId,t)).orderBy(ur(me.seq)).all().map(n=>Tt.parse(JSON.parse(n.payloadJson))),listActiveRuns:()=>e.select().from(w).where(et(Es(w.status,[...Cs]),Be(w.deletedAt))).orderBy(Xn(w.createdAt),Xn(w.id)).all().map(Yn),loadLatestRunPerWorkflow:()=>{let t=e.$with("ranked").as(e.select({...jc(w),slug:de.slug,rn:rn`row_number() over (partition by ${w.workflowId} order by ${w.createdAt} desc, ${w.id} desc)`.as("rn")}).from(w).innerJoin(de,K(w.workflowId,de.id)).where(et(Be(w.deletedAt),Be(de.deletedAt))));return e.with(t).select().from(t).where(K(t.rn,1)).all().map(n=>({slug:n.slug,lastRun:Yn(n)}))},loadStepExecutions:t=>e.select({nodeId:G.nodeId,nodeType:G.nodeType,status:G.status,attemptNumber:G.attemptNumber,startedAt:G.startedAt,completedAt:G.completedAt,durationMs:G.durationMs,costMicrocents:G.costMicrocents}).from(G).where(K(G.runId,t)).orderBy(ur(G.createdAt),ur(rn`rowid`)).all().map(n=>({nodeId:n.nodeId,nodeType:n.nodeType,status:n.status,attemptNumber:n.attemptNumber,...n.startedAt===null?{}:{startedAt:he(n.startedAt)},...n.completedAt===null?{}:{completedAt:he(n.completedAt)},...n.durationMs===null?{}:{durationMs:n.durationMs},costMicrocents:n.costMicrocents}))}}function Ss(e,t,n){return et(K(G.runId,e),K(G.nodeId,t),K(G.attemptNumber,n??1))}function cr(e,t){let n=e.select({snapshot:w.workflowDefinitionSnapshot,inputJson:w.inputJson}).from(w).where(et(K(w.id,t),Be(w.deletedAt))).get();return n===void 0?void 0:{workflowDefinitionSnapshot:n.snapshot,inputJson:n.inputJson}}import{and as lr,asc as Lc,eq as Qn,isNull as eo}from"drizzle-orm";function Uc(e){let t=JSON.parse(e);if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError("llm_providers.default_headers is not a JSON object");let n={};for(let[o,r]of Object.entries(t)){if(typeof r!="string")throw new TypeError(`llm_providers.default_headers['${o}'] is not a string`);n[o]=r}return n}function pr(e){return{id:e.id,name:e.name,displayName:e.displayName,baseUrl:e.baseUrl,...e.apiKeyKeychainRef===null?{}:{apiKeyKeychainRef:e.apiKeyKeychainRef},defaultHeaders:Uc(e.defaultHeaders),isActive:e.isActive,createdAt:he(e.createdAt),updatedAt:he(e.updatedAt)}}function fr(e,t){let n=o=>e.select().from(z).where(lr(Qn(z.name,o),eo(z.deletedAt))).get();return{list:()=>e.select().from(z).where(eo(z.deletedAt)).orderBy(Lc(z.name)).all().map(pr),get:o=>{let r=n(o);return r===void 0?void 0:pr(r)},upsert:o=>{let r=t.now(),i=n(o.name);if(i===void 0){let a={id:t.uuid(),name:o.name,displayName:o.displayName,baseUrl:o.baseUrl,defaultHeaders:JSON.stringify(o.defaultHeaders??{}),createdAt:r,updatedAt:r};e.insert(z).values(a).run()}else e.update(z).set({displayName:o.displayName,baseUrl:o.baseUrl,defaultHeaders:o.defaultHeaders===void 0?i.defaultHeaders:JSON.stringify(o.defaultHeaders),updatedAt:r}).where(Qn(z.id,i.id)).run();let s=n(o.name);if(s===void 0)throw new Error(`provider '${o.name}' not found after upsert`);return pr(s)},setKeychainRef:(o,r)=>{e.update(z).set({apiKeyKeychainRef:r,updatedAt:t.now()}).where(lr(Qn(z.name,o),eo(z.deletedAt))).run()},clearKeychainRef:o=>{e.update(z).set({apiKeyKeychainRef:null,updatedAt:t.now()}).where(lr(Qn(z.name,o),eo(z.deletedAt))).run()}}}import{createHash as T_,randomUUID as R_}from"crypto";import{mkdir as P_,readFile as N_,rename as $_,writeFile as D_}from"fs/promises";import{dirname as L_,join as U_,resolve as G_,sep as F_}from"path";import{lookup as J_}from"dns/promises";import{request as V_}from"https";import{isIP as q_}from"net";import{randomUUID as Q_}from"crypto";import{and as tb,eq as nb,inArray as ob,isNull as rb,lte as ib,notInArray as sb}from"drizzle-orm";import{randomUUID as cb}from"crypto";import{lstat as pb,mkdir as fb,realpath as mb,rename as hb,rm as gb,writeFile as yb}from"fs/promises";import{basename as _b,dirname as bb,isAbsolute as kb,join as xb,resolve as vb,sep as Ib}from"path";import{readFileSync as Vc,statSync as Kc}from"fs";import{homedir as qc}from"os";import{join as hr}from"path";import{parse as Xc}from"smol-toml";var Me=class extends m{filePath;constructor(t,n,o){super("config_error",`${t}: ${n}`,o),this.name="ConfigError",this.filePath=t}};import{chmodSync as Gc,mkdirSync as Fc,statSync as Bc}from"fs";import{homedir as As}from"os";import{dirname as Hc,join as mr,resolve as Wc}from"path";function an(e=As()){return mr(e,".relavium")}function Ms(e=As()){let t=an(e);return Fc(mr(t,"tmp"),{recursive:!0}),Gc(t,448),t}function Jc(e){try{return Bc(e).isDirectory()}catch{return!1}}function Ts(e){let t=Wc(e);for(;;){let n=mr(t,".relavium");if(Jc(n))return n;let o=Hc(t);if(o===t)return;t=o}}function Rs(e){let{global:t,workspace:n,project:o}=e;return{updateChannel:t?.update_channel,defaultModel:o?.defaults?.model??n?.defaults?.model??t?.preferences?.default_model,fsScope:o?.defaults?.fs_scope??n?.defaults?.fs_scope,maxTokensEstimate:o?.defaults?.max_tokens_estimate??n?.defaults?.max_tokens_estimate,variables:{...n?.variables,...o?.variables},mcpServers:zc(t?.mcp_servers,n?.mcp_servers,o?.mcp_servers)}}function zc(...e){let t=new Map;for(let n of e)for(let o of n??[])t.set(o.name,o);return[...t.values()]}var Os=256*1024;function gr(e,t){let n;try{n=Kc(e)}catch(s){if(Yc(s)==="ENOENT")return;throw new Me(e,"could not be read.",{cause:s})}if(!n.isFile())throw new Me(e,"is not a regular file.");if(n.size>Os)throw new Me(e,`exceeds the ${Os}-byte config size limit.`);let o;try{o=Vc(e,"utf8")}catch(s){throw new Me(e,"could not be read.",{cause:s})}let r;try{r=Xc(o)}catch(s){throw new Me(e,`is not valid TOML${Zc(s)}.`,{cause:s})}let i=t.safeParse(r);if(!i.success)throw new Me(e,`is invalid \u2014 ${Qc(i.error)}.`,{cause:i.error});return i.data}function ne(e){let t=e.home??qc(),n=e.configPath??hr(an(t),"config.toml"),o=gr(n,vs),r=Ts(e.cwd),i,s;return r!==void 0&&(i=gr(hr(r,"workspace.toml"),nr),s=gr(hr(r,"project.toml"),nr)),{config:Rs({global:o,workspace:i,project:s}),projectConfigDir:r,homeDir:t}}function Yc(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}function Zc(e){if(typeof e=="object"&&e!==null){let t="line"in e&&typeof e.line=="number"?e.line:void 0,n="column"in e&&typeof e.column=="number"?e.column:void 0;if(t!==void 0&&n!==void 0)return` (line ${t}, column ${n})`}return""}function Qc(e){let t=e.issues[0];if(t===void 0)return"failed schema validation";let n=t.path.join("."),o=el(t);return n.length>0?`${n}: ${o}`:o}function el(e){switch(e.code){case"unrecognized_keys":return`unknown key(s): ${e.keys.join(", ")}`;case"invalid_type":return`expected ${e.expected}`;case"invalid_enum_value":return`must be one of: ${e.options.map(String).join(", ")}`;case"too_small":return"value is too small";case"too_big":return"value is too large";case"invalid_string":return"value is not a valid string";default:return"value is invalid"}}import{chmodSync as Ps}from"fs";import{join as tl}from"path";function He(e){Ms(e);let t=tl(an(e),"history.db"),n=sr(t);try{ar(n.db),Ps(t,384);for(let o of["-wal","-shm"])try{Ps(`${t}${o}`,384)}catch(r){if(nl(r)!=="ENOENT")throw r}}catch(o){throw n.sqlite.close(),o}return{db:n.db,close:()=>{n.sqlite.open&&n.sqlite.close()}}}function nl(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}import{z as c}from"zod";var W=c.string().min(1),tt=c.number().int().nonnegative(),dn=c.enum(wt),un=c.object({name:W,description:c.string().optional(),parameters:c.custom(e=>typeof e=="object"&&e!==null&&!Array.isArray(e),{message:"parameters must be a JSON-Schema object"})}),Ns=c.enum(["user","assistant","tool"]),to=c.object({role:Ns,content:c.array(Fn)}).superRefine((e,t)=>{let n=0,o=0;e.content.forEach((r,i)=>{if(r.type==="media"){n+=1,o+=Ho(r,t,["content",i]);return}r.type==="tool_result"&&qe(r.result)&&t.addIssue({code:c.ZodIssueCode.custom,message:"raw media bytes are forbidden inside tool_result.result \u2014 attach handle-only parts via tool_result.media instead (ADR-0031)",path:["content",i,"result"]})}),n>vt.maxPartsPerMessage&&t.addIssue({code:c.ZodIssueCode.custom,message:`a message may carry at most ${vt.maxPartsPerMessage} media parts (got ${n})`,path:["content"]}),o>vt.maxInlineBytesPerMessage&&t.addIssue({code:c.ZodIssueCode.custom,message:`a message may carry at most ${vt.maxInlineBytesPerMessage} decoded inline media bytes in total (got ${o})`,path:["content"]})}),$s=c.union([c.enum(["auto","none","required"]),c.object({name:W})]),no=c.discriminatedUnion("type",[c.object({type:c.literal("text")}),c.object({type:c.literal("json"),schema:c.custom(e=>typeof e=="object"&&e!==null&&!Array.isArray(e),{message:"responseFormat.schema must be a JSON-Schema object"}),name:W.optional(),strict:c.boolean().optional()})]),Ds=c.object({modality:c.enum(Ce),direction:c.enum(["input","output"]),units:tt,unit:c.enum(["count","second"])}),yr=c.object({inputTokens:tt,outputTokens:tt,cacheReadTokens:tt.optional(),cacheWriteTokens:tt.optional(),reasoningTokens:tt.optional(),mediaUnits:c.array(Ds).optional(),costMicrocents:tt.optional()}).refine(e=>e.reasoningTokens===void 0||e.reasoningTokens<=e.outputTokens,{message:"reasoningTokens must be \u2264 outputTokens (reasoning is counted inside output)",path:["reasoningTokens"]}),js=c.array(c.enum(yt)),Ls=c.object({input:c.object({image:c.boolean(),audio:c.boolean(),video:c.boolean(),document:c.boolean()}),outputCombinations:c.array(js),surface:c.enum(Fi).optional()}),ol=c.object({tools:c.boolean(),streaming:c.boolean(),parallelToolCalls:c.boolean(),vision:c.boolean(),promptCache:c.boolean(),reasoning:c.boolean(),media:Ls}).refine(e=>e.vision===e.media.input.image,{message:"vision is a derived alias of media.input.image \u2014 the two must not drift (ADR-0031)",path:["vision"]}),Us=c.enum(["rate_limit","overloaded","timeout","transport","auth","bad_request","content_filter","cancelled","unknown"]),wr=c.object({kind:Us,retryable:c.boolean(),code:W.optional(),status:c.number().int().optional(),provider:dn,message:c.string(),cause:c.unknown().optional()}),Gs=c.custom(e=>typeof e=="object"&&e!==null&&"aborted"in e&&typeof e.aborted=="boolean"&&"addEventListener"in e&&typeof e.addEventListener=="function"&&"removeEventListener"in e&&typeof e.removeEventListener=="function",{message:"signal must be an AbortSignalLike (aborted: boolean; add/removeEventListener: function)"}),rl=c.object({model:W,system:c.string().optional(),messages:c.array(to),tools:c.array(un).optional(),toolChoice:$s.optional(),responseFormat:no.optional(),outputModalities:c.array(c.enum(yt)).optional(),temperature:c.number().optional(),maxTokens:c.number().int().positive().optional(),stopSequences:c.array(c.string()).optional(),signal:Gs.optional(),providerOptions:c.record(c.string(),c.unknown()).optional()}),il=c.object({content:c.array(Fn),stopReason:on,usage:yr,raw:c.unknown()}).superRefine((e,t)=>{e.content.forEach((n,o)=>{n.type==="tool_result"&&qe(n.result)&&t.addIssue({code:c.ZodIssueCode.custom,message:"raw media bytes are forbidden inside tool_result.result \u2014 normalize them into a typed media part (ADR-0031)",path:["content",o,"result"]})})}),sl=c.discriminatedUnion("type",[c.object({type:c.literal("text_delta"),text:c.string()}),c.object({type:c.literal("tool_call_start"),id:W,name:W}),c.object({type:c.literal("tool_call_delta"),id:W,argsJsonDelta:c.string()}),c.object({type:c.literal("tool_call_end"),id:W}),c.object({type:c.literal("reasoning_start"),id:W}),c.object({type:c.literal("reasoning_delta"),id:W,text:c.string()}),c.object({type:c.literal("reasoning_end"),id:W,signature:c.string().optional(),redacted:c.boolean().optional()}),c.object({type:c.literal("media_start"),id:W,mimeType:Le}),c.object({type:c.literal("media_delta"),id:W,progress:c.number().min(0).max(1).optional(),partialRef:c.string().regex(je,"must be a media://sha256-<64hex> handle").optional()}),c.object({type:c.literal("media_end"),id:W,media:Zt}),c.object({type:c.literal("tool_result"),id:W,name:W,result:c.unknown(),isError:c.boolean().optional(),providerExecuted:c.literal(!0),media:c.array(Zt).optional()}),c.object({type:c.literal("stop"),stopReason:on,usage:yr}),c.object({type:c.literal("error"),error:wr})]).superRefine((e,t)=>{e.type==="tool_result"&&qe(e.result)&&t.addIssue({code:c.ZodIssueCode.custom,message:"raw media bytes are forbidden inside tool_result.result \u2014 normalize them into a typed media part (ADR-0031)",path:["result"]})}),al=c.object({model:W,prompt:W,modality:c.enum(Ce),mimeType:Le.optional(),count:c.number().int().positive().optional(),durationSeconds:c.number().positive().optional(),signal:Gs.optional(),providerOptions:c.record(c.string(),c.unknown()).optional()}),dl=c.object({media:Qt.optional(),jobId:W.optional(),raw:c.unknown()}).refine(e=>e.media===void 0!=(e.jobId===void 0),{message:"exactly one of media (sync) or jobId (async) must be present",path:["media"]}),ul=c.discriminatedUnion("state",[c.object({state:c.literal("pending"),progress:c.number().min(0).max(1).optional()}),c.object({state:c.literal("done"),media:Qt}),c.object({state:c.literal("failed"),error:wr})]);var Te=class extends Error{},nt=class extends Te{code="unknown_model";modelId;knownModels;constructor(t,n){super(`unknown model id '${t}' \u2014 not in the pricing table`),this.name="UnknownModelError",this.modelId=t,this.knownModels=n}},ge=class extends Te{code="unsupported_tool_schema";provider;toolName;reason;constructor(t,n,o){super(`tool '${n}' cannot be expressed for provider '${t}': ${o}`),this.name="ToolSchemaError",this.provider=t,this.toolName=n,this.reason=o}};function cl(e){let t=Et(e);return t===null?"<non-HTTPS or malformed base URL>":`https://${t.host}`}var We=class extends Te{code="invalid_base_url";url;constructor(t,n){let o=cl(t);super(`invalid base URL '${o}': ${n}`),this.name="InvalidBaseUrlError",this.url=o}},oe=class extends Te{code="unsupported_capability";provider;capability;detail;constructor(t,n,o){let r=o===void 0?`provider '${t}' does not support the '${n}' capability`:`provider '${t}' does not support the '${n}' capability: ${o}`;super(r),this.name="UnsupportedCapabilityError",this.provider=t,this.capability=n,this.detail=o}};function _r(e){let t=[];return e.tools!==void 0&&e.tools.length>0&&t.push("tools"),t}function br(e,t){let n=e.media.input;for(let o of t.messages){let r=ll(n,o);if(r!==null)return r}return ml(e,t.outputModalities)}function ll(e,t){for(let n of t.content){let o=pl(e,n);if(o!==null)return o}return null}function pl(e,t){return t.type==="media"?Fs(e,t.mimeType):t.type==="tool_result"&&Array.isArray(t.media)?fl(e,t.media):null}function fl(e,t){for(let n of t){let o=Fs(e,n.mimeType," in tool_result");if(o!==null)return o}return null}function Fs(e,t,n=""){let o=Q(t);return o===void 0||e[o]?null:`input modality '${o}' (${t})${n} not supported`}function kr(e,t){return t.some(n=>n!=="text")?e.some(n=>n.length===t.length&&t.every(o=>n.includes(o))&&n.every(o=>t.includes(o))):!0}function ml(e,t){return t===void 0||kr(e.media.outputCombinations,t)?null:`output modalities [${t.join(", ")}] not a supported output combination`}function Bs(e,t){for(let n of _r(t))if(!e[n])return`'${n}' capability not supported`;return br(e,t)}function ke(e,t,n){for(let o of _r(n))if(!t[o])throw new oe(e,o)}function ot(e,t){if(!t.streaming)throw new oe(e,"streaming")}var Ws=new Set(["rate_limit","overloaded","timeout","transport"]),oo=e=>Ws.has(e);function rt(e){return e===429?"rate_limit":e===529?"overloaded":e===408?"timeout":e>=500?"overloaded":e===401||e===403?"auth":e===400||e===404||e===409||e===413||e===422?"bad_request":"unknown"}var I=class extends Error{llmError;constructor(t){super(t.message),this.name="LlmProviderError",this.llmError=t}};function Hs(e){return e.replace(/(https?:\/\/)[^/\s:@]+(?::[^/\s@]+)?@/gi,"$1[REDACTED]@").replace(/([?&](?:(?:x[-_])?api[-_]?key|key|token|access[-_]?token|auth|password|secret)=)[^&\s#]+/gi,"$1[REDACTED]").replace(/\bBearer\s+\S+/gi,"Bearer [REDACTED]").replace(/\bBasic\s+\S+/gi,"Basic [REDACTED]").replace(/\bsk-(?:ant-)?[A-Za-z0-9\-_]{16,}/g,"[REDACTED]").replace(/\bAIza[0-9A-Za-z\-_]{20,}/g,"[REDACTED]")}function b(e){let t={kind:e.kind,retryable:oo(e.kind),provider:e.provider,message:Hs(e.message)};return e.code!==void 0&&(t.code=Hs(e.code)),e.status!==void 0&&(t.status=e.status),e.cause!==void 0&&(t.cause=e.cause),t}var A=e=>Math.round(e*1e8),cn={"claude-fable-5":{provider:"anthropic",nativeId:"claude-fable-5",displayName:"Claude Fable 5",contextWindowTokens:1e6,maxOutputTokens:128e3,inputPerMtokMicrocents:A(10),outputPerMtokMicrocents:A(50),cachedInputPerMtokMicrocents:A(1),cacheWritePerMtokMicrocents:A(12.5)},"claude-opus-4-8":{provider:"anthropic",nativeId:"claude-opus-4-8",displayName:"Claude Opus 4.8",contextWindowTokens:1e6,maxOutputTokens:128e3,inputPerMtokMicrocents:A(5),outputPerMtokMicrocents:A(25),cachedInputPerMtokMicrocents:A(.5),cacheWritePerMtokMicrocents:A(6.25)},"claude-sonnet-4-6":{provider:"anthropic",nativeId:"claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",contextWindowTokens:1e6,maxOutputTokens:64e3,inputPerMtokMicrocents:A(3),outputPerMtokMicrocents:A(15),cachedInputPerMtokMicrocents:A(.3),cacheWritePerMtokMicrocents:A(3.75)},"claude-haiku-4-5":{provider:"anthropic",nativeId:"claude-haiku-4-5",displayName:"Claude Haiku 4.5",contextWindowTokens:2e5,maxOutputTokens:64e3,inputPerMtokMicrocents:A(1),outputPerMtokMicrocents:A(5),cachedInputPerMtokMicrocents:A(.1),cacheWritePerMtokMicrocents:A(1.25)},"gpt-5.5":{provider:"openai",nativeId:"gpt-5.5",displayName:"GPT-5.5",contextWindowTokens:1e6,maxOutputTokens:128e3,inputPerMtokMicrocents:A(5),outputPerMtokMicrocents:A(30),cachedInputPerMtokMicrocents:A(.5)},"gpt-5.4-mini":{provider:"openai",nativeId:"gpt-5.4-mini",displayName:"GPT-5.4 mini",contextWindowTokens:4e5,maxOutputTokens:128e3,inputPerMtokMicrocents:A(.75),outputPerMtokMicrocents:A(4.5),cachedInputPerMtokMicrocents:A(.075)},"gemini-2.5-flash":{provider:"gemini",nativeId:"gemini-2.5-flash",displayName:"Gemini 2.5 Flash",contextWindowTokens:1048576,maxOutputTokens:65536,inputPerMtokMicrocents:A(.3),outputPerMtokMicrocents:A(2.5),cachedInputPerMtokMicrocents:A(.03)},"gemini-2.5-pro":{provider:"gemini",nativeId:"gemini-2.5-pro",displayName:"Gemini 2.5 Pro",contextWindowTokens:1048576,maxOutputTokens:65536,inputPerMtokMicrocents:A(1.25),outputPerMtokMicrocents:A(10),cachedInputPerMtokMicrocents:A(.125)},"deepseek-chat":{provider:"deepseek",nativeId:"deepseek-chat",displayName:"DeepSeek-V4-Flash (chat)",contextWindowTokens:1e6,maxOutputTokens:384e3,inputPerMtokMicrocents:A(.14),outputPerMtokMicrocents:A(.28),cachedInputPerMtokMicrocents:A(.0028)},"deepseek-reasoner":{provider:"deepseek",nativeId:"deepseek-reasoner",displayName:"DeepSeek-V4-Flash (reasoner)",contextWindowTokens:1e6,maxOutputTokens:384e3,inputPerMtokMicrocents:A(.435),outputPerMtokMicrocents:A(.87),cachedInputPerMtokMicrocents:A(.003625)}},hl=new Set(Object.keys(cn));function xr(e){return hl.has(e)}var vr=Object.keys(cn).filter(xr);function pn(e){if(!xr(e))throw new nt(e,vr);return cn[e]}var gl=1e6;function ro(e,t){let n=pn(e),o=t.cacheReadTokens??0,r=t.cacheWriteTokens??0,i=(s,a)=>Math.round(s*a/gl);return i(t.inputTokens,n.inputPerMtokMicrocents)+i(t.outputTokens,n.outputPerMtokMicrocents)+i(o,n.cachedInputPerMtokMicrocents)+i(r,n.cacheWritePerMtokMicrocents??0)+Js(n,t.mediaUnits)}function yl(e,t){return e==="image"?t==="count":t==="second"}function Js(e,t){if(t===void 0)return 0;let n=0;for(let o of t){if(o.direction!=="output")continue;let r=e.mediaOutputRates?.[o.modality];r===void 0||!yl(o.modality,o.unit)||(n+=Math.round(o.units*r))}return n}var ln=class{#e=0;record(t,n){let o=ro(t,n);return this.#e+=o,{inputTokens:n.inputTokens,outputTokens:n.outputTokens,costMicrocents:o,cumulativeCostMicrocents:this.#e}}get cumulativeCostMicrocents(){return this.#e}};var wl=1e6;function Ir(e,t){let n=pn(e);return t<=0?0:Math.round(t*n.outputPerMtokMicrocents/wl)}function Sr(e,t){let n=pn(e),o=0;for(let{modality:r,units:i}of t){let s=n.mediaOutputRates?.[r];s!==void 0&&i>0&&(o+=Math.round(i*s))}return o}var _l=250,bl=8e3,kl=3e4;function zs(e){let t=e.messages.map(o=>({...o,content:o.content.filter(r=>r.type!=="reasoning")})).filter(o=>o.content.length>0),n=[];for(let o of t){let r=n.at(-1);r!==void 0&&r.role===o.role?n[n.length-1]={...r,content:[...r.content,...o.content]}:n.push(o)}return{...e,messages:n}}function xl(e,t,n,o){let r=e==="exponential"?n*2**t:n*(t+1);return Math.min(r,o)}function vl(e){return e.type!=="stop"&&e.type!=="error"}function Il(e){return e.messages.some(t=>t.content.some(n=>n.type==="media"&&n.source.kind==="handle"))}var fn=class{#e;#t;#i;#o;#a;#c;#n;#y=new Map;#b=new Map;#v;#O=new Set;#P;constructor(t,n){let o=t.at(-1);if(o===void 0)throw new Error("FallbackChain requires at least one plan entry");for(let r of t)if(!Number.isInteger(r.maxAttempts)||r.maxAttempts<1)throw new Error("FallbackChain plan entry requires a positive integer maxAttempts");this.#P=o.provider.id,this.#e=t,this.#t=n,this.#i=n.sleep,this.#o=n.now??Date.now,this.#a=n.backoffBaseMs??_l,this.#c=n.backoffMaxMs??bl,this.#n=n.cooldownMs??kl}async generate(t){let n=new io(t,this.#v);try{for(let o of this.#e){this.#A(t,o.provider.id);let r=this.#k(o,n.previewRequest(o));if(r!==void 0){this.#m(n.next(o,{outcome:"skipped",skipReason:r}));continue}let i=n.beginEntry(o),s=await this.#f(o,i,n);if(s===void 0)continue;let a=await this.#j(o,s,t,n);if(a!==void 0)return a}throw new I(n.lastError??this.#u())}finally{this.#v=n.lastProvider}}async#j(t,n,o,r){let i=t.maxAttempts,s=0;for(let a=1;a<=i+s;a+=1){this.#A(o,t.provider.id);let d=await this.#d(t,n,r);if(d.status==="success")return d.result;r.lastError=d.error;let u=await this.#I(t,d.error);if(u==="fatal")throw new I(d.error);if(u==="auth-refreshed"){s+=1;continue}a<i+s&&await this.#T(t,a-1)}}async*stream(t){let n=new io(t,this.#v);try{for(let o of this.#e){if(this.#S(t)){yield{type:"error",error:this.#s(o.provider.id)};return}let r=this.#k(o,n.previewRequest(o),{streaming:!0});if(r!==void 0){this.#m(n.next(o,{outcome:"skipped",skipReason:r}));continue}let i=n.beginEntry(o),s=await this.#f(o,i,n);if(s===void 0)continue;if((yield*this.#r(o,s,t,n))==="done")return}yield{type:"error",error:n.lastError??this.#u()}}finally{this.#v=n.lastProvider}}async*#r(t,n,o,r){let i=t.maxAttempts,s=0;for(let a=1;a<=i+s;a+=1){if(this.#S(o))return yield{type:"error",error:this.#s(t.provider.id)},"done";let d=r.next(t),u={committed:!1},p=yield*this.#g(t,n,d,u);if(u.committed||p===void 0)return"done";r.lastError=p;let _=await this.#I(t,p);if(_==="fatal")return yield{type:"error",error:p},"done";if(_==="auth-refreshed"){s+=1;continue}a<i+s&&await this.#T(t,a-1)}return"advance"}async#d(t,n,o){let r=o.next(t);try{let i=n.maxTokens;await this.#t.preAttempt?.({model:t.model,...i===void 0?{}:{maxTokens:i}});let s=await this.#x(t.provider.id),a=await t.provider.generate(n,s);return this.#N(r,t.model,a.usage),{status:"success",result:a}}catch(i){let s=this.#l(this.#M(i,t.provider.id),n,t.provider.id);return this.#m({...r,outcome:"failed",error:s}),{status:"error",error:s}}}async*#g(t,n,o,r){let i;try{let s=n.maxTokens;await this.#t.preAttempt?.({model:t.model,...s===void 0?{}:{maxTokens:s}});let a=await this.#x(t.provider.id);for await(let d of t.provider.stream(n,a)){if(d.type==="error"){let u=this.#l(d.error,n,t.provider.id);return this.#m({...o,outcome:"failed",error:u}),r.committed?(yield{type:"error",error:u},void 0):u}d.type==="stop"&&(i=d.usage),r.committed=r.committed||vl(d),yield d}}catch(s){let a=this.#l(this.#M(s,t.provider.id),n,t.provider.id);return this.#m({...o,outcome:"failed",error:a}),r.committed?(yield{type:"error",error:a},void 0):a}return this.#N(o,t.model,i),void 0}async#I(t,n){if(n.kind==="auth"){let o=this.#t.onAuthError;return o!==void 0&&!this.#O.has(t.provider.id)&&(this.#O.add(t.provider.id),await this.#w(o,t.provider.id))?"auth-refreshed":"fatal"}return n.kind==="rate_limit"?(this.#y.set(t.provider.id,this.#o()+this.#n),"retryable"):oo(n.kind)?"retryable":"fatal"}async#w(t,n){try{return await t(n)}catch{return!1}}async#f(t,n,o){try{return await this.#_(n,t.provider.id)}catch{let r=b({provider:t.provider.id,kind:"unknown",message:"media re-materialization failed before egress"});o.lastError=r,this.#m({...o.next(t),error:r});return}}async#_(t,n){let o=this.#t.resolveForEgress;if(o===void 0||!Il(t))return t;let r=[];for(let i of t.messages){let s=[];for(let a of i.content)s.push(a.type==="media"&&a.source.kind==="handle"?{...a,source:await this.#C(a.source.ref,n,o)}:a);r.push({...i,content:s})}return{...t,messages:r}}async#C(t,n,o){let r=`${n}\0${t}`,i=this.#b.get(r);if(i!==void 0)return i;let s=await o(t,n);return s.kind!=="base64"&&this.#b.set(r,s),s}#k(t,n,o){let r=this.#y.get(t.provider.id);if(r!==void 0&&this.#o()<r)return"provider in rate-limit cooldown";if(o?.streaming===!0&&!t.provider.supports.streaming)return"provider does not support streaming";let i=Bs(t.provider.supports,n);if(i!==null)return`provider cannot serve the request: ${i}`}#A(t,n){if(this.#S(t))throw new I(this.#s(n))}#S(t){return t.signal?.aborted===!0}#s(t){return b({provider:t,kind:"cancelled",message:"request aborted"})}#l(t,n,o){return this.#S(n)?this.#s(o):t}#u(){return b({provider:this.#P,kind:"unknown",message:"fallback chain exhausted: no provider could serve the request"})}#M(t,n){return t instanceof I?t.llmError:b({provider:n,kind:"unknown",message:t instanceof Error?t.message:"unknown provider failure",cause:t})}async#T(t,n){let o=xl(t.backoff??"exponential",n,this.#a,this.#c);await this.#i(o)}async#x(t){try{return await this.#t.keyFor(t)}catch{throw new I(b({provider:t,kind:"auth",message:`credential resolution failed for provider ${t}`}))}}#N(t,n,o){if(o===void 0){this.#m({...t,outcome:"succeeded"});return}let r;try{r=this.#t.costTracker?.record(n,o)}catch{r=void 0}this.#m({...t,outcome:"succeeded",usage:o,...r===void 0?{}:{cost:r}})}#m(t){this.#t.onAttempt?.(t)}},io=class{#e;#t;#i=0;lastError;constructor(t,n){this.#e=t,this.#t=n}get lastProvider(){return this.#t}previewRequest(t){return{...this.#e,model:t.model}}beginEntry(t){let n=t.provider.id;return this.#t!==void 0&&this.#t!==n&&(this.#e=zs(this.#e)),this.#t=n,{...this.#e,model:t.model}}next(t,n){return this.#i+=1,{attemptNumber:this.#i,provider:t.provider.id,model:t.model,outcome:n?.outcome??"failed",...n?.skipReason===void 0?{}:{skipReason:n.skipReason}}}};function it(e,t){let{name:n,description:o,parameters:r}=e,i=o===void 0?{}:{description:o};switch(t){case"anthropic":return{name:n,input_schema:r,...i};case"openai":case"deepseek":return{type:"function",function:{name:n,parameters:r,...i}};case"gemini":return{functionDeclarations:[{name:n,parameters:Ks(r,n),...i}]};default:{let s=t;throw new Error(`unhandled provider id: ${String(s)}`)}}}var Er=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Sl=new Set(["type","description","enum","properties","required","items","anyOf","nullable","format","minItems","maxItems","minimum","maximum","minLength","maxLength","pattern","default"]),El=new Set(["date-time","int32","int64","float","double"]);function Cl(e){return typeof e=="string"&&El.has(e)?{format:e}:{}}function Al(e,t){let n=e.filter(o=>o!=="null");if(n.length!==1)throw new ge("gemini",t,`type union ${JSON.stringify(e)} is not expressible (need exactly one non-null type)`);return e.includes("null")?{type:n[0],nullable:!0}:{type:n[0]}}var Vs=100;function Ml(e,t,n){let o={};for(let[r,i]of Object.entries(e))Object.defineProperty(o,r,{value:so(i,t,n+1),enumerable:!0,writable:!0,configurable:!0});return o}function Tl(e,t,n,o){return e==="format"?Cl(t):e==="type"&&Array.isArray(t)?Al(t,n):e==="properties"&&Er(t)?{properties:Ml(t,n,o)}:e==="items"||e==="anyOf"?{[e]:so(t,n,o+1)}:{[e]:t}}function so(e,t,n){if(n>Vs)throw new ge("gemini",t,`schema nesting exceeds the maximum supported depth (${Vs})`);if(Array.isArray(e))return e.map(i=>so(i,t,n+1));if(!Er(e))return e;if("$ref"in e)throw new ge("gemini",t,"`$ref` is not expressible in the Gemini schema subset");let o={},r=!1;for(let[i,s]of Object.entries(e)){if(!Sl.has(i))continue;let a=Tl(i,s,t,n);i==="type"&&"nullable"in a&&(r=!0),Object.assign(o,a)}return r&&(o.nullable=!0),o}function Ks(e,t){let n=so(e,t,0);if(!Er(n))throw new ge("gemini",t,"tool parameters must be an object schema");let o=n.type;if(o===void 0)return{...n,type:"object"};if(o!=="object")throw new ge("gemini",t,"tool parameters must be an object schema");return n}var Ot=class{#e=0;#t=new Map;synthesize(t){let n=`gemini-tool-${this.#e}-${t}`;this.#e+=1;let o=this.#t.get(t)??[];return o.push(n),this.#t.set(t,o),n}resolveResponse(t){let n=this.#t.get(t)?.shift();if(n===void 0)throw new ge("gemini",t,"functionResponse has no matching synthesized tool-call id");return n}};function st(e,t){if(t.id.length===0||t.name.length===0)throw new ge(e,t.name.length===0?"(unnamed)":t.name,"a tool call must carry a non-empty id and name");return{type:"tool_call",id:t.id,name:t.name,args:t.args}}import hn from"@anthropic-ai/sdk";function re(e){return typeof AbortSignal<"u"&&e instanceof AbortSignal}function Re(e,t,n){for(let r of n.messages)to.parse(r);let o=br(t,n);if(o!==null)throw new oe(e,"media",o)}function ao(e,t){if(t.outputModalities?.some(n=>n!=="text")===!0)throw new oe(e,"media","streaming media output is unsupported \u2014 inline media-out is delivered via generate() (ADR-0046 \xA74)")}var Oe="reasoning-0",Cr="rlv-mediajob:1:";function mn(e){if(e.length===0)throw new Error("encodeMediaJobId: vendorId must be non-empty");return Cr+Buffer.from(e,"utf8").toString("base64url")}function uo(e){if(!e.startsWith(Cr))return;let t=e.slice(Cr.length);if(t.length===0)return;let n=Buffer.from(t,"base64url").toString("utf8");if(!(n.length===0||mn(n)!==e))return n}var X="anthropic",Rl=4096,qs=1,Pt={tools:!0,streaming:!0,parallelToolCalls:!0,vision:!0,promptCache:!0,reasoning:!1,media:{input:{image:!0,audio:!1,video:!1,document:!1},outputCombinations:[],surface:"chat"}};function Ys(e){switch(e){case"max_tokens":return"length";case"tool_use":return"tool_use";case"refusal":return"content_filter";case"end_turn":case"stop_sequence":case"pause_turn":case null:return"stop";default:return"stop"}}function Zs(e){let t={inputTokens:e.input_tokens,outputTokens:e.output_tokens};e.cache_read_input_tokens!=null&&(t.cacheReadTokens=e.cache_read_input_tokens),e.cache_creation_input_tokens!=null&&(t.cacheWriteTokens=e.cache_creation_input_tokens);let n=e.output_tokens_details?.thinking_tokens??0;return n>0&&(t.reasoningTokens=n),t}function Ol(e){let t=[];for(let n of e)n.type==="text"?t.push({type:"text",text:n.text}):n.type==="tool_use"?t.push(st(X,{id:n.id,name:n.name,args:n.input})):n.type==="thinking"?t.push(n.signature.length>0?{type:"reasoning",text:n.thinking,signature:n.signature}:{type:"reasoning",text:n.thinking}):n.type==="redacted_thinking"&&t.push({type:"reasoning",text:"",redacted:!0});return t}function Pl(e){switch(e){case"rate_limit_error":return"rate_limit";case"overloaded_error":case"api_error":return"overloaded";case"timeout_error":return"timeout";case"authentication_error":case"permission_error":return"auth";case"invalid_request_error":case"not_found_error":return"bad_request";default:return}}function Nl(e){let t=typeof e.status=="number"?e.status:void 0,n=typeof e.type=="string"&&e.type.length>0?e.type:void 0,o=(n===void 0?void 0:Pl(n))??(t===void 0?"unknown":rt(t));return b({provider:X,kind:o,message:e.message,...t===void 0?{}:{status:t},...n===void 0?{}:{code:n}})}function Ar(e){return e instanceof hn.APIUserAbortError?b({provider:X,kind:"cancelled",message:"request aborted"}):e instanceof hn.APIConnectionTimeoutError?b({provider:X,kind:"timeout",message:e.message}):e instanceof hn.APIConnectionError?b({provider:X,kind:"transport",message:e.message}):e instanceof hn.APIError?Nl(e):e instanceof Error&&e.name==="AbortError"?b({provider:X,kind:"cancelled",message:"request aborted"}):b({provider:X,kind:"unknown",message:e instanceof Error?e.message:"unknown provider error"})}function $l(e){switch(e.type){case"text":return{type:"text",text:e.text};case"tool_call":return{type:"tool_use",id:e.id,name:e.name,input:e.args};case"tool_result":{let t={type:"tool_result",tool_use_id:e.toolCallId,content:typeof e.result=="string"?e.result:JSON.stringify(e.result)??""};return e.isError!==void 0&&(t.is_error=e.isError),t}default:{let t=e;throw new Error(`unhandled content part: ${String(t)}`)}}}function gn(e){return new I(b({provider:X,kind:"bad_request",message:e}))}var Qs=["image/jpeg","image/png","image/gif","image/webp"];function Dl(e){return Qs.includes(e)}function jl(e){let t=Q(e.mimeType);if(t==="image"){if(e.source.kind!=="base64")throw gn(`Anthropic does not support ${e.source.kind}-source image input \u2014 use base64 (1.AF)`);if(!Dl(e.mimeType))throw gn(`Anthropic image input supports only ${Qs.join(", ")}, not '${e.mimeType}'`);return{type:"image",source:{type:"base64",media_type:e.mimeType,data:e.source.data}}}if(t==="document"){if(e.source.kind!=="base64")throw gn(`Anthropic does not support ${e.source.kind}-source document input \u2014 use base64 (1.AF)`);return{type:"document",source:{type:"base64",media_type:"application/pdf",data:e.source.data}}}throw gn(`Anthropic does not support ${t??"unknown"} media input`)}function ea(e,t){if(e.type==="reasoning"){if(e.redacted===!0||e.signature===void 0)return;t.push({type:"thinking",thinking:e.text,signature:e.signature});return}t.push($l(e))}function Ll(e){let t=[];for(let n of e){if(n.type==="media"){t.push(jl(n));continue}ea(n,t)}return t}function Ul(e){if(e.role==="assistant"){let t=[];for(let n of e.content){if(n.type==="media")throw gn("assistant-role media is not supported (provider output media is not replayed)");ea(n,t)}return{role:"assistant",content:t}}return{role:"user",content:Ll(e.content)}}function Xs(e){return typeof e=="string"?[{type:"text",text:e}]:e}function Gl(e){let t=[];for(let n of e){let o=t.at(-1);o!==void 0&&o.role===n.role?t[t.length-1]={role:o.role,content:[...Xs(o.content),...Xs(n.content)]}:t.push(n)}return t}function Fl(e){return e==="auto"?{type:"auto"}:e==="none"?{type:"none"}:e==="required"?{type:"any"}:{type:"tool",name:e.name}}function Bl(e){let t=it(e,X);if(!("input_schema"in t))throw new Error("unreachable: the Anthropic wire shape always carries input_schema");let n={name:t.name,input_schema:t.input_schema};return t.description!==void 0&&(n.description=t.description),n}function ta(e){let t={model:e.model,max_tokens:e.maxTokens??Rl,messages:Gl(e.messages.map(Ul))};if(e.system!==void 0&&(t.system=e.system),e.tools!==void 0&&(t.tools=e.tools.map(Bl)),e.toolChoice!==void 0&&(t.tool_choice=Fl(e.toolChoice)),e.responseFormat?.type==="json"&&(t.output_config={format:{type:"json_schema",schema:e.responseFormat.schema}}),e.temperature!==void 0){if(!Number.isFinite(e.temperature)||e.temperature<0||e.temperature>qs)throw new I(b({provider:X,kind:"bad_request",message:`temperature ${String(e.temperature)} is outside Anthropic's accepted range [0, ${String(qs)}]`}));t.temperature=e.temperature}return e.stopSequences!==void 0&&(t.stop_sequences=e.stopSequences),e.providerOptions===void 0?t:{...e.providerOptions,...t}}function na(e){return re(e.signal)?{signal:e.signal}:{}}function Hl(e,t){let n={inputTokens:t.input_tokens??e.inputTokens,outputTokens:t.output_tokens},o=t.cache_read_input_tokens??e.cacheReadTokens;o!=null&&(n.cacheReadTokens=o);let r=t.cache_creation_input_tokens??e.cacheWriteTokens;r!=null&&(n.cacheWriteTokens=r);let i=t.output_tokens_details?.thinking_tokens??e.reasoningTokens??0;return i>0&&(n.reasoningTokens=i),n}function Wl(e,t,n){let o=e.content_block;if(o.type==="tool_use")return t.set(e.index,o.id),{type:"tool_call_start",id:o.id,name:o.name};if(o.type==="thinking"||o.type==="redacted_thinking"){let r=`reasoning-${String(e.index)}`;return n.set(e.index,{id:r,redacted:o.type==="redacted_thinking"}),{type:"reasoning_start",id:r}}}function Jl(e,t,n){let o=e.delta;if(o.type==="text_delta")return{type:"text_delta",text:o.text};if(o.type==="input_json_delta"){let r=t.get(e.index);return r===void 0?void 0:{type:"tool_call_delta",id:r,argsJsonDelta:o.partial_json}}if(o.type==="thinking_delta"){let r=n.get(e.index);return r===void 0?void 0:{type:"reasoning_delta",id:r.id,text:o.thinking}}if(o.type==="signature_delta"){let r=n.get(e.index);r!==void 0&&(r.signature=(r.signature??"")+o.signature);return}}function zl(e,t,n){let o=t.get(e.index);if(o!==void 0)return{type:"tool_call_end",id:o};let r=n.get(e.index);if(r===void 0)return;let i={type:"reasoning_end",id:r.id};return r.signature!==void 0&&(i.signature=r.signature),r.redacted&&(i.redacted=!0),i}function Vl(e,t,n){return e.type==="content_block_start"?Wl(e,t,n):e.type==="content_block_delta"?Jl(e,t,n):zl(e,t,n)}async function*Kl(e,t){let n=new Map,o=new Map,r={inputTokens:0,outputTokens:0},i="stop",s=!1,a;try{a=await e.messages.create({...ta(t),stream:!0},na(t))}catch(d){yield{type:"error",error:d instanceof I?d.llmError:Ar(d)};return}try{for await(let d of a)if(d.type==="message_start")r=Zs(d.message.usage);else if(d.type==="message_delta")i=Ys(d.delta.stop_reason),r=Hl(r,d.usage),s=!0;else if(d.type==="content_block_start"||d.type==="content_block_delta"||d.type==="content_block_stop"){let u=Vl(d,n,o);u!==void 0&&(yield u)}}catch(d){yield{type:"error",error:Ar(d)};return}if(!s){yield{type:"error",error:b({provider:X,kind:"transport",message:"stream ended before message_delta (truncated response)"})};return}yield{type:"stop",stopReason:i,usage:r}}function Mr(e={}){let t=n=>new hn({apiKey:n,...e.fetch===void 0?{}:{fetch:e.fetch},...e.maxRetries===void 0?{}:{maxRetries:e.maxRetries}});return{id:X,supports:Pt,async generate(n,o){ke(X,Pt,n),Re(X,Pt,n);let r=t(o),i;try{i=await r.messages.create({...ta(n),stream:!1},na(n))}catch(s){throw s instanceof I?s:new I(Ar(s))}return{content:Ol(i.content),stopReason:Ys(i.stop_reason),usage:Zs(i.usage),raw:i}},stream(n,o){return ke(X,Pt,n),ot(X,Pt),Re(X,Pt,n),Kl(t(o),n)}}}var Vk=Mr();import{GenerateVideosOperation as ql,GoogleGenAI as yn}from"@google/genai";var N="gemini",Nt={tools:!0,streaming:!0,parallelToolCalls:!0,vision:!0,promptCache:!0,reasoning:!1,media:{input:{image:!0,audio:!0,video:!1,document:!1},outputCombinations:[["text"],["text","image"],["text","audio"]],surface:"chat"}},ra={inputTokens:0,outputTokens:0},ia=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Rr(e){let t=(e??"").split(";")[0]?.trim()??"";return Le.safeParse(t).success?t:""}function sa(e){let t=e?.blockReason;return t!==void 0&&t!=="BLOCKED_REASON_UNSPECIFIED"}function Or(e){let t={};for(let[n,o]of Object.entries(e))n!=="httpOptions"&&n!=="abortSignal"&&(t[n]=o);return t}function aa(e,t){switch(e){case"MAX_TOKENS":return"length";case"SAFETY":case"RECITATION":case"BLOCKLIST":case"PROHIBITED_CONTENT":case"SPII":case"IMAGE_SAFETY":return"content_filter";case"MALFORMED_FUNCTION_CALL":case"UNEXPECTED_TOOL_CALL":return"error";case"STOP":case void 0:return t?"tool_use":"stop";default:return"stop"}}function da(e){let t=e.cachedContentTokenCount??0,n=e.thoughtsTokenCount??0,o={inputTokens:Math.max(0,(e.promptTokenCount??0)-t)+(e.toolUsePromptTokenCount??0),outputTokens:(e.candidatesTokenCount??0)+n};return t>0&&(o.cacheReadTokens=t),n>0&&(o.reasoningTokens=n),o}function Xl(e,t){let n=[];for(let o of e.candidates?.[0]?.content?.parts??[]){let r=Yl(o,t);r!==void 0&&n.push(r)}return n}function Yl(e,t){if(e.functionCall!==void 0){let o=e.functionCall.name??"";return st(N,{id:t.synthesize(o),name:o,args:e.functionCall.args??{}})}let n=e.inlineData;if(n?.data!==void 0&&n.data.length>0&&n.mimeType!==void 0&&n.mimeType.length>0){let o=Rr(n.mimeType);return o.length>0?{type:"media",mimeType:o,source:{kind:"base64",data:n.data}}:void 0}if(!(e.text===void 0||e.text.length===0))return e.thought!==!0?{type:"text",text:e.text}:e.thoughtSignature!==void 0&&e.thoughtSignature.length>0?{type:"reasoning",text:e.text,signature:e.thoughtSignature}:{type:"reasoning",text:e.text}}function $t(e){if(e instanceof Error&&e.name==="AbortError")return b({provider:N,kind:"cancelled",message:"request aborted"});if(ia(e)&&typeof e.status=="number"){let t=e.status,n=typeof e.message=="string"?e.message:"gemini API error";return b({provider:N,kind:rt(t),message:n,status:t})}return b({provider:N,kind:"unknown",message:e instanceof Error?e.message:"unknown provider error"})}function Zl(e){return e==="none"?{functionCallingConfig:{mode:"NONE"}}:e==="required"?{functionCallingConfig:{mode:"ANY"}}:e==="auto"?{functionCallingConfig:{mode:"AUTO"}}:{functionCallingConfig:{mode:"ANY",allowedFunctionNames:[e.name]}}}function Ql(e){let t=it(e,N);if(!("functionDeclarations"in t))throw new Error("unreachable: the Gemini wire shape always carries functionDeclarations");return{functionDeclarations:t.functionDeclarations}}function ep(e){let t=new Map;for(let o of e)for(let r of o.content)r.type==="tool_call"&&t.set(r.id,r.name);let n=[];for(let o of e){if(o.role==="assistant"&&o.content.some(i=>i.type==="media"))throw new I(b({provider:N,kind:"bad_request",message:"assistant-role media is not supported (provider output media is not replayed)"}));let r=np(o,t);r.length>0&&n.push({role:o.role==="assistant"?"model":"user",parts:r})}return n}function tp(e){let t=Q(e.mimeType);if(t===void 0)throw new I(b({provider:N,kind:"bad_request",message:`unsupported media mime type: ${e.mimeType}`}));if(e.source.kind==="base64")return{inlineData:{mimeType:e.mimeType,data:e.source.data}};throw new I(b({provider:N,kind:"bad_request",message:`${e.source.kind} source is unsupported for ${t} media`}))}function np(e,t){let n=[];for(let o of e.content)if(o.type==="text")n.push({text:o.text});else if(o.type==="tool_call")n.push({functionCall:{name:o.name,args:o.args}});else if(o.type==="tool_result"){let r=t.get(o.toolCallId)??o.toolCallId;n.push({functionResponse:{name:r,response:op(o.result)}})}else o.type==="media"&&n.push(tp(o));return n}function op(e){return ia(e)?e:{result:e}}var rp={text:"TEXT",image:"IMAGE",audio:"AUDIO",video:"VIDEO"};function oa(e){let t={};e.system!==void 0&&(t.systemInstruction=e.system),e.tools!==void 0&&(t.tools=e.tools.map(Ql)),e.toolChoice!==void 0&&(t.toolConfig=Zl(e.toolChoice)),e.responseFormat?.type==="json"&&(t.responseMimeType="application/json",t.responseJsonSchema=e.responseFormat.schema),e.temperature!==void 0&&(t.temperature=e.temperature),e.maxTokens!==void 0&&(t.maxOutputTokens=e.maxTokens),e.outputModalities!==void 0&&e.outputModalities.some(o=>o!=="text")&&(t.responseModalities=e.outputModalities.map(o=>rp[o])),e.stopSequences!==void 0&&(t.stopSequences=e.stopSequences),re(e.signal)&&(t.abortSignal=e.signal);let n=e.providerOptions===void 0?t:{...Or(e.providerOptions),...t};return{model:e.model,contents:ep(e.messages),config:n}}var ip={async generate(e,t){return new yn({apiKey:t}).models.generateContent(e)},async stream(e,t){return new yn({apiKey:t}).models.generateContentStream(e)},async generateImages(e,t){return new yn({apiKey:t}).models.generateImages(e)},async generateVideos(e,t){return{name:(await new yn({apiKey:t}).models.generateVideos(e)).name}},async pollVideo(e,t,n){let o=new yn({apiKey:t}),r=new ql;r.name=e;let i=await o.operations.getVideosOperation({operation:r,...re(n)?{config:{abortSignal:n}}:{}});if(i.done!==!0)return{done:!1};if(i.error!==void 0&&i.error!==null){let a=i.error.message;return{done:!0,error:{message:typeof a=="string"?a:void 0}}}let s=i.response?.generatedVideos?.[0]?.video;return{done:!0,...s===void 0?{}:{video:{videoBytes:s.videoBytes,uri:s.uri,mimeType:s.mimeType}},...i.response?.raiMediaFilteredCount===void 0?{}:{raiFilteredCount:i.response.raiMediaFilteredCount}}}};function Tr(e,t){e.reasoningOpen&&(t.push(e.reasoningSignature===void 0?{type:"reasoning_end",id:Oe}:{type:"reasoning_end",id:Oe,signature:e.reasoningSignature}),e.reasoningOpen=!1,e.reasoningSignature=void 0)}function sp(e,t){let n=[];if(e.functionCall!==void 0){let o=e.functionCall.name??"";if(o.length===0)return n;Tr(t,n);let r=t.ids.synthesize(o);return n.push({type:"tool_call_start",id:r,name:o},{type:"tool_call_delta",id:r,argsJsonDelta:JSON.stringify(e.functionCall.args??{})},{type:"tool_call_end",id:r}),t.hasToolCalls=!0,n}return e.text===void 0||e.text.length===0?n:e.thought===!0?(t.reasoningOpen||(n.push({type:"reasoning_start",id:Oe}),t.reasoningOpen=!0),e.thoughtSignature!==void 0&&e.thoughtSignature.length>0&&(t.reasoningSignature=e.thoughtSignature),n.push({type:"reasoning_delta",id:Oe,text:e.text}),n):(Tr(t,n),n.push({type:"text_delta",text:e.text}),n)}function ap(e,t){let n=[];e.usageMetadata&&(t.usage=da(e.usageMetadata)),sa(e.promptFeedback)&&(t.blocked=!0,t.sawTerminal=!0);let o=e.candidates?.[0];o?.finishReason!==void 0&&(t.finishReason=o.finishReason,t.sawTerminal=!0);for(let r of o?.content?.parts??[])n.push(...sp(r,t));return n}async function*dp(e,t,n){let o={reasoningOpen:!1,reasoningSignature:void 0,hasToolCalls:!1,sawTerminal:!1,blocked:!1,finishReason:void 0,usage:ra,ids:new Ot},r;try{r=await e.stream(t,n)}catch(a){yield{type:"error",error:$t(a)};return}try{for await(let a of r)yield*ap(a,o)}catch(a){yield{type:"error",error:$t(a)};return}let i=[];if(Tr(o,i),yield*i,!o.sawTerminal){yield{type:"error",error:b({provider:N,kind:"transport",message:"stream ended before a finishReason (truncated response)"})};return}yield{type:"stop",stopReason:o.blocked?"content_filter":aa(o.finishReason,o.hasToolCalls),usage:o.usage}}async function up(e,t,n){if(t.count!==void 0&&t.count>1)throw new I(b({provider:N,kind:"bad_request",message:`Gemini image generateMedia delivers a single image; count ${String(t.count)} > 1 is not supported on the SYNC seam`}));let o;try{o=await e.generateImages({model:t.model,prompt:t.prompt,config:{...Or(t.providerOptions??{}),numberOfImages:1,...re(t.signal)?{abortSignal:t.signal}:{}}},n)}catch(a){throw new I($t(a))}let r=o.generatedImages?.[0],i=r?.image?.imageBytes;if(i===void 0||i.length===0)throw r?.raiFilteredReason!==void 0&&r.raiFilteredReason.length>0?new I(b({provider:N,kind:"content_filter",message:`Gemini image generation was filtered: ${r.raiFilteredReason}`})):new I(b({provider:N,kind:"bad_request",message:"Gemini image generation returned no base64 image data"}));return{media:{type:"media",mimeType:Rr(r?.image?.mimeType)||"image/png",source:{kind:"base64",data:i}},raw:o}}async function cp(e,t,n){let o;try{o=await e.generateVideos({model:t.model,prompt:t.prompt,config:{...Or(t.providerOptions??{}),numberOfVideos:1,...t.durationSeconds===void 0?{}:{durationSeconds:t.durationSeconds},...re(t.signal)?{abortSignal:t.signal}:{}}},n)}catch(r){throw new I($t(r))}if(!o.name)throw new I(b({provider:N,kind:"bad_request",message:"Veo generateVideos returned no operation name"}));return{jobId:mn(o.name),raw:{name:o.name}}}async function lp(e,t,n,o){let r=uo(t);if(r===void 0)return{state:"failed",error:b({provider:N,kind:"bad_request",message:"unrecognized Veo media job token"})};let i;try{i=await e.pollVideo(r,n,o)}catch(d){throw new I($t(d))}if(!i.done)return{state:"pending"};if(i.error)return{state:"failed",error:b({provider:N,kind:"unknown",message:i.error.message??"Veo video job failed"})};let s=i.video,a=Rr(s?.mimeType)||"video/mp4";return s?.videoBytes!==void 0&&s.videoBytes.length>0?{state:"done",media:{type:"media",mimeType:a,source:{kind:"base64",data:s.videoBytes}}}:s?.uri!==void 0&&s.uri.length>0?{state:"done",media:{type:"media",mimeType:a,source:{kind:"url",url:s.uri}}}:(i.raiFilteredCount??0)>0?{state:"failed",error:b({provider:N,kind:"content_filter",message:`Veo filtered ${String(i.raiFilteredCount)} video(s) by safety policy`})}:{state:"failed",error:b({provider:N,kind:"bad_request",message:"Veo completed with no video output"})}}function Pr(e={}){let t=e.transport??ip;return{id:N,supports:Nt,async generate(n,o){ke(N,Nt,n),Re(N,Nt,n);try{let r=await t.generate(oa(n),o),i=new Ot,s=Xl(r,i),a=s.some(p=>p.type==="tool_call"),d=r.candidates?.[0],u=d===void 0&&sa(r.promptFeedback);return{content:s,stopReason:u?"content_filter":aa(d?.finishReason,a),usage:r.usageMetadata?da(r.usageMetadata):ra,raw:r}}catch(r){throw new I($t(r))}},stream(n,o){return ke(N,Nt,n),ot(N,Nt),Re(N,Nt,n),ao(N,n),dp(t,oa(n),o)},async generateMedia(n,o){if(n.modality==="image")return up(t,n,o);if(n.modality==="video")return cp(t,n,o);throw new oe(N,"media",`Gemini generateMedia has no surface for '${n.modality}' (image is Imagen; video is Veo; audio is unsupported)`)},async pollMediaJob(n,o,r){return lp(t,n,o,r)}}}var nx=Pr();import pp,{APIConnectionError as fp,APIConnectionTimeoutError as mp,APIError as hp,APIUserAbortError as gp}from"openai";var yp="https://api.deepseek.com",wp={tools:!0,streaming:!0,parallelToolCalls:!0,vision:!0,promptCache:!0,reasoning:!1,media:{input:{image:!0,audio:!0,video:!1,document:!1},outputCombinations:[["text"],["text","audio"]],surface:"chat"}},_p={tools:!0,streaming:!0,parallelToolCalls:!0,vision:!1,promptCache:!0,reasoning:!0,media:{input:{image:!1,audio:!1,video:!1,document:!1},outputCombinations:[],surface:"chat"}},ua={inputTokens:0,outputTokens:0};function ca(e){switch(e){case"length":return"length";case"tool_calls":case"function_call":return"tool_use";case"content_filter":return"content_filter";default:return"stop"}}function la(e){let t=e.prompt_tokens_details?.cached_tokens??e.prompt_cache_hit_tokens??0,n=e.prompt_tokens??0,o={inputTokens:Math.max(0,n-t),outputTokens:e.completion_tokens??0};t>0&&(o.cacheReadTokens=t);let r=e.completion_tokens_details?.reasoning_tokens??0;r>0&&(o.reasoningTokens=r);let i=[],s=e.prompt_tokens_details?.audio_tokens??0;s>0&&i.push({modality:"audio",direction:"input",units:s,unit:"count"});let a=e.completion_tokens_details?.audio_tokens??0;return a>0&&i.push({modality:"audio",direction:"output",units:a,unit:"count"}),i.length>0&&(o.mediaUnits=i),o}function bp(e){try{return JSON.parse(e.length>0?e:"{}")}catch{return{}}}var ue=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),kp=["wav","aac","mp3","flac","opus","pcm16"];function xp(e){switch(e){case"image/png":return"png";case"image/jpeg":case"image/jpg":return"jpeg";case"image/webp":return"webp";default:return}}function vp(e){let t=ue(e)?e.image:void 0,n=ue(t)?t.size:void 0;return n==="1024x1024"||n==="1024x1536"||n==="1536x1024"||n==="auto"?n:void 0}function Ip(e){let t=ue(e)?e.image:void 0,n=ue(t)?t.quality:void 0;return n==="low"||n==="medium"||n==="high"||n==="auto"?n:void 0}function Sp(e){let t=e.providerOptions,n=ue(t)?t.audio:void 0;switch(ue(n)?n.format:void 0){case"mp3":return"audio/mpeg";case"opus":return"audio/opus";case"flac":return"audio/flac";case"aac":return"audio/aac";case"pcm16":return"audio/L16";default:return"audio/wav"}}function Ep(e,t,n="audio/wav"){let o=[];if(e.reasoning_content!==null&&e.reasoning_content!==void 0&&e.reasoning_content.length>0&&o.push({type:"reasoning",text:e.reasoning_content}),e.content!==null&&e.content.length>0&&o.push({type:"text",text:e.content}),e.audio!==null&&e.audio!==void 0&&e.audio.data.length>0){let r=e.audio.transcript??"";r.length>0&&o.push({type:"text",text:r}),o.push({type:"media",mimeType:n,source:{kind:"base64",data:e.audio.data}})}for(let r of e.tool_calls??[])r.function!==void 0&&o.push(st(t,{id:r.id,name:r.function.name,args:bp(r.function.arguments)}));return o}function Cp(...e){for(let t of e)if(typeof t=="string"&&t.length>0)return t}function pa(e){return e==="content_policy_violation"||e==="moderation_blocked"}function Ap(e,t){let n=typeof e.status=="number"?e.status:void 0,o=Cp(e.code,e.type),r;return pa(o)?r="content_filter":n===void 0?r="unknown":r=rt(n),b({provider:t,kind:r,message:e.message,...n===void 0?{}:{status:n},...o===void 0?{}:{code:o}})}function at(e,t){return e instanceof gp?b({provider:t,kind:"cancelled",message:"request aborted"}):e instanceof mp?b({provider:t,kind:"timeout",message:e.message}):e instanceof fp?b({provider:t,kind:"transport",message:e.message}):e instanceof hp?Ap(e,t):e instanceof Error&&e.name==="AbortError"?b({provider:t,kind:"cancelled",message:"request aborted"}):b({provider:t,kind:"unknown",message:e instanceof Error?e.message:"unknown provider error"})}function Mp(e,t){let n=[],o=!1;for(let r of e)r.type==="text"?n.push({type:"text",text:r.text}):r.type==="media"&&(o=!0,n.push(Rp(r,t)));return o?n:n.map(r=>r.type==="text"?r.text:"").join("")}function wn(e,t){return new I({kind:"bad_request",retryable:!1,message:t,provider:e})}function Tp(e,t){let n=t.split("/")[1]?.split(";")[0]?.toLowerCase()??"";if(n==="mp3"||n==="mpeg")return"mp3";if(n==="wav"||n==="wave"||n==="x-wav")return"wav";throw wn(e,`OpenAI input audio supports only mp3 and wav, not '${t}'`)}function Rp(e,t){let n=Q(e.mimeType);if(n==="image"){if(e.source.kind!=="base64")throw wn(t,`OpenAI does not support ${e.source.kind}-source image input \u2014 use base64 (1.AF)`);return{type:"image_url",image_url:{url:`data:${e.mimeType};base64,${e.source.data}`}}}if(n==="audio"){if(e.source.kind!=="base64")throw wn(t,`OpenAI does not support ${e.source.kind}-source audio input \u2014 use base64 (1.AF)`);return{type:"input_audio",input_audio:{data:e.source.data,format:Tp(t,e.mimeType)}}}throw wn(t,`OpenAI does not support ${n??"unknown"} media input`)}function Op(e){return e.map(t=>t.type==="text"?t.text:"").join("")}function Pp(e,t){switch(e.role){case"user":return[{role:"user",content:Mp(e.content,t)}];case"assistant":{if(e.content.some(i=>i.type==="media"))throw wn(t,"assistant-role media is not supported (provider output media is not replayed)");let n=e.content.filter(i=>i.type==="tool_call").map(i=>({id:i.id,type:"function",function:{name:i.name,arguments:JSON.stringify(i.args)??"{}"}})),o={role:"assistant"},r=Op(e.content);return r.length>0&&(o.content=r),n.length>0&&(o.tool_calls=n),o.content===void 0&&o.tool_calls===void 0&&(o.content=""),[o]}case"tool":return e.content.filter(n=>n.type==="tool_result").map(n=>({role:"tool",tool_call_id:n.toolCallId,content:typeof n.result=="string"?n.result:JSON.stringify(n.result)??""}))}}function Np(e,t){let n=it(e,t);if(!("function"in n))throw new Error("unreachable: the OpenAI wire shape always carries a function");let o={name:n.function.name,parameters:n.function.parameters};return n.function.description!==void 0&&(o.description=n.function.description),{type:"function",function:o}}function $p(e){return e==="auto"?"auto":e==="none"?"none":e==="required"?"required":{type:"function",function:{name:e.name}}}function Dp(e){if(e===void 0)return"response";let t=e.replace(/[^a-zA-Z0-9_-]/g,"_").slice(0,64);return t.length>0?t:"response"}function fa(e,t){let n=[];e.system!==void 0&&n.push({role:"system",content:e.system});for(let r of e.messages)n.push(...Pp(r,t));let o={model:e.model,messages:n};return e.tools!==void 0&&(o.tools=e.tools.map(r=>Np(r,t))),e.toolChoice!==void 0&&(o.tool_choice=$p(e.toolChoice)),e.responseFormat?.type==="json"&&(o.response_format=jp(e.responseFormat,t)),e.temperature!==void 0&&(o.temperature=e.temperature),e.maxTokens!==void 0&&(o.max_tokens=e.maxTokens),e.stopSequences!==void 0&&(o.stop=e.stopSequences),e.outputModalities?.includes("audio")&&(o.modalities=["text","audio"],o.audio=Lp(e.providerOptions)),e.providerOptions===void 0?o:{...e.providerOptions,...o}}function jp(e,t){return t==="deepseek"?{type:"json_object"}:{type:"json_schema",json_schema:{name:Dp(e.name),schema:e.schema,strict:e.strict??!0}}}function Lp(e){let t=ue(e)?e.audio:void 0,n=ue(t)&&typeof t.voice=="string"?t.voice:"alloy",o=ue(t)?t.format:void 0,r=kp.find(i=>i===o)??"wav";return{voice:n,format:r}}var Up={mp3:"audio/mpeg",opus:"audio/opus",aac:"audio/aac",flac:"audio/flac",wav:"audio/wav",pcm:"audio/L16"};function Gp(e){switch(e){case"audio/opus":return"opus";case"audio/aac":return"aac";case"audio/flac":return"flac";case"audio/wav":return"wav";case"audio/L16":return"pcm";default:return"mp3"}}function Fp(e){let t=ue(e)?e.audio:void 0;return ue(t)&&typeof t.voice=="string"?t.voice:"alloy"}function ma(e){return re(e.signal)?{signal:e.signal}:{}}function Bp(e){let t;try{t=new URL(e)}catch{throw new We(e,"not a valid URL")}if(t.protocol!=="https:")throw new We(e,`must use HTTPS, got '${t.protocol}'`);if(zo(e))throw new We(e,"must not contain embedded credentials");let n=t.hostname.toLowerCase().replace(/^\[/,"").replace(/\]$/,"");if(xt(n))throw new We(e,"resolves to a private, loopback, or link-local address")}function Hp(e,t){let n=[],o=e.function?.arguments??"",r=t.get(e.index);if(r===void 0){let i=e.id,s=e.function?.name;return i===void 0||s===void 0||(t.set(e.index,i),n.push({type:"tool_call_start",id:i,name:s}),o.length>0&&n.push({type:"tool_call_delta",id:i,argsJsonDelta:o})),n}return o.length>0&&n.push({type:"tool_call_delta",id:r,argsJsonDelta:o}),n}function Wp(e){if(typeof e=="object"&&e!==null&&"reasoning_content"in e){let t=e.reasoning_content;return typeof t=="string"?t:void 0}}function Nr(e,t){e.reasoningOpen&&(t.push({type:"reasoning_end",id:Oe}),e.reasoningOpen=!1)}function Jp(e,t){let n=[],o=e.choices[0];if(o===void 0)return n;let r=o.delta.refusal;typeof r=="string"&&r.length>0&&(t.refused=!0);let i=Wp(o.delta);i!==void 0&&i.length>0&&(t.reasoningOpen||(n.push({type:"reasoning_start",id:Oe}),t.reasoningOpen=!0),n.push({type:"reasoning_delta",id:Oe,text:i})),o.delta.content!=null&&o.delta.content.length>0&&(Nr(t,n),n.push({type:"text_delta",text:o.delta.content}));for(let s of o.delta.tool_calls??[])Nr(t,n),n.push(...Hp(s,t.toolIdByIndex));if(o.finish_reason!=null){Nr(t,n),t.sawTerminal=!0,t.stopReason=t.refused?"content_filter":ca(o.finish_reason);for(let s of t.toolIdByIndex.values())n.push({type:"tool_call_end",id:s});t.toolIdByIndex.clear()}return n}async function*zp(e,t,n){let o={reasoningOpen:!1,stopReason:"stop",sawTerminal:!1,refused:!1,toolIdByIndex:new Map},r=ua,i;try{i=await e.chat.completions.create({...fa(t,n),stream:!0,stream_options:{include_usage:!0}},ma(t))}catch(s){yield{type:"error",error:at(s,n)};return}try{for await(let s of i){s.usage&&(r=la(s.usage));for(let a of Jp(s,o))yield a}}catch(s){yield{type:"error",error:at(s,n)};return}if(!o.sawTerminal){yield{type:"error",error:b({provider:n,kind:"transport",message:"stream ended before a terminal finish_reason (truncated response)"})};return}yield{type:"stop",stopReason:o.stopReason,usage:r}}function _n(e={}){let t=e.providerId??"openai",n=t==="deepseek"?_p:wp,o=e.baseURL??(t==="deepseek"?yp:void 0);e.baseURL!==void 0&&Bp(e.baseURL);let r=i=>new pp({apiKey:i,...o===void 0?{}:{baseURL:o},...e.fetch===void 0?{}:{fetch:e.fetch},...e.maxRetries===void 0?{}:{maxRetries:e.maxRetries}});return{id:t,supports:n,async generate(i,s){ke(t,n,i),Re(t,n,i);let a=r(s);try{let d=await a.chat.completions.create({...fa(i,t),stream:!1},ma(i)),u=d.choices[0],p=typeof u?.message.refusal=="string"&&u.message.refusal.length>0,_=i.outputModalities?.includes("audio")?Sp(i):"audio/wav";return{content:u===void 0?[]:Ep(u.message,t,_),stopReason:p?"content_filter":ca(u?.finish_reason),usage:d.usage?la(d.usage):ua,raw:d}}catch(d){throw new I(at(d,t))}},stream(i,s){return ke(t,n,i),ot(t,n),Re(t,n,i),ao(t,i),zp(r(s),i,t)},async generateMedia(i,s){if(t!=="openai")throw new oe(t,"media",`${t} generates no media (only OpenAI generateMedia is wired)`);let a=r(s);if(i.modality==="image")return Vp(a,i,t);if(i.modality==="audio")return Kp(a,i,t);if(i.modality==="video")return Zp(a,i,t);let d=i.modality;throw new oe(t,"media",`OpenAI generateMedia has no surface for modality '${String(d)}'`)},async pollMediaJob(i,s,a){return t!=="openai"?{state:"failed",error:b({provider:t,kind:"unknown",message:`${t} has no async media jobs (only OpenAI/Sora is wired)`})}:ef(r(s),i,t,a)}}}async function Vp(e,t,n){if(t.count!==void 0&&t.count>1)throw new I(b({provider:n,kind:"bad_request",message:`OpenAI image generateMedia delivers a single image; count ${String(t.count)} > 1 is not supported on the SYNC seam`}));let o=xp(t.mimeType),r=vp(t.providerOptions),i=Ip(t.providerOptions),s;try{s=await e.images.generate({model:t.model,prompt:t.prompt,...o===void 0?{}:{output_format:o},...r===void 0?{}:{size:r},...i===void 0?{}:{quality:i}},re(t.signal)?{signal:t.signal}:{})}catch(u){throw new I(at(u,n))}let a=s.data?.[0]?.b64_json;if(a===void 0||a.length===0)throw new I(b({provider:n,kind:"bad_request",message:"OpenAI image generation returned no base64 image data"}));return{media:{type:"media",mimeType:o===void 0?"image/png":`image/${o}`,source:{kind:"base64",data:a}},raw:s}}async function Kp(e,t,n){let o=Gp(t.mimeType),r;try{let i=await e.audio.speech.create({model:t.model,voice:Fp(t.providerOptions),input:t.prompt,response_format:o},re(t.signal)?{signal:t.signal}:{});r=new Uint8Array(await i.arrayBuffer())}catch(i){throw new I(at(i,n))}if(r.length===0)throw new I(b({provider:n,kind:"bad_request",message:"OpenAI TTS returned no audio bytes"}));return{media:{type:"media",mimeType:Up[o],source:{kind:"base64",data:Buffer.from(r).toString("base64")}},raw:{responseFormat:o}}}var qp={4:"4",8:"8",12:"12"};function Xp(e,t){let n=e??4,o=qp[n];if(o===void 0)throw new I(b({provider:t,kind:"bad_request",message:`Sora durationSeconds must be 4, 8, or 12; got ${String(n)}`}));return o}function Yp(e){let t=ue(e)?e.video:void 0,n=ue(t)?t.size:void 0;return n==="720x1280"||n==="1280x720"||n==="1024x1792"||n==="1792x1024"?n:void 0}async function Zp(e,t,n){let o=Xp(t.durationSeconds,n),r=Yp(t.providerOptions),i;try{i=await e.videos.create({model:t.model,prompt:t.prompt,seconds:o,...r===void 0?{}:{size:r}},re(t.signal)?{signal:t.signal}:{})}catch(s){throw new I(at(s,n))}if(i.id.length===0)throw new I(b({provider:n,kind:"bad_request",message:"Sora video creation returned no job id"}));return{jobId:mn(i.id),raw:{id:i.id,status:i.status}}}function Qp(e,t){if(e==null)return b({provider:t,kind:"unknown",message:"Sora video job failed with no error detail"});let n=pa(e.code)?"content_filter":"unknown";return b({provider:t,kind:n,message:e.message??"Sora video job failed",...e.code?{code:e.code}:{}})}async function ef(e,t,n,o){let r=uo(t);if(r===void 0)return{state:"failed",error:b({provider:n,kind:"bad_request",message:"unrecognized Sora media job token"})};let i,s;try{if(i=await e.videos.retrieve(r,re(o)?{signal:o}:{}),i.status==="completed"){let a=await e.videos.downloadContent(r,void 0,re(o)?{signal:o}:{});s=new Uint8Array(await a.arrayBuffer())}}catch(a){throw new I(at(a,n))}switch(i.status){case"queued":return{state:"pending"};case"in_progress":return{state:"pending",progress:Math.min(1,Math.max(0,(i.progress??0)/100))};case"completed":return s===void 0||s.length===0?{state:"failed",error:b({provider:n,kind:"bad_request",message:"Sora downloadContent returned no video bytes"})}:{state:"done",media:{type:"media",mimeType:"video/mp4",source:{kind:"base64",data:Buffer.from(s).toString("base64")}}};case"failed":return{state:"failed",error:Qp(i.error,n)};default:return{state:"failed",error:b({provider:n,kind:"unknown",message:`Sora returned an unrecognized job status '${String(i.status)}'`})}}}var lx=_n(),px=_n({providerId:"deepseek"});function $r(){return{anthropic:Mr(),openai:_n(),deepseek:_n({providerId:"deepseek"}),gemini:Pr()}}var tf="default";function bn(e,t=tf){return`${e}:${t}`}var xe=class extends Error{constructor(t,n){super(t,n),this.name="KeychainUnavailableError"}};function ha(e){return`RELAVIUM_${e.toUpperCase()}_API_KEY`}function Dr(e){return e.length<=4?"\u2022\u2022\u2022\u2022":`\u2022\u2022\u2022\u2022${e.slice(-4)}`}function ga(e){let t=new Set;for(let r of e.workflow.nodes)r.type==="agent"&&t.add(r.agent_ref);let n=(e.workflow.agents??[]).filter(r=>"id"in r),o=new Set;for(let r of t){let i=n.find(s=>s.id===r);i!==void 0&&o.add(i.provider)}return[...o]}function ve(e=process.env,t){let n=$r();return{resolveProvider:o=>n[o],keyFor:o=>{if(t!==void 0){let i=null;try{i=t.get(bn(o))}catch(s){if(!(s instanceof xe))throw s}if(i!==null&&i!=="")return i}let r=e[ha(o)];if(r!==void 0&&r!=="")return r;throw new m("invalid_invocation",`no API key for provider '${o}' \u2014 store one with \`relavium provider set-key ${o}\` or set ${ha(o)}.`)}}}import{randomUUID as nf}from"crypto";function ya(e,t){let{db:n,close:o}=He(t);return{store:sn(n,{uuid:()=>nf(),now:()=>Date.now(),workflow:{slug:e.workflow.id,name:e.workflow.name??e.workflow.id,definitionJson:JSON.stringify(e)}}),close:o}}import{Entry as of}from"@napi-rs/keyring";var rf="relavium";function co(e=rf){let t=n=>new of(e,n);return{get:n=>{try{return t(n).getPassword()}catch(o){throw new xe(`OS keychain is unavailable: ${jr(o)}`,{cause:o})}},set:(n,o)=>{try{t(n).setPassword(o)}catch(r){throw new xe(`could not write to the OS keychain: ${jr(r)}`,{cause:r})}},delete:n=>{try{return t(n).deletePassword()}catch(o){throw new xe(`could not access the OS keychain: ${jr(o)}`,{cause:o})}}}}function jr(e){return e instanceof Error?e.message:String(e)}async function wa(){if(process.stdin.isTTY===!0)throw new m("invalid_invocation",'pipe the API key on stdin \u2014 e.g. `echo "$KEY" | relavium provider set-key <name>` (a key is never passed as an argument).');let e=[];for await(let n of process.stdin)Buffer.isBuffer(n)?e.push(n):typeof n=="string"&&e.push(Buffer.from(n,"utf8"));let t=Buffer.concat(e).toString("utf8").trim();if(t==="")throw new m("invalid_invocation","no API key was read from stdin (empty input).");return t}import{randomUUID as Lg}from"crypto";import{LineCounter as Sf,YAMLParseError as Ef}from"yaml";var ye=class extends Error{source;constructor(t,n,o){super(t,o===void 0?void 0:{cause:o}),n!==void 0&&(this.source=n)}},Je=class extends ye{code="invalid_yaml";line;column;constructor(t,n){super(t,n?.source,n?.cause),this.name="WorkflowSyntaxError",n?.line!==void 0&&(this.line=n.line),n?.column!==void 0&&(this.column=n.column)}},dt=class extends ye{code="schema_validation";issues;constructor(t,n){super(sf(t),n?.source,n?.cause),this.name="WorkflowValidationError",this.issues=t}};function sf(e){let t=e[0];if(t===void 0)return"workflow validation failed";let n=e.length-1,o=n===1?"":"s",r=n>0?` (and ${n} more issue${o})`:"";return`${t.field}: ${t.message}${r}`}var kn=class extends ye{code="invalid_graph";issues;constructor(t,n){super(af(t),n?.source,void 0),this.name="WorkflowGraphError",this.issues=t}};function af(e){let t=e[0];if(t===void 0)return"workflow graph is invalid";let n=e.length-1,o=n===1?"":"s",r=n>0?` (and ${n} more issue${o})`:"";return`${t.field}: ${t.message}${r}`}var ut=class extends ye{code="secret_interpolation";leaks;constructor(t,n){super(df(t),n?.source,n?.cause),this.name="WorkflowSecretLeakError",this.leaks=t}};function df(e){let t=e[0];if(t===void 0)return"secret interpolation rejected";let n=t.via!==void 0&&t.via!==t.secret?` (via \`${t.via}\`)`:"",o=e.length-1,r=o===1?"":"s",i=o>0?` (and ${o} more leak${r})`:"";return`${t.location} interpolates the secret \`${t.secret}\`${n} \u2014 secrets are rejected from agent/human text (ADR-0029)${i}`}var F=class extends Error{code;location;constructor(t,n,o){super(n,o?.cause===void 0?void 0:{cause:o.cause}),this.name="InterpolationError",this.code=t,o?.location!==void 0&&(this.location=o.location)}},L=class extends Error{code="sandbox_error";reason;retryable;detail;constructor(t,n,o){super(n,o?.cause===void 0?void 0:{cause:o.cause}),this.name="SandboxError",this.reason=t,this.retryable=t==="timeout",o?.detail!==void 0&&Object.defineProperty(this,"detail",{value:o.detail,enumerable:!1,writable:!1,configurable:!0})}};function Dt(e){let t=[],n=0;for(;n<e.length;){let o=e.indexOf("{{",n);if(o===-1){Lr(t,e.slice(n));break}let r=uf(e,o+2);if(r===-1){Lr(t,e.slice(n));break}Lr(t,e.slice(n,o));let i=e.slice(o+2,r),s=e.slice(o,r+2);t.push({kind:"reference",reference:cf(i,s)}),n=r+2}return t}function ct(e){let t=[];for(let n of Dt(e))n.kind==="reference"&&t.push(n.reference);return t}function Lr(e,t){t.length>0&&e.push({kind:"literal",text:t})}function uf(e,t){let n,o=0,r=!1;for(let i=t;i<e.length-1;i+=1){let s=e[i];if(r){r=!1;continue}if(n!==void 0)s==="\\"?r=!0:s===n&&(n=void 0);else if(_a(s))n=s;else if(s==="["||s==="(")o+=1;else if(s==="]"||s===")")o=Math.max(0,o-1);else if(o===0&&s==="}"&&e[i+1]==="}")return i}return-1}function cf(e,t){let n=ba(e,"|"),o=(n[0]??"").trim(),{kind:r,identifier:i,path:s}=mf(o),a=n.slice(1).map(gf);return{kind:r,identifier:i,path:s,filters:a,raw:t}}var lf=/^run\.outputs\[\s*(['"])([^'"]*?)\1\s*\](.*)$/s,pf=/^(inputs|ctx|secrets)\.([A-Za-z0-9_-]+)(.*)$/s,ff=/^run\.id(?![\w-])(.*)$/s;function mf(e){let t=lf.exec(e);if(t?.[2]!==void 0)return{kind:"node",identifier:t[2],path:(t[3]??"").trim()};let n=ff.exec(e);if(n!==null)return{kind:"run",identifier:"id",path:(n[1]??"").trim()};let o=pf.exec(e);return o?.[1]!==void 0&&o[2]!==void 0?{kind:o[1],identifier:o[2],path:(o[3]??"").trim()}:{kind:"unknown",identifier:e,path:""}}var hf=/^([A-Za-z_]\w*)\s*(?:\((.*)\))?$/s;function gf(e){let t=e.trim(),n=hf.exec(t);if(n?.[1]===void 0)return{name:t,args:[]};let o=n[2];if(o===void 0||o.trim()==="")return{name:n[1],args:[]};let r=[];for(let i of ba(o,",")){let s=wf(i);s!==void 0&&r.push(s)}return{name:n[1],args:r}}var yf=/^(['"])([\s\S]*)\1$/;function wf(e){let t=e.trim();if(t==="")return;let n=yf.exec(t);return n?.[2]!==void 0?{type:"string",value:n[2]}:t==="true"||t==="false"?{type:"boolean",value:t==="true"}:/^-?\d+(?:\.\d+)?$/.test(t)?{type:"number",value:Number(t)}:{type:"string",value:t}}function _a(e){return e==='"'||e==="'"}function ba(e,t){let n=[],o={buf:"",quote:void 0,depth:0,escaped:!1};for(let r of e)_f(o,r,t,n);return n.push(o.buf),n}function _f(e,t,n,o){if(e.escaped){e.buf+=t,e.escaped=!1;return}if(e.quote!==void 0){e.buf+=t,t==="\\"?e.escaped=!0:t===e.quote&&(e.quote=void 0);return}bf(e,t,n,o)}function bf(e,t,n,o){_a(t)?(e.quote=t,e.buf+=t):t==="["||t==="("?(e.depth+=1,e.buf+=t):t==="]"||t===")"?(e.depth=Math.max(0,e.depth-1),e.buf+=t):t===n&&e.depth===0?(o.push(e.buf),e.buf=""):e.buf+=t}function ka(e,t,n){let o=Dt(n),r=[];for(let i of o)i.kind==="reference"&&r.push(i.reference);return r.length>0?{location:e,category:t,segments:o,references:r}:void 0}function lo(e){let t=[],n=(o,r)=>{if(r!==void 0){let i=ka(o,"node-text",r);i!==void 0&&t.push(i)}};return e.type==="agent"?(n(`node \`${e.id}\`.prompt_template`,e.prompt_template),n(`node \`${e.id}\`.system_prompt_append`,e.system_prompt_append)):e.type==="human_gate"&&(n(`node \`${e.id}\`.assignee`,e.assignee),n(`node \`${e.id}\`.message_template`,e.message_template)),t}function Ur(e){let t=[],n=e.workflow,o=(r,i,s)=>{let a=ka(r,i,s);a!==void 0&&t.push(a)};for(let r of n.context??[])o(`context \`${r.key}\`.value`,"context-value",r.value);for(let r of n.inputs??[])typeof r.default=="string"&&o(`input \`${r.name}\`.default`,"input-default",r.default);for(let r of n.agents??[])"$ref"in r||o(`agent \`${r.id}\`.system_prompt`,"agent-text",r.system_prompt);for(let r of n.nodes)t.push(...lo(r));return t}function Gr(e){let t=Ia(e.workflow),n=[];for(let o of Ur(e))if(!(o.category==="context-value"||o.category==="input-default"))for(let r of o.references){let i=Sa(r,t);i!==void 0&&n.push(Ea(o.location,i,t))}return n}function Fr(e,t){if(t.length===0)return[];let n=Ia(e.workflow),o=[];for(let{location:r,text:i}of t)for(let s of ct(i)){let a=Sa(s,n);a!==void 0&&o.push(Ea(r,a,n))}return o}function Br(e){let t=e.workflow,n=[],o=(r,i)=>{for(let s of ct(i))if(s.kind==="node"){n.push({field:r,message:"cannot reference `run.outputs[\u2026]` \u2014 this is resolved before any node runs"});return}};for(let r of t.context??[])o(`context \`${r.key}\`.value`,r.value);for(let r of t.inputs??[])typeof r.default=="string"&&o(`input \`${r.name}\`.default`,r.default);return n}function Hr(e,t,n){e.tainted.has(t)||(e.tainted.set(t,n),e.queue.push(t))}function xa(e,t,n){let o=e.dependents.get(t);o===void 0?e.dependents.set(t,[n]):o.push(n)}function va(e,t,n){if(n!==void 0)for(let o of ct(n))o.kind==="secrets"?Hr(e,t,`secrets.${o.identifier}`):o.kind==="inputs"?xa(e,`inputs.${o.identifier}`,t):o.kind==="ctx"&&xa(e,`ctx.${o.identifier}`,t)}function kf(e){for(;e.queue.length>0;){let t=e.queue.pop();if(t===void 0)break;for(let n of e.dependents.get(t)??[])Hr(e,n,t)}}function xf(e){let t=new Map,n=new Map;for(let[o,r]of e)o.startsWith("inputs.")?t.set(o.slice(7),r):o.startsWith("ctx.")&&n.set(o.slice(4),r);return{inputs:t,ctx:n}}function Ia(e){let t={tainted:new Map,dependents:new Map,queue:[]};for(let n of e.inputs??[]){n.type==="secret"&&Hr(t,`inputs.${n.name}`,void 0);let o=typeof n.default=="string"?n.default:void 0;va(t,`inputs.${n.name}`,o)}for(let n of e.context??[])va(t,`ctx.${n.key}`,n.value);return kf(t),xf(t.tainted)}function Sa(e,t){if(e.kind==="inputs"&&t.inputs.has(e.identifier))return`inputs.${e.identifier}`;if(e.kind==="ctx"&&t.ctx.has(e.identifier))return`ctx.${e.identifier}`;if(e.kind==="secrets")return`secrets.${e.identifier}`}function Ea(e,t,n){let o=vf(t,n);return{location:e,secret:t,...o===void 0?{}:{via:o}}}function vf(e,t){if(e.startsWith("ctx."))return t.ctx.get(e.slice(4));if(e.startsWith("inputs."))return t.inputs.get(e.slice(7))}import{parse as If}from"yaml";function po(e,t){return If(e,{version:"1.2",schema:"core",resolveKnownTags:!1,merge:!1,uniqueKeys:!0,stringKeys:!0,maxAliasCount:0,prettyErrors:!1,logLevel:"error",lineCounter:t})}var Ie=2*1024*1024;function xn(e,t){let n=t?.source;if(e.length>Ie)throw new Je(`the source exceeds the ${Ie}-character parse limit`,n===void 0?void 0:{source:n});let o=new Sf,r;try{r=po(e,o)}catch(u){throw Cf(u,n,o)}let i=Hn.safeParse(r);if(!i.success){let u=i.error.issues.map(p=>Af(p,r));throw new dt(u,n===void 0?void 0:{source:n})}let s=i.data,a=Br(s);if(a.length>0)throw new dt(a,n===void 0?void 0:{source:n});let d=Gr(s);if(d.length>0)throw new ut(d,n===void 0?void 0:{source:n});return s}function Cf(e,t,n){if(e instanceof Ef){let o=e.pos[0],r=o>=0?n.linePos(o):void 0;return new Je(e.message,{...t===void 0?{}:{source:t},...r===void 0?{}:{line:r.line,column:r.col},cause:e})}return e instanceof Error&&/alias/i.test(e.message)?new Je("anchors and aliases are not supported",{...t===void 0?{}:{source:t},cause:e}):new Je("the file is not valid YAML",{...t===void 0?{}:{source:t},cause:e})}function Af(e,t){return{field:Mf(e.path,t),message:Rf(e)}}function Mf(e,t){let n=Wr(Wr(t)?.workflow),o=[],r=e[0]==="workflow"?1:0;for(;r<e.length;r+=1){let i=e[r],s=e[r+1];typeof i=="string"&&typeof s=="number"?(o.push(Tf(n,i,s)),r+=1):typeof i=="number"?o.push(`[${i}]`):i!==void 0&&o.push(i)}return o.length===0?"workflow":o.join(".")}var Ca=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,Aa=/^[A-Za-z0-9_-]+$/;function Tf(e,t,n){let o=Wr(Of(e?.[t])?.[n]),r=(i,s,a)=>{let d=o?.[i];return typeof d=="string"&&d.length<=64&&a.test(d)?`${s} \`${d}\``:`${s} #${n}`};switch(t){case"nodes":return r("id","node",Ca);case"agents":return r("id","agent",Ca);case"inputs":return r("name","input",Aa);case"context":return r("key","context",Aa);case"edges":return`edge #${n}`;default:return`${t}[${n}]`}}function Rf(e){switch(e.code){case"invalid_type":return e.received==="undefined"?`missing \u2014 expected ${e.expected}`:`expected ${e.expected}, received ${e.received}`;case"unrecognized_keys":return`unknown key${e.keys.length===1?"":"s"}: ${e.keys.map(t=>`\`${t}\``).join(", ")}`;case"invalid_enum_value":return`invalid value \u2014 expected one of: ${e.options.map(String).join(", ")}`;case"invalid_union_discriminator":return`expected one of: ${e.options.map(String).join(", ")}`;case"invalid_string":case"too_small":case"too_big":return e.message;case"custom":return e.message;default:return"invalid value"}}function Wr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Of(e){return Array.isArray(e)?e:void 0}import{LineCounter as Pf}from"yaml";var ze=class extends Error{code;fields;constructor(t,n,o=[],r){super(n,r?.cause===void 0?void 0:{cause:r.cause}),this.name="AgentParseError",this.code=t,this.fields=o}};function Jr(e,t){let n=t?.source,o=n===void 0?"":` (${n})`;if(e.length>Ie)throw new ze("agent_syntax",`the agent source exceeds the ${Ie}-character parse limit${o}`);let r;try{r=po(e,new Pf)}catch(s){throw new ze("agent_syntax",`the agent file is not valid YAML${o}`,[],{cause:s})}let i=Mt.safeParse(r);if(!i.success){let s=[...new Set(i.error.issues.flatMap(a=>{if(a.code==="unrecognized_keys"){let d=a.path.length>0?`${a.path.map(String).join(".")}.`:"";return a.keys.map(u=>`${d}${u}`)}return[a.path.map(String).join(".")||"agent"]}))];throw new ze("agent_validation",`invalid agent${o}: ${s.join(", ")}`,s)}return i.data}var Ma={json:(e,t,n,o)=>{fo("json",t,0,o);let r;try{r=JSON.stringify(e,null,2)}catch(i){throw new F("unserializable",`\`${o.raw}\` could not be serialized as JSON`,{location:o.raw,cause:i})}if(r===void 0)throw zr("json","a JSON-serializable value",o);return r},length:(e,t,n,o)=>{if(fo("length",t,0,o),typeof e=="string"||Array.isArray(e))return e.length;if(typeof e=="object"&&e!==null)return Object.keys(e).length;throw zr("length","a string, list, or object",o)},default:(e,t,n,o)=>(fo("default",t,1,o),e??t[0].value),read_file:async(e,t,n,o,r)=>{if(fo("read_file",t,0,o),typeof e!="string")throw zr("read_file","a file path string",o);if(n.readFile===void 0)throw new F("read_file_unavailable","the `read_file` filter needs a host file reader, which this run did not provide",{location:o.raw});try{return await n.readFile(e,r)}catch(i){throw r?.aborted===!0||Nf(i)?new F("aborted","`read_file` was aborted",{location:o.raw,cause:i}):new F("read_file_failed","`read_file` could not read the file",{location:o.raw,cause:i})}}};function Ta(e,t){let n=Object.hasOwn(Ma,e.name)?Ma[e.name]:void 0;if(n===void 0)throw new F("unknown_filter",`unknown filter \`${e.name}\``,{location:t.raw});return n}function fo(e,t,n,o){if(t.length!==n){let r=n===1?"1 argument":`${n} arguments`;throw new F("filter_arity",`filter \`${e}\` expects ${r}, got ${t.length}`,{location:o.raw})}}function zr(e,t,n){return new F("filter_type",`filter \`${e}\` expects ${t}`,{location:n.raw})}function Nf(e){return typeof e=="object"&&e!==null&&"name"in e&&e.name==="AbortError"}var $f=/[A-Za-z0-9_-]/,Ra=/\s/,Df=/^-?\d+$/;function Oa(e,t,n){let o=e;for(let r of Lf(t,n)){if(o==null)return;o=jf(o,r)}return o}function jf(e,t){if("index"in t)return Array.isArray(e)&&Object.hasOwn(e,t.index)?e[t.index]:void 0;if(typeof e=="object"&&e!==null&&!Array.isArray(e))return Object.hasOwn(e,t.key)?e[t.key]:void 0}function Lf(e,t){let n=[],o=0;for(;o<e.length;){let r=e[o];if(r===".")o=Uf(e,o+1,n,t);else if(r==="[")o=Gf(e,o,n,t);else throw lt(e,t)}return n}function Uf(e,t,n,o){let r=t,i="";for(;r<e.length&&$f.test(e[r]);)i+=e[r],r+=1;if(i==="")throw lt(e,o);return n.push({key:i}),r}function Gf(e,t,n,o){let r=t+1;for(;r<e.length&&Ra.test(e[r]);)r+=1;let i=e[r];return i==='"'||i==="'"?Ff(e,r,i,n,o):Bf(e,t,n,o)}function Ff(e,t,n,o,r){let i=t+1,s="";for(;i<e.length&&e[i]!==n;)s+=e[i],i+=1;if(e[i]!==n)throw lt(e,r);for(i+=1;i<e.length&&Ra.test(e[i]);)i+=1;if(e[i]!=="]")throw lt(e,r);return o.push({key:s}),i+1}function Bf(e,t,n,o){let r=e.indexOf("]",t+1);if(r===-1)throw lt(e,o);let i=e.slice(t+1,r).trim();if(!Df.test(i))throw lt(e,o);let s=Number(i);if(!Number.isSafeInteger(s)||s<0)throw lt(e,o);return n.push({index:s}),r+1}function lt(e,t){return new F("invalid_path",`invalid property access \`${e}\``,{...t===void 0?{}:{location:t}})}async function Pe(e,t,n={},o){let r="";for(let i of Dt(e))if(i.kind==="literal")r+=i.text;else{Pa(o);let s=await Hf(i.reference,t,n,o);r+=Jf(s,i.reference)}return r}async function Kr(e,t,n={},o){let r=Object.create(null);for(let i of e.workflow.context??[]){Pa(o);let s={inputs:t,ctx:r,outputs:{}};r[i.key]=await Pe(i.value,s,n,o)}return Object.freeze(r)}async function Hf(e,t,n,o){let r=Oa(Wf(e,t),e.path,e.raw);for(let i of e.filters)r=await Ta(i,e)(r,i.args,n,e,o);return r}function Wf(e,t){switch(e.kind){case"inputs":return Vr(t.inputs,e.identifier);case"ctx":return Vr(t.ctx,e.identifier);case"node":return Vr(t.outputs,e.identifier);case"run":return t.runId;case"secrets":throw new F("unknown_namespace","`secrets.*` is not a runtime namespace \u2014 a `secret`-typed input feeds credential fields, never resolved text",{location:e.raw});case"unknown":throw new F("unknown_namespace",`cannot resolve \`${e.identifier}\` \u2014 not an inputs/ctx/run.outputs reference`,{location:e.raw})}}function Vr(e,t){return Object.hasOwn(e,t)?e[t]:void 0}function Pa(e){if(e?.aborted===!0)throw new F("aborted","interpolation was aborted")}function Jf(e,t){if(e==null)throw new F("unresolved_reference",`\`${t.raw}\` resolved to no value \u2014 check the reference or add a \`| default(\u2026)\` filter`,{location:t.raw});if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean"||typeof e=="bigint")return String(e);throw new F("unserializable",`\`${t.raw}\` resolved to ${Array.isArray(e)?"a list":"an object"} \u2014 add a \`| json\` filter to embed it as text`,{location:t.raw})}var zf=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,Vf=/^[A-Za-z0-9_-]+$/;function mo(e,t){let n=e.workflow,o=t?.source,r=o===void 0?void 0:{source:o},i=new Map,s=new Map;n.nodes.forEach(($,gt)=>{i.set($.id,$),s.set($.id,gt)});let{agentsById:a,inlineAgentIds:d}=qf(n,t?.agents),u=Xf(e,n,t?.agents,d);if(u.length>0)throw new ut(u,r);let p=new Map,_=new Map;for(let $ of i.keys())p.set($,new Set),_.set($,new Set);let v=($,gt)=>{let Oi=p.get($),Pi=_.get(gt);Oi===void 0||Pi===void 0||(Oi.add(gt),Pi.add($))},V=[];Kf(n,i,a,t?.agents!==void 0,v,V);let Z=rm(n.nodes,p,_,s);if(Z.length<n.nodes.length){let $=im(n.nodes,Z,_,s);V.push({kind:"cycle",field:$.length>0?$.join(" \u2192 "):"workflow.nodes",message:$.length>0?`the workflow has a dependency cycle: ${$.join(" \u2192 ")}`:"the workflow has a dependency cycle"})}if(V.length>0)throw new kn(V,r);let _e=new Map,De=($,gt)=>(s.get($)??0)-(s.get(gt)??0),be=am(n,_,s);for(let $ of n.nodes)_e.set($.id,{id:$.id,type:sm($),dependencies:[..._.get($.id)??[]].sort(De),dependents:[...p.get($.id)??[]].sort(De),inputSites:lo($),config:dm($,a,be)});return{workflowId:n.id,order:Z,vertices:_e,...n.max_parallel===void 0?{}:{maxParallel:n.max_parallel},...n.budget===void 0?{}:{budget:n.budget},...n.timeout_ms===void 0?{}:{timeoutMs:n.timeout_ms}}}function Kf(e,t,n,o,r,i){e.edges.forEach((s,a)=>Yf(s,a,t,r,i));for(let s of e.nodes)s.type==="parallel"?Zf(s,t,r,i):s.type==="condition"?Qf(s,t,r,i):s.type==="agent"&&em(s,n,o,t,r,i),tm(s,r)}function qf(e,t){let n=new Map,o=new Set;for(let r of e.agents??[])"id"in r&&(o.add(r.id),n.set(r.id,r));if(t!==void 0)for(let[r,i]of t)n.has(r)||n.set(r,i);return{agentsById:n,inlineAgentIds:o}}function Xf(e,t,n,o){if(n===void 0)return[];let r=[],i=new Set;for(let s of t.nodes){if(s.type!=="agent"||i.has(s.agent_ref)||o.has(s.agent_ref))continue;i.add(s.agent_ref);let a=n.get(s.agent_ref);if(a===void 0)continue;let d=zf.test(s.agent_ref)?`\`${s.agent_ref}\``:"<agent>";r.push({location:`agent ${d}.system_prompt`,text:a.system_prompt})}return Fr(e,r)}function Yf(e,t,n,o,r){let i=e.from.indexOf(":"),s=i===-1?e.from:e.from.slice(0,i),a=i===-1?void 0:e.from.slice(i+1),d=n.get(s),u=`edge \`${s}\`\u2192\`${e.to}\``;if(d===void 0&&r.push({kind:"unknown_edge_target",field:u,message:`edge source \`${s}\` is not a node`}),n.has(e.to)||r.push({kind:"unknown_edge_target",field:u,message:`edge target \`${e.to}\` is not a node`}),a!==void 0){d!==void 0&&om(d,a,e.to,u,t,r);return}if(d?.type==="condition"&&n.has(e.to)){r.push({kind:"invalid_handle",field:u,message:`a plain edge from condition \`${s}\` is not allowed \u2014 route via \`branches[].target_node\` or the \`${s}:<when>\` handle form`});return}o(s,e.to)}function Zf(e,t,n,o){e.parallel_of.forEach((r,i)=>{t.has(r)||o.push({kind:"unknown_edge_target",field:`node \`${e.id}\`.parallel_of[${i}]`,message:`\`${r}\` is not a node`}),n(e.id,r)})}function Qf(e,t,n,o){e.branches.forEach((r,i)=>{t.has(r.target_node)||o.push({kind:"unknown_edge_target",field:`node \`${e.id}\`.branches[${i}].target_node`,message:`branch target \`${r.target_node}\` is not a node`}),n(e.id,r.target_node)}),e.default!==void 0&&(t.has(e.default)||o.push({kind:"unknown_edge_target",field:`node \`${e.id}\`.default`,message:`default target \`${e.default}\` is not a node`}),n(e.id,e.default))}function em(e,t,n,o,r,i){n&&!t.has(e.agent_ref)&&i.push({kind:"dangling_ref",field:`node \`${e.id}\`.agent_ref`,message:`agent_ref \`${e.agent_ref}\` resolves to no agent`});let s=t.get(e.agent_ref);s!==void 0&&nm(s.system_prompt,e.id,o,r)}function tm(e,t){for(let n of lo(e))for(let o of n.references)o.kind==="node"&&t(o.identifier,e.id)}function nm(e,t,n,o){for(let r of ct(e))r.kind==="node"&&n.has(r.identifier)&&o(r.identifier,t)}function om(e,t,n,o,r,i){let s=`the handle on edge #${r}`;if(e.type!=="condition"){i.push({kind:"invalid_handle",field:o,message:`node \`${e.id}\` (type \`${e.type}\`) exposes no named output handle for ${s}`});return}let a=e.branches.find(d=>String(d.when)===t||typeof d.when=="number"&&t.trim()!==""&&Number(t)===d.when);if(a===void 0){i.push({kind:"invalid_handle",field:o,message:`condition \`${e.id}\` has no branch handle matching ${s}`});return}if(a.target_node!==n){let d=Vf.test(t)&&t.length<=24?`\`${t}\``:s;i.push({kind:"mismatched_branch_target",field:o,message:`condition \`${e.id}\` handle ${d} routes to \`${a.target_node}\`, but the edge targets \`${n}\``})}}function rm(e,t,n,o){let r=(d,u)=>(o.get(d)??0)-(o.get(u)??0),i=new Map;for(let[d,u]of n)i.set(d,u.size);let s=[];for(let d of e)(i.get(d.id)??0)===0&&s.push(d.id);let a=[];for(;s.length>0;){s.sort(r);let d=s.shift();if(d===void 0)break;a.push(d);for(let u of t.get(d)??[]){let p=(i.get(u)??0)-1;i.set(u,p),p===0&&s.push(u)}}return a}function im(e,t,n,o){let r=new Set(t),i=Z=>!r.has(Z),s=(Z,_e)=>(o.get(Z)??0)-(o.get(_e)??0),a;for(let Z of e)if(i(Z.id)){a=Z.id;break}if(a===void 0)return[];let d=new Map,u=[],p=a;for(;p!==void 0&&!d.has(p);)d.set(p,u.length),u.push(p),p=[...n.get(p)??[]].filter(i).sort(s)[0];if(p===void 0)return u;let _=d.get(p)??0,v=u.slice(_).reverse(),V=v[0];return V!==void 0&&v.push(V),v}function sm(e){switch(e.type){case"parallel":return"fan_out";case"merge":return"fan_in";case"human_gate":return"human_in_the_loop";case"input":case"agent":case"condition":case"transform":case"output":return e.type}}function am(e,t,n){let o=(s,a)=>(n.get(s)??0)-(n.get(a)??0),r=e.nodes.filter(s=>s.type==="parallel"),i=new Map;for(let s of e.nodes){if(s.type!=="merge")continue;let a=t.get(s.id)??new Set,d=r.find(u=>u.parallel_of.length>0&&u.parallel_of.every(p=>a.has(p)));if(d===void 0)i.set(s.id,[...a].sort(o));else{let u=new Set(d.parallel_of),p=[...a].filter(_=>!u.has(_)).sort(o);i.set(s.id,[...d.parallel_of,...p])}}return i}function dm(e,t,n){switch(e.type){case"input":return{kind:"input",node:e};case"output":return{kind:"output",node:e};case"transform":return{kind:"transform",node:e};case"condition":return{kind:"condition",node:e};case"human_gate":return{kind:"human_in_the_loop",node:e};case"parallel":return{kind:"fan_out",node:e,branchNodeIds:e.parallel_of};case"merge":{let o=e.merge_strategy==="first"?"wait_first":"wait_all";return{kind:"fan_in",node:e,joinStrategy:o,mergeStrategy:e.merge_strategy,branchNodeIds:n.get(e.id)??[],...e.merge_fn===void 0?{}:{mergeFn:e.merge_fn}}}case"agent":{let o=t.get(e.agent_ref);return{kind:"agent",node:e,...o===void 0?{}:{resolvedAgent:o},...o?.fallback_chain===void 0?{}:{fallbackChain:o.fallback_chain}}}}}import um from"@jitl/quickjs-singlefile-mjs-release-sync";import{newQuickJSWASMModuleFromVariant as cm,shouldInterruptAfterDeadline as lm}from"quickjs-emscripten-core";var Na=Object.freeze({timeoutMs:1e3,memoryBytes:16*1024*1024,stackBytes:256*1024}),pm={BaseObjects:!0,Eval:!0,JSON:!0,MapSet:!0,RegExp:!0,Date:!1,Promise:!1,Proxy:!1,TypedArrays:!1,StringNormalize:!1,RegExpCompiler:!1,BigInt:!1,BigFloat:!1,BigDecimal:!1,OperatorOverloading:!1,BignumExt:!1},fm=256,mm=1e5,qr;function hm(){return qr??=cm(um).catch(e=>{throw qr=void 0,e}),qr}async function Xr(e){let t=await hm(),n=e?.limits??Na;return{evaluate(o){try{let r=o.limits??n,i=gm(o.expression,o.scope),s=ym(t,i,r);return vm(s.value,s.type,o.kind)}catch(r){throw r instanceof L?r:$a(r)}}}}function gm(e,t){if(e.length>mm)throw new L("syntax","the expression is too large to evaluate");let n={inputs:t.inputs,ctx:t.ctx,run:{outputs:t.outputs},branches:t.branches??null};wm(n);let o;try{o=JSON.stringify(n)}catch(i){throw new L("scope","the expression scope could not be serialized for evaluation",{cause:i})}return['"use strict";',"try { delete Math.random; } catch (e) {}",'if (typeof Math.random === "function") {',' Math.random = function () { throw new RangeError("Math.random is disabled in the expression sandbox"); };',"}","Object.freeze(Math);","(function () {",` const __scope = JSON.parse(${JSON.stringify(o)});`," const __freeze = function (v) {",' if (v !== null && typeof v === "object") {'," Object.freeze(v);"," const keys = Object.keys(v);"," for (let i = 0; i < keys.length; i++) { __freeze(v[keys[i]]); }"," }"," return v;"," };"," __freeze(__scope);"," const inputs = __scope.inputs;"," const ctx = __scope.ctx;"," const run = __scope.run;"," const branches = __scope.branches;"," return (",e," );","})()"].join(`
|
|
6
|
+
`)}function ym(e,t,n){let o=e.newRuntime({memoryLimitBytes:n.memoryBytes,maxStackSizeBytes:n.stackBytes}),r,i=!1;try{r=o.newContext({intrinsics:pm});let s=Date.now()+n.timeoutMs;o.setInterruptHandler(lm(s));let a;try{a=r.evalCode(t,"expression.js")}catch(u){throw $a(u)}if(a.error){let u=_m(r,a.error);throw a.error.dispose(),bm(u,Date.now()>=s)}let d=r.typeof(a.value);try{let u=r.dump(a.value);return i=!0,{value:u,type:d}}catch(u){throw new L("non_serializable","the expression returned a value that could not be marshaled",{cause:u})}finally{a.value.dispose()}}finally{xm(r,o,!i)}}function wm(e){let t=[{node:e,depth:0}];for(;;){let n=t.pop();if(n===void 0)return;let{node:o,depth:r}=n;if(!(o===null||typeof o!="object")){if(r>fm)throw new L("scope","the expression scope is nested too deeply to evaluate");for(let i of Object.values(o))t.push({node:i,depth:r+1})}}}function $a(e){if(e instanceof L)return e;let t=e instanceof Error?`${e.name}: ${e.message}`:String(e),n=t.toLowerCase();return n.includes("call stack")||n.includes("stack size")?new L("stack","the expression exceeded its stack limit",{detail:t,cause:e}):new L("runtime","the expression failed to evaluate",{detail:t,cause:e})}function _m(e,t){try{return e.dump(t)}catch{return"<unavailable>"}}function bm(e,t){let n=km(e),o=Da(e),r=ja(e).toLowerCase();return t&&o==="InternalError"&&r.includes("interrupted")?new L("timeout","the expression exceeded its time limit",{detail:n}):o==="SyntaxError"?new L("syntax","the expression is not valid JavaScript",{detail:n}):o==="InternalError"?r.includes("stack overflow")?new L("stack","the expression exceeded its stack limit",{detail:n}):new L("memory","the expression exceeded a resource limit",{detail:n}):new L("runtime","the expression failed to evaluate",{detail:n})}function km(e){let t=Da(e),n=ja(e);return t.length>0?n.length>0?`${t}: ${n}`:t:n.length>0?n:String(e)}function Da(e){return e!==null&&typeof e=="object"&&"name"in e&&typeof e.name=="string"?e.name:""}function ja(e){return typeof e=="string"?e:e!==null&&typeof e=="object"&&"message"in e&&typeof e.message=="string"?e.message:""}function xm(e,t,n){try{try{e?.dispose()}finally{t.dispose()}}catch(o){if(!n)throw new L("runtime","a sandbox resource leaked on disposal",{cause:o})}}function vm(e,t,n){if(n==="condition"){if(t!=="boolean"&&t!=="string"&&t!=="number")throw new L("result_type","a condition expression must evaluate to a boolean, string, or number");return e}if(t==="function"||t==="symbol"||t==="undefined"||t==="bigint")throw new L("non_serializable","the expression must return a JSON-serializable value");if(t==="object"&&e!==null&&typeof e!="object")throw new L("non_serializable","the expression returned a non-serializable value");return e}var U=class extends Error{code;runId;gateId;constructor(t,n,o){super(n,o?.cause===void 0?void 0:{cause:o.cause}),this.name="EngineStateError",this.code=t,o?.runId!==void 0&&(this.runId=o.runId),o?.gateId!==void 0&&(this.gateId=o.gateId)}};var Se=class extends Error{code;constructor(t,n){super(n),this.name="RunLoopInvariantError",this.code=t}};function Im(e){let t="runId"in e&&e.runId!==void 0?e.runId:void 0,n="sessionId"in e&&e.sessionId!==void 0?e.sessionId:void 0;if(t!==void 0&&n!==void 0)throw new Se("both_correlation_keys","RunEventBus: event draft has both runId and sessionId (exactly one required)");if(t!==void 0)return t;if(n!==void 0)return n;throw new Se("no_correlation_key","RunEventBus: event draft has neither runId nor sessionId (exactly one required)")}var jt=class{#e;#t;#i;#o=new Set;#a=new Map;constructor(t){this.#e=t.now,this.#t=t.validate??!0,this.#i=t.onListenerError}next(t){let n=Im(t),o=this.#a.get(n)??0,r={...t,timestamp:this.#e(),sequenceNumber:o},i=this.#t?bs.parse(r):r;return this.#a.set(n,o+1),i}seedSequence(t,n){let o=this.#a.get(t)??0;n>o&&this.#a.set(t,n)}deliver(t){for(let n of this.#o)try{n(t)}catch(o){this.#c(o,t)}}emit(t){let n=this.next(t);return this.deliver(n),n}subscribe(t){return this.#o.add(t),()=>{this.#o.delete(t)}}#c(t,n){if(this.#i!==void 0)try{this.#i(t,n);return}catch(o){this.#n(o);return}this.#n(t)}#n(t){Promise.resolve().then(()=>{throw t})}};var In=4096,Ne=class extends Error{spentMicrocents;limitMicrocents;projectedMicrocents;name="BudgetExceededError";constructor(t,n,o){super(`pre-egress budget check failed: projected ${o} micro-cents exceeds the cap of ${n} micro-cents (spent ${t})`),this.spentMicrocents=t,this.limitMicrocents=n,this.projectedMicrocents=o}},$e=class extends Error{spentMicrocents;limitMicrocents;thresholdPct;name="BudgetPauseError";constructor(t,n,o){super(`pre-egress budget check would exceed the cap of ${n} micro-cents (spent ${t}); run paused for approval`),this.spentMicrocents=t,this.limitMicrocents=n,this.thresholdPct=o}toGateRequest(){return{gateType:"approval",message:`This agent step's next LLM call would push the run past its budget cap of ${this.limitMicrocents} micro-cents (already spent ${this.spentMicrocents}). Approve to let the step run to completion past the cap; reject to fail the run with budget_exceeded.`,spentMicrocents:this.spentMicrocents,limitMicrocents:this.limitMicrocents,isBudgetGate:!0}}},vn=class{#e;#t;#i;#o=0;#a=!1;constructor(t){this.#e=t.budget,this.#t=t.defaultMaxTokensEstimate??In,this.#i=t.emit}updateCost(t){this.#o=t}evaluatePreEgress(t,n,o){if(this.#e.max_cost_microcents<=0)return{kind:"allow"};let r;try{r=Ir(t,n??this.#t)+(o===void 0?0:Sr(t,o))}catch(a){if(a instanceof nt)return{kind:"allow"};throw a}let i=this.#o+r;if(i<=this.#e.max_cost_microcents)return{kind:"allow"};let s=Sm(Math.round(this.#o/this.#e.max_cost_microcents*100));switch(this.#e.on_exceed){case"warn":return{kind:"warn",spentMicrocents:this.#o,limitMicrocents:this.#e.max_cost_microcents,thresholdPct:s};case"fail":return{kind:"fail",error:new Ne(this.#o,this.#e.max_cost_microcents,i)};case"pause_for_approval":return{kind:"pause",error:new $e(this.#o,this.#e.max_cost_microcents,s)}}}async checkPreEgress(t,n,o){let r=this.evaluatePreEgress(t,n,o);if(r.kind!=="allow"){if(r.kind==="warn"){this.#a||(this.#a=!0,await this.#i({type:"budget:warning",spentMicrocents:r.spentMicrocents,limitMicrocents:r.limitMicrocents,thresholdPct:r.thresholdPct}));return}throw r.error}}};function Sm(e){return Math.max(0,Math.min(100,e))}var ie=class extends Error{toolId;constructor(t,n,o){super(t,o===void 0?void 0:{cause:o}),n!==void 0&&(this.toolId=n)}},Sn=class extends ie{code="unknown_tool";runErrorCode="tool_failed";retryable=!1;constructor(t,n){super(`unknown tool \`${t}\` \u2014 available tools: ${[...n].sort((o,r)=>o.localeCompare(r)).join(", ")}`,t,void 0),this.name="UnknownToolError"}},le=class extends ie{code="tool_denied";runErrorCode="tool_denied";retryable=!1;reason;constructor(t,n,o){super(o,t,void 0),this.name="ToolPolicyError",this.reason=n}},Ee=class extends ie{code="invalid_args";runErrorCode="validation";retryable=!1;fields;constructor(t,n,o,r){super(o,t,r),this.name="ToolArgsInvalidError",this.fields=n}},we=class extends ie{code="capability_unavailable";runErrorCode="internal";retryable=!1;capability;constructor(t,n){super(`tool \`${t}\` requires the host \`${n}\` capability, which is not wired`,t,void 0),this.name="ToolUnavailableError",this.capability=n}},En=class extends ie{code="execution_failed";runErrorCode="tool_failed";retryable=!0;constructor(t,n,o){super(n,t,o),this.name="ToolExecutionError"}},pt=class extends ie{code="cancelled";runErrorCode="cancelled";retryable=!1;constructor(t,n){super(t===void 0?"tool dispatch cancelled":`tool \`${t}\` cancelled`,t,n),this.name="ToolCancelledError"}};var Em=Symbol("relavium.untrusted");function Yr(e){return{[Em]:!0,value:e}}function Zr(e){return e.value}var ho={maxToolTurns:16,maxToolCorrections:3},Y=class extends Error{code;retryable;name="AgentTurnError";constructor(t,n,o){super(n),this.code=t,this.retryable=o}};function Cn(e){switch(e.kind){case"auth":return"provider_auth";case"rate_limit":return"provider_rate_limit";case"overloaded":case"timeout":case"transport":return"provider_unavailable";case"cancelled":return"cancelled";case"content_filter":return"content_filter";case"bad_request":return"validation";case"unknown":return"internal"}}function Cm(e){return e.code==="unknown_tool"||e.code==="invalid_args"}function Am(e){switch(e.code){case"cancelled":return{code:"cancelled",retryable:!1};case"tool_denied":return{code:"tool_denied",retryable:!1};case"capability_unavailable":return{code:"internal",retryable:!1};case"execution_failed":return{code:"tool_failed",retryable:!0};default:return{code:"tool_failed",retryable:!1}}}function Mm(){return{text:"",toolArgs:new Map,toolOrder:[],reasoning:new Map,reasoningOrder:[]}}function Tm(e){if(e.length===0)return{};try{return JSON.parse(e)}catch{return{}}}function Rm(e){let t=[];for(let n of e.reasoningOrder){let o=e.reasoning.get(n);o!==void 0&&t.push({type:"reasoning",text:o.text,...o.signature===void 0?{}:{signature:o.signature},...o.redacted===void 0?{}:{redacted:o.redacted}})}e.text.length>0&&t.push({type:"text",text:e.text});for(let n of e.toolOrder){let o=e.toolArgs.get(n);o!==void 0&&t.push({type:"tool_call",id:n,name:o.name,args:Tm(o.json)})}return t}function La(e){return e.filter(t=>t.type==="text").map(t=>t.text).join("")}function Lt(e){if(e.aborted)throw new Y("cancelled","the run was cancelled",!1)}function Ga(e,t){return{model:t.planEntries[0]?.model??"",...t.system===void 0?{}:{system:t.system},messages:[...e],...t.tools===void 0||Ba(t)?{}:{tools:[...t.tools]},...t.responseFormat===void 0?{}:{responseFormat:t.responseFormat},...t.temperature===void 0?{}:{temperature:t.temperature},...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens},...t.outputModalities===void 0?{}:{outputModalities:[...t.outputModalities]},signal:t.signal}}async function Om(e,t,n,o){let r=Mm(),i="stop";for await(let s of e.stream(Ga(t,n)))Nm(s,r,n,o),s.type==="error"&&Fa(s.error),s.type==="stop"&&(i=s.stopReason);return{content:Rm(r),stopReason:i}}async function Pm(e,t,n){try{let o=await e.generate(Ga(t,n));return{content:o.content,stopReason:o.stopReason}}catch(o){throw o instanceof I&&Fa(o.llmError),o}}function Fa(e){throw e.cause instanceof Y?e.cause:e.cause instanceof Ne?new Y("budget_exceeded",e.cause.message,!1):e.cause instanceof $e?e.cause:new Y(Cn(e),e.message,e.retryable)}function Ba(e){return e.outputModalities?.some(t=>t!=="text")??!1}function Nm(e,t,n,o){if(e.type==="text_delta"){t.text+=e.text,n.emit({type:"agent:token",nodeId:n.nodeId,token:e.text,model:o()});return}$m(e,t),Dm(e,t)}function $m(e,t){if(e.type==="tool_call_start"){t.toolArgs.has(e.id)||(t.toolArgs.set(e.id,{name:e.name,json:""}),t.toolOrder.push(e.id));return}if(e.type==="tool_call_delta"){let n=t.toolArgs.get(e.id);n!==void 0&&(n.json+=e.argsJsonDelta)}}function Dm(e,t){if(e.type==="reasoning_start"){t.reasoning.has(e.id)||(t.reasoning.set(e.id,{text:""}),t.reasoningOrder.push(e.id));return}if(e.type==="reasoning_delta"){let n=t.reasoning.get(e.id);n!==void 0&&(n.text+=e.text);return}if(e.type==="reasoning_end"){let n=t.reasoning.get(e.id);n!==void 0&&(e.signature!==void 0&&(n.signature=e.signature),e.redacted!==void 0&&(n.redacted=e.redacted))}}async function jm(e,t,n,o){let r=[],i=!1;for(let s of e){Lt(t.signal);try{let a=await t.registry.dispatch(s,{...t.dispatchContext,signal:t.signal});t.emit({type:"agent:tool_call",nodeId:t.nodeId,model:n(),toolId:a.events.call.toolId,toolInput:a.events.call.toolInput,attemptNumber:o});let d=Zr(a.toolResult);r.push({role:"tool",content:[d]}),t.emit({type:"agent:tool_result",nodeId:t.nodeId,toolId:a.events.result.toolId,success:a.events.result.success,outputSummary:a.events.result.outputSummary,attemptNumber:o})}catch(a){if(t.emit({type:"agent:tool_call",nodeId:t.nodeId,model:n(),toolId:s.name,toolInput:{},attemptNumber:o}),a instanceof ie&&Cm(a)){i=!0,r.push({role:"tool",content:[{type:"tool_result",toolCallId:s.id,result:a.message,isError:!0}]}),t.emit({type:"agent:tool_result",nodeId:t.nodeId,toolId:s.name,success:!1,outputSummary:a.message,attemptNumber:o});continue}let{code:d,retryable:u}=a instanceof ie?Am(a):{code:"internal",retryable:!1},p=a instanceof Error?a.message:"tool dispatch failed";throw new Y(d,p,u)}}return{messages:r,correctable:i}}async function Ua(e,t){try{await e.preEgress?.({model:t,...e.maxTokens===void 0?{}:{maxTokens:e.maxTokens},...e.outputModalities===void 0?{}:{outputModalities:e.outputModalities},...e.mediaUnitsEstimate===void 0?{}:{mediaUnitsEstimate:e.mediaUnitsEstimate}})}catch(n){throw n instanceof Ne?new Y("budget_exceeded",n.message,!1):n}}async function Lm(e,t,n,o,r,i){t.push({role:"assistant",content:e});let s=e.filter(u=>u.type==="tool_call");if(s.length===0)throw new Y("provider_unavailable","the model signalled a tool_use stop but produced no tool call",!1);let a=await jm(s,n,o,r),d=i;if(a.correctable&&(d+=1,d>n.limits.maxToolCorrections))throw new Y("tool_failed",`agent exceeded the ${n.limits.maxToolCorrections}-round tool-correction budget`,!1);return t.push(...a.messages),d}async function Qr(e){let t=e.planEntries[0]?.model;if(t===void 0)throw new Y("internal","agent turn has no fallback-plan entries",!1);let n=new ln,o=t,r=0,i=0,s=0,a=v=>{v.outcome!=="skipped"&&(o=v.model,r+=1,v.usage!==void 0&&(i+=v.usage.inputTokens,s+=v.usage.outputTokens,e.emit({type:"cost:updated",nodeId:e.nodeId,model:v.model,inputTokens:v.usage.inputTokens,outputTokens:v.usage.outputTokens,costMicrocents:v.cost?.costMicrocents??0,cumulativeCostMicrocents:0,attemptNumber:r})))},d=e.preEgress,u=new fn([...e.planEntries],{...e.chainCapabilities,costTracker:n,onAttempt:a,...d===void 0?{}:{preAttempt:v=>d({...v,...e.outputModalities===void 0?{}:{outputModalities:e.outputModalities},...e.mediaUnitsEstimate===void 0?{}:{mediaUnitsEstimate:e.mediaUnitsEstimate}})}}),p=e.messages.map(v=>({role:v.role,content:[...v.content]}));if(Ba(e)){await Ua(e,o),Lt(e.signal);let v=await Pm(u,p,e);if(Lt(e.signal),v.stopReason==="tool_use")throw new Y("provider_unavailable","a media-output turn signalled a tool_use stop but cannot run a tool round (ADR-0046)",!1);return{content:v.content,text:La(v.content),usage:{input:i,output:s},model:o,stopReason:v.stopReason}}let _=0;for(let v=0;;v+=1){if(Lt(e.signal),v>e.limits.maxToolTurns)throw new Y("turn_limit",`agent exceeded the ${e.limits.maxToolTurns}-turn tool-call limit`,!1);await Ua(e,o),Lt(e.signal);let V=await Om(u,p,e,()=>o);if(Lt(e.signal),V.stopReason!=="tool_use")return{content:V.content,text:La(V.content),usage:{input:i,output:s},model:o,stopReason:V.stopReason};_=await Lm(V.content,p,e,()=>o,r,_)}}var An={image:1,audio:60,video:10};function Um(e,t){if(e===void 0)return[];let n=[];for(let o of e)Ha(o)&&n.push({modality:o,units:t?.[o]??An[o]});return n}var Gm=new Set(Ce);function Ha(e){return Gm.has(e)}function ei(e){return{execute:t=>Bm(t,e),pollMediaJob:(t,n)=>Fm(e,t,n)}}async function Fm(e,t,n){let o=e.resolveProvider(t.provider);if(o===void 0||o.pollMediaJob===void 0)return{state:"failed",error:b({provider:t.provider,kind:"unknown",message:`provider '${t.provider}' implements no pollMediaJob (host-wiring gap)`})};let r;try{r=await e.keyFor(t.provider)}catch{return{state:"failed",error:b({provider:t.provider,kind:"auth",message:`credential resolution failed for provider ${t.provider}`})}}return o.pollMediaJob(t.jobId,r,n)}function B(e,t,n){return{kind:"failed",error:{code:e,message:t,retryable:n}}}function ti(e){if(e instanceof Y)return B(e.code,e.message,e.retryable);if(e instanceof $e)return{kind:"paused",gate:e.toGateRequest()};throw e}async function Bm(e,t){if(e.vertex.type!=="agent")return B("internal",`no executor for node type '${e.vertex.type}' yet (1.P)`,!1);let n=e.vertex.config;return n.kind!=="agent"?B("internal",`agent vertex '${e.vertex.id}' carries a '${n.kind}' config`,!1):Hm(e,n,t)}async function Hm(e,t,n){let o=t.node,r=t.resolvedAgent;if(r===void 0)return B("validation",`agent node '${o.id}': agent_ref '${o.agent_ref}' did not resolve to an agent`,!1);let i=qm(r,o,n);if(!i.ok)return B(i.code,i.message,!1);let s=Xm(r.tools,o.tools);if(!s.ok)return B("validation",s.message,!1);let a=new Set(s.ids),d=o.prompt_template===void 0?{ok:!0,text:""}:await nh(o.prompt_template,e,n);if(!d.ok)return B("validation",d.message,!1);let u=i.entries[0];if(u!==void 0&&(n.resolveMediaSurface?.(u.model)??"chat")==="generative")return Jm(e,o,u,d.text,n);let p=Ym(r,o,d.text),_=Qm(n.tools,a),v=o.output_schema??r.output_schema,V=Zm(v),Z={nodeId:o.id,grantedToolIds:a,config:{},toolPolicy:e.toolPolicy,fsScope:n.fsScope??"sandboxed",gateApproved:!1},_e=e.preEgress??n.preEgress,De;try{De=await Qr({...p.system===void 0?{}:{system:p.system},messages:p.messages,..._.length>0?{tools:_}:{},planEntries:i.entries,chainCapabilities:th(n),...V===void 0?{}:{responseFormat:V},...eh(r,o),nodeId:o.id,emit:e.emit,signal:e.signal,registry:n.registry,dispatchContext:Z,limits:n.limits??ho,..._e===void 0?{}:{preEgress:_e},...o.output_modalities===void 0?{}:{outputModalities:o.output_modalities,mediaUnitsEstimate:Um(o.output_modalities,n.mediaCostEstimate)}})}catch(be){return ti(be)}return Wm(o,De,v!==void 0)}function Wm(e,t,n){let o={input:t.usage.input,output:t.usage.output,model:t.model},r=t.content.filter(s=>s.type==="media");if(r.length>0)return{kind:"completed",output:{text:t.text,media:r},tokensUsed:o};if(e.output_modalities?.some(s=>s!=="text"))return B("validation",`agent node '${e.id}': output_modalities requested media output but the model returned none`,!1);if(!n)return{kind:"completed",output:t.text,tokensUsed:o};let i=oh(t.text);return i===Wa?B("validation",`agent node '${e.id}': output_schema is set but the model output was not valid JSON`,!1):{kind:"completed",output:i,tokensUsed:o}}async function Jm(e,t,n,o,r){let i=Km(t.output_modalities,t.id);if(!i.ok)return B("validation",i.message,!1);if(o.length===0)return B("validation",`agent node '${t.id}': a media_surface 'generative' model requires a non-empty prompt`,!1);let s=n.provider;if(s.generateMedia===void 0)return B("internal",`agent node '${t.id}': model '${n.model}' is media_surface 'generative' but provider '${s.id}' implements no generateMedia (host-wiring gap)`,!1);let a=ni(i.modality,t),d=e.preEgress??r.preEgress;if(d!==void 0)try{await d({model:n.model,maxTokens:0,outputModalities:[i.modality],mediaUnitsEstimate:[{modality:i.modality,units:a}]})}catch(v){return v instanceof Ne?B("budget_exceeded",v.message,!1):ti(v)}if(e.signal.aborted)return B("cancelled",`agent node '${t.id}': run cancelled before media generation`,!1);let u={model:n.model,prompt:o,modality:i.modality,...t.count===void 0?{}:{count:t.count},...t.duration_seconds===void 0?{}:{durationSeconds:t.duration_seconds},signal:e.signal},p;try{p=await r.keyFor(s.id)}catch{return B("provider_auth",`agent node '${t.id}': credential resolution failed for provider ${s.id}`,!1)}let _;try{_=await s.generateMedia(u,p)}catch(v){return zm(v)}return e.signal.aborted?B("cancelled",`agent node '${t.id}': run cancelled during media generation`,!1):Vm(e,t,n,i.modality,a,_)}function zm(e){return e instanceof I?B(Cn(e.llmError),e.llmError.message,e.llmError.retryable):e instanceof Te?B("validation",e.message,!1):ti(e)}function Vm(e,t,n,o,r,i){return i.jobId!==void 0&&i.media!==void 0?B("internal",`agent node '${t.id}': generateMedia returned BOTH media and jobId (exactly one required)`,!1):i.jobId!==void 0?{kind:"media_job",job:{jobId:i.jobId,provider:n.provider.id,model:n.model,modality:o,units:r}}:i.media===void 0?B("internal",`agent node '${t.id}': generateMedia resolved neither media nor jobId`,!1):Q(i.media.mimeType)!==o?B("validation",`agent node '${t.id}': generative model returned ${i.media.mimeType} but the node requested '${o}'`,!1):(e.emit({type:"cost:updated",nodeId:t.id,model:n.model,inputTokens:0,outputTokens:0,costMicrocents:oi(n.model,o,r),cumulativeCostMicrocents:0}),{kind:"completed",output:{text:"",media:[i.media]},tokensUsed:{input:0,output:0,model:n.model}})}function Km(e,t){let n=e??[],o=n.filter(Ha),[r]=o;return r===void 0||o.length!==1||n.length!==1?{ok:!1,message:`agent node '${t}': a media_surface 'generative' model requires output_modalities to declare exactly one media modality (image | audio | video), with no text`}:{ok:!0,modality:r}}function ni(e,t){return e==="image"?t.count??An.image:(t.duration_seconds??An[e])*(t.count??1)}function oi(e,t,n){let o=[{modality:t,direction:"output",units:n,unit:t==="image"?"count":"second"}];try{return ro(e,{inputTokens:0,outputTokens:0,mediaUnits:o})}catch{return 0}}function qm(e,t,n){let o=n.resolveProvider(e.provider);if(o===void 0)return{ok:!1,code:"internal",message:`no provider wired for '${e.provider}'`};let r=[{provider:o,model:t.model??e.model,maxAttempts:1}];for(let i of e.fallback_chain??[]){let s=n.resolveProvider(i.provider);if(s===void 0)return{ok:!1,code:"internal",message:`no provider wired for fallback '${i.provider}'`};r.push({provider:s,model:i.model,maxAttempts:i.max_attempts})}return{ok:!0,entries:r}}function Xm(e,t){let n=e??[];if(t===void 0)return{ok:!0,ids:n};let o=t.filter(r=>!n.includes(r));return o.length>0?{ok:!1,message:`node tools [${o.join(", ")}] are not granted to the agent (a node narrows, never widens)`}:{ok:!0,ids:t}}function Ym(e,t,n){let o=t.system_prompt_append,r=o===void 0||o.length===0?e.system_prompt:`${e.system_prompt}
|
|
7
|
+
|
|
8
|
+
${o}`,i=n.length>0?[{role:"user",content:[{type:"text",text:n}]}]:[];return{system:r,messages:i}}function Zm(e){if(e!==void 0)return no.parse({type:"json",schema:e})}function Qm(e,t){let n=[];for(let o of e){if(!t.has(o.id))continue;let r=un.safeParse({name:o.id,...o.description.length>0?{description:o.description}:{},parameters:o.llmVisibleParams});if(!r.success)throw new Y("internal",`granted tool '${o.id}' has an invalid LLM schema`,!1);n.push(r.data)}return n}function eh(e,t){let n=t.temperature??e.temperature,o=t.max_tokens??e.max_tokens;return{...n===void 0?{}:{temperature:n},...o===void 0?{}:{maxTokens:o}}}function th(e){return{keyFor:e.keyFor,sleep:e.sleep,...e.now===void 0?{}:{now:e.now},...e.onAuthError===void 0?{}:{onAuthError:e.onAuthError},...e.resolveForEgress===void 0?{}:{resolveForEgress:e.resolveForEgress}}}async function nh(e,t,n){let o={inputs:t.inputs,ctx:t.ctx,outputs:Object.fromEntries(t.runOutputs)};try{return{ok:!0,text:await Pe(e,o,n.resolverCapabilities??{})}}catch(r){return{ok:!1,message:r instanceof Error?r.message:"prompt interpolation failed"}}}var Wa=Symbol("parse-failed");function oh(e){let t=e.trim();if(t.startsWith("```")){let n=t.indexOf(`
|
|
9
|
+
`);t=(n===-1?t.slice(3):t.slice(n+1)).trim(),t.endsWith("```")&&(t=t.slice(0,-3).trim())}try{return JSON.parse(t)}catch{return Wa}}var go=256,Ut=class{#e=[];#t;#i;#o;#a=[];#c=!1;constructor(t,n){this.#t=t,this.#i=n}push(t){if(!this.#c){if(this.#o!==void 0){let n=this.#o;this.#o=void 0,n({value:t,done:!1});return}this.#e.push(t)}}close(){if(!this.#c){if(this.#c=!0,this.#o!==void 0){let t=this.#o;this.#o=void 0,t({value:void 0,done:!0})}this.#n(),this.#i?.()}}whenDrained(){return this.#c||this.#e.length<=this.#t?Promise.resolve():new Promise(t=>{this.#a.push(t)})}#n(){if(this.#c||this.#e.length<=this.#t){let t=this.#a;this.#a=[];for(let n of t)n()}}next(){let t=this.#e.shift();return t!==void 0?(this.#n(),Promise.resolve({value:t,done:!1})):this.#c?Promise.resolve({value:void 0,done:!0}):this.#o!==void 0?Promise.reject(new Se("concurrent_consumer","BoundedEventStream: a second concurrent next() is not supported (single-consumer stream)")):new Promise(n=>{this.#o=n})}return(){return this.close(),this.#e.length=0,Promise.resolve({value:void 0,done:!0})}[Symbol.asyncIterator](){return this}};var rh=new Set(["run:completed","run:failed","run:cancelled"]);function Ja(e,t){return"runId"in e&&e.runId===t}function za(e,t,n,o=go){let r=new Ut(o,()=>i()),i=e.subscribe(s=>{Ja(s,t)&&(r.push(s),rh.has(s.type)&&r.close())});return{runId:t,events:r,subscribe:s=>e.subscribe(a=>{Ja(a,t)&&s(a)}),cancel:n,whenConsumersReady:()=>r.whenDrained()}}function Va(e){let t=new Ut(go);return t.close(),{runId:e,events:t,subscribe:()=>()=>{},cancel:()=>{},whenConsumersReady:()=>Promise.resolve()}}var Ka=new Set(["completed","failed","skipped"]),ri=new Set(["run:completed","run:failed","run:cancelled"]);function ih(e){return e.type==="run:completed"?{...e,outputs:{}}:e.type==="run:failed"?{...e,partialOutputs:{}}:e}var sh=new Set(["completed","failed","cancelled"]),ah=1e3,dh=864e5;function uh(e){if(e.gateId===void 0!=(e.decision===void 0))throw new U("invalid_decision","resumeFromCheckpoint needs BOTH gateId + decision (a gate resume) or NEITHER (a media-job resume)",{runId:e.runId,...e.gateId===void 0?{}:{gateId:e.gateId}});if(e.decision!==void 0&&!Qo.safeParse(e.decision).success)throw new U("invalid_decision","the gate decision failed validation",{runId:e.runId,...e.gateId===void 0?{}:{gateId:e.gateId}})}function ch(e,t){let n={__proto__:null};for(let[o,r]of Object.entries(e))n[o]=t.has(o)?{secret:!0,ref:`inputs.${o}`}:r;return n}var yo=class{runId;handle;#e;#t;#i;#o;#a;#c;#n;#y;#b;#v;#O;#P;#j={};#r;#d=new Map;#g=new Map;#I=new Set;#w=new Map;#f=new Map;#_=new Map;#C;#k;#A=new Set;#S="";#s=!1;#l=!1;#u;#M=!1;#T=!1;#x=!1;#N=Promise.resolve();#m=0;#R=0;#B=0;#H=0;constructor(t){this.runId=t.runId,this.#e=t.plan,this.#t=t.workflow,this.#i=t.inputs,this.#c=t.executionMode,this.#n=t.host,this.#y=t.executor,this.#O=t.resolverCapabilities,this.#b=t.bus,this.#v=t.onSettled,this.#r=t.host.newAbortController();let n=new Set((t.workflow.workflow.inputs??[]).filter(o=>o.type==="secret").map(o=>o.name));if(this.#a=n,this.#o=ch(t.inputs,n),this.#P=t.maxTokensEstimate??In,t.plan.budget!==void 0&&(this.#k=new vn({budget:t.plan.budget,defaultMaxTokensEstimate:this.#P,emit:o=>this.#p({...o,runId:this.runId})})),t.checkpoint===void 0)for(let o of t.plan.vertices.keys())this.#d.set(o,{status:"pending"});else this.#ie(t.plan,t.checkpoint,t.bus,t.runId);this.handle=za(t.bus,t.runId,()=>{try{this.requestCancel()}catch(o){if(!(o instanceof U&&o.code==="run_already_terminal"))throw o}},t.capacity)}async begin(){this.#m=Date.parse(this.#n.clock.now()),this.#W();try{this.#S=await this.#n.store.resolveWorkflowId(this.#t.workflow.id),await this.#p({type:"run:started",runId:this.runId,workflowId:this.#S,inputs:this.#o,executionMode:this.#c})}catch{await this.#E("run:failed");return}if(!await this.#J()){await this.#E(this.#l?"run:cancelled":"run:failed");return}this.#h()}#W(){this.#L();let t=this.#e.timeoutMs;t!==void 0&&(this.#C=this.#n.setTimer(t,()=>{this.#re(t)}))}#L(){this.#C!==void 0&&(this.#C(),this.#C=void 0)}async#re(t){if(this.#s)return;this.#L();let n=this.#F();await this.#p({type:"run:timeout",runId:this.runId,elapsedMs:n,timeoutMs:t}),this.#s||(this.#u={error:{code:"run_timeout",message:`the run exceeded its ${t} ms timeout`,retryable:!1}},this.#r.abort(),this.#h())}async#J(){try{return this.#j=await Kr(this.#t,this.#i,this.#O,this.#r.signal),!0}catch(t){return this.#l||this.#r.signal.aborted||(this.#u={error:{code:"validation",message:t instanceof Error?t.message:"workflow context resolution failed",retryable:!1}}),!1}}#ie(t,n,o,r){for(let i of t.vertices.keys()){let s=n.nodeStates.get(i);if(s===void 0){this.#d.set(i,{status:"pending"});continue}this.#d.set(i,{status:s.status,...s.output===void 0?{}:{output:s.output},...s.selectedTargets===void 0?{}:{selectedTargets:new Set(s.selectedTargets)}})}for(let i of n.pendingGates)this.#g.set(i.gateId,{vertexId:i.nodeId,isBudgetGate:i.isBudgetGate});for(let i of n.pendingMediaJobs){let s=t.vertices.get(i.nodeId),a=s?.config.kind==="agent"?ni(i.modality,s.config.node):An[i.modality];this.#f.set(i.nodeId,{jobId:i.jobId,provider:i.provider,model:i.model,modality:i.modality,units:a,deadlineAt:i.deadlineAt,submittedAtMs:Date.parse(i.startedAt)-n.startedAtMs,backoffMs:qt.pollInitialMs}),this.#z(i.nodeId)}n.pendingMediaJobs.length>0&&n.runStatus==="paused"&&(this.#x=!0);for(let i of n.resolvedGateIds)this.#I.add(i);this.#B=n.totalInputTokens,this.#H=n.totalOutputTokens,this.#R=n.cumulativeCostMicrocents,this.#k?.updateCost(n.cumulativeCostMicrocents),o.seedSequence(r,n.lastSequenceNumber+1),this.#m=n.startedAtMs}async beginResume(t,n,o){if(this.#W(),o||this.#K(t),!await this.#J()){await this.#E(this.#l?"run:cancelled":"run:failed");return}o?this.#h():await this.resume(t,n)}async beginResumeMediaJobs(){if(this.#W(),this.#f.size===0)throw new U("run_not_paused","the run has no pending media job to re-attach (a gate-parked run resumes via gateId + decision)",{runId:this.runId});if(this.#g.size>0)throw new U("pending_gate_requires_decision","the run is also parked on a human gate \u2014 resume with that gate's gateId + decision (a media-only resume cannot resolve it)",{runId:this.runId});if(!await this.#J()){await this.#E(this.#l?"run:cancelled":"run:failed");return}this.#h()}abandon(){if(!this.#s){this.#s=!0,this.#r.abort();for(let t of this.#w.values())t();this.#w.clear();for(let t of this.#_.values())t();this.#_.clear(),this.#f.clear(),this.#L()}}requestCancel(){if(this.#s)throw new U("run_already_terminal","the run has already terminated",{runId:this.runId});this.#l||(this.#l=!0,this.#r.abort(),this.#h())}#K(t){if(this.#g.size===0)throw new U("run_not_paused","the run has no pending gate to resume",{runId:this.runId,gateId:t});let n=this.#g.get(t);if(n===void 0)throw new U("unknown_gate","no pending gate matches the supplied gateId",{runId:this.runId,gateId:t});return n}async resume(t,n){if(this.#I.has(t))return;if(this.#s)throw new U("run_already_terminal","the run has already terminated",{runId:this.runId,gateId:t});let o=this.#K(t);if(this.#I.add(t),this.#g.delete(t),this.#X(t),this.#x=!1,await this.#se(o,n)){this.#h();return}let r=this.#d.get(o.vertexId);r!==void 0&&(r.status="completed",r.output=n.payload??{decision:n.decision});try{await this.#p({type:"human_gate:resumed",runId:this.runId,nodeId:o.vertexId,decision:n.decision,decidedBy:n.decidedBy,...n.payload===void 0?{}:{payload:n.payload}})}catch{this.#u===void 0&&!this.#l&&(this.#u={nodeId:o.vertexId,error:{code:"internal",message:"the gate decision payload could not be made durable-safe",retryable:!1}},this.#r.abort())}this.#h()}async#se(t,n){if(!t.isBudgetGate)return!1;let o=this.#d.get(t.vertexId);return n.decision==="rejected"?(o!==void 0&&(o.status="failed"),this.#u===void 0&&!this.#l&&(this.#u={nodeId:t.vertexId,error:{code:"budget_exceeded",message:"the budget gate was rejected",retryable:!1}},this.#r.abort()),await this.#p({type:"human_gate:resumed",runId:this.runId,nodeId:t.vertexId,decision:"rejected",decidedBy:n.decidedBy}),!0):n.decision==="approved"?(this.#A.add(t.vertexId),o!==void 0&&(o.status="pending"),await this.#p({type:"human_gate:resumed",runId:this.runId,nodeId:t.vertexId,decision:"approved",decidedBy:n.decidedBy}),!0):!1}#h(){if(this.#M){this.#T=!0;return}this.#M=!0,this.#ae()}async#ae(){try{do this.#T=!1,await this.#de();while(this.#T&&!this.#s)}finally{this.#M=!1}}async#de(){if(this.#s)return;for(let{id:o,reason:r}of this.#Ce())await this.#p({type:"node:skipped",runId:this.runId,nodeId:o,reason:r});let t=this.#Me();if(this.#l){t===0&&await this.#E("run:cancelled");return}if(this.#u!==void 0){t===0&&await this.#E("run:failed");return}if(this.#Te()){await this.#E("run:completed");return}let n=this.#ce(t);if(n.length===0){await this.#ue(t);return}for(let o of n)await this.handle.whenConsumersReady(),await this.#p({type:"node:started",runId:this.runId,nodeId:o.id,nodeType:o.type}),this.#le(o,1)}async#ue(t){if(!(t>0)){if(this.#g.size>0||this.#f.size>0){await this.#Ee();return}this.#u={error:{code:"internal",message:"run stalled with no runnable node",retryable:!1}},this.#h()}}#ce(t){let n=this.#e.maxParallel??Number.POSITIVE_INFINITY,o=[],r=t;for(let i of this.#e.order){if(r>=n)break;let s=this.#e.vertices.get(i),a=this.#d.get(i);s===void 0||a?.status!=="pending"||!this.#Z(s)||!this.#Q(s)||(a.status="running",o.push(s),r+=1)}return o}async#le(t,n){let o=this.#me(t),r=n,i=this.#F(),s=this.#A.delete(t.id);for(;;){let a=await this.#fe(t,r,s);if(!(a.kind==="failed"&&!this.#s&&!this.#l&&this.#u===void 0&&!this.#r.signal.aborted&&this.#he(o,a.error,r))||a.kind!=="failed"){await this.#$(t,a,i,r);return}let u=this.#ge(o,r);await this.#p({type:"node:retrying",runId:this.runId,nodeId:t.id,attemptNumber:r,error:{code:a.error.code,message:a.error.message,retryable:a.error.retryable},delayMs:u});let p=await this.#ye(u);if(this.#s)return;if(this.#l||this.#r.signal.aborted){await this.#$(t,a,i,r);return}if(!p){await this.#$(t,a,i,r);return}r+=1,await this.#p({type:"node:started",runId:this.runId,nodeId:t.id,nodeType:t.type,attemptNumber:r})}}#pe(){if(this.#k===void 0)return;let t=this.#k;return n=>t.checkPreEgress(n.model,n.maxTokens,n.mediaUnitsEstimate)}async#fe(t,n,o){try{let r=o?void 0:this.#pe(),i={vertex:t,runOutputs:this.#Re(),inputs:this.#i,ctx:this.#j,secretInputNames:this.#a,toolPolicy:this.#t.workflow.tools??{},emit:s=>{this.#te(s)},signal:this.#r.signal,attemptNumber:n,...r===void 0?{}:{preEgress:r}};return await this.#Pe(t,await this.#y.execute(i))}catch{return{kind:"failed",error:{code:"internal",message:"the node handler threw an unexpected error",retryable:!1}}}}#me(t){let n=t.config;switch(n.kind){case"agent":return n.node.retry??n.resolvedAgent?.retry;case"condition":case"transform":case"fan_in":return n.node.retry;default:return}}#he(t,n,o){return t===void 0||!n.retryable||o>=t.max?!1:(t.retry_on??Pn).includes(n.code)}#ge(t,n){let o=t?.backoff_ms??ah,r=t?.backoff==="exponential"?o*2**(n-1):o*n;return Math.min(r,dh)}#ye(t){return this.#r.signal.aborted?Promise.resolve(!1):new Promise(n=>{let o=()=>{this.#r.signal.removeEventListener("abort",r)},r=()=>{i(),o(),n(!1)},i=this.#n.setTimer(t,()=>{o(),n(!0)});this.#r.signal.addEventListener("abort",r)})}async#$(t,n,o,r=1){if(!this.#s){try{switch(n.kind){case"completed":case"branch":await this.#we(t,n,o,r);break;case"failed":await this.#q(t,n.error,r);break;case"paused":await this.#_e(t,n.gate);break;case"media_job":await this.#be(t,n.job);break}}catch{this.#Y(t,"the engine failed while settling a node")}this.#h()}}async#we(t,n,o,r=1){let i=this.#d.get(t.id);i!==void 0&&(i.status="completed",i.output=n.output,n.kind==="branch"&&(i.selectedTargets=new Set(n.selected)));let s=n.tokensUsed??{input:0,output:0};this.#B+=s.input,this.#H+=s.output,await this.#p({type:"node:completed",runId:this.runId,nodeId:t.id,output:n.output,tokensUsed:s,durationMs:Math.max(0,this.#F()-o),cumulativeCostMicrocents:this.#R,...n.kind==="branch"?{selected:[...n.selected]}:{},...r>1?{attemptNumber:r}:{}})}async#q(t,n,o=1){let r=this.#d.get(t.id);r!==void 0&&(r.status="failed"),this.#u===void 0&&!this.#l&&(this.#u={nodeId:t.id,error:n},this.#r.abort()),await this.#p({type:"node:failed",runId:this.runId,nodeId:t.id,error:{...n,correlationId:this.#n.ids.newId()},...o>1?{attemptNumber:o}:{}})}async#_e(t,n){let o=n.gateId??this.#n.ids.newId(),r=n.isBudgetGate===!0,i=this.#d.get(t.id);i!==void 0&&(i.status="paused"),this.#g.set(o,{vertexId:t.id,isBudgetGate:r});let s=n.timeoutMs===void 0?void 0:n.timeoutAction??"reject",a=n.expiresAt??(n.timeoutMs===void 0?void 0:new Date(Date.parse(this.#n.clock.now())+n.timeoutMs).toISOString());if(n.timeoutMs!==void 0&&s!==void 0){let d=this.#n.setTimer(n.timeoutMs,()=>{this.#Ie(o,t.id,s)});this.#w.set(o,d)}n.spentMicrocents!==void 0&&n.limitMicrocents!==void 0&&await this.#p({type:"budget:paused",runId:this.runId,nodeId:t.id,gateId:o,spentMicrocents:n.spentMicrocents,limitMicrocents:n.limitMicrocents}),await this.#p({type:"human_gate:paused",runId:this.runId,nodeId:t.id,gateId:o,gateType:n.gateType,message:n.message,...n.assignee===void 0?{}:{assignee:n.assignee},...n.timeoutMs===void 0?{}:{timeoutMs:n.timeoutMs},...s===void 0?{}:{timeoutAction:s},...a===void 0?{}:{expiresAt:a}})}#X(t){let n=this.#w.get(t);n!==void 0&&(this.#w.delete(t),n())}async#be(t,n){let o=this.#d.get(t.id);o!==void 0&&(o.status="paused");let r=this.#n.clock.now(),i=new Date(Date.parse(r)+(n.deadlineMs??qt.deadlineMs)).toISOString();this.#f.set(t.id,{jobId:n.jobId,provider:n.provider,model:n.model,modality:n.modality,units:n.units,deadlineAt:i,submittedAtMs:Date.parse(r)-this.#m,backoffMs:qt.pollInitialMs}),await this.#p({type:"media_job:submitted",runId:this.runId,nodeId:t.id,jobId:n.jobId,provider:n.provider,model:n.model,modality:n.modality,startedAt:r,deadlineAt:i}),this.#z(t.id)}#z(t){let n=this.#f.get(t);if(n===void 0)return;this.#V(t);let o=this.#n.setTimer(n.backoffMs,()=>{this.#ke(t)});this.#_.set(t,o)}#V(t){let n=this.#_.get(t);n!==void 0&&(this.#_.delete(t),n())}#U(t){this.#f.delete(t),this.#V(t),this.#x=!1}#G(t,n){this.#te({type:"cost:updated",nodeId:t,model:n.model,inputTokens:0,outputTokens:0,costMicrocents:oi(n.model,n.modality,n.units),cumulativeCostMicrocents:0})}async#ke(t){this.#V(t);let n=this.#f.get(t);if(this.#s||n===void 0)return;let o=this.#e.vertices.get(t);if(o===void 0){this.#G(t,n),this.#U(t),this.#h();return}try{if(Date.parse(this.#n.clock.now())>Date.parse(n.deadlineAt)){await this.#D(o,n,{code:"provider_unavailable",message:`media job '${n.jobId}' exceeded its deadline (${n.deadlineAt})`,retryable:!0});return}if(this.#y.pollMediaJob===void 0){await this.#D(o,n,{code:"internal",message:"the executor implements no pollMediaJob (host-wiring gap)",retryable:!1});return}let r={jobId:n.jobId,provider:n.provider,model:n.model,modality:n.modality,units:n.units},i;try{i=await this.#y.pollMediaJob(r,this.#r.signal)}catch{if(this.#s||this.#r.signal.aborted||!this.#f.has(t))return;await this.#D(o,n,{code:"provider_unavailable",message:`media job '${n.jobId}' poll failed`,retryable:!0});return}if(this.#s||this.#r.signal.aborted||!this.#f.has(t))return;await this.#xe(o,n,i)}catch{this.#s||(this.#U(t),this.#Y(o,"the media job poll loop failed while settling the node"),this.#h())}}async#xe(t,n,o){switch(o.state){case"pending":{n.backoffMs=Math.min(n.backoffMs*2,qt.pollMaxMs),this.#z(t.id);return}case"done":await this.#ve(t,n,o.media);return;case"failed":await this.#D(t,n,{code:Cn(o.error),message:o.error.message,retryable:o.error.retryable});return;default:await this.#D(t,n,{code:"internal",message:"media poll returned an unrecognized job state",retryable:!1})}}async#ve(t,n,o){this.#U(t.id),this.#G(t.id,n),await this.#$(t,{kind:"completed",output:{text:"",media:[o]},tokensUsed:{input:0,output:0,model:n.model}},n.submittedAtMs)}async#D(t,n,o){this.#U(t.id),this.#G(t.id,n),await this.#$(t,{kind:"failed",error:o},n.submittedAtMs)}async#Ie(t,n,o){if(this.#X(t),!(this.#s||!this.#g.has(t))){if(o==="approve"){await this.resume(t,{decision:"approved",decidedBy:"timeout"});return}await this.#Se(t,n)}}async#Se(t,n){this.#g.delete(t),this.#I.add(t);let o=this.#e.vertices.get(n);o!==void 0&&(await this.#q(o,{code:"run_timeout",message:"the human gate timed out without a decision",retryable:!1}),this.#h())}#Y(t,n){let o=this.#d.get(t.id);(o?.status==="running"||o?.status==="paused")&&(o.status="failed"),!this.#s&&this.#u===void 0&&!this.#l&&(this.#u={nodeId:t.id,error:{code:"internal",message:n,retryable:!1}},this.#r.abort())}async#Ee(){if(this.#x)return;this.#x=!0;let t=[...this.#g.keys()],n=[...this.#f.keys()];await this.#p({type:"run:paused",runId:this.runId,pendingGateCount:t.length,gateIds:t,...n.length===0?{}:{pendingMediaJobNodeIds:n}})}async#E(t){if(this.#s)return;this.#s=!0,this.#r.abort();for(let r of this.#w.values())r();this.#w.clear();for(let[r,i]of this.#f)this.#G(r,i);for(let r of this.#_.values())r();this.#_.clear(),this.#f.clear(),this.#A.clear(),this.#L();let n=Math.max(0,this.#F()),o;if(t==="run:completed")o={type:t,runId:this.runId,outputs:this.#ee("output"),totalTokensUsed:{input:this.#B,output:this.#H},totalCostMicrocents:this.#R,durationMs:n};else if(t==="run:failed"){let r=this.#u??{error:{code:"internal",message:"the run failed",retryable:!1}};o={type:t,runId:this.runId,error:{...r.error,...r.nodeId===void 0?{}:{nodeId:r.nodeId},correlationId:this.#n.ids.newId()},partialOutputs:this.#ee("completed")}}else o={type:t,runId:this.runId};await this.#p(o),this.#v(this.runId)}#Z(t){for(let n of t.dependencies){let o=this.#d.get(n);if(o===void 0||!Ka.has(o.status))return!1}return!0}#Q(t){if(t.dependencies.length===0)return!0;for(let n of t.dependencies){let o=this.#d.get(n);if(o?.status!=="completed")continue;if(this.#e.vertices.get(n)?.type==="condition"){if(o.selectedTargets?.has(t.id)===!0)return!0;continue}return!0}return!1}#Ce(){let t=[],n=!0;for(;n;){n=!1;for(let[o,r]of this.#d){if(r.status!=="pending")continue;let i=this.#e.vertices.get(o);i===void 0||!this.#Z(i)||this.#Q(i)||(r.status="skipped",t.push({id:o,reason:this.#Ae(i)}),n=!0)}}return t}#Ae(t){for(let n of t.dependencies)if(this.#e.vertices.get(n)?.type==="condition"&&this.#d.get(n)?.status==="completed")return"branch_not_taken";return"upstream_unreachable"}#Me(){let t=0;for(let n of this.#d.values())n.status==="running"&&(t+=1);return t}#Te(){for(let t of this.#d.values())if(!Ka.has(t.status))return!1;return!0}#Re(){let t=new Map;for(let[n,o]of this.#d)o.status==="completed"&&t.set(n,o.output);return t}#ee(t){let n={__proto__:null};for(let[o,r]of this.#d)r.status==="completed"&&(t==="output"&&this.#e.vertices.get(o)?.type!=="output"||(n[o]=r.output??null));return n}#te(t){let n=this.runId;switch(t.type){case"agent:token":case"agent:tool_call":case"agent:tool_result":case"agent:file_patch_proposed":this.#b.emit({...t,runId:n});return;case"cost:updated":this.#R+=t.costMicrocents,this.#k?.updateCost(this.#R),this.#b.emit({...t,runId:n,cumulativeCostMicrocents:this.#R});return}}async#p(t){let n;try{n=await this.#Oe(t)}catch(s){if(ri.has(t.type))n=ih(t);else throw s}let o=this.#b.next(n);this.#$e(n),ri.has(o.type)&&this.#De();let r=this.#N,i=(async()=>{try{await this.#n.store.persistEvent(o)}catch{!ri.has(o.type)&&this.#u===void 0&&!this.#l&&(this.#u={error:{code:"internal",message:"a durable run-event write failed",retryable:!1}},this.#r.abort(),this.#h())}await r,this.#b.deliver(o)})();this.#N=i.catch(()=>{}),await i}async#Oe(t){let n=this.#n.mediaStore;if(n!==void 0)return await Vo(t,n,this.#ne());if(Gn(t))throw new Se("media_store_unavailable","a media-bearing event was emitted but no MediaStore was injected into the ExecutionHost (1.AF, I3)");return t}#ne(){let t=this.#n.fetchMedia;if(t!==void 0)return n=>t(n,Vi,this.#r.signal)}async#Pe(t,n){if(n.kind!=="completed")return n;let o=t.config;if(o.kind!=="output"||o.node.save_to===void 0)return n;let r=await this.#Ne(o.node.save_to,n.output);return r===void 0?n:{kind:"failed",error:r}}async#Ne(t,n){let o=this.#n.mediaStore,r=this.#n.mediaWrite;if(o===void 0||r===void 0)return{code:"validation",message:"an output node declares `save_to` but the host wired no media store / media-write port",retryable:!1};try{let i={inputs:{},ctx:{},outputs:{},runId:this.runId},s=await Pe(t,i,{},this.#r.signal),a=await Vo(n,o,this.#ne()),d=Jo(a);if(d.length!==1)return{code:"validation",message:d.length===0?"output node `save_to`: the captured output contains no media handle to write":`output node \`save_to\`: the captured output contains ${d.length} media handles \u2014 save_to writes exactly one`,retryable:!1};let[u]=d;if(u===void 0)return{code:"internal",message:"output node `save_to`: no handle",retryable:!1};let p=await o.get(u.handle);await r(s,p,this.#r.signal);return}catch(i){return this.#r.signal.aborted?{code:"cancelled",message:"the run was cancelled",retryable:!1}:i instanceof F?{code:"validation",message:"output node `save_to`: the path template could not be resolved",retryable:!1}:{code:"internal",message:"output node `save_to`: the media write failed",retryable:!1}}}#$e(t){let n=this.#n.mediaReferences;if(n===void 0)return;let o;try{o=Jo(t)}catch{return}for(let r of o)this.#oe(()=>n.recordRunMedia(r,this.runId))}#De(){let t=this.#n.mediaReferences;t!==void 0&&this.#oe(()=>t.reclaimRun(this.runId))}#oe(t){try{let n=t();n instanceof Promise&&n.catch(()=>{})}catch{}}#F(){return Date.parse(this.#n.clock.now())-this.#m}},Mn=class{#e;#t;#i;#o;#a;#c;#n=new Map;constructor(t){this.#e=t.host,this.#t=t.executor,this.#i=t.validateEvents??!0,this.#o=t.eventBufferCapacity??256,this.#a=t.resolverCapabilities??{},this.#c=t.maxTokensEstimate??In}start(t){let n=mo(t.workflow,t.planOptions),o=this.#e.ids.newId(),r=new jt({now:this.#e.clock.now,validate:this.#i}),i=new yo({runId:o,plan:n,workflow:t.workflow,inputs:t.inputs??{},executionMode:t.executionMode??"local",host:this.#e,executor:this.#t,bus:r,capacity:this.#o,onSettled:()=>{},resolverCapabilities:this.#a,maxTokensEstimate:this.#c});return this.#n.set(o,i),i.begin(),i.handle}async resume(t,n,o){let r=Qo.safeParse(o);if(!r.success)throw new U("invalid_decision","the gate decision failed validation",{runId:t,gateId:n});let i=this.#n.get(t);if(i===void 0)throw new U("unknown_run","no run matches the supplied runId",{runId:t});await i.resume(n,r.data)}async resumeFromCheckpoint(t){let n=t.gateId!==void 0&&t.decision!==void 0;if(uh(t),this.#n.has(t.runId))throw new U("run_already_active","the run is already in memory \u2014 use resume() rather than resumeFromCheckpoint()",{runId:t.runId});let o=await this.#e.checkpointer.load(t.runId);if(o===void 0)throw new U("unknown_run","no checkpoint exists for the supplied runId",{runId:t.runId});if(await this.#e.store.resolveWorkflowId(t.workflow.workflow.id)!==o.workflowId)throw new U("workflow_mismatch","the supplied workflow is not the one this run started on",{runId:t.runId});if(sh.has(o.runStatus))return Va(t.runId);let i=mo(t.workflow,t.planOptions),s=new jt({now:this.#e.clock.now,validate:this.#i}),a=new yo({runId:t.runId,plan:i,workflow:t.workflow,inputs:t.inputs??{},executionMode:t.executionMode??"local",host:this.#e,executor:this.#t,bus:s,capacity:this.#o,onSettled:()=>{},resolverCapabilities:this.#a,maxTokensEstimate:this.#c,checkpoint:o});this.#n.set(t.runId,a);try{n&&t.gateId!==void 0&&t.decision!==void 0?await a.beginResume(t.gateId,t.decision,o.resolvedGateIds.includes(t.gateId)):await a.beginResumeMediaJobs()}catch(d){throw a.abandon(),this.#n.delete(t.runId),d}return a.handle}cancel(t){let n=this.#n.get(t);if(n===void 0)throw new U("unknown_run","no run matches the supplied runId",{runId:t});n.requestCancel()}async reconcile(){let t=await this.#e.store.listInterruptedRuns(),n=[];for(let o of t){if(o.resumable)continue;let r=Tt.parse({type:"run:failed",runId:o.runId,timestamp:this.#e.clock.now(),sequenceNumber:o.lastSequenceNumber+1,error:{code:"internal",message:"the run was interrupted before completion and reconciled on restart",retryable:!1,correlationId:this.#e.ids.newId()},partialOutputs:{}});try{await this.#e.store.persistEvent(r),n.push(r),this.#y(o.runId)}catch{}}return n}#y(t){let n=this.#e.mediaReferences;if(n!==void 0)try{let o=n.reclaimRun(t);o instanceof Promise&&o.catch(()=>{})}catch{}}};var lh={"run:paused":"paused","run:completed":"completed","run:failed":"failed","run:cancelled":"cancelled"};function ph(e,t){if(t.type==="run:started"){e.started=!0,e.workflowId=t.workflowId,e.startedAtMs=Date.parse(t.timestamp),e.runStatus="running";return}let n=lh[t.type];n!==void 0&&(e.runStatus=n)}function fh(e,t){switch((t.type==="node:completed"||t.type==="node:failed"||t.type==="node:skipped")&&e.pendingMediaJobs.delete(t.nodeId),t.type){case"node:completed":e.nodeStates.set(t.nodeId,{status:"completed",output:t.output,...t.selected===void 0?{}:{selectedTargets:t.selected}}),e.totalInputTokens+=t.tokensUsed.input,e.totalOutputTokens+=t.tokensUsed.output,t.cumulativeCostMicrocents!==void 0&&(e.cumulativeCostMicrocents=Math.max(e.cumulativeCostMicrocents,t.cumulativeCostMicrocents));break;case"node:failed":e.nodeStates.set(t.nodeId,{status:"failed",error:{code:t.error.code,message:t.error.message,retryable:t.error.retryable}});break;case"node:skipped":e.nodeStates.set(t.nodeId,{status:"skipped"});break;default:break}}function mh(e,t){if(t.type!=="media_job:submitted")return;let n=e.nodeStates.get(t.nodeId)?.status;n==="completed"||n==="failed"||n==="skipped"||(e.nodeStates.set(t.nodeId,{status:"paused"}),e.pendingMediaJobs.set(t.nodeId,{nodeId:t.nodeId,jobId:t.jobId,provider:t.provider,model:t.model,modality:t.modality,startedAt:t.startedAt,deadlineAt:t.deadlineAt}))}function hh(e,t){if(t.type==="human_gate:paused"||t.type==="budget:paused"){e.nodeStates.set(t.nodeId,{status:"paused"}),e.pendingGates.set(t.gateId,{nodeId:t.nodeId,isBudgetGate:e.pendingGates.get(t.gateId)?.isBudgetGate===!0||t.type==="budget:paused"}),t.type==="budget:paused"&&(e.cumulativeCostMicrocents=t.spentMicrocents);return}if(t.type!=="human_gate:resumed")return;e.nodeStates.set(t.nodeId,{status:"completed",output:t.payload===void 0?{decision:t.decision}:t.payload});let n=[...e.pendingGates].filter(([,o])=>o.nodeId===t.nodeId).map(([o])=>o);for(let o of n)e.pendingGates.delete(o),e.resolvedGateIds.add(o)}function ft(e){let t={started:!1,workflowId:"",startedAtMs:0,runStatus:"running",lastSequenceNumber:-1,totalInputTokens:0,totalOutputTokens:0,cumulativeCostMicrocents:0,nodeStates:new Map,pendingGates:new Map,pendingMediaJobs:new Map,resolvedGateIds:new Set};for(let o of e)t.lastSequenceNumber=Math.max(t.lastSequenceNumber,o.sequenceNumber),o.type==="cost:updated"&&(t.cumulativeCostMicrocents=o.cumulativeCostMicrocents),ph(t,o),fh(t,o),mh(t,o),hh(t,o);if(!t.started)return;let n=[...t.nodeStates].filter(([,o])=>o.status==="completed").map(([o])=>o);return{schemaVersion:1,runStatus:t.runStatus,workflowId:t.workflowId,startedAtMs:t.startedAtMs,nodeStates:t.nodeStates,completedNodeIds:n,pendingGates:[...t.pendingGates].map(([o,r])=>({gateId:o,nodeId:r.nodeId,isBudgetGate:r.isBudgetGate})),pendingMediaJobs:[...t.pendingMediaJobs.values()],resolvedGateIds:[...t.resolvedGateIds],lastSequenceNumber:t.lastSequenceNumber,totalInputTokens:t.totalInputTokens,totalOutputTokens:t.totalOutputTokens,cumulativeCostMicrocents:t.cumulativeCostMicrocents}}var gh=new Set(["run:completed","run:failed","run:cancelled"]),yh=new Set(["human_gate:paused","run:paused","budget:paused","media_job:submitted"]);function wh(e){return`00000000-0000-4000-8000-${e.toString(16).padStart(12,"0")}`}var mt=class{#e=new Map;#t=new Map;#i=0;resolveWorkflowId(t){let n=this.#t.get(t);return n===void 0&&(n=wh(++this.#i),this.#t.set(t,n)),Promise.resolve(n)}persistEvent(t){if(t.runId===void 0)return Promise.resolve();let n=this.#e.get(t.runId);return n===void 0?this.#e.set(t.runId,[t]):n.push(t),Promise.resolve()}listInterruptedRuns(){let t=[];for(let[n,o]of this.#e){let r=o.find(s=>s.type==="run:started");if(r===void 0||o.some(s=>gh.has(s.type)))continue;let i=o.at(-1);t.push({runId:n,workflowId:r.workflowId,resumable:i!==void 0&&yh.has(i.type),lastSequenceNumber:o.reduce((s,a)=>Math.max(s,a.sequenceNumber),-1)})}return Promise.resolve(t)}eventsFor(t){return this.#e.get(t)??[]}};function ii(e){return{load:t=>Promise.resolve(e instanceof mt?ft(e.eventsFor(t)):void 0)}}import{stringify as AI}from"yaml";function j(e,t,n){return{kind:"failed",error:{code:e,message:t,retryable:n}}}function J(){return j("cancelled","the run was cancelled",!1)}function _h(e){let t={__proto__:null};for(let n of[...e.keys()].sort(si))t[n]=e.get(n);return t}function si(e,t){return e<t?-1:e>t?1:0}function ai(e,t){let n={__proto__:null};for(let[o,r]of Object.entries(e))n[o]=t.has(o)?{secret:!0,ref:`inputs.${o}`}:r;return n}function Gt(e,t){return{inputs:ai(e.inputs,e.secretInputNames),ctx:e.ctx,outputs:_h(e.runOutputs),...t===void 0?{}:{branches:t}}}function Ft(e){return e instanceof L?j(e.code,e.message,e.retryable):j("internal","the node handler failed unexpectedly",!1)}function bh(e,t){let{config:n}=e.vertex;if(n.kind!=="condition")return j("internal",`the condition handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return J();let{node:o}=n,r;try{r=t.sandbox.evaluate({expression:o.expression,kind:"condition",scope:Gt(e)})}catch(a){return e.signal.aborted?J():Ft(a)}if(e.signal.aborted)return J();let s=o.branches.find(a=>a.when===r)?.target_node??o.default;return s===void 0?j("validation","the condition matched no branch and declares no default",!1):e.vertex.dependents.includes(s)?{kind:"branch",selected:[s]}:j("internal",`the condition selected '${s}', which is not a downstream node`,!1)}function di(e){return{execute:t=>Promise.resolve(bh(t,e))}}function kh(e,t){let n=[];for(let o of t)e.runOutputs.has(o)&&n.push(e.runOutputs.get(o));return n}function xh(e){let t={__proto__:null};for(let n of e){if(n===null||typeof n!="object"||Array.isArray(n))return j("validation","object_merge requires every branch output to be a JSON object",!1);Object.assign(t,n)}return{kind:"completed",output:t}}function vh(e,t,n,o){let r;try{r=t.evaluate({expression:n,kind:"merge_fn",scope:Gt(e,o)})}catch(i){return e.signal.aborted?J():Ft(i)}return e.signal.aborted?J():{kind:"completed",output:r}}function Ih(e,t){let{config:n}=e.vertex;if(n.kind!=="fan_in")return j("internal",`the fan_in handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return J();let o=kh(e,n.branchNodeIds);switch(n.mergeStrategy){case"concat":return{kind:"completed",output:o};case"object_merge":return xh(o);case"first":return{kind:"completed",output:o.length>0?o[0]:null};case"custom":{let r=n.mergeFn??n.node.merge_fn;return r===void 0?j("validation","merge_strategy 'custom' requires a merge_fn",!1):vh(e,t.sandbox,r,o)}default:{let r=n.mergeStrategy;return j("internal",`unknown merge_strategy '${String(r)}'`,!1)}}}function ui(e){return{execute:t=>Promise.resolve(Ih(t,e))}}function Sh(e){let{config:t}=e.vertex;return t.kind!=="fan_out"?j("internal",`the fan_out handler received a '${t.kind}' node`,!1):e.signal.aborted?J():{kind:"completed",output:null}}function ci(){return{execute:e=>Promise.resolve(Sh(e))}}async function Eh(e,t){let{config:n}=e.vertex;if(n.kind!=="human_in_the_loop")return j("internal",`the human-gate handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return J();let{node:o}=n,r={inputs:e.inputs,ctx:e.ctx,outputs:Object.fromEntries(e.runOutputs)},i=t.resolverCapabilities??{},s,a;try{s=o.message_template===void 0?"":await Pe(o.message_template,r,i,e.signal),a=o.assignee===void 0?void 0:await Pe(o.assignee,r,i,e.signal)}catch(u){return e.signal.aborted?J():j("validation",u instanceof Error?u.message:"gate template interpolation failed",!1)}return{kind:"paused",gate:{gateType:o.gate_type,message:s,...a===void 0?{}:{assignee:a},...o.timeout_ms===void 0?{}:{timeoutMs:o.timeout_ms,timeoutAction:o.timeout_action??"reject"}}}}function li(e={}){return{execute:t=>Eh(t,e)}}function Ch(e){let{config:t}=e.vertex;return t.kind!=="input"?j("internal",`the input handler received a '${t.kind}' node`,!1):e.signal.aborted?J():{kind:"completed",output:ai(e.inputs,e.secretInputNames)}}function Ah(e){let{config:t}=e.vertex;if(t.kind!=="output")return j("internal",`the output handler received a '${t.kind}' node`,!1);if(e.signal.aborted)return J();let n=[...e.vertex.dependencies].sort(si).filter(r=>e.runOutputs.has(r));if(n.length===0)return{kind:"completed",output:null};if(n.length===1){let[r]=n;return r===void 0?{kind:"completed",output:null}:{kind:"completed",output:e.runOutputs.get(r)}}let o={__proto__:null};for(let r of n)o[r]=e.runOutputs.get(r);return{kind:"completed",output:o}}function pi(){return{execute:e=>Promise.resolve(Ch(e))}}function fi(){return{execute:e=>Promise.resolve(Ah(e))}}function Mh(e,t){let{config:n}=e.vertex;if(n.kind!=="transform")return j("internal",`the transform handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return J();let o;try{o=t.sandbox.evaluate({expression:n.node.transform,kind:"transform",scope:Gt(e)})}catch(r){return e.signal.aborted?J():Ft(r)}return e.signal.aborted?J():{kind:"completed",output:o}}function mi(e){return{execute:t=>Promise.resolve(Mh(t,e))}}function qa(e){let t=e.agent;return{execute(n){let o=e[n.vertex.type];return o===void 0?Promise.resolve(j("internal",`no executor is registered for node type '${n.vertex.type}'`,!1)):o.execute(n)},...t?.pollMediaJob===void 0?{}:{pollMediaJob:t.pollMediaJob.bind(t)}}}function hi(e){let t={...e.agent===void 0?{}:{agent:ei(e.agent)},condition:di({sandbox:e.sandbox}),transform:mi({sandbox:e.sandbox}),fan_in:ui({sandbox:e.sandbox}),fan_out:ci(),human_in_the_loop:li(e.humanGate??{}),input:pi(),output:fi()};return qa(t)}var wo=500;function Th(e){let t=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);if(o<128)t+=1;else if(o<2048)t+=2;else if(o>=55296&&o<=56319){let r=e.charCodeAt(n+1);r>=56320&&r<=57343?(t+=4,n++):t+=3}else t+=3}return t}function Rh(e){if(e.length===0)return 0;let t=1;for(let n=0;n<e.length;n++)e.codePointAt(n)===10&&t++;return t}function Oh(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Xa(e){return _o(e,new WeakSet)}function _o(e,t){if(typeof e=="string")return Yt(e)?"[base64 data URI omitted]":e;if(typeof e!="object"||e===null)return e;if(t.has(e))return"[cyclic]";if(t.add(e),Array.isArray(e))return e.map(o=>_o(o,t));if(It(e))return"[binary buffer omitted]";if(!Oh(e))return e;if(St(e)){let o=e.data;return{kind:"base64",base64Length:typeof o=="string"?o.length:0}}let n={};for(let[o,r]of Object.entries(e))n[o]=_o(r,t);return n}function Ph(e){if(typeof e=="string")return Yt(e)?"[base64 data URI omitted]":e;if(e===void 0)return"";try{let t=_o(e,new WeakSet);return JSON.stringify(t)??"[unserializable]"}catch{return"[unserializable]"}}function Nh(e){let n=(e.length>wo*8?e.slice(0,wo*8):e).replace(/\s+/g," ").trim();return n.length<=wo?n:`${n.slice(0,wo)}\u2026`}function Ya(e){return e<128?1:e<2048?2:e<65536?3:4}function $h(e,t){let n=0,o=0;for(;o<e.length;){let r=e.codePointAt(o);if(r===void 0)break;let i=Ya(r);if(n+i>t)break;n+=i,o+=r>65535?2:1}return e.slice(0,o)}function Dh(e,t){let n=t-1,o=e.charCodeAt(n);if(o>=56320&&o<=57343&&n>0){let r=e.charCodeAt(n-1);if(r>=55296&&r<=56319)return n-1}return n}function jh(e,t){let n=0,o=e.length;for(;o>0;){let r=Dh(e,o),i=e.codePointAt(r);if(i===void 0)break;let s=Ya(i);if(n+s>t)break;n+=s,o=r}return e.slice(o)}function gi(e,t,n){return t<=0?"":n?jh(e,t):$h(e,t)}function Lh(e,t){let n,o,r=e.split(`
|
|
10
|
+
`);if(r.length>t.maxLines){let d=Math.max(1,Math.floor((t.maxLines-1)*.7)),u=Math.max(1,t.maxLines-1-d);n=r.slice(0,d).join(`
|
|
11
|
+
`),o=r.slice(r.length-u).join(`
|
|
12
|
+
`)}else n=e,o=e;let i=Math.max(0,t.maxBytes);if(t.maxLines<3)return gi(n,i,!1);let s=gi(n,Math.floor(i*.7),!1),a=gi(o,Math.floor(i*.3),!0);return a===""?s:`${s}
|
|
13
|
+
\u2026
|
|
14
|
+
${a}`}async function Za(e,t,n,o){let r=Ph(e),i=Nh(r),s=Th(r),a=Rh(r);if(s<=t.maxBytes&&a<=t.maxLines)return{value:e,truncated:!1,summary:i};let d,u="no output store";if(n.outputStore)try{d=(await n.outputStore.spill(r,t,o)).ref}catch(_){if(o?.aborted===!0||_ instanceof Error&&_.name==="AbortError")throw _;u="spill failed"}let p=d===void 0?`
|
|
15
|
+
|
|
16
|
+
[\u2026 truncated: ${s} bytes / ${a} lines; full output unavailable (${u}) \u2026]`:`
|
|
17
|
+
|
|
18
|
+
[\u2026 truncated: ${s} bytes / ${a} lines; full output at ${d} \u2026]`;return{value:Lh(r,t)+p,truncated:!0,summary:i}}var yi={maxBytes:51200,maxLines:2e3};function wi(e){let t=new Map;for(let o of e.tools){if(t.has(o.id))throw new Error(`duplicate tool id \`${o.id}\` registered`);t.set(o.id,o)}let n=e.host;return{has:o=>t.has(o),list:()=>[...t.keys()].sort((o,r)=>o.localeCompare(r)),dispatch:(o,r)=>Uh(t,n,o,r)}}async function Uh(e,t,n,o){if(bo(o,void 0),n.providerExecuted===!0)throw new le(n.name,"provider_executed",`tool \`${n.name}\` is provider-executed and is not dispatched by the engine`);let r=e.get(n.name);if(r===void 0)throw new Sn(n.name,[...e.keys()]);if(!o.grantedToolIds.has(r.id))throw new le(r.id,"not_granted",`tool \`${r.id}\` is not granted to node \`${o.nodeId}\``);let i=Gh(r,n.args,o);Fh(r.id,i,o.secretArgKeys);let s;try{s=r.parseArgs(i)}catch(p){throw Bh(r.id,p)}Wh(r,s,o);let a,d;try{bo(o,r.id);let p=await r.dispatch(s,t,o);bo(o,r.id),a=Kh(p,o.config.outputMapping),d=await Za(p,o.limits??yi,t,o.signal),bo(o,r.id)}catch(p){throw p instanceof pt?p:Yh(p,o)?new pt(r.id,p):p instanceof ie?p:new En(r.id,`tool \`${r.id}\` failed`,p)}let u={type:"tool_result",toolCallId:n.id,result:d.value};return{output:a,toolResult:Yr(u),truncated:d.truncated,events:{call:{toolId:r.id,toolInput:Xh(r,i,o.secretArgKeys)},result:{toolId:r.id,success:!0,outputSummary:d.summary}}}}var _i=new Set(["__proto__","constructor","prototype"]);function Gh(e,t,n){let o=new Set(e.configOnlyParams??[]),r={};Qa(r,t,o),Qa(r,n.config.inputMapping,o);let i=n.config.parameters;if(i!==void 0)for(let s of o)_i.has(s)||Object.hasOwn(i,s)&&(r[s]=i[s]);return r}function Qa(e,t,n){if(ko(t))for(let o of Object.keys(t))_i.has(o)||n.has(o)||(e[o]=t[o])}function Fh(e,t,n){if(n===void 0||n.size===0)return;let o=Object.keys(t).filter(r=>n.has(r));if(o.length>0){let r=o.toSorted((i,s)=>i.localeCompare(s));throw new Ee(e,r,`tool \`${e}\`: a secret-typed value cannot flow into tool arguments (${r.join(", ")}) \u2014 use a credential reference (ADR-0029)`)}}function Bh(e,t){let n=Hh(t),o=n.length>0?` (${n.join(", ")})`:"";return new Ee(e,n,`tool \`${e}\`: invalid arguments${o}`,t)}function Hh(e){if(!ko(e))return[];let t=e.issues;if(!Array.isArray(t))return[];let n=new Set;for(let o of t)if(ko(o)){let r=o.path;Array.isArray(r)&&n.add(r.map(String).join(".")||"(root)")}return[...n].sort((o,r)=>o.localeCompare(r))}function Wh(e,t,n){if(e.policy.requiresGateApproval&&!n.gateApproved)throw new le(e.id,"gate_required",`tool \`${e.id}\` requires a human-gate approval in an automated workflow`);let o=e.policyTarget?.(t)??{};if(e.policy.spawnsProcess&&o.command!==void 0&&!Jh(o.command,n.toolPolicy))throw new le(e.id,"command_not_allowed",`tool \`${e.id}\`: command not in the allowedCommands allowlist`);e.policy.egress==="http"&&o.url!==void 0&&zh(e.id,o.url,n)}function Jh(e,t){if((t.allowedCommands??[]).includes(e))return!0;for(let o of t.allowedCommandGlobs??[])if(Vh(o,e))return!0;return!1}function zh(e,t,n){let o=Et(t);if(o===null||o.hasCredentials)throw new le(e,"insecure_url",`tool \`${e}\`: outbound URL must be HTTPS without embedded credentials`);if(!(n.toolPolicy.allowedDomains??[]).includes(o.host))throw new le(e,"domain_not_allowed",`tool \`${e}\`: host not in the allowedDomains allowlist`)}function Vh(e,t){let n=0,o=0,r=-1,i=0;for(;o<t.length;){let s=e[n];if(s==="?"||s!==void 0&&s!=="*"&&s===t[o])n++,o++;else if(s==="*")r=++n,i=o;else if(r>=0)n=r,o=++i;else return!1}for(;e[n]==="*";)n++;return n===e.length}function Kh(e,t){if(t===void 0)return e;let n={};for(let[o,r]of Object.entries(t))_i.has(o)||(n[o]=qh(e,r));return n}function qh(e,t){if(t==="")return e;let n=e;for(let o of t.split(".")){if(!ko(n)||!Object.hasOwn(n,o))return;n=n[o]}return n}function Xh(e,t,n){let o={...t};for(let r of e.configOnlyParams??[])delete o[r];if(n!==void 0)for(let r of n)delete o[r];for(let r of Object.keys(o))o[r]=Xa(o[r]);return o}function bo(e,t){if(e.signal?.aborted===!0)throw new pt(t)}function Yh(e,t){return t.signal?.aborted===!0?!0:e instanceof Error&&e.name==="AbortError"}function ko(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import{z as k}from"zod";function ce(e){return{id:e.id,source:"builtin",description:e.description,parseArgs:n=>e.args.parse(n),llmVisibleParams:e.llmVisibleParams,policy:e.policy,...e.configOnlyParams===void 0?{}:{configOnlyParams:e.configOnlyParams},...e.policyTarget===void 0?{}:{policyTarget:e.policyTarget},dispatch:e.dispatch}}function Zh(e,t,n){if(!/^https:\/\/[^/?#\s]+/i.test(e))throw new Ee("web_search",["endpoint"],"web_search `endpoint` must be an absolute https:// URL");let o=e.includes("?")?"&":"?",r=n===void 0?"":`&maxResults=${encodeURIComponent(String(n))}`;return`${e}${o}q=${encodeURIComponent(t)}${r}`}function bi(e,t){if(e.fs===void 0)throw new we(t,"fs");return e.fs}function ki(e,t){if(e.process===void 0)throw new we(t,"process");return e.process}function ed(e,t){if(e.egress===void 0)throw new we(t,"egress");return e.egress}function td(e,t){if(e.os===void 0)throw new we(t,"os");return e.os}function Qh(e,t){if(e.mcp===void 0)throw new we(t,"mcp");return e.mcp}var xi={fsScoped:!0,spawnsProcess:!1,requiresGateApproval:!1},vi={fsScoped:!1,spawnsProcess:!1,requiresGateApproval:!1},eg={fsScoped:!1,spawnsProcess:!1,requiresGateApproval:!1},tg=ce({id:"read_file",description:"Read a text file as UTF-8; binary/media content returns a durable media handle.",args:k.object({path:k.string().min(1),glob:k.boolean().optional()}).strict(),llmVisibleParams:{type:"object",properties:{path:{type:"string"},glob:{type:"boolean"}},required:["path"],additionalProperties:!1},policy:xi,dispatch:(e,t,n)=>bi(t,"read_file").readFile(e.path,{glob:e.glob},n.signal)}),ng=ce({id:"write_file",description:"Write or append content to a file, within the allowed FS scope only.",args:k.object({path:k.string().min(1),content:k.string(),append:k.boolean().optional(),createDirs:k.boolean().optional()}).strict(),llmVisibleParams:{type:"object",properties:{path:{type:"string"},content:{type:"string"},append:{type:"boolean"},createDirs:{type:"boolean"}},required:["path","content"],additionalProperties:!1},policy:xi,dispatch:(e,t,n)=>bi(t,"write_file").writeFile(e.path,e.content,{append:e.append,createDirs:e.createDirs},n.signal)}),og=ce({id:"list_directory",description:"List directory contents, optionally recursive with a glob filter.",args:k.object({path:k.string().min(1),recursive:k.boolean().optional(),glob:k.string().optional()}).strict(),llmVisibleParams:{type:"object",properties:{path:{type:"string"},recursive:{type:"boolean"},glob:{type:"string"}},required:["path"],additionalProperties:!1},policy:xi,dispatch:(e,t,n)=>bi(t,"list_directory").listDirectory(e.path,{recursive:e.recursive,glob:e.glob},n.signal)}),rg=ce({id:"run_command",description:"Spawn an allowlisted shell command (shell:false) and capture stdout/stderr/exit code.",args:k.object({command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().optional(),timeoutMs:k.number().int().positive().optional(),env:k.record(k.string()).optional()}).strict(),llmVisibleParams:{type:"object",properties:{command:{type:"string"},args:{type:"array",items:{type:"string"}}},required:["command"],additionalProperties:!1},configOnlyParams:["cwd","timeoutMs","env"],policy:{fsScoped:!1,spawnsProcess:!0,requiresGateApproval:!1},policyTarget:e=>({command:[e.command,...e.args??[]].join(" ")}),dispatch:(e,t,n)=>ki(t,"run_command").spawn(e.command,e.args??[],e.env??{},{cwd:e.cwd,timeoutMs:e.timeoutMs},n.signal)}),ig=ce({id:"git_status",description:"Run git status / log / diff in the workspace; extra flags are author-pinned via config, not model-supplied.",args:k.object({command:k.enum(["status","log","diff"]).optional(),args:k.array(k.string()).optional()}).strict(),llmVisibleParams:{type:"object",properties:{command:{type:"string",enum:["status","log","diff"]}},additionalProperties:!1},configOnlyParams:["args"],policy:{fsScoped:!1,spawnsProcess:!0,requiresGateApproval:!1},dispatch:(e,t,n)=>ki(t,"git_status").spawn("git",[e.command??"status",...e.args??[]],{},{},n.signal)}),sg=ce({id:"git_commit",description:"Create a commit, optionally restricting it to the given pathspecs \u2014 requires a human-gate approval in automated workflows.",args:k.object({message:k.string().min(1),files:k.array(k.string().min(1).refine(e=>!e.startsWith("-"),{message:'a pathspec must not start with "-"'})).optional()}).strict(),llmVisibleParams:{type:"object",properties:{message:{type:"string"},files:{type:"array",items:{type:"string"}}},required:["message"],additionalProperties:!1},policy:{fsScoped:!1,spawnsProcess:!0,requiresGateApproval:!0},dispatch:(e,t,n)=>ki(t,"git_commit").spawn("git",["commit","-m",e.message,"--",...e.files??[]],{},{},n.signal)}),ag=ce({id:"http_request",description:"Outbound HTTPS request to an allowedDomains host (HTTPS-only, exact-FQDN, SSRF-guarded).",args:k.object({method:k.enum(["GET","POST","PUT","DELETE"]).optional(),url:k.string().min(1),headers:k.record(k.string()).optional(),body:k.string().optional()}).strict(),llmVisibleParams:{type:"object",properties:{method:{type:"string",enum:["GET","POST","PUT","DELETE"]},url:{type:"string"},headers:{type:"object",additionalProperties:{type:"string"}},body:{type:"string"}},required:["url"],additionalProperties:!1},policy:{fsScoped:!1,spawnsProcess:!1,egress:"http",requiresGateApproval:!1},policyTarget:e=>({url:e.url}),dispatch:(e,t,n)=>ed(t,"http_request").fetch({method:e.method??"GET",url:e.url,headers:e.headers,body:e.body},n.signal)}),dg=ce({id:"web_search",description:"Search the web via the configured provider (key resolved host-side via a credential ref).",args:k.object({query:k.string().min(1),maxResults:k.number().int().positive().optional(),endpoint:k.string().min(1),credentialRef:k.string().optional()}).strict(),llmVisibleParams:{type:"object",properties:{query:{type:"string"},maxResults:{type:"integer",minimum:1}},required:["query"],additionalProperties:!1},configOnlyParams:["endpoint","credentialRef"],policy:{fsScoped:!1,spawnsProcess:!1,egress:"search",requiresGateApproval:!1},dispatch:(e,t,n)=>{let o=Zh(e.endpoint,e.query,e.maxResults);return ed(t,"web_search").fetch({method:"GET",url:o,credentialRef:e.credentialRef},n.signal)}}),ug=ce({id:"mcp_call",description:"Invoke a tool on a configured MCP server (server URL runs the same SSRF primitive).",args:k.object({server:k.string().min(1),tool:k.string().min(1),args:k.unknown().optional()}).strict(),llmVisibleParams:{type:"object",properties:{server:{type:"string"},tool:{type:"string"},args:{}},required:["server","tool"],additionalProperties:!1},policy:{fsScoped:!1,spawnsProcess:!1,egress:"mcp",requiresGateApproval:!1},dispatch:(e,t,n)=>Qh(t,"mcp_call").call({server:e.server,tool:e.tool,args:e.args},n.signal)}),cg=ce({id:"read_clipboard",description:"Read the current clipboard text.",args:k.object({}).strict(),llmVisibleParams:{type:"object",properties:{},additionalProperties:!1},policy:vi,dispatch:(e,t,n)=>td(t,"read_clipboard").readClipboard(n.signal)}),lg=ce({id:"notify",description:"Send a native desktop notification (title + body).",args:k.object({title:k.string().min(1),body:k.string()}).strict(),llmVisibleParams:{type:"object",properties:{title:{type:"string"},body:{type:"string"}},required:["title","body"],additionalProperties:!1},policy:vi,dispatch:async(e,t,n)=>(await td(t,"notify").notify({title:e.title,body:e.body},n.signal),{delivered:!0})}),pg=ce({id:"read_media",description:"Read a produced/received media handle (optionally a byte range) and return it inline for the model.",args:k.object({handle:k.string().regex(je,"must be a media://sha256-<64hex> handle"),start:k.number().int().nonnegative().optional(),end:k.number().int().nonnegative().optional()}).strict(),llmVisibleParams:{type:"object",properties:{handle:{type:"string"},start:{type:"integer",minimum:0},end:{type:"integer",minimum:0}},required:["handle"],additionalProperties:!1},policy:eg,dispatch:async(e,t,n)=>{let o=n.mediaRead,r=n.requestingScope;if(o===void 0||r===void 0)throw new we("read_media","media-read");let i=await o.describe(e.handle);if(i===void 0)throw new Ee("read_media",["handle"],"read_media: unknown media handle");if(!ss(i.allowedScopes,r))throw new le("read_media","media_scope_denied","read_media: the requesting scope may not read this media handle");if(i.byteLength===0&&e.start===void 0&&e.end===void 0)return{type:"media",mimeType:i.mimeType,source:{kind:"handle",ref:e.handle}};let s={start:e.start??0,end:e.end??i.byteLength-1},a=Wo(s,i.byteLength);if(!a.ok)throw new Ee("read_media",["start","end"],`read_media: ${a.reason}`);let d=await o.readRange(e.handle,a.range);return{type:"media",mimeType:i.mimeType,source:d}}}),fg=ce({id:"invoke_agent",description:"Dispatch another agent node by id with explicit input (orchestrator delegation).",args:k.object({nodeId:k.string().min(1),input:k.unknown().optional()}).strict(),llmVisibleParams:{type:"object",properties:{nodeId:{type:"string"},input:{}},required:["nodeId"],additionalProperties:!1},policy:vi,dispatch:(e,t,n)=>{if(n.invokeAgent===void 0)throw new we("invoke_agent","invokeAgent");return n.invokeAgent(e.nodeId,e.input)}}),Tn=[tg,ng,og,rg,ig,sg,ag,dg,ug,cg,lg,pg,fg],mg=Tn.map(e=>e.id).sort((e,t)=>e.localeCompare(t));import{randomUUID as hg}from"crypto";function Bt(e=new mt,t){if(t?.checkpointer!==void 0&&e instanceof mt)throw new Error("createCliHost: a checkpointer requires an explicit durable RunStore (the checkpointer must reconstruct from the same store the run persists to)");return{clock:{now:()=>new Date().toISOString()},ids:{newId:()=>hg()},store:e,checkpointer:t?.checkpointer??ii(e),newAbortController:()=>new AbortController,setTimer:(n,o)=>{let r=setTimeout(o,n);return()=>{clearTimeout(r)}}}}async function xo(e={}){let t=e.host??Bt(),n=e.providers??ve(),o=await Xr(),r=wi({tools:Tn,host:{}}),i={resolveProvider:n.resolveProvider,keyFor:n.keyFor,registry:r,tools:Tn,sleep:s=>new Promise(a=>setTimeout(a,s)),now:()=>Date.now()};return new Mn({host:t,executor:hi({sandbox:o,agent:i,humanGate:{}})})}function nd(e){return{load:t=>Promise.resolve(ft(e.loadRunEvents(t)))}}function Ii(e){let t=e?.trim();return t!==void 0&&t!==""?{comment:t}:{}}function Si(e){return{decision:"approved",decidedBy:"cli",...Ii(e)}}function Ei(e){return{decision:"rejected",decidedBy:"cli",...Ii(e)}}function Ci(e,t){return{decision:"input_provided",decidedBy:"cli",payload:e,...Ii(t)}}function gg(e){try{return JSON.parse(e)}catch{return e}}function od(e){let t=[e.approve===!0,e.reject===!0,e.input!==void 0].filter(Boolean).length;return t===0?{ok:!1,error:"specify one of --approve, --reject, or --input"}:t>1?{ok:!1,error:"--approve, --reject, and --input are mutually exclusive"}:e.input!==void 0?e.comment!==void 0?{ok:!1,error:"--comment is not valid with --input (the input payload carries the data)"}:{ok:!0,decision:Ci(gg(e.input))}:e.approve===!0?{ok:!0,decision:Si(e.comment)}:{ok:!0,decision:Ei(e.comment)}}function vo(e){return e.json||e.ci||!e.stdoutIsTty?"plain":"tui"}function Io(e){let t=e.CI;return t!==void 0&&t!==""&&t!=="false"&&t!=="0"}import{confirm as yg,isCancel as wg,note as _g,text as bg}from"@clack/prompts";var kg={note:(e,t)=>{_g(e,t)},confirm:e=>yg(e),text:e=>bg(e),isCancel:wg},xg={approval:"Approval gate",review:"Review gate",input:"Input gate"};function vg(e){let t=[e.message.trim()===""?"(no message)":e.message];return e.expiresAt!==void 0&&t.push("",`Expires at ${e.expiresAt} \u2014 auto-${e.timeoutAction??"reject"} on timeout`),t.join(`
|
|
19
|
+
`)}function rd(e=kg){return{prompt:async t=>{if(e.note(vg(t),`\u23F8 ${xg[t.gateType]} \xB7 ${t.nodeId}`),t.gateType==="input"){let r=await e.text({message:"Enter value",placeholder:""});return e.isCancel(r)?null:Ci(r)}let n=await e.confirm({message:"Approve?",active:"Approve",inactive:"Reject"});if(e.isCancel(n))return null;if(n)return Si();let o=await e.text({message:"Reason for rejection (optional)",placeholder:""});return e.isCancel(o)?null:Ei(o)}}}function So(e,t){return vo({stdoutIsTty:e.stdoutIsTty,json:t.json,ci:Io(e.env)})==="tui"?rd():void 0}import{render as Og}from"ink";import{createElement as Pg}from"react";import{Box as Wt,Text as Jt}from"ink";import{useSyncExternalStore as Mg}from"react";var Ai=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function id(e){let t=Ai.length,n=Number.isFinite(e)?(Math.trunc(e)%t+t)%t:0;return Ai[n]??Ai[0]}function Eo(e){switch(e){case"pending":return"\u25CB";case"running":return"\u25D0";case"completed":return"\u2713";case"failed":return"\u2717";case"skipped":return"\u2298";case"retrying":return"\u21BB"}}function sd(e){switch(e){case"pending":return"gray";case"running":return"cyan";case"completed":return"green";case"failed":return"red";case"skipped":return"gray";case"retrying":return"yellow"}}function Co(e){return`$${(e/1e8).toFixed(4)}`}function Ao(e){let t=Math.max(0,e);if(t<1e3)return`${Math.round(t)}ms`;let n=t/1e3;if(n<59.95)return`${n.toFixed(1)}s`;let o=Math.round(n),r=Math.floor(o/60),i=o%60;return`${r}m${String(i).padStart(2,"0")}s`}function Mo(e){return`\u2191${e.input} \u2193${e.output}`}function Rn(e,t){return e?{color:t}:{}}function Mi(e){return e?{dimColor:!0}:{}}function To(e){return e.status==="completed"&&e.durationMs!==void 0?` (${Ao(e.durationMs)})`:e.status==="failed"&&e.errorCode!==void 0?` \u2014 ${e.errorCode}`:e.status==="retrying"&&e.attempt!==void 0?` (retry ${e.attempt})`:""}function dd(){return{nodeOrder:[],nodes:{},activeModel:void 0,activeTokens:"",toolLines:[],cumulativeCostMicrocents:0,gapDetected:!1,warnings:[]}}function pe(e,t,n){let o=[...e,t];return o.length>n?o.slice(o.length-n):o}function Ig(e,t){let n=e+t;return n.length>4e3?n.slice(n.length-4e3):n}function ad(e){return e===void 0?{}:{attempt:e}}function Ht(e,t,n){let o=e.nodes[t],r={...o,nodeId:t,...n};return{nodes:{...e.nodes,[t]:r},nodeOrder:o===void 0?[...e.nodeOrder,t]:e.nodeOrder}}function Sg(e,t){let n=t.sequenceNumber,o=e.lastSequenceNumber;return o!==void 0&&n>o+1?{apply:!0,patch:{lastSequenceNumber:n,gapDetected:!0,warnings:pe(e.warnings,`event gap: #${o} \u2192 #${n} (some events were not observed)`,6)}}:o!==void 0&&n<=o?{apply:!1,patch:{lastSequenceNumber:o,gapDetected:!0,warnings:pe(e.warnings,`event out of order: #${n} after #${o} (ignored)`,6)}}:{apply:!0,patch:{lastSequenceNumber:n,gapDetected:e.gapDetected,warnings:e.warnings}}}function Eg(e,t=80){let n=e.replace(/\s+/g," ").trim(),o=[...n];return o.length>t?`${o.slice(0,t-1).join("")}\u2026`:n}function Cg(e,t){let n=t.nodeId!==e.activeNodeId,o=e.nodes[t.nodeId]===void 0?Ht(e,t.nodeId,{status:"running"}):{};return{...e,...o,activeNodeId:t.nodeId,activeModel:t.model,activeTokens:Ig(n?"":e.activeTokens,t.token)}}function ud(e,t){let n=Sg(e,t),o={...e,...n.patch};if(!n.apply)return o;switch(t.type){case"run:started":return{...o,runId:t.runId};case"node:started":return{...o,...Ht(o,t.nodeId,{status:"running",nodeType:t.nodeType,...ad(t.attemptNumber)}),activeNodeId:t.nodeId,activeModel:void 0,activeTokens:""};case"agent:token":return Cg(o,t);case"agent:tool_call":return{...o,toolLines:pe(o.toolLines,`\u2192 ${t.toolId}`,8)};case"agent:tool_result":{let r=t.success?"\u2713":"\u2717",i=Eg(t.outputSummary),s=i===""?`${r} ${t.toolId}`:`${r} ${t.toolId}: ${i}`;return{...o,toolLines:pe(o.toolLines,s,8)}}case"agent:file_patch_proposed":return{...o,toolLines:pe(o.toolLines,`\u270E patch proposed (${t.patches.length} file${t.patches.length===1?"":"s"})`,8)};case"cost:updated":return{...o,cumulativeCostMicrocents:t.cumulativeCostMicrocents};case"node:completed":return{...o,...Ht(o,t.nodeId,{status:"completed",durationMs:t.durationMs}),...t.cumulativeCostMicrocents===void 0?{}:{cumulativeCostMicrocents:t.cumulativeCostMicrocents}};case"node:failed":return{...o,...Ht(o,t.nodeId,{status:"failed",errorCode:t.error.code,...ad(t.attemptNumber)})};case"node:skipped":return{...o,...Ht(o,t.nodeId,{status:"skipped"})};case"node:retrying":return{...o,...Ht(o,t.nodeId,{status:"retrying",attempt:t.attemptNumber}),warnings:pe(o.warnings,`${t.nodeId} retrying after attempt ${t.attemptNumber} (${t.error.code})`,6)};case"media_job:submitted":return{...o,toolLines:pe(o.toolLines,`\u29D7 media job (${t.modality}) submitted`,8)};case"human_gate:paused":return{...o,warnings:pe(o.warnings,`gate "${t.gateId}" (${t.gateType}) awaiting input`,6)};case"human_gate:resumed":return{...o,warnings:pe(o.warnings,`gate resumed: ${t.decision}`,6)};case"budget:warning":return{...o,warnings:pe(o.warnings,`budget ${t.thresholdPct}% spent`,6)};case"budget:paused":return{...o,warnings:pe(o.warnings,`budget cap reached at ${t.nodeId} \u2014 run paused`,6)};case"run:completed":return{...o,summary:{outcome:"completed",totalCostMicrocents:t.totalCostMicrocents,totalTokens:t.totalTokensUsed,durationMs:t.durationMs},cumulativeCostMicrocents:t.totalCostMicrocents};case"run:failed":return{...o,summary:{outcome:"failed",errorCode:t.error.code,errorMessage:t.error.message}};case"run:cancelled":return{...o,summary:{outcome:"cancelled"}};case"run:paused":return{...o,summary:{outcome:"paused",pausedGateIds:t.gateIds}};case"run:timeout":return{...o,summary:{outcome:"failed",errorMessage:`run timed out after ${t.elapsedMs}ms (limit ${t.timeoutMs}ms)`},warnings:pe(o.warnings,`run timed out (${t.elapsedMs}ms)`,6)};default:return o}}import{jsx as ht,jsxs as zt}from"react/jsx-runtime";function Tg(e){let{node:t,tick:n,useColor:o}=e,r=t.status==="running"?id(n):Eo(t.status);return zt(Jt,{...Rn(o,sd(t.status)),children:[r," ",t.nodeId,To(t)]})}function cd(e){let{state:t,tick:n,color:o}=Mg(e.store.subscribe,e.store.getSnapshot),r=t.activeNodeId===void 0?void 0:t.nodes[t.activeNodeId],i=t.activeTokens===""?[]:t.activeTokens.split(`
|
|
20
|
+
`).slice(-6);return zt(Wt,{flexDirection:"column",children:[ht(Wt,{flexDirection:"column",children:t.nodeOrder.map(s=>{let a=t.nodes[s];return a===void 0?null:ht(Tg,{node:a,tick:n,useColor:o},s)})}),r!==void 0&&i.length>0?zt(Wt,{flexDirection:"column",marginTop:1,children:[zt(Jt,{...Rn(o,"cyan"),children:["\u258C ",r.nodeId,t.activeModel===void 0?"":` \xB7 ${t.activeModel}`]}),i.map((s,a)=>ht(Jt,{...Mi(o),wrap:"truncate-end",children:s},a))]}):null,t.toolLines.length>0?ht(Wt,{flexDirection:"column",marginTop:1,children:t.toolLines.map((s,a)=>ht(Jt,{...Mi(o),wrap:"truncate-end",children:s},a))}):null,t.warnings.length>0?ht(Wt,{flexDirection:"column",marginTop:1,children:t.warnings.map((s,a)=>zt(Jt,{...Rn(o,"yellow"),wrap:"truncate-end",children:["\u26A0 ",s]},a))}):null,ht(Wt,{marginTop:1,children:zt(Jt,{...Rn(o,"gray"),children:["cost ",Co(t.cumulativeCostMicrocents),t.summary?.totalTokens===void 0?"":` \xB7 ${Mo(t.summary.totalTokens)}`]})})]})}function ld(e){let t=e.summary,n=[],r=[(()=>{switch(t?.outcome){case"completed":return"run completed";case"failed":return`run failed${t.errorCode===void 0?"":` (${t.errorCode})`}`;case"cancelled":return"run cancelled";case"paused":return`run paused${t.pausedGateIds===void 0||t.pausedGateIds.length===0?"":` at gate ${t.pausedGateIds.join(", ")}`}`;default:return"run ended"}})()];t?.durationMs!==void 0&&r.push(Ao(t.durationMs)),r.push(`cost ${Co(t?.totalCostMicrocents??e.cumulativeCostMicrocents)}`),t?.totalTokens!==void 0&&r.push(Mo(t.totalTokens)),n.push(r.join(" \xB7 ")),t?.errorMessage!==void 0&&n.push(` ${t.errorMessage}`);for(let i of e.nodeOrder){let s=e.nodes[i];s!==void 0&&n.push(` ${Eo(s.status)} ${i}${To(s)}`)}return`${n.join(`
|
|
21
|
+
`)}
|
|
22
|
+
`}var Rg=new Set(["agent:token","agent:tool_call","agent:tool_result","agent:file_patch_proposed","cost:updated"]);function pd(e){let t=new Set,n=dd(),o=0,r=!1,i={state:n,tick:o,color:e},s=()=>{i={state:n,tick:o,color:e};for(let d of t)d();r=!1},a=()=>n.summary===void 0&&n.nodeOrder.some(d=>n.nodes[d]?.status==="running");return{subscribe:d=>(t.add(d),()=>{t.delete(d)}),getSnapshot:()=>i,apply:d=>{n=ud(n,d),Rg.has(d.type)?r=!0:s()},tick:()=>{o+=1,(r||a())&&s()},flush:s,summaryText:()=>ld(n)}}var fd=80;function md(e){let t=e.stdout??process.stdout,n=pd(e.color),o=e.mount??(u=>Og(Pg(cd,{store:u}),{stdout:t,exitOnCtrlC:!1,patchConsole:!1,maxFps:Math.max(1,Math.round(1e3/fd))})),r,i,s=()=>{let u=setInterval(()=>{n.tick()},fd);u.unref();try{i=o(n)}catch(p){throw clearInterval(u),p}r=u},a=async()=>{if(r!==void 0&&(clearInterval(r),r=void 0),i!==void 0){let u=i;i=void 0,u.unmount(),await u.waitUntilExit()}};s();let d=!1;return{onEvent:u=>{n.apply(u)},suspend:async()=>{n.flush(),await a()},resume:()=>{!d&&i===void 0&&s()},finalize:async()=>{if(!d){d=!0,n.flush();try{await a()}finally{(e.writeSummary??(p=>{t.write(p)}))(n.summaryText())}}}}}function hd(e){return{onEvent:t=>{e.writeOut(`${JSON.stringify(t)}
|
|
23
|
+
`)}}}function gd(e){return{onEvent:t=>{let n=Ng(t);n!==void 0&&e.writeOut(`${n}
|
|
24
|
+
`)}}}function Ng(e){switch(e.type){case"run:started":return`> run ${e.runId} started`;case"node:started":return` - ${e.nodeId} ...`;case"node:completed":return` ok ${e.nodeId}`;case"node:failed":return` FAIL ${e.nodeId}: ${e.error.code}`;case"human_gate:paused":return` paused at gate ${e.gateId} (${e.gateType})`;case"run:completed":return"done: run completed";case"run:failed":return`done: run failed (${e.error.code})`;case"run:cancelled":return"done: run cancelled";default:return}}function Ro(e,t){return vo({stdoutIsTty:e.stdoutIsTty,json:t.json,ci:Io(e.env)})==="tui"?md({color:t.color}):t.json?hd(e):gd(e)}async function Oo(e){let{engine:t,handle:n,makeRenderer:o,gatePrompter:r,io:i}=e,s,a=!1,d=new Set,u=()=>{a&&process.exit(E.workflowFailed),a=!0,n.cancel()};process.on("SIGINT",u);let p;try{p=o();for await(let _ of n.events){if(p.onEvent(_),s=jg(s,_),_.type==="human_gate:paused"&&r!==void 0){d.add(_.gateId),await $g(t,n,p,r,_,i);continue}if(_.type==="run:paused"&&Dg(_,r!==void 0,d))break}}finally{s===void 0&&n.cancel();try{await p?.finalize?.()}catch(_){i.writeErr(`renderer teardown failed: ${_ instanceof Error?_.message:String(_)}
|
|
25
|
+
`)}process.removeListener("SIGINT",u)}return s}async function $g(e,t,n,o,r,i){let s;await n.suspend?.();try{s=await o.prompt(r)}finally{try{await n.resume?.()}catch(a){i.writeErr(`failed to restore the live view after the gate prompt: ${a instanceof Error?a.message:String(a)}
|
|
26
|
+
`)}}if(s===null){t.cancel();return}try{await e.resume(r.runId,r.gateId,s)}catch(a){if(a instanceof U&&a.code==="run_already_terminal")return;throw a}}function Dg(e,t,n){if(!t)return!0;let o=(e.pendingMediaJobNodeIds?.length??0)>0,r=e.gateIds.some(i=>!n.has(i));return o||r}function Po(e){switch(e){case"completed":return E.success;case"paused":return E.gatePaused;default:return E.workflowFailed}}function jg(e,t){switch(t.type){case"run:completed":return"completed";case"run:failed":return"failed";case"run:cancelled":return"cancelled";case"run:paused":return"paused";default:return e}}var Ug=new Set(["completed","failed","cancelled"]);async function wd(e,t){let n=od(e);if(!n.ok)throw new m("invalid_invocation",n.error);let o=n.decision,{homeDir:r}=ne({cwd:t.global.cwd,configPath:t.global.configPath}),i;try{i=(t.openDb??He)(r)}catch(s){throw new m("invalid_invocation",`could not open the run history database: ${s instanceof Error?s.message:String(s)}`,{cause:s})}try{let s=cr(i.db,e.runId);if(s===void 0)throw new m("invalid_invocation",`no run found with id ${e.runId}`);let a=Fg(s.workflowDefinitionSnapshot,e.runId),d=Hg(s.inputJson,e.runId);Wg(d,e.runId);let u=sn(i.db,{uuid:()=>Lg(),now:()=>Date.now(),workflow:{slug:a.workflow.id,name:a.workflow.name??a.workflow.id,definitionJson:s.workflowDefinitionSnapshot}}),p=nd(u),_;try{_=await p.load(e.runId)}catch(be){throw new m("invalid_invocation",`the persisted event log for run ${e.runId} could not be read`,{cause:be})}if(_===void 0)throw new m("invalid_invocation",`run ${e.runId} has no resumable state`);let v=Gg(_,_.runStatus,e.gate);if(v.kind==="invalid")throw new m("invalid_invocation",v.message);if(v.kind==="idempotent")return t.io.writeOut(`${v.message}
|
|
27
|
+
`),E.success;let V=t.providers??ve(t.io.env),Z=await(t.buildEngine??xo)({providers:V,host:Bt(u,{checkpointer:p})}),_e;try{_e=await Z.resumeFromCheckpoint({runId:e.runId,workflow:a,inputs:d,gateId:v.gateId,decision:o})}catch(be){throw be instanceof U?new m("invalid_invocation",`cannot resume run ${e.runId}: ${be.message}`,{cause:be}):be}let De=await Oo({engine:Z,handle:_e,makeRenderer:()=>(t.selectRenderer??Ro)(t.io,t.global),gatePrompter:(t.selectGatePrompter??So)(t.io,t.global),io:t.io});return De===void 0?(t.io.writeOut(`run ${e.runId} already settled; nothing to resume
|
|
28
|
+
`),E.success):Po(De)}finally{i.close()}}function Gg(e,t,n){if(Ug.has(t))return{kind:"idempotent",message:`run ${t}; nothing to resume`};let o=e.pendingGates.filter(a=>!a.isBudgetGate),r=new Set(e.resolvedGateIds);if(n!==void 0)return o.some(a=>a.gateId===n)?{kind:"resume",gateId:n}:r.has(n)?{kind:"idempotent",message:`gate ${n} already resolved`}:{kind:"invalid",message:`no pending gate ${n} on run${yd(o)}`};if(o.length===0)return r.size>0?{kind:"idempotent",message:"the run has no pending human gate (already resolved)"}:{kind:"invalid",message:"the run is not paused at a human gate"};let[i,...s]=o;return s.length===0&&i!==void 0?{kind:"resume",gateId:i.gateId}:{kind:"invalid",message:`more than one gate is pending \u2014 pass --gate <gateId>:${yd(o)}`}}function yd(e){return e.length===0?"":` (pending: ${e.map(t=>t.gateId).join(", ")})`}function Fg(e,t){try{return Hn.parse(JSON.parse(e))}catch(n){throw new m("invalid_invocation",`the stored workflow snapshot for run ${t} could not be parsed`,{cause:n})}}function Bg(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Hg(e,t){let n;try{n=JSON.parse(e)}catch(o){throw new m("invalid_invocation",`the stored inputs for run ${t} could not be parsed`,{cause:o})}if(!Bg(n))throw new m("invalid_invocation",`the stored inputs for run ${t} are not a JSON object`);return n}function Wg(e,t){let n=Object.keys(e).filter(o=>ws.safeParse(e[o]).success);if(n.length>0)throw new m("invalid_invocation",`run ${t} has secret input(s) [${n.join(", ")}] that are not persisted in plaintext, so a cross-process resume cannot restore them \u2014 re-run the workflow instead of resuming.`)}function No(e){let t=ft(e);if(t===void 0)return[];let n=t.pendingGates.filter(i=>!i.isBudgetGate);if(n.length===0)return[];let o=new Map;for(let i of e)i.type==="human_gate:paused"&&o.set(i.gateId,i);let r=[];for(let i of n){let s=o.get(i.gateId);s!==void 0&&r.push({gateId:i.gateId,nodeId:i.nodeId,gateType:s.gateType,message:s.message,...s.expiresAt===void 0?{}:{expiresAt:s.expiresAt}})}return r}function Ve(e,t){for(let n of t)e.writeOut(`${JSON.stringify(n)}
|
|
29
|
+
`)}function Ke(e,t=He){let n;try{n=t(e)}catch(o){throw new m("invalid_invocation",`could not open the run history database: ${o instanceof Error?o.message:String(o)}`,{cause:o})}return{reader:Zn(n.db),close:n.close}}function _d(e,t){let{homeDir:n}=ne({cwd:t.global.cwd,configPath:t.global.configPath}),{reader:o,close:r}=Ke(n,t.openDb);try{let i=Jg(o,e.runId).flatMap(s=>No(o.loadRunEvents(s)).map(a=>({runId:s,...a})));return t.global.json?(Ve(t.io,i),E.success):(zg(t.io,i,e.runId),E.success)}finally{r()}}function Jg(e,t){if(t===void 0)return e.listActiveRuns().filter(o=>o.status==="paused").map(o=>o.id);let n=e.loadRun(t);if(n===void 0)throw new m("invalid_invocation",`no run found with id ${t}`);return n.status==="paused"?[n.id]:[]}function zg(e,t,n){if(t.length===0){e.writeOut(n===void 0?`No pending human gates.
|
|
30
|
+
`:`Run ${n} has no pending human gate.
|
|
31
|
+
`);return}e.writeOut(`Pending human gates (${t.length}):
|
|
32
|
+
`);for(let o of t){let r=o.message===""?"":` "${o.message}"`;e.writeOut(` ${o.runId} ${o.gateId} ${o.gateType} node=${o.nodeId}${r}
|
|
33
|
+
`)}}import{readFileSync as Vg,readdirSync as Kg,statSync as qg}from"fs";import{basename as Xg,join as bd,relative as Yg}from"path";var Zg=[".relavium.yaml",".relavium.yml",".agent.yaml",".agent.yml",".yaml",".yml"];function Qg(e){for(let t of Zg)if(e.endsWith(t))return e.slice(0,-t.length);return e}function kd(e){let t=bd(e.projectConfigDir,e.kind),n;try{n=Kg(t,{withFileTypes:!0}).filter(r=>r.isFile()||r.isSymbolicLink()).map(r=>r.name).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"))}catch(r){if(xd(r)==="ENOENT")return[];throw new m("invalid_invocation",`could not read the ${e.kind} catalog at '${t}'.`,{cause:r})}return n.map(r=>ey(bd(t,r),e.cwd,e.kind)).sort((r,i)=>r.slug.localeCompare(i.slug))}function $o(e,t,n){return{slug:Qg(Xg(e)),name:void 0,tags:[],path:t,valid:!1,error:n}}function ey(e,t,n){let o=Yg(t,e),r;try{let i=qg(e);if(!i.isFile())return $o(e,o,"not a regular file");if(i.size>Ie*4)return $o(e,o,"exceeds the size limit");r=Vg(e,"utf8")}catch(i){return $o(e,o,xd(i)==="EACCES"?"permission denied":"could not read the file")}try{if(n==="workflows"){let s=xn(r,{source:o});return{slug:s.workflow.id,name:s.workflow.name,tags:s.workflow.tags??[],path:o,valid:!0}}let i=Jr(r,{source:o});return{slug:i.id,name:i.name,tags:[],path:o,valid:!0}}catch(i){return $o(e,o,ty(i))}}function ty(e){return e instanceof ze||e instanceof ye?e.message:"could not parse the file"}function xd(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}var On="(untagged)";function Id(e,t){let{projectConfigDir:n,homeDir:o}=ne({cwd:t.global.cwd,configPath:t.global.configPath}),r=t.global.json;if(n===void 0)return r?t.io.writeErr(`no .relavium/ project found from ${t.global.cwd}
|
|
34
|
+
`):t.io.writeOut(`No .relavium/ project found from ${t.global.cwd}.
|
|
35
|
+
`),E.success;let i=e.agents?"agents":"workflows",s=(t.discoverCatalog??kd)({projectConfigDir:n,cwd:t.global.cwd,kind:i}),a=new Map;if(i==="workflows"&&s.some(u=>u.valid)){let{reader:u,close:p}=Ke(o,t.openDb);try{for(let _ of u.loadLatestRunPerWorkflow())a.set(_.slug,_.lastRun)}finally{p()}}let d=u=>u.valid?a.get(u.slug):void 0;return r?(Ve(t.io,s.map(u=>ny(u,i,d(u)))),E.success):(oy(t.io,s,i,d),E.success)}function ny(e,t,n){return{kind:t,slug:e.slug,name:e.name??null,tags:e.tags,path:e.path,valid:e.valid,...e.error===void 0?{}:{error:e.error},...t==="workflows"?{lastRun:n===void 0?null:{runId:n.id,status:n.status,completedAt:n.completedAt??null}}:{}}}function oy(e,t,n,o){let r=n==="workflows"?"Workflows":"Agents";if(t.length===0){e.writeOut(`No ${n} found under .relavium/${n}/.
|
|
36
|
+
`);return}if(e.writeOut(`${r} (${t.length}):
|
|
37
|
+
`),n==="agents"){for(let a of t)e.writeOut(` ${vd(a,void 0)}
|
|
38
|
+
`);return}let i=new Map;for(let a of t){let d=a.tags.length>0?a.tags:[On];for(let u of d){let p=i.get(u)??[];p.push(a),i.set(u,p)}}let s=[...i.keys()].sort((a,d)=>a===On?1:d===On?-1:a.localeCompare(d));for(let a of s){let d=a===On?On:`#${a}`;e.writeOut(` ${d}
|
|
39
|
+
`);for(let u of i.get(a)??[])e.writeOut(` ${vd(u,o(u)??null)}
|
|
40
|
+
`)}}function vd(e,t){let n=[e.slug];if(e.name!==void 0&&e.name!==e.slug&&n.push(`\u2014 ${e.name}`),t!==void 0&&n.push(`[last: ${t===null?"\u2014":t.status}]`),!e.valid){let o=e.error===void 0?"":`: ${e.error}`;n.push(`(invalid${o})`)}return n.join(" ")}function Sd(e,t){let{homeDir:n}=ne({cwd:t.global.cwd,configPath:t.global.configPath}),{reader:o,close:r}=Ke(n,t.openDb);try{let i=o.loadRun(e.runId);if(i===void 0)throw new m("invalid_invocation",`no run found with id ${e.runId}`);let s=o.loadRunEvents(e.runId);if(t.global.json)return Ve(t.io,s),E.success;t.io.writeOut(`run ${i.id} \u2014 ${i.status} (${s.length} event${s.length===1?"":"s"})
|
|
41
|
+
`);for(let a of s)t.io.writeOut(`${ry(a)}
|
|
42
|
+
`);return E.success}finally{r()}}function ry(e){let t=`[${e.sequenceNumber}] ${e.type}`,n="nodeId"in e&&typeof e.nodeId=="string"?` ${e.nodeId}`:"";return`${t}${n}${iy(e)}`}function iy(e){switch(e.type){case"human_gate:paused":return` \u2014 gate ${e.gateId} (${e.gateType})`;case"human_gate:resumed":return` \u2014 ${e.decision} by ${e.decidedBy}`;case"node:failed":case"run:failed":return` \u2014 ${e.error.code}`;case"node:retrying":return` \u2014 ${e.error.code} (attempt ${e.attemptNumber??1})`;case"run:completed":return" \u2014 completed";case"run:cancelled":return" \u2014 cancelled";default:return""}}var Ti={anthropic:{displayName:"Anthropic",baseUrl:"https://api.anthropic.com",testModel:"claude-haiku-4-5"},openai:{displayName:"OpenAI",baseUrl:"https://api.openai.com/v1",testModel:"gpt-5.4-mini"},gemini:{displayName:"Google Gemini",baseUrl:"https://generativelanguage.googleapis.com",testModel:"gemini-2.5-flash"},deepseek:{displayName:"DeepSeek",baseUrl:"https://api.deepseek.com",testModel:"deepseek-chat"}};function Do(e){let t=dn.safeParse(e);if(!t.success)throw new m("invalid_invocation",`unknown provider '${e}' \u2014 known providers: ${dn.options.join(", ")}.`);return t.data}function jo(e){if(e.name===void 0||e.name==="")throw new m("invalid_invocation",`\`relavium provider ${e.action}\` requires a provider name.`);return e.name}function sy(e){let t=e.store.list();if(t.length===0){e.io.writeOut("No providers registered. Add a key with `relavium provider set-key <name>`.\n");return}for(let n of t)e.io.writeOut(`${n.name} ${n.baseUrl} [${n.apiKeyKeychainRef?"key set":"no key"}]
|
|
43
|
+
`)}function ay(e,t){let n=Do(jo(e)),o=Ti[n],r=t.store.upsert({name:n,displayName:o.displayName,baseUrl:e.baseUrl===void 0?o.baseUrl:ly(e.baseUrl)});t.io.writeOut(`Registered provider '${n}' (${r.baseUrl}). Store a key with \`relavium provider set-key ${n}\`.
|
|
44
|
+
`)}async function dy(e,t){let n=Do(jo(e)),o=Ti[n],r=await t.readSecret(),i=bn(n);t.keychain.set(i,r),t.store.get(n)===void 0&&t.store.upsert({name:n,displayName:o.displayName,baseUrl:o.baseUrl}),t.store.setKeychainRef(n,i),t.io.writeOut(`Stored ${n} key ${Dr(r)} in the OS keychain.
|
|
45
|
+
`)}function uy(e,t){let n=Do(jo(e)),o=t.keychain.delete(bn(n));t.store.clearKeychainRef(n),t.io.writeOut(o?`Removed ${n} key from the OS keychain.
|
|
46
|
+
`:`No ${n} key was stored.
|
|
47
|
+
`)}async function cy(e,t){let n=Do(jo(e)),o=t.resolver.resolveProvider(n);if(o===void 0)throw new m("invalid_invocation",`no adapter for provider '${n}'.`);let r=t.resolver.keyFor(n),i=e.model??Ti[n].testModel;try{await o.generate({model:i,messages:[{role:"user",content:[{type:"text",text:"ping"}]}],maxTokens:1},r)}catch(s){let d=(s instanceof Error?s.message:String(s)).split(r).join(Dr(r));throw new m("invalid_invocation",`${n}: key test failed \u2014 ${d}`)}t.io.writeOut(`${n}: key works (${i}).
|
|
48
|
+
`)}function ly(e){let t;try{t=new URL(e)}catch{throw new m("invalid_invocation",`invalid base URL: '${e}'.`)}if(t.protocol!=="https:")throw new m("invalid_invocation",`base URL must be HTTPS, got '${e}'.`);return e}async function Ed(e,t){try{switch(e.action){case"list":sy(t);break;case"add":ay(e,t);break;case"set-key":await dy(e,t);break;case"remove-key":uy(e,t);break;case"test":await cy(e,t);break}return E.success}catch(n){throw n instanceof xe?new m("invalid_invocation",n.message,{cause:n}):n}}import{relative as _y}from"path";import{readFileSync as py,statSync as fy}from"fs";import{isAbsolute as Cd,join as Ri,resolve as my}from"path";var Ad=Ie;function Md(e,t){let n=hy(e,t);for(let r of n){let i=gy(r);if(i!==void 0)return{path:r,yaml:i}}let o=n.length>0?n.join(", "):"(no project .relavium/ found)";throw new m("invalid_invocation",`workflow '${e}' not found \u2014 looked for: ${o}.`)}function hy(e,t){if(Cd(e)||e.includes("/")||e.endsWith(".yaml")||e.endsWith(".yml"))return[Cd(e)?e:my(t.cwd,e)];if(t.projectConfigDir===void 0)return[];let o=Ri(t.projectConfigDir,"workflows");return[Ri(o,`${e}.relavium.yaml`),Ri(o,`${e}.yaml`)]}function gy(e){let t;try{t=fy(e)}catch(n){if(yy(n)==="ENOENT")return;throw new m("invalid_invocation",`workflow file '${e}' could not be read.`,{cause:n})}if(!t.isFile())throw new m("invalid_invocation",`workflow path '${e}' is not a regular file.`);if(t.size>Ad)throw new m("invalid_invocation",`workflow file '${e}' exceeds the ${Ad}-byte size limit.`);try{return py(e,"utf8")}catch(n){throw new m("invalid_invocation",`workflow file '${e}' could not be read.`,{cause:n})}}function yy(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}function Td(e){let t={};for(let n of e){let o=n.indexOf("=");if(o<=0)throw new m("invalid_invocation",`--input must be key=value (got '${n}').`);let r=n.slice(0,o);if(Object.hasOwn(t,r))throw new m("invalid_invocation",`--input '${r}' was given more than once.`);t[r]=n.slice(o+1)}return t}function Rd(e,t){let n=e.workflow.inputs??[],o=new Set(n.map(i=>i.name));for(let i of Object.keys(t))if(!o.has(i))throw new m("invalid_invocation",`unknown input '${i}'.`);let r={};for(let i of n){let s=t[i.name];if(s===void 0){if(i.required===!0&&i.default===void 0)throw new m("invalid_invocation",`missing required input '${i.name}'.`);continue}r[i.name]=wy(i.name,i.type,s)}return r}function wy(e,t,n){switch(t){case"number":{let o=n.trim();if(o==="")throw new m("invalid_invocation",`input '${e}' must be a number (got an empty value).`);let i=[...o].every(s=>"0123456789.eE+-".includes(s))?Number(o):Number.NaN;if(!Number.isFinite(i))throw new m("invalid_invocation",`input '${e}' must be a decimal number (got '${n}').`);return i}case"boolean":{if(n==="true"||n==="1")return!0;if(n==="false"||n==="0")return!1;throw new m("invalid_invocation",`input '${e}' must be a boolean (true/false or 1/0).`)}default:return n}}async function Od(e,t){let n=t.buildEngine??xo,o=t.providers??ve(t.io.env),{projectConfigDir:r,homeDir:i}=ne({cwd:t.global.cwd,configPath:t.global.configPath}),s=Md(e.workflow,{cwd:t.global.cwd,projectConfigDir:r}),a;try{a=xn(s.yaml,{source:_y(t.global.cwd,s.path)})}catch(p){throw p instanceof ye?new m("invalid_invocation",p.message,{cause:p}):p}let d=Rd(a,Td(e.input));for(let p of ga(a))o.keyFor(p);let u;try{u=t.openRunStore?.(a,i)}catch(p){throw new m("invalid_invocation",`could not open the run history database: ${p instanceof Error?p.message:String(p)}`,{cause:p})}try{let p=await n(u===void 0?{providers:o}:{providers:o,host:Bt(u.store)}),_=p.start({workflow:a,inputs:d}),v=await Oo({engine:p,handle:_,makeRenderer:()=>(t.selectRenderer??Ro)(t.io,t.global),gatePrompter:(t.selectGatePrompter??So)(t.io,t.global),io:t.io});return Po(v)}finally{u?.close()}}function Pd(e){let{homeDir:t}=ne({cwd:e.global.cwd,configPath:e.global.configPath}),{reader:n,close:o}=Ke(t,e.openDb);try{let r=n.listActiveRuns().map(i=>({run:i,steps:n.loadStepExecutions(i.id),pendingGates:i.status==="paused"?No(n.loadRunEvents(i.id)):[]}));if(e.global.json)return Ve(e.io,r.map(by)),E.success;if(r.length===0)return e.io.writeOut(`No active runs.
|
|
49
|
+
`),E.success;for(let i of r)ky(e.io,i);return E.success}finally{o()}}function by(e){return{runId:e.run.id,workflowId:e.run.workflowId,status:e.run.status,startedAt:e.run.startedAt??null,steps:e.steps.map(t=>({nodeId:t.nodeId,nodeType:t.nodeType,status:t.status,attemptNumber:t.attemptNumber,startedAt:t.startedAt??null,completedAt:t.completedAt??null,durationMs:t.durationMs??null,costMicrocents:t.costMicrocents})),pendingGates:e.pendingGates.map(t=>({gateId:t.gateId,nodeId:t.nodeId,gateType:t.gateType,message:t.message,...t.expiresAt===void 0?{}:{expiresAt:t.expiresAt}}))}}function ky(e,t){e.writeOut(`run ${t.run.id} \u2014 ${t.run.status} (workflow ${t.run.workflowId})
|
|
50
|
+
`),t.steps.length===0&&e.writeOut(` (no node activity recorded yet)
|
|
51
|
+
`);for(let n of t.steps){let o=n.attemptNumber>1?` (attempt ${n.attemptNumber})`:"";e.writeOut(` ${n.status.padEnd(9)} ${n.nodeId} [${n.nodeType}]${o}
|
|
52
|
+
`)}for(let n of t.pendingGates){let o=n.message===""?"":` \u2014 "${n.message}"`;e.writeOut(` \u23F8 pending gate ${n.gateId} (${n.gateType}) at ${n.nodeId}${o}
|
|
53
|
+
`)}}var vy=[{name:"create",summary:"Scaffold a new workflow or agent via an interactive wizard.",landsIn:"workstream 2.J"},{name:"import <path>",summary:"Import an external workflow/agent YAML into the project.",landsIn:"workstream 2.J"},{name:"export <id>",summary:"Export a workflow/agent to a portable YAML (secrets stripped).",landsIn:"workstream 2.J"},{name:"agent",summary:"Manage and run agents.",landsIn:"workstreams 2.M\u20132.Q"},{name:"init",summary:"Initialize a .relavium/ directory in the current project.",landsIn:"a later workstream"}];function Nd(e,t){Iy(e,t),Sy(e,t),My(e,t),Ey(e,t),Cy(e,t),Ay(e,t);for(let n of vy)e.command(n.name).description(n.summary).action(()=>{throw new m("not_implemented",`\`relavium ${Ry(n.name)}\` is not available yet (lands in ${n.landsIn}).`)})}function Iy(e,t){let n=e.command("run <workflow>").description("Execute a workflow (path or id), streaming progress.").option("--input <key=value...>","a workflow input (repeatable)");if(t===void 0){n.action(()=>{throw new m("not_implemented","`relavium run` requires the CLI runtime context.")});return}n.action(async(o,r)=>{t.result.exitCode=await Od({workflow:o,input:r.input??[]},{io:t.io,global:t.global,openRunStore:ya,providers:ve(t.io.env,co())})})}function Sy(e,t){let n=e.command("gate [runId]").description("Resolve a pending human gate (approve / reject / input).").option("--approve","approve the gate").option("--reject","reject the gate").option("--comment <text>","a decision comment (with --approve / --reject)").option("--input <value>","provide input for a gate_type=input gate (JSON, else a raw string)").option("--gate <gateId>","which pending gate to resolve (required when more than one is pending)"),o=n.command("list [runId]").description("List pending human gates (all paused runs, or one run).");if(t===void 0){n.action(()=>{throw new m("not_implemented","`relavium gate` requires the CLI runtime context.")}),o.action(()=>{throw new m("not_implemented","`relavium gate list` requires the CLI runtime context.")});return}n.action(async(r,i)=>{if(r===void 0)throw new m("invalid_invocation","`relavium gate` requires a <runId> (or use `relavium gate list`).");t.result.exitCode=await wd({runId:r,...i},{io:t.io,global:t.global,providers:ve(t.io.env,co())})}),o.action(r=>{t.result.exitCode=_d(r===void 0?{}:{runId:r},{io:t.io,global:t.global})})}function Ey(e,t){let n=e.command("list").description("List discovered workflows (or, with --agents, agents) in the current project.").option("--agents","list agents instead of workflows");if(t===void 0){n.action(()=>{throw new m("not_implemented","`relavium list` requires the CLI runtime context.")});return}n.action(o=>{t.result.exitCode=Id({agents:o.agents??!1},{io:t.io,global:t.global})})}function Cy(e,t){let n=e.command("logs <runId>").description("Print the persisted event stream for a past run.");if(t===void 0){n.action(()=>{throw new m("not_implemented","`relavium logs` requires the CLI runtime context.")});return}n.action(o=>{t.result.exitCode=Sd({runId:o},{io:t.io,global:t.global})})}function Ay(e,t){let n=e.command("status").description("Show active/paused runs and their per-node status.");if(t===void 0){n.action(()=>{throw new m("not_implemented","`relavium status` requires the CLI runtime context.")});return}n.action(()=>{t.result.exitCode=Pd({io:t.io,global:t.global})})}function My(e,t){let n=e.command("provider").description("Manage providers and API keys in the OS keychain."),o=n.command("list").description("List registered providers and whether a key is set."),r=n.command("add <name>").description("Register a provider.").option("--base-url <url>","override the provider base URL"),i=n.command("set-key <name>").description("Store a provider API key in the OS keychain (the key is read from stdin)."),s=n.command("remove-key <name>").description("Remove a provider API key from the OS keychain."),a=n.command("test <name>").description("Verify a provider key with a minimal live request.").option("--model <id>","model to test with (defaults to a cheap known model)");if(t===void 0){for(let u of[o,r,i,s,a])u.action(()=>{throw new m("not_implemented","`relavium provider` requires the CLI runtime context.")});return}let d=async u=>{t.result.exitCode=await Ty(t,p=>Ed(u,p))};o.action(async()=>{await d({action:"list"})}),r.action(async(u,p)=>{await d({action:"add",name:u,...p.baseUrl===void 0?{}:{baseUrl:p.baseUrl}})}),i.action(async u=>{await d({action:"set-key",name:u})}),s.action(async u=>{await d({action:"remove-key",name:u})}),a.action(async(u,p)=>{await d({action:"test",name:u,...p.model===void 0?{}:{model:p.model}})})}async function Ty(e,t){let{homeDir:n}=ne({cwd:e.global.cwd,configPath:e.global.configPath}),{db:o,close:r}=He(n);try{let i=co(),s={io:e.io,store:fr(o,{uuid:()=>xy(),now:()=>Date.now()}),keychain:i,resolver:ve(e.io.env,i),readSecret:wa};return await t(s)}finally{r()}}function Ry(e){return e.split(" ",1)[0]??e}var Py="0.1.0",Ny=`
|
|
54
|
+
Global options (usable anywhere on the command line):
|
|
55
|
+
--json emit machine-readable NDJSON output (disables the TUI)
|
|
56
|
+
--no-color disable colored output
|
|
57
|
+
--cwd <dir> run as if started in <dir>
|
|
58
|
+
--config <path> use an explicit config file
|
|
59
|
+
-v, --verbose print verbose diagnostics to stderr
|
|
60
|
+
-q, --quiet suppress non-essential output`;function $d(e,t){let n=new Oy;return n.name("relavium").description("Relavium \u2014 run agent workflows from the terminal.").version(Py,"-V, --version","output the version number").configureOutput({writeOut:o=>{e.writeOut(o)},writeErr:o=>{t?.suppressErrorOutput!==!0&&e.writeErr(o)}}).addHelpText("after",Ny),n.exitOverride(),Nd(n,t?.context),n}async function Dd(e,t){let{raw:n,rest:o,error:r}=ji(e),i={json:n.json===!0,verbose:n.verbose===!0};if(r!==void 0)return Kt(r,i,t),r.exitCode;let s;try{s=Li(n,process.cwd())}catch(u){return Kt(u,i,t),Vt(u).exitCode}let a={},d=$d(t,{suppressErrorOutput:i.json,context:{io:t,global:s,result:a}});if(!o.slice(2).some(u=>u!=="--"))return t.writeOut(d.helpInformation()),E.success;try{return await d.parseAsync([...o]),a.exitCode??E.success}catch(u){return u instanceof $y?(u.exitCode!==0&&i.json&&Kt(new m("invalid_invocation",Dy(u.message)),i,t),u.exitCode===0?E.success:E.invalidInvocation):(Kt(u,i,t),Vt(u).exitCode)}}function Dy(e){let t="error:";return e.startsWith(t)?e.slice(t.length).trimStart():e}var Lo=Ni();try{process.exitCode=await Dd(process.argv,Lo)}catch(e){Lo.writeErr(`relavium: a fatal internal error occurred.
|
|
61
|
+
`),Lo.env.RELAVIUM_DEBUG!==void 0&&e instanceof Error&&e.stack!==void 0&&Lo.writeErr(`${e.stack}
|
|
62
|
+
`),process.exitCode=E.workflowFailed}
|