relavium 0.1.0 → 0.1.1
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/CHANGELOG.md +76 -0
- package/README.md +109 -27
- package/dist/index.js +82 -39
- package/package.json +15 -4
package/dist/index.js
CHANGED
|
@@ -1,62 +1,105 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var ip=Object.defineProperty;var sp=(e,t)=>{for(var n in t)ip(e,n,{get:t[n],enumerable:!0})};var _={success:0,workflowFailed:1,invalidInvocation:2,gatePaused:3,chatEnded:4};function $a(){return{writeOut:e=>{process.stdout.write(e)},writeErr:e=>{process.stderr.write(e)},env:process.env,stdoutIsTty:process.stdout.isTTY===!0,stdinIsTty:process.stdin.isTTY===!0,stdin:process.stdin}}import{CommanderError as mk}from"commander";var ap={invalid_invocation:_.invalidInvocation,config_error:_.invalidInvocation,not_implemented:_.invalidInvocation,internal:_.workflowFailed},l=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=ap[t]}};function dp(e){return e instanceof l}function Wn(e){return dp(e)?{code:e.code,message:e.message,exitCode:e.exitCode}:{code:"internal",message:"An unexpected internal error occurred.",exitCode:_.workflowFailed}}var cp={"--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 ja(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=cp[s];if(a!==void 0){a(r);continue}let d=up(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 up(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:Da(r)}:(Na(e,r,i),{kind:"consumed",advance:0})}return t==="--cwd"||t==="--config"?n===void 0||n.startsWith("-")||n.trim()===""?{kind:"error",error:Da(t)}:(Na(e,t,n),{kind:"consumed",advance:1}):{kind:"skip"}}function Na(e,t,n){t==="--cwd"?e.cwd=n:e.config=n}function Da(e){return new l("invalid_invocation",`\`${e}\` requires a non-empty argument.`)}function lp(e){if(e.verbose===!0&&e.quiet===!0)throw new l("invalid_invocation","`--verbose` and `--quiet` cannot be combined.")}function pp(e){return e.quiet===!0?"quiet":e.verbose===!0?"verbose":"normal"}function La(e,t){return lp(e),{json:e.json===!0,color:e.color!==!1,cwd:e.cwd??t,configPath:e.config,verbosity:pp(e)}}function Hn(e,t,n){let o=Wn(e);t.json?n.writeErr(JSON.stringify({type:"error",code:o.code,message:o.message})+`
|
|
3
3
|
`):n.writeErr(`relavium: ${o.message}
|
|
4
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}
|
|
5
|
+
`)}import{Command as lk}from"commander";import{randomUUID as zx}from"crypto";var wi={};sp(wi,{agentSessions:()=>he,agents:()=>qo,llmProviders:()=>re,mediaObjects:()=>U,mediaReferences:()=>B,messages:()=>Sd,modelCatalog:()=>G,runCosts:()=>Ko,runEvents:()=>je,runs:()=>S,sessionMessages:()=>At,stepExecutions:()=>z,workflows:()=>ve});var Ua=["validation","content_filter","provider_auth","provider_rate_limit","provider_unavailable","tool_denied","tool_failed","budget_exceeded","run_timeout","turn_limit","cancelled","sandbox_error","internal"],To=["provider_rate_limit","provider_unavailable","tool_failed","sandbox_error"],Fa=["stop","length","tool_use","content_filter","error"],ei=["image","audio","video","document"],rn=["text","image","audio","video"],Be=["image","audio","video"],Oo=["chat","generative"],Vn={pollInitialMs:5e3,pollMaxMs:3e4,deadlineMs:18e5},Ga=["run","node","session","workspace"],Ba=["session","workspace"];var Wa=["agent","condition","tool","transform","input","output","loop","fan_out","fan_in","human_in_the_loop","subworkflow"],Ze=["anthropic","openai","gemini","deepseek"],sn=["sandboxed","project","full"],an=["local","cloud","managed"],Po=["fail","pause_for_approval","warn"];import{z as b}from"zod";import{z as Ye}from"zod";var $o="[a-z0-9]+(?:-[a-z0-9]+)*",Y=Ye.string().regex(new RegExp(`^${$o}$`),"must be kebab-case (lowercase alphanumerics, dash-separated)"),h=Ye.string().min(1),fp="[A-Za-z0-9_-]+",ti=Ye.string().regex(new RegExp(`^${fp}$`),"must be referenceable in {{ \u2026 }} (letters, digits, `_` or `-`)"),T=Ye.number().int().positive(),I=Ye.number().int().nonnegative(),No=/^[a-z][a-z0-9+.-]*:\/\/[^/?#]*@/i,Do=Ye.number().finite().min(0).max(2),Jn=Ye.record(Ye.string(),Ye.unknown()),jo=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 We=/^media:\/\/sha256-[0-9a-f]{64}$/,Ha={image:256*1024,audio:256*1024,video:0,document:0},cn={maxPartsPerMessage:16,maxInlineBytesPerMessage:2*1024*1024},Va=25*1024*1024,Ja=!0;function ue(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 ct=b.string().min(1).max(255).regex(/^[\w!#$%&'*+.^`|~-]+\/[\w!#$%&'*+.^`|~-]+$/,"must be a bare type/subtype MIME type"),mp=/^[A-Za-z0-9+/]+={0,2}$/;function ni(e){if(e.length===0||e.length%4!==0||!mp.test(e))return;let t=0;return e.endsWith("==")?t=2:e.endsWith("=")&&(t=1),e.length/4*3-t}var hp=(()=>{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 za(e){let t=ni(e);if(t===void 0)return;let n=i=>{let s=hp[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),c=e[i+3]==="="?0:n(e.codePointAt(i+3)??0),u=s<<18|a<<12|d<<6|c;r<t&&(o[r++]=u>>16&255),r<t&&(o[r++]=u>>8&255),r<t&&(o[r++]=u&255)}return o}var Uo=/^data:[^,]*;base64,/i;function zn(e){return Uo.test(e)}function un(e){return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer}function dn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ln(e){return e.kind==="base64"&&typeof e.data=="string"}function gp(e){let t=e.source;return e.type==="media"&&dn(t)&&t.kind==="url"}function yp(e,t){if(un(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(!dn(e))return!1;if(ln(e))return!0;for(let n of Object.values(e))t.push(n);return!1}function kt(e){try{let t=new Set,n=[e];for(;n.length>0;){let o=n.pop();if(typeof o=="string"){if(Uo.test(o))return!0;continue}if(!(typeof o!="object"||o===null||t.has(o))&&(t.add(o),yp(o,n)))return!0}return!1}catch{return!0}}function Fo(e){try{let t=new Set,n=[e];for(;n.length>0;){let o=n.pop();if(typeof o=="string"){if(Uo.test(o))return!0;continue}if(!(typeof o!="object"||o===null||t.has(o))&&(t.add(o),wp(o,n)))return!0}return!1}catch{return!0}}function wp(e,t){if(un(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(!dn(e))return!1;if(ln(e)||gp(e))return!0;for(let n of Object.values(e))t.push(n);return!1}function qa(e,t,n=[]){for(let[o,r]of[["name",e.name],["transcript",e.transcript]])r!==void 0&&Uo.test(r)&&t.addIssue({code:b.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 Ka(e,t){e.source.kind==="base64"&&t.addIssue({code:b.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:b.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 bp=b.object({kind:b.literal("base64"),data:h}),Xa=b.object({kind:b.literal("handle"),ref:b.string().regex(We,"must be a media://sha256-<64hex> handle")}),_p=b.object({kind:b.literal("url"),url:h}),Za=b.discriminatedUnion("kind",[bp,Xa,_p]),Ya=b.discriminatedUnion("kind",[Xa]),Qa=b.object({type:b.literal("media"),mimeType:ct,source:Ya,name:b.string().max(255).optional(),transcript:b.string().optional(),byteLength:I.optional(),durationMs:T.optional()});function ed(e,t){qa(e,t);let n=ue(e.mimeType);if(n===void 0){t.addIssue({code:b.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:b.ZodIssueCode.custom,message:`durationMs is audio/video metadata \u2014 a ${n} part must not carry it`,path:["durationMs"]})}var qn=Qa.superRefine(ed),Kn=b.object({type:b.literal("media"),mimeType:ct,source:Za,name:b.string().max(255).optional(),transcript:b.string().optional()}),td=b.object({type:b.literal("text"),text:b.string()}),nd=b.object({type:b.literal("tool_call"),id:h,name:h,args:b.unknown(),providerExecuted:b.boolean().optional()}),od=b.object({type:b.literal("tool_result"),toolCallId:h,result:b.unknown(),isError:b.boolean().optional(),providerExecuted:b.boolean().optional(),media:b.array(qn).optional()}),Sp=b.object({type:b.literal("reasoning"),text:b.string(),signature:b.string().optional(),redacted:b.boolean().optional()}),Go=b.discriminatedUnion("type",[td,nd,od,Sp,Kn]),vp=b.object({type:b.literal("reasoning"),text:b.string(),redacted:b.boolean().optional()}),oi=b.discriminatedUnion("type",[td,nd,od,vp,Qa]).superRefine((e,t)=>{if(e.type==="media"){Ka(e,t),ed(e,t);return}e.type==="tool_call"&&kt(e.args)&&t.addIssue({code:b.ZodIssueCode.custom,message:"media bytes (base64) may not cross a durable/event/IPC boundary; deInlineMedia must run first",path:["args"]}),e.type==="tool_result"&&kt(e.result)&&t.addIssue({code:b.ZodIssueCode.custom,message:"media bytes (base64) may not cross a durable/event/IPC boundary; deInlineMedia must run first",path:["result"]})});function ri(e,t,n=[]){qa(e,t,n);let o=ue(e.mimeType);if(o===void 0)return t.addIssue({code:b.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"&&!Ja)return t.addIssue({code:b.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=It(e.source.url);if(s===null)return t.addIssue({code:b.ZodIssueCode.custom,message:"media url source must be a valid HTTPS URL",path:[...n,"source","url"]}),0;if(s.hasCredentials)return t.addIssue({code:b.ZodIssueCode.custom,message:"media url source must not contain embedded credentials",path:[...n,"source","url"]}),0;if(Re(s.host))return t.addIssue({code:b.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=Ha[o];if(r===0)return t.addIssue({code:b.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=ni(e.source.data);return i===void 0?(t.addIssue({code:b.ZodIssueCode.custom,message:"source.data is not valid padded base64",path:[...n,"source","data"]}),0):i>r?(t.addIssue({code:b.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 Bo(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 Tk=b.object({kind:b.enum(Ba),id:h.max(255)});function rd(e,t){return e.some(n=>n.kind===t.kind&&n.id===t.id)}function xp(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(dn(e))for(let n of Object.values(e))t.push(n)}function kp(e){if(!dn(e)||e.type!=="media")return;let t=e.source,n=e.mimeType,o=e.byteLength;if(!dn(t)||t.kind!=="handle"||typeof t.ref!="string"||!We.test(t.ref)||typeof n!="string"||typeof o!="number")return;let r=ue(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 Ct(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=kp(i);s!==void 0&&!n.has(s.handle)&&(n.add(s.handle),t.push(s)),xp(i,r)}return t}function Re(e){let t=id(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=Tp(t);return o!==null&&Op(o)}let n=sd(t);return n===null?!1:n.startsWith("0.")||n.startsWith("127.")||n.startsWith("10.")||Cp(n)||n.startsWith("192.168.")||Ip(n)||n.startsWith("169.254.")}function Cp(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 Ip(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 id(e){let t=e;for(;t.endsWith(".");)t=t.slice(0,-1);return t}function Ep(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 Mp(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 sd(e){let t=e.split(".");if(t.length<1||t.length>4)return null;let n=[];for(let o of t){let r=Ep(o);if(r===null)return null;n.push(r)}return Mp(n)}function Rp(e){let t=e.lastIndexOf(":");if(t===-1||!e.slice(t+1).includes("."))return e;let n=sd(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 Ap(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 Tp(e){let t=Rp(e.split("%")[0]??e);if(t===null)return null;let n=Ap(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 Op(e){if(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)return!0;let t=e[0]===0&&e[1]===0&&e[2]===0&&e[3]===0;return t&&e[4]===0&&e[5]===65535||t&&e[4]===0&&e[5]===0||e[0]===100&&e[1]===65435&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===0?Re(Lo(e[6]??0,e[7]??0)):e[0]===8194?Re(Lo(e[1]??0,e[2]??0)):!1}function Lo(e,t){return`${e>>8}.${e&255}.${t>>8}.${t&255}`}var ad=/^https:\/\/([^/?#]+)/i;function Wo(e){let t=ad.exec(e);return t===null?!1:t[1]?.includes("@")??!1}function It(e){let t=ad.exec(e);if(t===null)return null;let n=t[1]??"";if(Pp(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:id(s.toLowerCase()),hasCredentials:r}}function Pp(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 ii(e,t,n){return Fo(e)?pn(e,t,new Map,n):e}function Ho(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function $p(e){let t=e.source;return e.type==="media"&&typeof e.mimeType=="string"&&Ho(t)&&typeof t.kind=="string"}async function Np(e,t,n){let o=e.source,r=e.mimeType;if(!Ho(o)||typeof r!="string")return e;let i=o.kind;if(i==="handle")return e;if(ue(r)===void 0)throw new Error(`deInlineMedia: unsupported media mimeType '${r}'`);let s=await Dp(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 Dp(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=za(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 pn(e,t,n,o){if(typeof e=="string"){if(zn(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(un(e))throw new Error("deInlineMedia: a raw binary buffer may not cross the durable boundary");let i=await jp(e,t,n,o);if(i!==null)return i.clone;if(!Ho(e))return e;if($p(e)){let d=await Np(e,t,o);return n.set(e,d),d}let s=e.source;if(e.type==="media"&&Ho(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(ln(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,c]of Object.entries(e))a[d]=await pn(c,t,n,o);return a}async function jp(e,t,n,o){if(Array.isArray(e)){let r=[];n.set(e,r);for(let i of e)r.push(await pn(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 pn(i,t,n,o),await pn(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 pn(i,t,n,o));return{clone:r}}return null}import{z as M}from"zod";var dd=M.enum(Ze),Lp=M.enum(["linear","exponential"]),fn=M.object({max:T,backoff:Lp,backoff_ms:T.optional(),retry_on:M.array(M.enum(To)).min(1).optional()}).strict(),Up=M.enum(["stdio","http","websocket","sse"]),Fp=["id","transport","command","args","env","url","allow_local_endpoint"];function Gp(e,t){for(let n of Fp)e[n]!==void 0&&t.addIssue({code:M.ZodIssueCode.custom,message:`'${n}' is not allowed with 'ref' \u2014 the [[mcp_servers]] registration provides it`,path:[n]})}function Bp(e,t){e.command||t.addIssue({code:M.ZodIssueCode.custom,message:"command is required for the 'stdio' transport",path:["command"]}),e.url!==void 0&&t.addIssue({code:M.ZodIssueCode.custom,message:"url is not used by the 'stdio' transport",path:["url"]}),e.allow_local_endpoint!==void 0&&t.addIssue({code:M.ZodIssueCode.custom,message:"allow_local_endpoint is not used by the 'stdio' transport (network transports only)",path:["allow_local_endpoint"]})}function Wp(e,t){e.url||t.addIssue({code:M.ZodIssueCode.custom,message:`url is required for the '${e.transport??"?"}' transport`,path:["url"]});for(let n of["command","args","env"])e[n]!==void 0&&t.addIssue({code:M.ZodIssueCode.custom,message:`${n} is not used by a network transport \u2014 it applies only to a stdio server process${n==="env"?" (network header-auth is a follow-up)":""}`,path:[n]});e.url!==void 0&&((e.transport==="websocket"?/^wss?:\/\//i.test(e.url):/^https?:\/\//i.test(e.url))||t.addIssue({code:M.ZodIssueCode.custom,message:`url scheme is invalid for the '${e.transport??"?"}' transport (http/sse \u2192 http(s), websocket \u2192 ws(s))`,path:["url"]}),No.test(e.url)&&t.addIssue({code:M.ZodIssueCode.custom,message:"url must not embed credentials (user:pass@\u2026) \u2014 use env/keychain auth",path:["url"]}))}var Hp=M.object({id:Y.optional(),transport:Up.optional(),command:M.string().optional(),args:M.array(M.string()).optional(),env:M.record(M.string(),M.string()).optional(),url:M.string().url().optional(),allow_local_endpoint:M.boolean().optional(),ref:h.optional(),tools_allowlist:M.array(h).min(1,"tools_allowlist must name at least one tool (omit it to admit all)").optional()}).strict().superRefine((e,t)=>{if(e.ref!==void 0){Gp(e,t);return}if(e.id===void 0&&t.addIssue({code:M.ZodIssueCode.custom,message:"an inline server requires 'id' (or use 'ref' to reference a [[mcp_servers]] registration)",path:["id"]}),e.transport===void 0){t.addIssue({code:M.ZodIssueCode.custom,message:"an inline server requires 'transport' (or use 'ref')",path:["transport"]});return}e.transport==="stdio"?Bp(e,t):Wp(e,t)}),Vp=M.discriminatedUnion("type",[M.object({type:M.literal("none")}).strict(),M.object({type:M.literal("summary")}).strict(),M.object({type:M.literal("window"),window_size:T}).strict()]),Jp=M.object({model:h,provider:dd,max_attempts:T}).strict(),mn=M.object({id:Y,name:M.string().optional(),description:M.string().optional(),model:h,provider:dd,system_prompt:h,temperature:Do.optional(),max_tokens:T.optional(),input_schema:Jn.optional(),output_schema:Jn.optional(),tools:M.array(h).optional(),mcp_servers:M.array(Hp).optional(),memory:Vp.optional(),retry:fn.optional(),fallback_chain:M.array(Jp).optional()}).strict().superRefine((e,t)=>{let n=(e.mcp_servers??[]).map(r=>r.ref??r.id).filter(r=>r!==void 0),o=jo(n);o.length>0&&t.addIssue({code:M.ZodIssueCode.custom,message:`duplicate mcp_servers id(s): ${o.join(", ")}`,path:["mcp_servers"]})});import{z as R}from"zod";var cd=R.enum(["js"]),zp=R.array(R.enum(rn)).min(1,"output_modalities must declare at least one modality (omit the field for text-only)"),qp=h.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'}).refine(e=>!e.replace(/\{\{\s*run\.id\s*\}\}/g,"").includes("{{"),{message:"save_to may interpolate only `{{ run.id }}` (no inputs/ctx/run.outputs in a filesystem path)"}),si=R.enum(["approval","input","review"]),ai=R.enum(["reject","approve"]),Kp=R.enum(["concat","object_merge","first","custom"]),ud=Jn,Xp=R.object({id:Y,type:R.literal("input"),label:R.string().optional()}).strict(),Zp=R.object({id:Y,type:R.literal("agent"),agent_ref:Y,system_prompt_append:R.string().optional(),prompt_template:R.string().optional(),tools:R.array(h).optional(),model:h.optional(),temperature:Do.optional(),max_tokens:T.optional(),output_schema:ud.optional(),output_modalities:zp.optional(),count:T.optional(),duration_seconds:R.number().positive().optional(),timeout_ms:T.optional(),retry:fn.optional()}).strict(),Yp=R.object({id:Y,type:R.literal("human_gate"),gate_type:si,assignee:R.string().optional(),message_template:R.string().optional(),timeout_ms:T.optional(),timeout_action:ai.optional()}).strict(),Qp=R.object({when:R.union([R.boolean(),R.string(),R.number()]),target_node:Y}).strict(),ef=R.object({id:Y,type:R.literal("condition"),expression:h,expression_type:cd.optional(),branches:R.array(Qp).min(1,"a condition node must declare at least one branch"),default:Y.optional(),retry:fn.optional()}).strict(),tf=R.object({id:Y,type:R.literal("transform"),transform:h,expression_type:cd.optional(),output_schema:ud.optional(),retry:fn.optional()}).strict(),nf=R.object({id:Y,type:R.literal("parallel"),parallel_of:R.array(Y).min(1)}).strict(),of=R.object({id:Y,type:R.literal("merge"),merge_strategy:Kp,merge_fn:R.string().optional(),retry:fn.optional()}).strict(),rf=R.object({id:Y,type:R.literal("output"),output_format:R.string().optional(),save_to:qp.optional()}).strict(),ld=R.discriminatedUnion("type",[Xp,Zp,Yp,ef,tf,nf,of,rf]);import{z as Xn}from"zod";var sf=Xn.string().regex(new RegExp(`^${$o}(?::.+)?$`),'from must be a node id, optionally "nodeId:handle"'),af=Xn.string().regex(new RegExp(`^${$o}$`),"to must be a kebab-case node id"),pd=Xn.object({from:sf,to:af,label:Xn.string().optional(),condition:Xn.string().optional()}).strict();import{z as v}from"zod";var fd=v.enum(["manual","webhook","schedule","file_change","mcp_call"]),df=v.discriminatedUnion("type",[v.object({type:v.literal("manual")}).strict(),v.object({type:v.literal("webhook"),webhook:v.object({path:h,secret_env:h}).strict()}).strict(),v.object({type:v.literal("schedule"),schedule:h}).strict(),v.object({type:v.literal("file_change"),file_change:v.object({glob:h,debounce_ms:I}).strict()}).strict(),v.object({type:v.literal("mcp_call")}).strict()]),cf=v.enum(["string","number","boolean","file_path","code_diff","secret"]),uf=v.object({format:h.optional(),pattern:h.optional(),enum:v.array(v.unknown()).optional(),min:v.number().optional(),max:v.number().optional(),min_length:I.optional(),max_length:I.optional()}).strict().superRefine((e,t)=>{e.min!==void 0&&e.max!==void 0&&e.min>e.max&&t.addIssue({code:v.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:v.ZodIssueCode.custom,message:"min_length must be <= max_length",path:["min_length"]})}),lf={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:[]},pf=v.object({name:ti,type:cf,required:v.boolean().optional(),default:v.unknown().optional(),description:v.string().optional(),validation:uf.optional()}).strict().superRefine((e,t)=>{if(!e.validation)return;let n=lf[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:v.ZodIssueCode.custom,message:`validation key '${r}' is not allowed for input type '${e.type}'`,path:["validation",r]})}),ff=v.object({key:ti,value:v.string()}).strict(),mf=v.object({allowedCommands:v.array(h).optional(),allowedCommandGlobs:v.array(h).optional(),allowedDomains:v.array(h).optional()}).strict(),hf=v.object({max_cost_microcents:T,on_exceed:v.enum(Po)}).strict(),gf=v.object({$ref:h}).strict(),yf=v.union([mn,gf]),wf=v.object({id:Y,version:v.string().optional(),name:v.string().optional(),description:v.string().optional(),tags:v.array(v.string()).optional(),metadata:v.record(v.string(),v.unknown()).optional(),trigger:df.optional(),inputs:v.array(pf).optional(),context:v.array(ff).optional(),agents:v.array(yf).optional(),tools:mf.optional(),budget:hf.optional(),timeout_ms:T.optional(),max_parallel:T.optional(),nodes:v.array(ld).min(1,"a workflow must declare at least one node"),edges:v.array(pd)}).strict(),Vo=v.object({schema_version:v.literal("1.0"),workflow:wf}).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:v.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=jo(i);d.length>0&&t.addIssue({code:v.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:v.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 m}from"zod";var di={timestamp:m.string().datetime({offset:!0}),sequenceNumber:I},de={runId:h,...di},Yn={sessionId:h,...di},Qn={runId:h.optional(),sessionId:h.optional(),...di},rC=m.object({type:m.string(),...Qn}),md=m.object({input:I,output:I,model:h.optional()}),hd=m.object({secret:m.literal(!0),ref:h}).strict(),gd=m.enum(["approved","rejected","input_provided"]),ci=m.enum(Ua),eo=m.enum(Fa),Jo={code:ci,message:m.string(),retryable:m.boolean(),correlationId:h.optional()},ui=m.object({workingDir:h,activeFile:h.optional(),selection:m.object({file:h,startLine:I,endLine:I}).refine(e=>e.startLine<=e.endLine,{message:"startLine must be <= endLine",path:["endLine"]}).optional(),gitRef:h.optional(),fsScopeTier:m.enum(sn),variables:m.record(m.string(),m.string()).optional()}),bf=m.object({type:m.literal("run:started"),...de,workflowId:m.string().uuid(),inputs:m.record(m.string(),m.unknown()),executionMode:m.enum(an)}),_f=m.object({type:m.literal("node:started"),...de,nodeId:h,nodeType:m.enum(Wa),attemptNumber:T.optional()}),Sf=m.object({type:m.literal("agent:token"),...Qn,nodeId:h,token:m.string(),model:h}),vf=m.object({type:m.literal("agent:tool_call"),...Qn,nodeId:h,model:h,toolId:h,toolInput:m.unknown(),attemptNumber:T.optional()}),xf=m.object({type:m.literal("agent:tool_result"),...Qn,nodeId:h,toolId:h,success:m.boolean(),outputSummary:m.string(),attemptNumber:T.optional()}),kf=m.object({type:m.literal("agent:file_patch_proposed"),...de,nodeId:h,patches:m.array(m.object({uri:h,unifiedDiff:m.string()})).min(1),attemptNumber:T.optional()}),Cf=m.object({type:m.literal("cost:updated"),...Qn,nodeId:h,model:h,inputTokens:I,outputTokens:I,costMicrocents:I,cumulativeCostMicrocents:I,attemptNumber:T.optional()}),If=m.object({type:m.literal("node:completed"),...de,nodeId:h,output:m.unknown(),tokensUsed:md,durationMs:I,cumulativeCostMicrocents:I.optional(),attemptNumber:T.optional(),selected:m.array(h).optional()}),Ef=m.object({type:m.literal("node:failed"),...de,nodeId:h,error:m.object(Jo),attemptNumber:T.optional(),cumulativeCostMicrocents:I.optional()}),Mf=m.object({type:m.literal("node:retrying"),...de,nodeId:h,attemptNumber:T,error:m.object(Jo).omit({correlationId:!0}),delayMs:I}),Rf=m.object({type:m.literal("media_job:submitted"),...de,nodeId:h,jobId:h,provider:m.enum(Ze),model:h,modality:m.enum(Be),startedAt:m.string().datetime({offset:!0}),deadlineAt:m.string().datetime({offset:!0})}),Af=m.enum(["branch_not_taken","upstream_unreachable"]),Tf=m.object({type:m.literal("node:skipped"),...de,nodeId:h,reason:Af}),Of=m.object({type:m.literal("human_gate:paused"),...de,nodeId:h,gateId:h,gateType:si,message:m.string(),assignee:m.string().optional(),timeoutMs:I.optional(),timeoutAction:ai.optional(),expiresAt:m.string().datetime({offset:!0}).optional()}),Pf=m.object({type:m.literal("human_gate:resumed"),...de,nodeId:h,decision:gd,decidedBy:h,payload:m.unknown().optional()}),$f=m.object({type:m.literal("run:completed"),...de,outputs:m.record(m.string(),m.unknown()),totalTokensUsed:m.object({input:I,output:I}),totalCostMicrocents:I,durationMs:I}),Nf=m.object({type:m.literal("run:failed"),...de,error:m.object({...Jo,nodeId:h.optional()}),partialOutputs:m.record(m.string(),m.unknown()),cumulativeCostMicrocents:I.optional()}),Df=m.object({type:m.literal("run:cancelled"),...de,cumulativeCostMicrocents:I.optional()}),jf=m.object({type:m.literal("run:paused"),...de,pendingGateCount:m.number().int().min(0),gateIds:m.array(h),pendingMediaJobNodeIds:m.array(h).min(1).optional()}),Lf=m.object({type:m.literal("run:timeout"),...de,elapsedMs:I,timeoutMs:I}),Uf=m.object({type:m.literal("budget:warning"),...de,spentMicrocents:I,limitMicrocents:I,thresholdPct:m.number().int().min(0).max(100)}),Ff=m.object({type:m.literal("budget:paused"),...de,nodeId:h,spentMicrocents:I,limitMicrocents:I,gateId:h}),Gf=m.discriminatedUnion("type",[bf,_f,Sf,vf,xf,kf,Cf,If,Ef,Tf,Mf,Rf,Of,Pf,$f,Nf,Df,jf,Lf,Uf,Ff]),hn=Gf.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:m.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:m.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:m.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:m.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:m.ZodIssueCode.custom,message:"media_job:submitted deadlineAt must be >= startedAt",path:["deadlineAt"]})}),Bf=m.object({type:m.literal("session:started"),...Yn,agentRef:h,model:h,context:ui}),Wf=m.object({type:m.literal("session:turn_started"),...Yn}),Hf=m.object({type:m.literal("session:turn_completed"),...Yn,stopReason:eo,tokensUsed:md,error:m.object(Jo).optional()}),Vf=m.object({type:m.literal("session:cancelled"),...Yn}),li=m.object({type:m.literal("session:exported"),...Yn,workflowPath:h}),Jf=m.discriminatedUnion("type",[Bf,Wf,Hf,Vf,li]),yd=m.union([hn,Jf]),pi=m.object({decision:gd,decidedBy:h,payload:m.unknown().optional(),comment:m.string().optional()});import{z as gn}from"zod";var fi=gn.enum(["active","idle","exported","ended"]),zf=gn.enum(["system","user","assistant","tool"]),zo=gn.string().datetime({offset:!0}),mi=gn.object({id:h,sessionId:h,sequenceNumber:I,role:zf,content:gn.array(oi),modelId:h.optional(),timestamp:zo}),hi=gn.object({id:h,agentSlug:Y,agentId:h.optional(),agentSnapshot:mn.optional(),title:h.optional(),modelId:h.optional(),context:ui,status:fi,totalInputTokens:I,totalOutputTokens:I,totalCostMicrocents:I,exportedWorkflowPath:h.optional(),createdAt:zo,updatedAt:zo,deletedAt:zo.optional()});import{z as le}from"zod";var gi=le.enum(["pending","running","paused","completed","failed","cancelled"]),yC=le.object({id:le.string().uuid(),workflowId:le.string().uuid(),status:gi,executionMode:le.enum(an),triggerType:fd,inputs:le.record(le.string(),le.unknown()),outputs:le.record(le.string(),le.unknown()).optional(),error:le.object({code:ci,message:le.string(),retryable:le.boolean(),nodeId:h.optional()}).optional(),startedAt:I.optional(),completedAt:I.optional(),totalInputTokens:I,totalOutputTokens:I,totalCostMicrocents:I,createdAt:I,updatedAt:I}).superRefine((e,t)=>{e.startedAt!==void 0&&e.completedAt!==void 0&&e.completedAt<e.startedAt&&t.addIssue({code:le.ZodIssueCode.custom,message:"completedAt must be >= startedAt",path:["completedAt"]}),e.updatedAt<e.createdAt&&t.addIssue({code:le.ZodIssueCode.custom,message:"updatedAt must be >= createdAt",path:["updatedAt"]})});import{z as A}from"zod";var qf=A.enum(["stable","beta"]),wd=A.enum(sn),Kf=/^https?:\/\//i,Xf=/^wss?:\/\//i;function Zf(e,t){e.command||t.addIssue({code:A.ZodIssueCode.custom,message:"command is required for the 'stdio' transport",path:["command"]}),e.url!==void 0&&t.addIssue({code:A.ZodIssueCode.custom,message:"url is not used by the 'stdio' transport",path:["url"]}),e.allow_local_endpoint!==void 0&&t.addIssue({code:A.ZodIssueCode.custom,message:"allow_local_endpoint is not used by the 'stdio' transport (network transports only)",path:["allow_local_endpoint"]})}function Yf(e,t){e.url||t.addIssue({code:A.ZodIssueCode.custom,message:`url is required for the '${e.transport}' transport`,path:["url"]});for(let n of["command","args","env"])e[n]!==void 0&&t.addIssue({code:A.ZodIssueCode.custom,message:`${n} is not used by a network transport \u2014 it applies only to a stdio server process${n==="env"?" (network header-auth is a follow-up)":""}`,path:[n]});e.url!==void 0&&((e.transport==="websocket"?Xf.test(e.url):Kf.test(e.url))||t.addIssue({code:A.ZodIssueCode.custom,message:"url scheme is invalid (http \u2192 http(s), websocket \u2192 ws(s))",path:["url"]}),No.test(e.url)&&t.addIssue({code:A.ZodIssueCode.custom,message:"url must not embed credentials (user:pass@\u2026) \u2014 use env/keychain auth",path:["url"]}))}var bd=A.object({name:h,transport:A.enum(["stdio","http","websocket","sse"]),command:A.string().optional(),args:A.array(A.string()).optional(),autostart:A.boolean().optional(),url:A.string().url().optional(),env:A.record(A.string(),A.string()).optional(),allow_local_endpoint:A.boolean().optional()}).strict().superRefine((e,t)=>{e.transport==="stdio"?Zf(e,t):Yf(e,t)}),_d=A.object({update_channel:qf.optional(),preferences:A.object({default_model:A.string().optional(),theme:A.string().optional()}).strict().optional(),mcp_servers:A.array(bd).optional()}).strict(),Qf=A.object({default_model:A.string().optional(),fs_scope:wd.optional(),max_turns:T.optional(),max_messages:T.optional(),max_cost_microcents:I.optional(),on_exceed:A.enum(Po).optional()}).strict().optional(),em=A.object({image:I.optional(),audio:I.optional(),video:I.optional()}).strict(),yi=A.object({defaults:A.object({model:A.string().optional(),fs_scope:wd.optional(),max_tokens_estimate:T.optional(),media_cost_estimate:em.optional(),media_job_poll_initial_ms:T.optional(),media_job_poll_max_ms:T.optional(),media_job_deadline_ms:T.optional(),media_gc_grace_days: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:A.record(A.string(),A.string()).optional(),chat:Qf,mcp_servers:A.array(bd).optional()}).strict();import{desc as pt,sql as D}from"drizzle-orm";import{check as Et,index as L,integer as pe,sqliteTable as _e,text as w,uniqueIndex as Rt}from"drizzle-orm/sqlite-core";var Se=()=>w("id").primaryKey(),P=e=>pe(e),lt=e=>pe(e).notNull().default(0),De=e=>pe(e).notNull().default(0),N=e=>w(e),ut=(e,t)=>pe(e,{mode:"boolean"}).notNull().default(t?D`1`:D`0`),Mt=e=>D.raw(e.map(t=>`'${t.replaceAll("'","''")}'`).join(", ")),re=_e("llm_providers",{id:Se(),name:w("name").notNull(),displayName:w("display_name").notNull(),baseUrl:w("base_url").notNull(),apiKeyKeychainRef:w("api_key_keychain_ref"),defaultHeaders:N("default_headers").notNull().default("{}"),isActive:ut("is_active",!0),deletedAt:P("deleted_at"),createdAt:P("created_at").notNull(),updatedAt:P("updated_at").notNull()},e=>[Rt("idx_llm_providers_name").on(e.name).where(D`${e.deletedAt} is null`)]),G=_e("model_catalog",{id:Se(),providerId:w("provider_id").notNull().references(()=>re.id),modelId:w("model_id").notNull(),displayName:w("display_name").notNull(),contextWindowTokens:pe("context_window_tokens").notNull(),maxOutputTokens:pe("max_output_tokens").notNull(),inputCostPerMtokMicrocents:lt("input_cost_per_mtok_microcents"),outputCostPerMtokMicrocents:lt("output_cost_per_mtok_microcents"),cachedInputCostPerMtokMicrocents:lt("cached_input_cost_per_mtok_microcents"),mediaImageCostMicrocents:pe("media_image_cost_microcents"),mediaAudioCostMicrocents:pe("media_audio_cost_microcents"),mediaVideoCostMicrocents:pe("media_video_cost_microcents"),mediaSurface:w("media_surface").$type().notNull().default("chat"),supportsToolCalling:ut("supports_tool_calling",!1),supportsVision:ut("supports_vision",!1),supportsStreaming:ut("supports_streaming",!0),supportsJsonMode:ut("supports_json_mode",!1),capabilities:N("capabilities").notNull().default("{}"),deprecationDate:P("deprecation_date"),isActive:ut("is_active",!0),deletedAt:P("deleted_at"),createdAt:P("created_at").notNull(),updatedAt:P("updated_at").notNull()},e=>[Rt("idx_model_catalog_provider_model").on(e.providerId,e.modelId).where(D`${e.deletedAt} is null`),L("idx_model_catalog_provider").on(e.providerId),L("idx_model_catalog_active").on(e.isActive).where(D`${e.deletedAt} is null`)]),qo=_e("agents",{id:Se(),name:w("name").notNull(),slug:w("slug").notNull(),description:w("description"),modelId:w("model_id").notNull().references(()=>G.id),systemPrompt:w("system_prompt").notNull().default(""),tools:N("tools").notNull().default("[]"),config:N("config").notNull().default("{}"),inputSchema:N("input_schema"),outputSchema:N("output_schema"),tags:N("tags").notNull().default("[]"),sourcePath:w("source_path"),isActive:ut("is_active",!0),deletedAt:P("deleted_at"),createdAt:P("created_at").notNull(),updatedAt:P("updated_at").notNull()},e=>[Rt("idx_agents_slug").on(e.slug).where(D`${e.deletedAt} is null`),L("idx_agents_model").on(e.modelId),L("idx_agents_active").on(e.isActive,pt(e.createdAt)).where(D`${e.deletedAt} is null`)]),ve=_e("workflows",{id:Se(),name:w("name").notNull(),slug:w("slug").notNull(),description:w("description"),definition:N("definition").notNull(),inputSchema:N("input_schema"),tags:N("tags").notNull().default("[]"),sourcePath:w("source_path"),isActive:ut("is_active",!0),deletedAt:P("deleted_at"),createdAt:P("created_at").notNull(),updatedAt:P("updated_at").notNull()},e=>[Rt("idx_workflows_slug").on(e.slug).where(D`${e.deletedAt} is null`),L("idx_workflows_active").on(e.isActive,pt(e.updatedAt)).where(D`${e.deletedAt} is null`)]),S=_e("runs",{id:Se(),workflowId:w("workflow_id").notNull().references(()=>ve.id),workflowPath:w("workflow_path"),projectRoot:w("project_root"),workflowDefinitionSnapshot:N("workflow_definition_snapshot").notNull(),status:w("status").$type().notNull().default("pending"),executionMode:w("execution_mode").$type().notNull().default("local"),triggerType:w("trigger_type").notNull().default("manual"),triggerMetadata:N("trigger_metadata").notNull().default("{}"),inputJson:N("input_json").notNull().default("{}"),outputJson:N("output_json"),errorJson:N("error_json"),startedAt:P("started_at"),completedAt:P("completed_at"),totalInputTokens:De("total_input_tokens"),totalOutputTokens:De("total_output_tokens"),totalCostMicrocents:lt("total_cost_microcents"),deletedAt:P("deleted_at"),createdAt:P("created_at").notNull(),updatedAt:P("updated_at").notNull()},e=>[Et("runs_status_check",D`${e.status} in (${Mt(gi.options)})`),Et("runs_execution_mode_check",D`${e.executionMode} in (${Mt(an)})`),L("idx_runs_workflow").on(e.workflowId,pt(e.createdAt)),L("idx_runs_status").on(e.status,pt(e.createdAt)).where(D`${e.deletedAt} is null`),L("idx_runs_cost").on(e.workflowId,e.createdAt,e.totalCostMicrocents).where(D`${e.deletedAt} is null`)]),tm=["pending","running","completed","failed","skipped"],z=_e("step_executions",{id:Se(),runId:w("run_id").notNull().references(()=>S.id,{onDelete:"cascade"}),nodeId:w("node_id").notNull(),nodeType:w("node_type").notNull(),agentId:w("agent_id").references(()=>qo.id),agentSnapshot:N("agent_snapshot"),modelId:w("model_id").references(()=>G.id),attemptNumber:pe("attempt_number").notNull().default(1),status:w("status").$type().notNull().default("pending"),inputJson:N("input_json").notNull().default("{}"),outputJson:N("output_json"),errorJson:N("error_json"),startedAt:P("started_at"),completedAt:P("completed_at"),durationMs:pe("duration_ms"),inputTokens:De("input_tokens"),outputTokens:De("output_tokens"),cachedTokens:De("cached_tokens"),costMicrocents:lt("cost_microcents"),createdAt:P("created_at").notNull(),updatedAt:P("updated_at").notNull()},e=>[Et("step_executions_status_check",D`${e.status} in (${Mt(tm)})`),L("idx_step_exec_run").on(e.runId,e.createdAt),L("idx_step_exec_run_node").on(e.runId,e.nodeId,e.attemptNumber),L("idx_step_exec_agent").on(e.agentId,pt(e.createdAt)).where(D`${e.agentId} is not null`),L("idx_step_exec_model").on(e.modelId,pt(e.createdAt)).where(D`${e.modelId} is not null`),L("idx_step_exec_cost").on(e.modelId,e.createdAt,e.costMicrocents).where(D`${e.modelId} is not null`)]),Sd=_e("messages",{id:Se(),stepExecutionId:w("step_execution_id").notNull().references(()=>z.id,{onDelete:"cascade"}),runId:w("run_id").notNull(),sequenceNumber:pe("sequence_number").notNull(),role:w("role").notNull(),content:w("content"),contentParts:N("content_parts"),toolCalls:N("tool_calls"),toolCallId:w("tool_call_id"),name:w("name"),finishReason:w("finish_reason"),createdAt:P("created_at").notNull()},e=>[L("idx_messages_step").on(e.stepExecutionId,e.sequenceNumber),L("idx_messages_run").on(e.runId,e.createdAt)]),je=_e("run_events",{id:Se(),runId:w("run_id").notNull().references(()=>S.id,{onDelete:"cascade"}),stepExecutionId:w("step_execution_id"),seq:pe("seq").notNull(),eventType:w("event_type").notNull(),level:w("level").notNull().default("info"),nodeId:w("node_id"),payloadJson:N("payload_json").notNull().default("{}"),ts:P("ts").notNull()},e=>[Rt("idx_run_events_run_seq").on(e.runId,e.seq),L("idx_run_events_step").on(e.stepExecutionId,e.ts).where(D`${e.stepExecutionId} is not null`),L("idx_run_events_run_type").on(e.runId,e.eventType,e.ts)]),Ko=_e("run_costs",{id:Se(),runId:w("run_id").notNull().references(()=>S.id,{onDelete:"cascade"}),nodeId:w("node_id").notNull(),modelId:w("model_id").references(()=>G.id),inputTokens:De("input_tokens"),outputTokens:De("output_tokens"),costMicrocents:lt("cost_microcents"),createdAt:P("created_at").notNull()},e=>[L("idx_run_costs_run").on(e.runId)]),he=_e("agent_sessions",{id:Se(),agentId:w("agent_id").references(()=>qo.id),agentSlug:w("agent_slug").notNull(),agentSnapshot:N("agent_snapshot"),title:w("title"),modelId:w("model_id").references(()=>G.id),workingDir:w("working_dir"),gitRef:w("git_ref"),fsScopeTier:w("fs_scope_tier").$type().notNull().default("sandboxed"),status:w("status").$type().notNull().default("active"),contextJson:N("context_json").notNull().default("{}"),totalInputTokens:De("total_input_tokens"),totalOutputTokens:De("total_output_tokens"),totalCostMicrocents:lt("total_cost_microcents"),exportedWorkflowPath:w("exported_workflow_path"),deletedAt:P("deleted_at"),createdAt:P("created_at").notNull(),updatedAt:P("updated_at").notNull()},e=>[Et("agent_sessions_fs_scope_tier_check",D`${e.fsScopeTier} in (${Mt(sn)})`),Et("agent_sessions_status_check",D`${e.status} in (${Mt(fi.options)})`),L("idx_agent_sessions_status").on(e.status,pt(e.updatedAt)).where(D`${e.deletedAt} is null`),L("idx_agent_sessions_agent").on(e.agentId,pt(e.createdAt)).where(D`${e.agentId} is not null`)]),At=_e("session_messages",{id:Se(),sessionId:w("session_id").notNull().references(()=>he.id,{onDelete:"cascade"}),sequenceNumber:pe("sequence_number").notNull(),role:w("role").notNull(),content:w("content"),contentParts:N("content_parts"),toolCalls:N("tool_calls"),toolCallId:w("tool_call_id"),name:w("name"),finishReason:w("finish_reason"),modelId:w("model_id").references(()=>G.id),inputTokens:De("input_tokens"),outputTokens:De("output_tokens"),costMicrocents:lt("cost_microcents"),createdAt:P("created_at").notNull()},e=>[Rt("idx_session_messages_seq").on(e.sessionId,e.sequenceNumber),L("idx_session_messages_session").on(e.sessionId,e.createdAt)]),U=_e("media_objects",{id:Se(),handle:w("handle").notNull().unique(),mimeType:w("mime_type").notNull(),modality:w("modality").$type().notNull(),byteLength:pe("byte_length").notNull(),durationMs:pe("duration_ms"),lastReferencedAt:P("last_referenced_at").notNull(),deletedAt:P("deleted_at"),createdAt:P("created_at").notNull()},e=>[Et("media_objects_modality_check",D`${e.modality} in (${Mt(ei)})`),L("idx_media_objects_gc").on(e.lastReferencedAt).where(D`${e.deletedAt} is null`)]),B=_e("media_references",{id:Se(),handle:w("handle").notNull().references(()=>U.handle,{onDelete:"cascade"}),scopeKind:w("scope_kind").$type().notNull(),scopeId:w("scope_id").notNull(),createdAt:P("created_at").notNull()},e=>[Et("media_references_scope_kind_check",D`${e.scopeKind} in (${Mt(Ga)})`),Rt("idx_media_references_unique").on(e.handle,e.scopeKind,e.scopeId),L("idx_media_references_scope").on(e.scopeKind,e.scopeId),L("idx_media_references_handle").on(e.handle)]);import{mkdirSync as nm}from"fs";import{dirname as om}from"path";import{fileURLToPath as rm}from"url";import im from"better-sqlite3";import{drizzle as sm}from"drizzle-orm/better-sqlite3";import{migrate as am}from"drizzle-orm/better-sqlite3/migrator";function bi(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:"&&nm(om(e),{recursive:!0}),t=new im(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:sm(t,{schema:wi}),sqlite:t}}var dm=rm(new URL("../drizzle",import.meta.url));function _i(e){am(e,{migrationsFolder:dm})}import{and as cm,asc as um,desc as vd,eq as Si,isNull as xd}from"drizzle-orm";function Tt(e){return new Date(e).getTime()}function fe(e){return new Date(e).toISOString()}function vi(e){let t=hi.parse(e);return{id:t.id,agentId:t.agentId??null,agentSlug:t.agentSlug,agentSnapshot:t.agentSnapshot===void 0?null:JSON.stringify(t.agentSnapshot),title:t.title??null,modelId:t.modelId??null,workingDir:t.context.workingDir,gitRef:t.context.gitRef??null,fsScopeTier:t.context.fsScopeTier,status:t.status,contextJson:JSON.stringify(t.context),totalInputTokens:t.totalInputTokens,totalOutputTokens:t.totalOutputTokens,totalCostMicrocents:t.totalCostMicrocents,exportedWorkflowPath:t.exportedWorkflowPath??null,deletedAt:t.deletedAt===void 0?null:Tt(t.deletedAt),createdAt:Tt(t.createdAt),updatedAt:Tt(t.updatedAt)}}function xi(e){let t={id:e.id,agentSlug:e.agentSlug,...e.agentId===null?{}:{agentId:e.agentId},...e.agentSnapshot===null?{}:{agentSnapshot:JSON.parse(e.agentSnapshot)},...e.title===null?{}:{title:e.title},...e.modelId===null?{}:{modelId:e.modelId},context:JSON.parse(e.contextJson),status:e.status,totalInputTokens:e.totalInputTokens,totalOutputTokens:e.totalOutputTokens,totalCostMicrocents:e.totalCostMicrocents,...e.exportedWorkflowPath===null?{}:{exportedWorkflowPath:e.exportedWorkflowPath},createdAt:fe(e.createdAt),updatedAt:fe(e.updatedAt),...e.deletedAt===null?{}:{deletedAt:fe(e.deletedAt)}};return hi.parse(t)}function kd(e,t={}){let n=mi.parse(e);return{id:n.id,sessionId:n.sessionId,sequenceNumber:n.sequenceNumber,role:n.role,content:t.content??null,contentParts:JSON.stringify(n.content),toolCalls:t.toolCalls===void 0?null:JSON.stringify(t.toolCalls),toolCallId:t.toolCallId??null,name:t.name??null,finishReason:t.finishReason??null,modelId:n.modelId??null,inputTokens:t.inputTokens??0,outputTokens:t.outputTokens??0,costMicrocents:t.costMicrocents??0,createdAt:Tt(n.timestamp)}}function Cd(e){let t={id:e.id,sessionId:e.sessionId,sequenceNumber:e.sequenceNumber,role:e.role,content:e.contentParts===null?[]:JSON.parse(e.contentParts),...e.modelId===null?{}:{modelId:e.modelId},timestamp:fe(e.createdAt)};return mi.parse(t)}function ki(e){let t=r=>{let i=e.select().from(he).where(cm(Si(he.id,r),xd(he.deletedAt))).get();return i===void 0?void 0:xi(i)},n=()=>e.select().from(he).where(xd(he.deletedAt)).orderBy(vd(he.updatedAt),vd(he.id)).all().map(xi),o=r=>e.select().from(At).where(Si(At.sessionId,r)).orderBy(um(At.sequenceNumber)).all().map(Cd);return{createSession:r=>{e.insert(he).values(vi(r)).run()},updateSession:r=>{let i={...vi(r)};delete i.id,delete i.createdAt,e.update(he).set(i).where(Si(he.id,r.id)).run()},loadSession:t,listSessions:n,appendMessage:(r,i)=>{e.insert(At).values(kd(r,i)).run()},loadMessages:o,loadFull:r=>{let i=t(r);return i===void 0?void 0:{session:i,messages:o(r)}}}}import{and as Ot,asc as Ci,desc as Xo,eq as ie,getTableColumns as lm,inArray as Ed,isNull as ft,sql as to}from"drizzle-orm";var Md=["pending","running","paused"];function Zo(e){return{id:e.id,workflowId:e.workflowId,status:e.status,executionMode:e.executionMode,triggerType:e.triggerType,...e.startedAt===null?{}:{startedAt:fe(e.startedAt)},...e.completedAt===null?{}:{completedAt:fe(e.completedAt)},totalInputTokens:e.totalInputTokens,totalOutputTokens:e.totalOutputTokens,totalCostMicrocents:e.totalCostMicrocents,createdAt:fe(e.createdAt),updatedAt:fe(e.updatedAt)}}function no(e,t){let n=yn(e),o=s=>e.select({c:S.totalCostMicrocents}).from(S).where(ie(S.id,s)).get()?.c??0,r=(s,a,d)=>{switch(s.type){case"run:started":{let c={id:a,workflowId:s.workflowId,workflowDefinitionSnapshot:t.workflow.definitionJson,status:"running",executionMode:s.executionMode,triggerType:"manual",inputJson:JSON.stringify(s.inputs),projectRoot:t.projectRoot??null,startedAt:d,createdAt:d,updatedAt:d};e.insert(S).values(c).run();return}case"node:started":{let c={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(z).values(c).run();return}case"node:completed":{let c=o(a),u=s.cumulativeCostMicrocents??c,f=Math.max(0,u-c);e.insert(Ko).values({id:t.uuid(),runId:a,nodeId:s.nodeId,inputTokens:s.tokensUsed.input,outputTokens:s.tokensUsed.output,costMicrocents:f,createdAt:d}).run(),e.update(z).set({status:"completed",outputJson:JSON.stringify(s.output),inputTokens:s.tokensUsed.input,outputTokens:s.tokensUsed.output,costMicrocents:f,durationMs:s.durationMs,completedAt:d,updatedAt:d}).where(Id(a,s.nodeId,s.attemptNumber)).run(),e.update(S).set({totalInputTokens:to`${S.totalInputTokens} + ${s.tokensUsed.input}`,totalOutputTokens:to`${S.totalOutputTokens} + ${s.tokensUsed.output}`,totalCostMicrocents:c+f,updatedAt:d}).where(ie(S.id,a)).run();return}case"node:failed":case"node:retrying":{e.update(z).set({status:"failed",errorJson:JSON.stringify(s.error),completedAt:d,updatedAt:d}).where(Id(a,s.nodeId,s.attemptNumber)).run();return}case"human_gate:paused":case"budget:paused":case"run:paused":{e.update(S).set({status:"paused",updatedAt:d}).where(ie(S.id,a)).run();return}case"human_gate:resumed":{e.update(S).set({status:"running",updatedAt:d}).where(ie(S.id,a)).run();return}case"run:completed":{e.update(S).set({status:"completed",outputJson:JSON.stringify(s.outputs),totalInputTokens:s.totalTokensUsed.input,totalOutputTokens:s.totalTokensUsed.output,totalCostMicrocents:s.totalCostMicrocents,completedAt:d,updatedAt:d}).where(ie(S.id,a)).run();return}case"run:failed":{e.update(S).set({status:"failed",errorJson:JSON.stringify(s.error),outputJson:JSON.stringify(s.partialOutputs),completedAt:d,updatedAt:d}).where(ie(S.id,a)).run();return}case"run:cancelled":{e.update(S).set({status:"cancelled",completedAt:d,updatedAt:d}).where(ie(S.id,a)).run();return}default:return}},i=(s,a,d)=>{r(s,a,d);let c={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(je).values(c).run()};return{resolveWorkflowId:s=>{let a=()=>e.select({id:ve.id}).from(ve).where(Ot(ie(ve.slug,s),ft(ve.deletedAt))).get()?.id,d=a();if(d!==void 0)return Promise.resolve(d);let c=t.uuid(),u=t.now();return e.insert(ve).values({id:c,name:t.workflow.name,slug:s,definition:t.workflow.definitionJson,createdAt:u,updatedAt:u}).onConflictDoNothing().run(),Promise.resolve(a()??c)},persistEvent:s=>{try{let a=hn.parse(s),d=a.runId;if(d===void 0)throw new Error(`run-history store received a non-run event: ${a.type}`);let c=Tt(a.timestamp);return e.transaction(()=>{i(a,d,c)}),Promise.resolve()}catch(a){return Promise.reject(a instanceof Error?a:new Error(String(a)))}},listInterruptedRuns:()=>{let s=e.select({id:S.id,workflowId:S.workflowId,status:S.status,lastSeq:to`coalesce(max(${je.seq}), 0)`}).from(S).leftJoin(je,ie(je.runId,S.id)).where(Ot(Ed(S.status,[...Md]),ft(S.deletedAt))).groupBy(S.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 yn(e){return{listRuns:()=>e.select().from(S).where(ft(S.deletedAt)).orderBy(Xo(S.createdAt),Xo(S.id)).all().map(Zo),loadRun:t=>{let n=e.select().from(S).where(Ot(ie(S.id,t),ft(S.deletedAt))).get();return n===void 0?void 0:Zo(n)},loadRunEvents:t=>e.select({payloadJson:je.payloadJson}).from(je).where(ie(je.runId,t)).orderBy(Ci(je.seq)).all().map(n=>hn.parse(JSON.parse(n.payloadJson))),listActiveRuns:()=>e.select().from(S).where(Ot(Ed(S.status,[...Md]),ft(S.deletedAt))).orderBy(Xo(S.createdAt),Xo(S.id)).all().map(Zo),loadLatestRunPerWorkflow:()=>{let t=e.$with("ranked").as(e.select({...lm(S),slug:ve.slug,rn:to`row_number() over (partition by ${S.workflowId} order by ${S.createdAt} desc, ${S.id} desc)`.as("rn")}).from(S).innerJoin(ve,ie(S.workflowId,ve.id)).where(Ot(ft(S.deletedAt),ft(ve.deletedAt))));return e.with(t).select().from(t).where(ie(t.rn,1)).all().map(n=>({slug:n.slug,lastRun:Zo(n)}))},loadStepExecutions:t=>e.select({nodeId:z.nodeId,nodeType:z.nodeType,status:z.status,attemptNumber:z.attemptNumber,startedAt:z.startedAt,completedAt:z.completedAt,durationMs:z.durationMs,costMicrocents:z.costMicrocents}).from(z).where(ie(z.runId,t)).orderBy(Ci(z.createdAt),Ci(to`rowid`)).all().map(n=>({nodeId:n.nodeId,nodeType:n.nodeType,status:n.status,attemptNumber:n.attemptNumber,...n.startedAt===null?{}:{startedAt:fe(n.startedAt)},...n.completedAt===null?{}:{completedAt:fe(n.completedAt)},...n.durationMs===null?{}:{durationMs:n.durationMs},costMicrocents:n.costMicrocents}))}}function Id(e,t,n){return Ot(ie(z.runId,e),ie(z.nodeId,t),ie(z.attemptNumber,n??1))}function Ii(e,t){let n=e.select({snapshot:S.workflowDefinitionSnapshot,inputJson:S.inputJson,projectRoot:S.projectRoot}).from(S).where(Ot(ie(S.id,t),ft(S.deletedAt))).get();return n===void 0?void 0:{workflowDefinitionSnapshot:n.snapshot,inputJson:n.inputJson,projectRoot:n.projectRoot}}import{and as Ei,asc as pm,eq as Yo,isNull as Qo}from"drizzle-orm";function fm(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 Mi(e){return{id:e.id,name:e.name,displayName:e.displayName,baseUrl:e.baseUrl,...e.apiKeyKeychainRef===null?{}:{apiKeyKeychainRef:e.apiKeyKeychainRef},defaultHeaders:fm(e.defaultHeaders),isActive:e.isActive,createdAt:fe(e.createdAt),updatedAt:fe(e.updatedAt)}}function Ri(e,t){let n=o=>e.select().from(re).where(Ei(Yo(re.name,o),Qo(re.deletedAt))).get();return{list:()=>e.select().from(re).where(Qo(re.deletedAt)).orderBy(pm(re.name)).all().map(Mi),get:o=>{let r=n(o);return r===void 0?void 0:Mi(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(re).values(a).run()}else e.update(re).set({displayName:o.displayName,baseUrl:o.baseUrl,defaultHeaders:o.defaultHeaders===void 0?i.defaultHeaders:JSON.stringify(o.defaultHeaders),updatedAt:r}).where(Yo(re.id,i.id)).run();let s=n(o.name);if(s===void 0)throw new Error(`provider '${o.name}' not found after upsert`);return Mi(s)},setKeychainRef:(o,r)=>{e.update(re).set({apiKeyKeychainRef:r,updatedAt:t.now()}).where(Ei(Yo(re.name,o),Qo(re.deletedAt))).run()},clearKeychainRef:o=>{e.update(re).set({apiKeyKeychainRef:null,updatedAt:t.now()}).where(Ei(Yo(re.name,o),Qo(re.deletedAt))).run()}}}import{createHash as mm,randomUUID as hm}from"crypto";import{mkdir as gm,readdir as Rd,readFile as ym,rename as wm,rm as bm,stat as _m,writeFile as Sm}from"fs/promises";import{dirname as vm,join as Ai,resolve as Ad,sep as Td}from"path";var Oi="media://sha256-";function Od(e){return mm("sha256").update(e).digest("hex")}function xm(e){return`${Oi}${Od(e)}`}function Ti(e){if(!We.test(e))throw new Error("not a media://sha256-<64hex> handle");return e.slice(Oi.length)}function km(e){return{kind:"base64",data:Buffer.from(e).toString("base64")}}function Cm(e,t){let n=Bo(t,e.length);if(!n.ok)throw new Error(`media readRange: ${n.reason}`);return e.slice(n.range.start,n.range.end+1)}var Pt=class{#e;constructor(t){this.#e=Ad(t)}put(t){return this.#n(t)}async#n(t){let n=xm(t),o=this.#t(Ti(n));await gm(vm(o),{recursive:!0});let r=`${o}.${hm()}.tmp`;return await Sm(r,t),await wm(r,o),n}async get(t){let n=Ti(t),o=new Uint8Array(await ym(this.#t(n)));if(Od(o)!==n)throw new Error("media bytes failed their content-address (sha256) integrity check");return o}async readRange(t,n){return Cm(await this.get(t),n)}async resolveForEgress(t){return km(await this.get(t))}async delete(t){await bm(this.#t(Ti(t)),{force:!0})}async listHandles(){let t;try{t=await Rd(this.#e,{withFileTypes:!0})}catch(r){if(r instanceof Error&&"code"in r&&r.code==="ENOENT")return[];throw r}let n=t.filter(r=>r.isDirectory()&&/^[0-9a-f]{2}$/.test(r.name));return(await Promise.all(n.map(async r=>{let i=Ai(this.#e,r.name),s=await Rd(i,{withFileTypes:!0});return(await Promise.all(s.map(d=>this.#r(i,r.name,d)))).filter(d=>d!==void 0)}))).flat()}async#r(t,n,o){if(!o.isFile())return;let r=`${Oi}${n}${o.name}`;if(We.test(r))try{return{handle:r,mtimeMs:(await _m(Ai(t,o.name))).mtimeMs}}catch(i){if(i instanceof Error&&"code"in i&&i.code==="ENOENT")return;throw i}}#t(t){let n=Ad(this.#e,Ai(t.slice(0,2),t.slice(2))),o=this.#e.endsWith(Td)?this.#e:this.#e+Td;if(n!==this.#e&&!n.startsWith(o))throw new Error("media path escapes the store root");return n}};import{lookup as Im}from"dns/promises";import{request as Em}from"https";import{isIP as Pi}from"net";var se=class extends Error{code;constructor(t,n){super(n),this.name="MediaEgressError",this.code=t}},Mm=3e4,Rm=5;function Am(e){return e===301||e===302||e===303||e===307||e===308}function Tm(e){if(Wo(e))throw new se("insecure_url","media egress url must not embed credentials");let t=It(e);if(t===null)throw new se("insecure_url","media egress url must be a well-formed https url");if(t.hasCredentials)throw new se("insecure_url","media egress url must not embed credentials");return t.host}async function Om(e,t,n){if(!n&&Re(e))throw new se("blocked_host","media egress target is a private/loopback address");let o=await t.resolveHost(e);if(o.length===0)throw new se("blocked_host","media egress target did not resolve to an address");for(let r of o){if(Pi(r)===0)throw new se("blocked_host","media egress resolver returned a non-IP address");if(!n&&Re(r))throw new se("blocked_host","media egress target resolves to a private/loopback address")}return o}async function Pm(e,t,n){let o=[],r=0;try{for await(let a of e){if(r+=a.length,r>t)throw new se("too_large","media egress response exceeded the maximum size");o.push(a)}}finally{n()}let i=new Uint8Array(r),s=0;for(let a of o)i.set(a,s),s+=a.length;return i}async function $m(e,t,n,o,r){let i=Tm(e),a=(await Om(i,t,n))[0];if(a===void 0)throw new se("blocked_host","no validated IP to pin the connection to");let d=await t.openConnection({url:e,hostname:i,pinnedIp:a},o);if(Am(d.status)){d.dispose();let c=d.location;if(c===void 0||c.length===0)throw new se("bad_status","media egress redirect had no Location");return{kind:"redirect",location:c}}if(d.status!==200)throw d.dispose(),new se("bad_status","media egress received a non-200 status");return{kind:"bytes",bytes:await Pm(d.body,r,d.dispose)}}async function $i(e,t,n=Pd){let o=t.maxRedirects??Rm,r=t.allowPrivate??!1,i=new AbortController,s=()=>i.abort();t.signal?.aborted===!0&&i.abort(),t.signal?.addEventListener("abort",s);let a=setTimeout(s,t.timeoutMs??Mm);try{let d=e;for(let c=0;;c+=1){if(c>o)throw new se("too_many_redirects","media egress exceeded the redirect limit");let u=await $m(d,n,r,i.signal,t.maxBytes);if(u.kind==="bytes")return u.bytes;d=new URL(u.location,d).toString()}}catch(d){throw d instanceof se?d:new se("network","media egress request failed")}finally{clearTimeout(a),t.signal?.removeEventListener("abort",s)}}var Pd={resolveHost:async e=>Pi(e)!==0?[e]:(await Im(e,{all:!0})).map(n=>n.address),openConnection:(e,t)=>new Promise((n,o)=>{let r=new URL(e.url),i=Pi(e.pinnedIp)===6?6:4,s=Em({protocol:"https:",hostname:e.hostname,port:r.port===""?443:Number(r.port),path:`${r.pathname}${r.search}`,method:"GET",servername:e.hostname,lookup:(a,d,c)=>c(null,e.pinnedIp,i),signal:t},a=>{let d=a.headers.location;n({status:a.statusCode??0,location:typeof d=="string"?d:void 0,body:a,dispose:()=>{a.destroy(),s.destroy()}})});s.on("error",()=>o(new se("network","media egress request failed"))),s.end()})};import{randomUUID as $d}from"crypto";import{and as Ni,eq as mt,inArray as Nd,isNull as Nm,lte as Dm,notInArray as jm}from"drizzle-orm";var er=900;function oo(e,t=Date.now){return{recordObject(n){let o=t();e.insert(U).values({id:$d(),handle:n.handle,mimeType:n.mimeType,modality:n.modality,byteLength:n.byteLength,...n.durationMs===void 0?{}:{durationMs:n.durationMs},lastReferencedAt:o,createdAt:o}).onConflictDoUpdate({target:U.handle,set:{lastReferencedAt:o,deletedAt:null}}).run()},addReference(n,o,r){let i=t();e.insert(B).values({id:$d(),handle:n,scopeKind:o,scopeId:r,createdAt:i}).onConflictDoNothing({target:[B.handle,B.scopeKind,B.scopeId]}).run(),e.update(U).set({lastReferencedAt:i}).where(mt(U.handle,n)).run()},describe(n){let o=e.select({mimeType:U.mimeType,byteLength:U.byteLength,deletedAt:U.deletedAt}).from(U).where(mt(U.handle,n)).get();if(o===void 0||o.deletedAt!==null)return;let r=e.select({scopeKind:B.scopeKind,scopeId:B.scopeId}).from(B).where(mt(B.handle,n)).all(),i=[];for(let s of r)(s.scopeKind==="session"||s.scopeKind==="workspace")&&i.push({kind:s.scopeKind,id:s.scopeId});return{mimeType:o.mimeType,byteLength:o.byteLength,allowedScopes:i}},removeRunReferences(n){let o=t(),r=e.selectDistinct({handle:B.handle}).from(B).where(Ni(mt(B.scopeKind,"run"),mt(B.scopeId,n))).all(),i=e.delete(B).where(Ni(mt(B.scopeKind,"run"),mt(B.scopeId,n))).run(),s=r.map(a=>a.handle);for(let a=0;a<s.length;a+=er)e.update(U).set({lastReferencedAt:o}).where(Nd(U.handle,s.slice(a,a+er))).run();return i.changes},listObjectHandles(){return e.select({handle:U.handle}).from(U).all().map(n=>n.handle)},runReferenceRunIds(){return e.selectDistinct({scopeId:B.scopeId}).from(B).where(mt(B.scopeKind,"run")).all().map(n=>n.scopeId)},reclaimExpired(n){let o=t()-n,r=e.select({handle:B.handle}).from(B),s=e.select({handle:U.handle}).from(U).where(Ni(Nm(U.deletedAt),Dm(U.lastReferencedAt,o),jm(U.handle,r))).all().map(a=>a.handle);if(s.length>0){let a=t();for(let d=0;d<s.length;d+=er)e.update(U).set({deletedAt:a}).where(Nd(U.handle,s.slice(d,d+er))).run()}return s}}}function Di(e){return{recordRunMedia(t,n){e.recordObject(t),e.addReference(t.handle,"run",n)},reclaimRun(t){e.removeRunReferences(t)}}}import{randomUUID as Lm}from"crypto";import{lstat as Um,mkdir as Fm,realpath as Ui,rename as Gm,rm as Bm,writeFile as Wm}from"fs/promises";import{basename as Hm,dirname as Ld,isAbsolute as Vm,join as Dd,resolve as Jm,sep as jd}from"path";function Fi(e){return(t,n,o)=>zm(e,t,n,o)}var Ae=class extends Error{constructor(t){super(t),this.name="MediaWriteError"}};async function zm(e,t,n,o){try{return await qm(e,t,n,o)}catch(r){throw r instanceof Ae?r:new Ae("save_to: the filesystem write failed")}}async function qm(e,t,n,o){Li(o),Km(t);let r=await Ui(e),i=Jm(r,t);ji(r,i);let s=Ld(i);ji(r,await Xm(s)),Li(o),await Fm(s,{recursive:!0});let a=await Ui(s);ji(r,a);let d=Dd(a,Hm(i));await Zm(d),Li(o);let c=Dd(a,`.save-to.${Lm()}.tmp`),u=!1;try{await Wm(c,n,{flag:"wx"}),await Gm(c,d),u=!0}finally{u||await Bm(c,{force:!0}).catch(()=>{})}return{bytesWritten:n.length}}function Km(e){if(e==="")throw new Ae("save_to: the resolved path is empty");if(Vm(e)||e.startsWith("\\")||/^[A-Za-z]:[\\/]/.test(e))throw new Ae("save_to: the resolved path must be relative");if(e.split(/[\\/]/).includes(".."))throw new Ae('save_to: the resolved path must not contain a ".." segment')}function ji(e,t){let n=e.endsWith(jd)?e:e+jd;if(t!==e&&!t.startsWith(n))throw new Ae("save_to: the resolved path escapes the scope root")}async function Xm(e){let t=e;for(;;)try{return await Ui(t)}catch{let n=Ld(t);if(n===t)throw new Ae("save_to: no existing ancestor directory could be resolved");t=n}}async function Zm(e){try{if((await Um(e)).isSymbolicLink())throw new Ae("save_to: refusing to write through a symlink")}catch(t){if(Ym(t)==="ENOENT")return;throw t}}function Ym(e){if(typeof e=="object"&&e!==null&&"code"in e){let{code:t}=e;return typeof t=="string"?t:void 0}}function Li(e){if(e?.aborted===!0)throw new Ae("save_to: the write was aborted")}import{and as Ud,asc as Fd,eq as wn,isNull as Gd}from"drizzle-orm";function Wd(e){return Oo.find(t=>t===e)??"chat"}var $t=class extends Error{constructor(t,n){super(t,n),this.name="ModelCatalogCapabilitiesError"}};function Qm(e){let t;try{t=JSON.parse(e)}catch(n){throw new $t("model_catalog.capabilities is not valid JSON",{cause:n})}if(t===null||typeof t!="object"||Array.isArray(t))throw new $t("model_catalog.capabilities is not a JSON object");return{...t}}function Bd(e){return{modelId:e.modelId,providerId:e.providerId,mediaSurface:Wd(e.mediaSurface),supportsToolCalling:e.supportsToolCalling,supportsVision:e.supportsVision,supportsStreaming:e.supportsStreaming,supportsJsonMode:e.supportsJsonMode,capabilities:Qm(e.capabilities),mediaImageCostMicrocents:e.mediaImageCostMicrocents,mediaAudioCostMicrocents:e.mediaAudioCostMicrocents,mediaVideoCostMicrocents:e.mediaVideoCostMicrocents}}function Gi(e,t){let n=i=>e.select().from(G).where(Ud(wn(G.modelId,i),wn(G.isActive,!0),Gd(G.deletedAt))).orderBy(Fd(G.createdAt),Fd(G.id)).get(),o=i=>e.select().from(G).where(wn(G.id,i)).get();return{resolveMediaSurface:i=>{let s=n(i);return s===void 0?void 0:Wd(s.mediaSurface)},getByModelId:i=>{let s=n(i);return s===void 0?void 0:Bd(s)},upsert:i=>{let s=t.now(),a=e.select().from(G).where(Ud(wn(G.providerId,i.providerId),wn(G.modelId,i.modelId),Gd(G.deletedAt))).get(),d=a?.id??t.uuid(),c={displayName:i.displayName,contextWindowTokens:i.contextWindowTokens,maxOutputTokens:i.maxOutputTokens,mediaSurface:i.mediaSurface??"chat",supportsVision:i.supportsVision??!1,capabilities:JSON.stringify(i.capabilities??{}),mediaImageCostMicrocents:i.mediaImageCostMicrocents??null,mediaAudioCostMicrocents:i.mediaAudioCostMicrocents??null,mediaVideoCostMicrocents:i.mediaVideoCostMicrocents??null,isActive:!0,updatedAt:s};if(a===void 0){let f={id:d,providerId:i.providerId,modelId:i.modelId,createdAt:s,...c};e.insert(G).values(f).run()}else e.update(G).set(c).where(wn(G.id,d)).run();let u=o(d);if(u===void 0)throw new Error(`model_catalog '${i.modelId}' not found after upsert`);return Bd(u)}}}import{readFileSync as ch,statSync as uh}from"fs";import{homedir as lh}from"os";import{join as Wi}from"path";import{parse as ph}from"smol-toml";var Qe=class extends l{filePath;constructor(t,n,o){super("config_error",`${t}: ${n}`,o),this.name="ConfigError",this.filePath=t}};import{chmodSync as eh,mkdirSync as th,statSync as nh}from"fs";import{homedir as Hd}from"os";import{dirname as oh,join as Bi,resolve as rh}from"path";function Nt(e=Hd()){return Bi(e,".relavium")}function Vd(e=Hd()){let t=Nt(e);return th(Bi(t,"tmp"),{recursive:!0}),eh(t,448),t}function ih(e){try{return nh(e).isDirectory()}catch{return!1}}function tr(e){let t=rh(e);for(;;){let n=Bi(t,".relavium");if(ih(n))return n;let o=oh(t);if(o===t)return;t=o}}function Jd(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,mediaCostEstimate:o?.defaults?.media_cost_estimate??n?.defaults?.media_cost_estimate,mediaGcGraceMs:sh(o,n),chat:ah(o,n),variables:{...n?.variables,...o?.variables},mcpServers:dh(t?.mcp_servers,n?.mcp_servers,o?.mcp_servers)}}function sh(e,t){let n=e?.defaults?.media_gc_grace_days??t?.defaults?.media_gc_grace_days;return n===void 0?void 0:n*864e5}function ah(e,t){let n=e?.chat,o=t?.chat;return{defaultModel:n?.default_model??o?.default_model,fsScope:n?.fs_scope??o?.fs_scope,maxTurns:n?.max_turns??o?.max_turns,maxMessages:n?.max_messages??o?.max_messages,maxCostMicrocents:n?.max_cost_microcents??o?.max_cost_microcents,onExceed:n?.on_exceed??o?.on_exceed}}function dh(...e){let t=new Map;for(let n of e)for(let o of n??[])t.set(o.name,o);return[...t.values()]}var zd=256*1024;function Hi(e,t){let n;try{n=uh(e)}catch(s){if(fh(s)==="ENOENT")return;throw new Qe(e,"could not be read.",{cause:s})}if(!n.isFile())throw new Qe(e,"is not a regular file.");if(n.size>zd)throw new Qe(e,`exceeds the ${zd}-byte config size limit.`);let o;try{o=ch(e,"utf8")}catch(s){throw new Qe(e,"could not be read.",{cause:s})}let r;try{r=ph(o)}catch(s){throw new Qe(e,`is not valid TOML${mh(s)}.`,{cause:s})}let i=t.safeParse(r);if(!i.success)throw new Qe(e,`is invalid \u2014 ${hh(i.error)}.`,{cause:i.error});return i.data}function W(e){let t=e.home??lh(),n=e.configPath??Wi(Nt(t),"config.toml"),o=Hi(n,_d),r=tr(e.cwd),i,s;return r!==void 0&&(i=Hi(Wi(r,"workspace.toml"),yi),s=Hi(Wi(r,"project.toml"),yi)),{config:Jd({global:o,workspace:i,project:s}),projectConfigDir:r,homeDir:t}}function fh(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}function mh(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 hh(e){let t=e.issues[0];if(t===void 0)return"failed schema validation";let n=t.path.join("."),o=gh(t);return n.length>0?`${n}: ${o}`:o}function gh(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 qd}from"fs";import{join as yh}from"path";function He(e){Vd(e);let t=yh(Nt(e),"history.db"),n=bi(t);try{_i(n.db),qd(t,384);for(let o of["-wal","-shm"])try{qd(`${t}${o}`,384)}catch(r){if(wh(r)!=="ENOENT")throw r}}catch(o){throw n.sqlite.close(),o}return{db:n.db,close:()=>{n.sqlite.open&&n.sqlite.close()}}}function wh(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}import{z as p}from"zod";var Q=p.string().min(1),Dt=p.number().int().nonnegative(),jt=p.enum(Ze),bn=p.object({name:Q,description:p.string().optional(),parameters:p.custom(e=>typeof e=="object"&&e!==null&&!Array.isArray(e),{message:"parameters must be a JSON-Schema object"})}),Kd=p.enum(["user","assistant","tool"]),nr=p.object({role:Kd,content:p.array(Go)}).superRefine((e,t)=>{let n=0,o=0;e.content.forEach((r,i)=>{if(r.type==="media"){n+=1,o+=ri(r,t,["content",i]);return}r.type==="tool_result"&&kt(r.result)&&t.addIssue({code:p.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>cn.maxPartsPerMessage&&t.addIssue({code:p.ZodIssueCode.custom,message:`a message may carry at most ${cn.maxPartsPerMessage} media parts (got ${n})`,path:["content"]}),o>cn.maxInlineBytesPerMessage&&t.addIssue({code:p.ZodIssueCode.custom,message:`a message may carry at most ${cn.maxInlineBytesPerMessage} decoded inline media bytes in total (got ${o})`,path:["content"]})}),Xd=p.union([p.enum(["auto","none","required"]),p.object({name:Q})]),or=p.discriminatedUnion("type",[p.object({type:p.literal("text")}),p.object({type:p.literal("json"),schema:p.custom(e=>typeof e=="object"&&e!==null&&!Array.isArray(e),{message:"responseFormat.schema must be a JSON-Schema object"}),name:Q.optional(),strict:p.boolean().optional()})]),Zd=p.object({modality:p.enum(Be),direction:p.enum(["input","output"]),units:Dt,unit:p.enum(["count","second"])}),Vi=p.object({inputTokens:Dt,outputTokens:Dt,cacheReadTokens:Dt.optional(),cacheWriteTokens:Dt.optional(),reasoningTokens:Dt.optional(),mediaUnits:p.array(Zd).optional(),costMicrocents:Dt.optional()}).refine(e=>e.reasoningTokens===void 0||e.reasoningTokens<=e.outputTokens,{message:"reasoningTokens must be \u2264 outputTokens (reasoning is counted inside output)",path:["reasoningTokens"]}),Yd=p.array(p.enum(rn)),Qd=p.object({input:p.object({image:p.boolean(),audio:p.boolean(),video:p.boolean(),document:p.boolean()}),outputCombinations:p.array(Yd),surface:p.enum(Oo).optional()}),ro=p.object({tools:p.boolean(),streaming:p.boolean(),parallelToolCalls:p.boolean(),vision:p.boolean(),promptCache:p.boolean(),reasoning:p.boolean(),media:Qd}).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"]}),ec=p.enum(["rate_limit","overloaded","timeout","transport","auth","bad_request","content_filter","cancelled","unknown"]),Ji=p.object({kind:ec,retryable:p.boolean(),code:Q.optional(),status:p.number().int().optional(),provider:jt,message:p.string(),cause:p.unknown().optional()}),tc=p.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)"}),bh=p.object({model:Q,system:p.string().optional(),messages:p.array(nr),tools:p.array(bn).optional(),toolChoice:Xd.optional(),responseFormat:or.optional(),outputModalities:p.array(p.enum(rn)).optional(),temperature:p.number().optional(),maxTokens:p.number().int().positive().optional(),stopSequences:p.array(p.string()).optional(),signal:tc.optional(),providerOptions:p.record(p.string(),p.unknown()).optional()}),_h=p.object({content:p.array(Go),stopReason:eo,usage:Vi,raw:p.unknown()}).superRefine((e,t)=>{e.content.forEach((n,o)=>{n.type==="tool_result"&&kt(n.result)&&t.addIssue({code:p.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"]})})}),zi=p.discriminatedUnion("type",[p.object({type:p.literal("text_delta"),text:p.string()}),p.object({type:p.literal("tool_call_start"),id:Q,name:Q}),p.object({type:p.literal("tool_call_delta"),id:Q,argsJsonDelta:p.string()}),p.object({type:p.literal("tool_call_end"),id:Q}),p.object({type:p.literal("reasoning_start"),id:Q}),p.object({type:p.literal("reasoning_delta"),id:Q,text:p.string()}),p.object({type:p.literal("reasoning_end"),id:Q,signature:p.string().optional(),redacted:p.boolean().optional()}),p.object({type:p.literal("media_start"),id:Q,mimeType:ct}),p.object({type:p.literal("media_delta"),id:Q,progress:p.number().min(0).max(1).optional(),partialRef:p.string().regex(We,"must be a media://sha256-<64hex> handle").optional()}),p.object({type:p.literal("media_end"),id:Q,media:qn}),p.object({type:p.literal("tool_result"),id:Q,name:Q,result:p.unknown(),isError:p.boolean().optional(),providerExecuted:p.literal(!0),media:p.array(qn).optional()}),p.object({type:p.literal("stop"),stopReason:eo,usage:Vi}),p.object({type:p.literal("error"),error:Ji})]).superRefine((e,t)=>{e.type==="tool_result"&&kt(e.result)&&t.addIssue({code:p.ZodIssueCode.custom,message:"raw media bytes are forbidden inside tool_result.result \u2014 normalize them into a typed media part (ADR-0031)",path:["result"]})}),Sh=p.object({model:Q,prompt:Q,modality:p.enum(Be),mimeType:ct.optional(),count:p.number().int().positive().optional(),durationSeconds:p.number().positive().optional(),signal:tc.optional(),providerOptions:p.record(p.string(),p.unknown()).optional()}),vh=p.object({media:Kn.optional(),jobId:Q.optional(),raw:p.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"]}),xh=p.discriminatedUnion("state",[p.object({state:p.literal("pending"),progress:p.number().min(0).max(1).optional()}),p.object({state:p.literal("done"),media:Kn}),p.object({state:p.literal("failed"),error:Ji})]);var et=class extends Error{},Lt=class extends et{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}},Le=class extends et{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 kh(e){let t=It(e);return t===null?"<non-HTTPS or malformed base URL>":`https://${t.host}`}var ht=class extends et{code="invalid_base_url";url;constructor(t,n){let o=kh(t);super(`invalid base URL '${o}': ${n}`),this.name="InvalidBaseUrlError",this.url=o}},ge=class extends et{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 qi(e){let t=[];return e.tools!==void 0&&e.tools.length>0&&t.push("tools"),t}function Ki(e,t){let n=e.media.input;for(let o of t.messages){let r=Ch(n,o);if(r!==null)return r}return Mh(e,t.outputModalities)}function Ch(e,t){for(let n of t.content){let o=Ih(e,n);if(o!==null)return o}return null}function Ih(e,t){return t.type==="media"?nc(e,t.mimeType):t.type==="tool_result"&&Array.isArray(t.media)?Eh(e,t.media):null}function Eh(e,t){for(let n of t){let o=nc(e,n.mimeType," in tool_result");if(o!==null)return o}return null}function nc(e,t,n=""){let o=ue(t);return o===void 0||e[o]?null:`input modality '${o}' (${t})${n} not supported`}function rr(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 Mh(e,t){return t===void 0||rr(e.media.outputCombinations,t)?null:`output modalities [${t.join(", ")}] not a supported output combination`}function oc(e,t){for(let n of qi(t))if(!e[n])return`'${n}' capability not supported`;return Ki(e,t)}function Ve(e,t,n){for(let o of qi(n))if(!t[o])throw new ge(e,o)}function Ut(e,t){if(!t.streaming)throw new ge(e,"streaming")}var ic=new Set(["rate_limit","overloaded","timeout","transport"]),ir=e=>ic.has(e);function Ft(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 E=class extends Error{llmError;constructor(t){super(t.message),this.name="LlmProviderError",this.llmError=t}};function rc(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 k(e){let t={kind:e.kind,retryable:ir(e.kind),provider:e.provider,message:rc(e.message)};return e.code!==void 0&&(t.code=rc(e.code)),e.status!==void 0&&(t.status=e.status),e.cause!==void 0&&(t.cause=e.cause),t}var O=e=>Math.round(e*1e8),io={"claude-fable-5":{provider:"anthropic",nativeId:"claude-fable-5",displayName:"Claude Fable 5",contextWindowTokens:1e6,maxOutputTokens:128e3,inputPerMtokMicrocents:O(10),outputPerMtokMicrocents:O(50),cachedInputPerMtokMicrocents:O(1),cacheWritePerMtokMicrocents:O(12.5)},"claude-opus-4-8":{provider:"anthropic",nativeId:"claude-opus-4-8",displayName:"Claude Opus 4.8",contextWindowTokens:1e6,maxOutputTokens:128e3,inputPerMtokMicrocents:O(5),outputPerMtokMicrocents:O(25),cachedInputPerMtokMicrocents:O(.5),cacheWritePerMtokMicrocents:O(6.25)},"claude-sonnet-4-6":{provider:"anthropic",nativeId:"claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",contextWindowTokens:1e6,maxOutputTokens:64e3,inputPerMtokMicrocents:O(3),outputPerMtokMicrocents:O(15),cachedInputPerMtokMicrocents:O(.3),cacheWritePerMtokMicrocents:O(3.75)},"claude-haiku-4-5":{provider:"anthropic",nativeId:"claude-haiku-4-5",displayName:"Claude Haiku 4.5",contextWindowTokens:2e5,maxOutputTokens:64e3,inputPerMtokMicrocents:O(1),outputPerMtokMicrocents:O(5),cachedInputPerMtokMicrocents:O(.1),cacheWritePerMtokMicrocents:O(1.25)},"gpt-5.5":{provider:"openai",nativeId:"gpt-5.5",displayName:"GPT-5.5",contextWindowTokens:1e6,maxOutputTokens:128e3,inputPerMtokMicrocents:O(5),outputPerMtokMicrocents:O(30),cachedInputPerMtokMicrocents:O(.5)},"gpt-5.4-mini":{provider:"openai",nativeId:"gpt-5.4-mini",displayName:"GPT-5.4 mini",contextWindowTokens:4e5,maxOutputTokens:128e3,inputPerMtokMicrocents:O(.75),outputPerMtokMicrocents:O(4.5),cachedInputPerMtokMicrocents:O(.075)},"gemini-2.5-flash":{provider:"gemini",nativeId:"gemini-2.5-flash",displayName:"Gemini 2.5 Flash",contextWindowTokens:1048576,maxOutputTokens:65536,inputPerMtokMicrocents:O(.3),outputPerMtokMicrocents:O(2.5),cachedInputPerMtokMicrocents:O(.03)},"gemini-2.5-pro":{provider:"gemini",nativeId:"gemini-2.5-pro",displayName:"Gemini 2.5 Pro",contextWindowTokens:1048576,maxOutputTokens:65536,inputPerMtokMicrocents:O(1.25),outputPerMtokMicrocents:O(10),cachedInputPerMtokMicrocents:O(.125)},"deepseek-chat":{provider:"deepseek",nativeId:"deepseek-chat",displayName:"DeepSeek-V4-Flash (chat)",contextWindowTokens:1e6,maxOutputTokens:384e3,inputPerMtokMicrocents:O(.14),outputPerMtokMicrocents:O(.28),cachedInputPerMtokMicrocents:O(.0028)},"deepseek-reasoner":{provider:"deepseek",nativeId:"deepseek-reasoner",displayName:"DeepSeek-V4-Flash (reasoner)",contextWindowTokens:1e6,maxOutputTokens:384e3,inputPerMtokMicrocents:O(.435),outputPerMtokMicrocents:O(.87),cachedInputPerMtokMicrocents:O(.003625)}},Rh=new Set(Object.keys(io));function Xi(e){return Rh.has(e)}var Zi=Object.keys(io).filter(Xi);function ao(e){if(!Xi(e))throw new Lt(e,Zi);return io[e]}var Ah=1e6;function sr(e,t){let n=ao(e),o=t.cacheReadTokens??0,r=t.cacheWriteTokens??0,i=(s,a)=>Math.round(s*a/Ah);return i(t.inputTokens,n.inputPerMtokMicrocents)+i(t.outputTokens,n.outputPerMtokMicrocents)+i(o,n.cachedInputPerMtokMicrocents)+i(r,n.cacheWritePerMtokMicrocents??0)+sc(n,t.mediaUnits)}function Th(e,t){return e==="image"?t==="count":t==="second"}function sc(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||!Th(o.modality,o.unit)||(n+=Math.round(o.units*r))}return n}var so=class{#e=0;record(t,n){let o=sr(t,n);return this.#e+=o,{inputTokens:n.inputTokens,outputTokens:n.outputTokens,costMicrocents:o,cumulativeCostMicrocents:this.#e}}get cumulativeCostMicrocents(){return this.#e}};var Oh=1e6;function Yi(e,t){let n=ao(e);return t<=0?0:Math.round(t*n.outputPerMtokMicrocents/Oh)}function Qi(e,t){let n=ao(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 Ph=250,$h=8e3,Nh=3e4;function ac(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 Dh(e,t,n,o){let r=e==="exponential"?n*2**t:n*(t+1);return Math.min(r,o)}function jh(e){return e.type!=="stop"&&e.type!=="error"}function Lh(e){return e.messages.some(t=>t.content.some(n=>n.type==="media"&&n.source.kind==="handle"))}var co=class{#e;#n;#r;#t;#s;#c;#o;#g=new Map;#w=new Map;#u;#v=new Set;#y;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.#y=o.provider.id,this.#e=t,this.#n=n,this.#r=n.sleep,this.#t=n.now??Date.now,this.#s=n.backoffBaseMs??Ph,this.#c=n.backoffMaxMs??$h,this.#o=n.cooldownMs??Nh}async generate(t){let n=new ar(t,this.#u);try{for(let o of this.#e){this.#O(t,o.provider.id);let r=this.#E(o,n.previewRequest(o));if(r!==void 0){this.#b(n.next(o,{outcome:"skipped",skipReason:r}));continue}let i=n.beginEntry(o),s=await this.#h(o,i,n);if(s===void 0)continue;let a=await this.#x(o,s,t,n);if(a!==void 0)return a}throw new E(n.lastError??this.#l())}finally{this.#u=n.lastProvider}}async#x(t,n,o,r){let i=t.maxAttempts,s=0;for(let a=1;a<=i+s;a+=1){this.#O(o,t.provider.id);let d=await this.#d(t,n,r);if(d.status==="success")return d.result;r.lastError=d.error;let c=await this.#k(t,d.error);if(c==="fatal")throw new E(d.error);if(c==="auth-refreshed"){s+=1;continue}a<i+s&&await this.#$(t,a-1)}}async*stream(t){let n=new ar(t,this.#u);try{for(let o of this.#e){if(this.#R(t)){yield{type:"error",error:this.#a(o.provider.id)};return}let r=this.#E(o,n.previewRequest(o),{streaming:!0});if(r!==void 0){this.#b(n.next(o,{outcome:"skipped",skipReason:r}));continue}let i=n.beginEntry(o),s=await this.#h(o,i,n);if(s===void 0)continue;if((yield*this.#i(o,s,t,n))==="done")return}yield{type:"error",error:n.lastError??this.#l()}}finally{this.#u=n.lastProvider}}async*#i(t,n,o,r){let i=t.maxAttempts,s=0;for(let a=1;a<=i+s;a+=1){if(this.#R(o))return yield{type:"error",error:this.#a(t.provider.id)},"done";let d=r.next(t),c={committed:!1},u=yield*this.#p(t,n,d,c);if(c.committed||u===void 0)return"done";r.lastError=u;let f=await this.#k(t,u);if(f==="fatal")return yield{type:"error",error:u},"done";if(f==="auth-refreshed"){s+=1;continue}a<i+s&&await this.#$(t,a-1)}return"advance"}async#d(t,n,o){let r=o.next(t);try{let i=n.maxTokens;await this.#n.preAttempt?.({model:t.model,...i===void 0?{}:{maxTokens:i}});let s=await this.#M(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.#f(this.#P(i,t.provider.id),n,t.provider.id);return this.#b({...r,outcome:"failed",error:s}),{status:"error",error:s}}}async*#p(t,n,o,r){let i;try{let s=n.maxTokens;await this.#n.preAttempt?.({model:t.model,...s===void 0?{}:{maxTokens:s}});let a=await this.#M(t.provider.id);for await(let d of t.provider.stream(n,a)){if(d.type==="error"){let c=this.#f(d.error,n,t.provider.id);return this.#b({...o,outcome:"failed",error:c}),r.committed?(yield{type:"error",error:c},void 0):c}d.type==="stop"&&(i=d.usage),r.committed=r.committed||jh(d),yield d}}catch(s){let a=this.#f(this.#P(s,t.provider.id),n,t.provider.id);return this.#b({...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#k(t,n){if(n.kind==="auth"){let o=this.#n.onAuthError;return o!==void 0&&!this.#v.has(t.provider.id)&&(this.#v.add(t.provider.id),await this.#S(o,t.provider.id))?"auth-refreshed":"fatal"}return n.kind==="rate_limit"?(this.#g.set(t.provider.id,this.#t()+this.#o),"retryable"):ir(n.kind)?"retryable":"fatal"}async#S(t,n){try{return await t(n)}catch{return!1}}async#h(t,n,o){try{return await this.#C(n,t.provider.id)}catch{let r=k({provider:t.provider.id,kind:"unknown",message:"media re-materialization failed before egress"});o.lastError=r,this.#b({...o.next(t),error:r});return}}async#C(t,n){let o=this.#n.resolveForEgress;if(o===void 0||!Lh(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.#T(a.source.ref,n,o)}:a);r.push({...i,content:s})}return{...t,messages:r}}async#T(t,n,o){let r=`${n}\0${t}`,i=this.#w.get(r);if(i!==void 0)return i;let s=await o(t,n);return s.kind!=="base64"&&this.#w.set(r,s),s}#E(t,n,o){let r=this.#g.get(t.provider.id);if(r!==void 0&&this.#t()<r)return"provider in rate-limit cooldown";if(o?.streaming===!0&&!t.provider.supports.streaming)return"provider does not support streaming";let i=oc(t.provider.supports,n);if(i!==null)return`provider cannot serve the request: ${i}`}#O(t,n){if(this.#R(t))throw new E(this.#a(n))}#R(t){return t.signal?.aborted===!0}#a(t){return k({provider:t,kind:"cancelled",message:"request aborted"})}#f(t,n,o){return this.#R(n)?this.#a(o):t}#l(){return k({provider:this.#y,kind:"unknown",message:"fallback chain exhausted: no provider could serve the request"})}#P(t,n){return t instanceof E?t.llmError:k({provider:n,kind:"unknown",message:t instanceof Error?t.message:"unknown provider failure",cause:t})}async#$(t,n){let o=Dh(t.backoff??"exponential",n,this.#s,this.#c);await this.#r(o)}async#M(t){try{return await this.#n.keyFor(t)}catch{throw new E(k({provider:t,kind:"auth",message:`credential resolution failed for provider ${t}`}))}}#N(t,n,o){if(o===void 0){this.#b({...t,outcome:"succeeded"});return}let r;try{r=this.#n.costTracker?.record(n,o)}catch{r=void 0}this.#b({...t,outcome:"succeeded",usage:o,...r===void 0?{}:{cost:r}})}#b(t){this.#n.onAttempt?.(t)}},ar=class{#e;#n;#r=0;lastError;constructor(t,n){this.#e=t,this.#n=n}get lastProvider(){return this.#n}previewRequest(t){return{...this.#e,model:t.model}}beginEntry(t){let n=t.provider.id;return this.#n!==void 0&&this.#n!==n&&(this.#e=ac(this.#e)),this.#n=n,{...this.#e,model:t.model}}next(t,n){return this.#r+=1,{attemptNumber:this.#r,provider:t.provider.id,model:t.model,outcome:n?.outcome??"failed",...n?.skipReason===void 0?{}:{skipReason:n.skipReason}}}};function Gt(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:cc(r,n),...i}]};default:{let s=t;throw new Error(`unhandled provider id: ${String(s)}`)}}}var es=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Uh=new Set(["type","description","enum","properties","required","items","anyOf","nullable","format","minItems","maxItems","minimum","maximum","minLength","maxLength","pattern","default"]),Fh=new Set(["date-time","int32","int64","float","double"]);function Gh(e){return typeof e=="string"&&Fh.has(e)?{format:e}:{}}function Bh(e,t){let n=e.filter(o=>o!=="null");if(n.length!==1)throw new Le("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 dc=100;function Wh(e,t,n){let o={};for(let[r,i]of Object.entries(e))Object.defineProperty(o,r,{value:dr(i,t,n+1),enumerable:!0,writable:!0,configurable:!0});return o}function Hh(e,t,n,o){return e==="format"?Gh(t):e==="type"&&Array.isArray(t)?Bh(t,n):e==="properties"&&es(t)?{properties:Wh(t,n,o)}:e==="items"||e==="anyOf"?{[e]:dr(t,n,o+1)}:{[e]:t}}function dr(e,t,n){if(n>dc)throw new Le("gemini",t,`schema nesting exceeds the maximum supported depth (${dc})`);if(Array.isArray(e))return e.map(i=>dr(i,t,n+1));if(!es(e))return e;if("$ref"in e)throw new Le("gemini",t,"`$ref` is not expressible in the Gemini schema subset");let o={},r=!1;for(let[i,s]of Object.entries(e)){if(!Uh.has(i))continue;let a=Hh(i,s,t,n);i==="type"&&"nullable"in a&&(r=!0),Object.assign(o,a)}return r&&(o.nullable=!0),o}function cc(e,t){let n=dr(e,t,0);if(!es(n))throw new Le("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 Le("gemini",t,"tool parameters must be an object schema");return n}var _n=class{#e=0;#n=new Map;synthesize(t){let n=`gemini-tool-${this.#e}-${t}`;this.#e+=1;let o=this.#n.get(t)??[];return o.push(n),this.#n.set(t,o),n}resolveResponse(t){let n=this.#n.get(t)?.shift();if(n===void 0)throw new Le("gemini",t,"functionResponse has no matching synthesized tool-call id");return n}};function Bt(e,t){if(t.id.length===0||t.name.length===0)throw new Le(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 lo from"@anthropic-ai/sdk";function ye(e){return typeof AbortSignal<"u"&&e instanceof AbortSignal}function tt(e,t,n){for(let r of n.messages)nr.parse(r);let o=Ki(t,n);if(o!==null)throw new ge(e,"media",o)}function cr(e,t){if(t.outputModalities?.some(n=>n!=="text")===!0)throw new ge(e,"media","streaming media output is unsupported \u2014 inline media-out is delivered via generate() (ADR-0046 \xA74)")}var nt="reasoning-0",ts="rlv-mediajob:1:";function uo(e){if(e.length===0)throw new Error("encodeMediaJobId: vendorId must be non-empty");return ts+Buffer.from(e,"utf8").toString("base64url")}function ur(e){if(!e.startsWith(ts))return;let t=e.slice(ts.length);if(t.length===0)return;let n=Buffer.from(t,"base64url").toString("utf8");if(!(n.length===0||uo(n)!==e))return n}var ce="anthropic",Vh=4096,uc=1,Sn={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 pc(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 fc(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 Jh(e){let t=[];for(let n of e)n.type==="text"?t.push({type:"text",text:n.text}):n.type==="tool_use"?t.push(Bt(ce,{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 zh(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 qh(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:zh(n))??(t===void 0?"unknown":Ft(t));return k({provider:ce,kind:o,message:e.message,...t===void 0?{}:{status:t},...n===void 0?{}:{code:n}})}function ns(e){return e instanceof lo.APIUserAbortError?k({provider:ce,kind:"cancelled",message:"request aborted"}):e instanceof lo.APIConnectionTimeoutError?k({provider:ce,kind:"timeout",message:e.message}):e instanceof lo.APIConnectionError?k({provider:ce,kind:"transport",message:e.message}):e instanceof lo.APIError?qh(e):e instanceof Error&&e.name==="AbortError"?k({provider:ce,kind:"cancelled",message:"request aborted"}):k({provider:ce,kind:"unknown",message:e instanceof Error?e.message:"unknown provider error"})}function Kh(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 po(e){return new E(k({provider:ce,kind:"bad_request",message:e}))}var mc=["image/jpeg","image/png","image/gif","image/webp"];function Xh(e){return mc.includes(e)}function Zh(e){let t=ue(e.mimeType);if(t==="image"){if(e.source.kind!=="base64")throw po(`Anthropic does not support ${e.source.kind}-source image input \u2014 use base64 (1.AF)`);if(!Xh(e.mimeType))throw po(`Anthropic image input supports only ${mc.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 po(`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 po(`Anthropic does not support ${t??"unknown"} media input`)}function hc(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(Kh(e))}function Yh(e){let t=[];for(let n of e){if(n.type==="media"){t.push(Zh(n));continue}hc(n,t)}return t}function Qh(e){if(e.role==="assistant"){let t=[];for(let n of e.content){if(n.type==="media")throw po("assistant-role media is not supported (provider output media is not replayed)");hc(n,t)}return{role:"assistant",content:t}}return{role:"user",content:Yh(e.content)}}function lc(e){return typeof e=="string"?[{type:"text",text:e}]:e}function eg(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:[...lc(o.content),...lc(n.content)]}:t.push(n)}return t}function tg(e){return e==="auto"?{type:"auto"}:e==="none"?{type:"none"}:e==="required"?{type:"any"}:{type:"tool",name:e.name}}function ng(e){let t=Gt(e,ce);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 gc(e){let t={model:e.model,max_tokens:e.maxTokens??Vh,messages:eg(e.messages.map(Qh))};if(e.system!==void 0&&(t.system=e.system),e.tools!==void 0&&(t.tools=e.tools.map(ng)),e.toolChoice!==void 0&&(t.tool_choice=tg(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>uc)throw new E(k({provider:ce,kind:"bad_request",message:`temperature ${String(e.temperature)} is outside Anthropic's accepted range [0, ${String(uc)}]`}));t.temperature=e.temperature}return e.stopSequences!==void 0&&(t.stop_sequences=e.stopSequences),e.providerOptions===void 0?t:{...e.providerOptions,...t}}function yc(e){return ye(e.signal)?{signal:e.signal}:{}}function og(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 rg(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 ig(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 sg(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 ag(e,t,n){return e.type==="content_block_start"?rg(e,t,n):e.type==="content_block_delta"?ig(e,t,n):sg(e,t,n)}async function*dg(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({...gc(t),stream:!0},yc(t))}catch(d){yield{type:"error",error:d instanceof E?d.llmError:ns(d)};return}try{for await(let d of a)if(d.type==="message_start")r=fc(d.message.usage);else if(d.type==="message_delta")i=pc(d.delta.stop_reason),r=og(r,d.usage),s=!0;else if(d.type==="content_block_start"||d.type==="content_block_delta"||d.type==="content_block_stop"){let c=ag(d,n,o);c!==void 0&&(yield c)}}catch(d){yield{type:"error",error:ns(d)};return}if(!s){yield{type:"error",error:k({provider:ce,kind:"transport",message:"stream ended before message_delta (truncated response)"})};return}yield{type:"stop",stopReason:i,usage:r}}function os(e={}){let t=n=>new lo({apiKey:n,...e.fetch===void 0?{}:{fetch:e.fetch},...e.maxRetries===void 0?{}:{maxRetries:e.maxRetries}});return{id:ce,supports:Sn,async generate(n,o){Ve(ce,Sn,n),tt(ce,Sn,n);let r=t(o),i;try{i=await r.messages.create({...gc(n),stream:!1},yc(n))}catch(s){throw s instanceof E?s:new E(ns(s))}return{content:Jh(i.content),stopReason:pc(i.stop_reason),usage:fc(i.usage),raw:i}},stream(n,o){return Ve(ce,Sn,n),Ut(ce,Sn),tt(ce,Sn,n),dg(t(o),n)}}}var jE=os();import{GenerateVideosOperation as cg,GoogleGenAI as fo}from"@google/genai";var j="gemini",vn={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"}},bc={inputTokens:0,outputTokens:0},_c=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function is(e){let t=(e??"").split(";")[0]?.trim()??"";return ct.safeParse(t).success?t:""}function Sc(e){let t=e?.blockReason;return t!==void 0&&t!=="BLOCKED_REASON_UNSPECIFIED"}function ss(e){let t={};for(let[n,o]of Object.entries(e))n!=="httpOptions"&&n!=="abortSignal"&&(t[n]=o);return t}function vc(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 xc(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 ug(e,t){let n=[];for(let o of e.candidates?.[0]?.content?.parts??[]){let r=lg(o,t);r!==void 0&&n.push(r)}return n}function lg(e,t){if(e.functionCall!==void 0){let o=e.functionCall.name??"";return Bt(j,{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=is(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 xn(e){if(e instanceof Error&&e.name==="AbortError")return k({provider:j,kind:"cancelled",message:"request aborted"});if(_c(e)&&typeof e.status=="number"){let t=e.status,n=typeof e.message=="string"?e.message:"gemini API error";return k({provider:j,kind:Ft(t),message:n,status:t})}return k({provider:j,kind:"unknown",message:e instanceof Error?e.message:"unknown provider error"})}function pg(e){return e==="none"?{functionCallingConfig:{mode:"NONE"}}:e==="required"?{functionCallingConfig:{mode:"ANY"}}:e==="auto"?{functionCallingConfig:{mode:"AUTO"}}:{functionCallingConfig:{mode:"ANY",allowedFunctionNames:[e.name]}}}function fg(e){let t=Gt(e,j);if(!("functionDeclarations"in t))throw new Error("unreachable: the Gemini wire shape always carries functionDeclarations");return{functionDeclarations:t.functionDeclarations}}function mg(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 E(k({provider:j,kind:"bad_request",message:"assistant-role media is not supported (provider output media is not replayed)"}));let r=gg(o,t);r.length>0&&n.push({role:o.role==="assistant"?"model":"user",parts:r})}return n}function hg(e){let t=ue(e.mimeType);if(t===void 0)throw new E(k({provider:j,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 E(k({provider:j,kind:"bad_request",message:`${e.source.kind} source is unsupported for ${t} media`}))}function gg(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:yg(o.result)}})}else o.type==="media"&&n.push(hg(o));return n}function yg(e){return _c(e)?e:{result:e}}var wg={text:"TEXT",image:"IMAGE",audio:"AUDIO",video:"VIDEO"};function wc(e){let t={};e.system!==void 0&&(t.systemInstruction=e.system),e.tools!==void 0&&(t.tools=e.tools.map(fg)),e.toolChoice!==void 0&&(t.toolConfig=pg(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=>wg[o])),e.stopSequences!==void 0&&(t.stopSequences=e.stopSequences),ye(e.signal)&&(t.abortSignal=e.signal);let n=e.providerOptions===void 0?t:{...ss(e.providerOptions),...t};return{model:e.model,contents:mg(e.messages),config:n}}var bg={async generate(e,t){return new fo({apiKey:t}).models.generateContent(e)},async stream(e,t){return new fo({apiKey:t}).models.generateContentStream(e)},async generateImages(e,t){return new fo({apiKey:t}).models.generateImages(e)},async generateVideos(e,t){return{name:(await new fo({apiKey:t}).models.generateVideos(e)).name}},async pollVideo(e,t,n){let o=new fo({apiKey:t}),r=new cg;r.name=e;let i=await o.operations.getVideosOperation({operation:r,...ye(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 rs(e,t){e.reasoningOpen&&(t.push(e.reasoningSignature===void 0?{type:"reasoning_end",id:nt}:{type:"reasoning_end",id:nt,signature:e.reasoningSignature}),e.reasoningOpen=!1,e.reasoningSignature=void 0)}function _g(e,t){let n=[];if(e.functionCall!==void 0){let o=e.functionCall.name??"";if(o.length===0)return n;rs(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:nt}),t.reasoningOpen=!0),e.thoughtSignature!==void 0&&e.thoughtSignature.length>0&&(t.reasoningSignature=e.thoughtSignature),n.push({type:"reasoning_delta",id:nt,text:e.text}),n):(rs(t,n),n.push({type:"text_delta",text:e.text}),n)}function Sg(e,t){let n=[];e.usageMetadata&&(t.usage=xc(e.usageMetadata)),Sc(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(..._g(r,t));return n}async function*vg(e,t,n){let o={reasoningOpen:!1,reasoningSignature:void 0,hasToolCalls:!1,sawTerminal:!1,blocked:!1,finishReason:void 0,usage:bc,ids:new _n},r;try{r=await e.stream(t,n)}catch(a){yield{type:"error",error:xn(a)};return}try{for await(let a of r)yield*Sg(a,o)}catch(a){yield{type:"error",error:xn(a)};return}let i=[];if(rs(o,i),yield*i,!o.sawTerminal){yield{type:"error",error:k({provider:j,kind:"transport",message:"stream ended before a finishReason (truncated response)"})};return}yield{type:"stop",stopReason:o.blocked?"content_filter":vc(o.finishReason,o.hasToolCalls),usage:o.usage}}async function xg(e,t,n){if(t.count!==void 0&&t.count>1)throw new E(k({provider:j,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:{...ss(t.providerOptions??{}),numberOfImages:1,...ye(t.signal)?{abortSignal:t.signal}:{}}},n)}catch(a){throw new E(xn(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 E(k({provider:j,kind:"content_filter",message:`Gemini image generation was filtered: ${r.raiFilteredReason}`})):new E(k({provider:j,kind:"bad_request",message:"Gemini image generation returned no base64 image data"}));return{media:{type:"media",mimeType:is(r?.image?.mimeType)||"image/png",source:{kind:"base64",data:i}},raw:o}}async function kg(e,t,n){let o;try{o=await e.generateVideos({model:t.model,prompt:t.prompt,config:{...ss(t.providerOptions??{}),numberOfVideos:1,...t.durationSeconds===void 0?{}:{durationSeconds:t.durationSeconds},...ye(t.signal)?{abortSignal:t.signal}:{}}},n)}catch(r){throw new E(xn(r))}if(!o.name)throw new E(k({provider:j,kind:"bad_request",message:"Veo generateVideos returned no operation name"}));return{jobId:uo(o.name),raw:{name:o.name}}}async function Cg(e,t,n,o){let r=ur(t);if(r===void 0)return{state:"failed",error:k({provider:j,kind:"bad_request",message:"unrecognized Veo media job token"})};let i;try{i=await e.pollVideo(r,n,o)}catch(d){throw new E(xn(d))}if(!i.done)return{state:"pending"};if(i.error)return{state:"failed",error:k({provider:j,kind:"unknown",message:i.error.message??"Veo video job failed"})};let s=i.video,a=is(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:k({provider:j,kind:"content_filter",message:`Veo filtered ${String(i.raiFilteredCount)} video(s) by safety policy`})}:{state:"failed",error:k({provider:j,kind:"bad_request",message:"Veo completed with no video output"})}}function as(e={}){let t=e.transport??bg;return{id:j,supports:vn,async generate(n,o){Ve(j,vn,n),tt(j,vn,n);try{let r=await t.generate(wc(n),o),i=new _n,s=ug(r,i),a=s.some(u=>u.type==="tool_call"),d=r.candidates?.[0],c=d===void 0&&Sc(r.promptFeedback);return{content:s,stopReason:c?"content_filter":vc(d?.finishReason,a),usage:r.usageMetadata?xc(r.usageMetadata):bc,raw:r}}catch(r){throw new E(xn(r))}},stream(n,o){return Ve(j,vn,n),Ut(j,vn),tt(j,vn,n),cr(j,n),vg(t,wc(n),o)},async generateMedia(n,o){if(n.modality==="image")return xg(t,n,o);if(n.modality==="video")return kg(t,n,o);throw new ge(j,"media",`Gemini generateMedia has no surface for '${n.modality}' (image is Imagen; video is Veo; audio is unsupported)`)},async pollMediaJob(n,o,r){return Cg(t,n,o,r)}}}var JE=as();import Ig,{APIConnectionError as Eg,APIConnectionTimeoutError as Mg,APIError as Rg,APIUserAbortError as Ag}from"openai";var Tg="https://api.deepseek.com",Og={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"}},Pg={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"}},kc={inputTokens:0,outputTokens:0};function Cc(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 Ic(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 $g(e){try{return JSON.parse(e.length>0?e:"{}")}catch{return{}}}var xe=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Ng=["wav","aac","mp3","flac","opus","pcm16"];function Dg(e){switch(e){case"image/png":return"png";case"image/jpeg":case"image/jpg":return"jpeg";case"image/webp":return"webp";default:return}}function jg(e){let t=xe(e)?e.image:void 0,n=xe(t)?t.size:void 0;return n==="1024x1024"||n==="1024x1536"||n==="1536x1024"||n==="auto"?n:void 0}function Lg(e){let t=xe(e)?e.image:void 0,n=xe(t)?t.quality:void 0;return n==="low"||n==="medium"||n==="high"||n==="auto"?n:void 0}function Ug(e){let t=e.providerOptions,n=xe(t)?t.audio:void 0;switch(xe(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 Fg(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(Bt(t,{id:r.id,name:r.function.name,args:$g(r.function.arguments)}));return o}function Gg(...e){for(let t of e)if(typeof t=="string"&&t.length>0)return t}function Ec(e){return e==="content_policy_violation"||e==="moderation_blocked"}function Bg(e,t){let n=typeof e.status=="number"?e.status:void 0,o=Gg(e.code,e.type),r;return Ec(o)?r="content_filter":n===void 0?r="unknown":r=Ft(n),k({provider:t,kind:r,message:e.message,...n===void 0?{}:{status:n},...o===void 0?{}:{code:o}})}function Wt(e,t){return e instanceof Ag?k({provider:t,kind:"cancelled",message:"request aborted"}):e instanceof Mg?k({provider:t,kind:"timeout",message:e.message}):e instanceof Eg?k({provider:t,kind:"transport",message:e.message}):e instanceof Rg?Bg(e,t):e instanceof Error&&e.name==="AbortError"?k({provider:t,kind:"cancelled",message:"request aborted"}):k({provider:t,kind:"unknown",message:e instanceof Error?e.message:"unknown provider error"})}function Wg(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(Vg(r,t)));return o?n:n.map(r=>r.type==="text"?r.text:"").join("")}function mo(e,t){return new E({kind:"bad_request",retryable:!1,message:t,provider:e})}function Hg(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 mo(e,`OpenAI input audio supports only mp3 and wav, not '${t}'`)}function Vg(e,t){let n=ue(e.mimeType);if(n==="image"){if(e.source.kind!=="base64")throw mo(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 mo(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:Hg(t,e.mimeType)}}}throw mo(t,`OpenAI does not support ${n??"unknown"} media input`)}function Jg(e){return e.map(t=>t.type==="text"?t.text:"").join("")}function zg(e,t){switch(e.role){case"user":return[{role:"user",content:Wg(e.content,t)}];case"assistant":{if(e.content.some(i=>i.type==="media"))throw mo(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=Jg(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 qg(e,t){let n=Gt(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 Kg(e){return e==="auto"?"auto":e==="none"?"none":e==="required"?"required":{type:"function",function:{name:e.name}}}function Xg(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 Mc(e,t){let n=[];e.system!==void 0&&n.push({role:"system",content:e.system});for(let r of e.messages)n.push(...zg(r,t));let o={model:e.model,messages:n};return e.tools!==void 0&&(o.tools=e.tools.map(r=>qg(r,t))),e.toolChoice!==void 0&&(o.tool_choice=Kg(e.toolChoice)),e.responseFormat?.type==="json"&&(o.response_format=Zg(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=Yg(e.providerOptions)),e.providerOptions===void 0?o:{...e.providerOptions,...o}}function Zg(e,t){return t==="deepseek"?{type:"json_object"}:{type:"json_schema",json_schema:{name:Xg(e.name),schema:e.schema,strict:e.strict??!0}}}function Yg(e){let t=xe(e)?e.audio:void 0,n=xe(t)&&typeof t.voice=="string"?t.voice:"alloy",o=xe(t)?t.format:void 0,r=Ng.find(i=>i===o)??"wav";return{voice:n,format:r}}var Qg={mp3:"audio/mpeg",opus:"audio/opus",aac:"audio/aac",flac:"audio/flac",wav:"audio/wav",pcm:"audio/L16"};function ey(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 ty(e){let t=xe(e)?e.audio:void 0;return xe(t)&&typeof t.voice=="string"?t.voice:"alloy"}function Rc(e){return ye(e.signal)?{signal:e.signal}:{}}function ny(e){let t;try{t=new URL(e)}catch{throw new ht(e,"not a valid URL")}if(t.protocol!=="https:")throw new ht(e,`must use HTTPS, got '${t.protocol}'`);if(Wo(e))throw new ht(e,"must not contain embedded credentials");let n=t.hostname.toLowerCase().replace(/^\[/,"").replace(/\]$/,"");if(Re(n))throw new ht(e,"resolves to a private, loopback, or link-local address")}function oy(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 ry(e){if(typeof e=="object"&&e!==null&&"reasoning_content"in e){let t=e.reasoning_content;return typeof t=="string"?t:void 0}}function ds(e,t){e.reasoningOpen&&(t.push({type:"reasoning_end",id:nt}),e.reasoningOpen=!1)}function iy(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=ry(o.delta);i!==void 0&&i.length>0&&(t.reasoningOpen||(n.push({type:"reasoning_start",id:nt}),t.reasoningOpen=!0),n.push({type:"reasoning_delta",id:nt,text:i})),o.delta.content!=null&&o.delta.content.length>0&&(ds(t,n),n.push({type:"text_delta",text:o.delta.content}));for(let s of o.delta.tool_calls??[])ds(t,n),n.push(...oy(s,t.toolIdByIndex));if(o.finish_reason!=null){ds(t,n),t.sawTerminal=!0,t.stopReason=t.refused?"content_filter":Cc(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*sy(e,t,n){let o={reasoningOpen:!1,stopReason:"stop",sawTerminal:!1,refused:!1,toolIdByIndex:new Map},r=kc,i;try{i=await e.chat.completions.create({...Mc(t,n),stream:!0,stream_options:{include_usage:!0}},Rc(t))}catch(s){yield{type:"error",error:Wt(s,n)};return}try{for await(let s of i){s.usage&&(r=Ic(s.usage));for(let a of iy(s,o))yield a}}catch(s){yield{type:"error",error:Wt(s,n)};return}if(!o.sawTerminal){yield{type:"error",error:k({provider:n,kind:"transport",message:"stream ended before a terminal finish_reason (truncated response)"})};return}yield{type:"stop",stopReason:o.stopReason,usage:r}}function ho(e={}){let t=e.providerId??"openai",n=t==="deepseek"?Pg:Og,o=e.baseURL??(t==="deepseek"?Tg:void 0);e.baseURL!==void 0&&ny(e.baseURL);let r=i=>new Ig({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){Ve(t,n,i),tt(t,n,i);let a=r(s);try{let d=await a.chat.completions.create({...Mc(i,t),stream:!1},Rc(i)),c=d.choices[0],u=typeof c?.message.refusal=="string"&&c.message.refusal.length>0,f=i.outputModalities?.includes("audio")?Ug(i):"audio/wav";return{content:c===void 0?[]:Fg(c.message,t,f),stopReason:u?"content_filter":Cc(c?.finish_reason),usage:d.usage?Ic(d.usage):kc,raw:d}}catch(d){throw new E(Wt(d,t))}},stream(i,s){return Ve(t,n,i),Ut(t,n),tt(t,n,i),cr(t,i),sy(r(s),i,t)},async generateMedia(i,s){if(t!=="openai")throw new ge(t,"media",`${t} generates no media (only OpenAI generateMedia is wired)`);let a=r(s);if(i.modality==="image")return ay(a,i,t);if(i.modality==="audio")return dy(a,i,t);if(i.modality==="video")return py(a,i,t);let d=i.modality;throw new ge(t,"media",`OpenAI generateMedia has no surface for modality '${String(d)}'`)},async pollMediaJob(i,s,a){return t!=="openai"?{state:"failed",error:k({provider:t,kind:"unknown",message:`${t} has no async media jobs (only OpenAI/Sora is wired)`})}:my(r(s),i,t,a)}}}async function ay(e,t,n){if(t.count!==void 0&&t.count>1)throw new E(k({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=Dg(t.mimeType),r=jg(t.providerOptions),i=Lg(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}},ye(t.signal)?{signal:t.signal}:{})}catch(c){throw new E(Wt(c,n))}let a=s.data?.[0]?.b64_json;if(a===void 0||a.length===0)throw new E(k({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 dy(e,t,n){let o=ey(t.mimeType),r;try{let i=await e.audio.speech.create({model:t.model,voice:ty(t.providerOptions),input:t.prompt,response_format:o},ye(t.signal)?{signal:t.signal}:{});r=new Uint8Array(await i.arrayBuffer())}catch(i){throw new E(Wt(i,n))}if(r.length===0)throw new E(k({provider:n,kind:"bad_request",message:"OpenAI TTS returned no audio bytes"}));return{media:{type:"media",mimeType:Qg[o],source:{kind:"base64",data:Buffer.from(r).toString("base64")}},raw:{responseFormat:o}}}var cy={4:"4",8:"8",12:"12"};function uy(e,t){let n=e??4,o=cy[n];if(o===void 0)throw new E(k({provider:t,kind:"bad_request",message:`Sora durationSeconds must be 4, 8, or 12; got ${String(n)}`}));return o}function ly(e){let t=xe(e)?e.video:void 0,n=xe(t)?t.size:void 0;return n==="720x1280"||n==="1280x720"||n==="1024x1792"||n==="1792x1024"?n:void 0}async function py(e,t,n){let o=uy(t.durationSeconds,n),r=ly(t.providerOptions),i;try{i=await e.videos.create({model:t.model,prompt:t.prompt,seconds:o,...r===void 0?{}:{size:r}},ye(t.signal)?{signal:t.signal}:{})}catch(s){throw new E(Wt(s,n))}if(i.id.length===0)throw new E(k({provider:n,kind:"bad_request",message:"Sora video creation returned no job id"}));return{jobId:uo(i.id),raw:{id:i.id,status:i.status}}}function fy(e,t){if(e==null)return k({provider:t,kind:"unknown",message:"Sora video job failed with no error detail"});let n=Ec(e.code)?"content_filter":"unknown";return k({provider:t,kind:n,message:e.message??"Sora video job failed",...e.code?{code:e.code}:{}})}async function my(e,t,n,o){let r=ur(t);if(r===void 0)return{state:"failed",error:k({provider:n,kind:"bad_request",message:"unrecognized Sora media job token"})};let i,s;try{if(i=await e.videos.retrieve(r,ye(o)?{signal:o}:{}),i.status==="completed"){let a=await e.videos.downloadContent(r,void 0,ye(o)?{signal:o}:{});s=new Uint8Array(await a.arrayBuffer())}}catch(a){throw new E(Wt(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:k({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:fy(i.error,n)};default:return{state:"failed",error:k({provider:n,kind:"unknown",message:`Sora returned an unrecognized job status '${String(i.status)}'`})}}}var tM=ho(),nM=ho({providerId:"deepseek"});function cs(){return{anthropic:os(),openai:ho(),deepseek:ho({providerId:"deepseek"}),gemini:as()}}var hy="default";function go(e,t=hy){return`${e}:${t}`}var Te=class extends Error{constructor(t,n){super(t,n),this.name="KeychainUnavailableError"}};function Ac(e){return`RELAVIUM_${e.toUpperCase()}_API_KEY`}function us(e){return e.length<=4?"\u2022\u2022\u2022\u2022":`\u2022\u2022\u2022\u2022${e.slice(-4)}`}function Tc(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 ee(e=process.env,t){let n=cs();return{resolveProvider:o=>n[o],keyFor:o=>{if(t!==void 0){let i=null;try{i=t.get(go(o))}catch(s){if(!(s instanceof Te))throw s}if(i!==null&&i!=="")return i}let r=e[Ac(o)];if(r!==void 0&&r!=="")return r;throw new l("invalid_invocation",`no API key for provider '${o}' \u2014 store one with \`relavium provider set-key ${o}\` or set ${Ac(o)}.`)}}}import{randomUUID as gy}from"crypto";function Oc(e,t,n){let{db:o,close:r}=He(t);return{store:no(o,{uuid:()=>gy(),now:()=>Date.now(),projectRoot:n,workflow:{slug:e.workflow.id,name:e.workflow.name??e.workflow.id,definitionJson:JSON.stringify(e)}}),db:o,close:r}}function Oe(e){let t;try{t=He(e)}catch(n){throw new l("invalid_invocation",`could not open the session history database: ${n instanceof Error?n.message:String(n)}`,{cause:n})}return{store:ki(t.db),db:t.db,close:t.close}}import{Box as va,Static as BS,Text as St,render as WS,useInput as HS}from"ink";import{createElement as VS,useRef as JS,useState as zS,useSyncExternalStore as qS}from"react";import{randomUUID as el}from"crypto";import{createInterface as tl}from"readline";import{LineCounter as Dy,YAMLParseError as jy}from"yaml";var we=class extends Error{source;constructor(t,n,o){super(t,o===void 0?void 0:{cause:o}),n!==void 0&&(this.source=n)}},gt=class extends we{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)}},Je=class extends we{code="schema_validation";issues;constructor(t,n){super(yy(t),n?.source,n?.cause),this.name="WorkflowValidationError",this.issues=t}};function yy(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 yo=class extends we{code="invalid_graph";issues;constructor(t,n){super(wy(t),n?.source,void 0),this.name="WorkflowGraphError",this.issues=t}};function wy(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 Ht=class extends we{code="secret_interpolation";leaks;constructor(t,n){super(by(t),n?.source,n?.cause),this.name="WorkflowSecretLeakError",this.leaks=t}};function by(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 q=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)}},H=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 kn(e){let t=[],n=0;for(;n<e.length;){let o=e.indexOf("{{",n);if(o===-1){ls(t,e.slice(n));break}let r=_y(e,o+2);if(r===-1){ls(t,e.slice(n));break}ls(t,e.slice(n,o));let i=e.slice(o+2,r),s=e.slice(o,r+2);t.push({kind:"reference",reference:Sy(i,s)}),n=r+2}return t}function Vt(e){let t=[];for(let n of kn(e))n.kind==="reference"&&t.push(n.reference);return t}function ls(e,t){t.length>0&&e.push({kind:"literal",text:t})}function _y(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(Pc(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 Sy(e,t){let n=$c(e,"|"),o=(n[0]??"").trim(),{kind:r,identifier:i,path:s}=Cy(o),a=n.slice(1).map(Ey);return{kind:r,identifier:i,path:s,filters:a,raw:t}}var vy=/^run\.outputs\[\s*(['"])([^'"]*?)\1\s*\](.*)$/s,xy=/^(inputs|ctx|secrets)\.([A-Za-z0-9_-]+)(.*)$/s,ky=/^run\.id(?![\w-])(.*)$/s;function Cy(e){let t=vy.exec(e);if(t?.[2]!==void 0)return{kind:"node",identifier:t[2],path:(t[3]??"").trim()};let n=ky.exec(e);if(n!==null)return{kind:"run",identifier:"id",path:(n[1]??"").trim()};let o=xy.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 Iy=/^([A-Za-z_]\w*)\s*(?:\((.*)\))?$/s;function Ey(e){let t=e.trim(),n=Iy.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 $c(o,",")){let s=Ry(i);s!==void 0&&r.push(s)}return{name:n[1],args:r}}var My=/^(['"])([\s\S]*)\1$/;function Ry(e){let t=e.trim();if(t==="")return;let n=My.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 Pc(e){return e==='"'||e==="'"}function $c(e,t){let n=[],o={buf:"",quote:void 0,depth:0,escaped:!1};for(let r of e)Ay(o,r,t,n);return n.push(o.buf),n}function Ay(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}Ty(e,t,n,o)}function Ty(e,t,n,o){Pc(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 Nc(e,t,n){let o=kn(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 lr(e){let t=[],n=(o,r)=>{if(r!==void 0){let i=Nc(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 ps(e){let t=[],n=e.workflow,o=(r,i,s)=>{let a=Nc(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(...lr(r));return t}function fs(e){let t=Lc(e.workflow),n=[];for(let o of ps(e))if(!(o.category==="context-value"||o.category==="input-default"))for(let r of o.references){let i=Uc(r,t);i!==void 0&&n.push(Fc(o.location,i,t))}return n}function ms(e,t){if(t.length===0)return[];let n=Lc(e.workflow),o=[];for(let{location:r,text:i}of t)for(let s of Vt(i)){let a=Uc(s,n);a!==void 0&&o.push(Fc(r,a,n))}return o}function hs(e){let t=e.workflow,n=[],o=(r,i)=>{for(let s of Vt(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 gs(e,t,n){e.tainted.has(t)||(e.tainted.set(t,n),e.queue.push(t))}function Dc(e,t,n){let o=e.dependents.get(t);o===void 0?e.dependents.set(t,[n]):o.push(n)}function jc(e,t,n){if(n!==void 0)for(let o of Vt(n))o.kind==="secrets"?gs(e,t,`secrets.${o.identifier}`):o.kind==="inputs"?Dc(e,`inputs.${o.identifier}`,t):o.kind==="ctx"&&Dc(e,`ctx.${o.identifier}`,t)}function Oy(e){for(;e.queue.length>0;){let t=e.queue.pop();if(t===void 0)break;for(let n of e.dependents.get(t)??[])gs(e,n,t)}}function Py(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 Lc(e){let t={tainted:new Map,dependents:new Map,queue:[]};for(let n of e.inputs??[]){n.type==="secret"&&gs(t,`inputs.${n.name}`,void 0);let o=typeof n.default=="string"?n.default:void 0;jc(t,`inputs.${n.name}`,o)}for(let n of e.context??[])jc(t,`ctx.${n.key}`,n.value);return Oy(t),Py(t.tainted)}function Uc(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 Fc(e,t,n){let o=$y(t,n);return{location:e,secret:t,...o===void 0?{}:{via:o}}}function $y(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 Ny}from"yaml";function pr(e,t){return Ny(e,{version:"1.2",schema:"core",resolveKnownTags:!1,merge:!1,uniqueKeys:!0,stringKeys:!0,maxAliasCount:0,prettyErrors:!1,logLevel:"error",lineCounter:t})}var Pe=2*1024*1024;function yt(e,t){let n=t?.source;if(e.length>Pe)throw new gt(`the source exceeds the ${Pe}-character parse limit`,n===void 0?void 0:{source:n});let o=new Dy,r;try{r=pr(e,o)}catch(c){throw Ly(c,n,o)}let i=Vo.safeParse(r);if(!i.success){let c=i.error.issues.map(u=>Uy(u,r));throw new Je(c,n===void 0?void 0:{source:n})}let s=i.data,a=hs(s);if(a.length>0)throw new Je(a,n===void 0?void 0:{source:n});let d=fs(s);if(d.length>0)throw new Ht(d,n===void 0?void 0:{source:n});return s}function Ly(e,t,n){if(e instanceof jy){let o=e.pos[0],r=o>=0?n.linePos(o):void 0;return new gt(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 gt("anchors and aliases are not supported",{...t===void 0?{}:{source:t},cause:e}):new gt("the file is not valid YAML",{...t===void 0?{}:{source:t},cause:e})}function Uy(e,t){return{field:Fy(e.path,t),message:By(e)}}function Fy(e,t){let n=ys(ys(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(Gy(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 Gc=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,Bc=/^[A-Za-z0-9_-]+$/;function Gy(e,t,n){let o=ys(Wy(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",Gc);case"agents":return r("id","agent",Gc);case"inputs":return r("name","input",Bc);case"context":return r("key","context",Bc);case"edges":return`edge #${n}`;default:return`${t}[${n}]`}}function By(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 ys(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Wy(e){return Array.isArray(e)?e:void 0}import{LineCounter as Hy}from"yaml";var Ue=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 wt(e,t){let n=t?.source,o=n===void 0?"":` (${n})`;if(e.length>Pe)throw new Ue("agent_syntax",`the agent source exceeds the ${Pe}-character parse limit${o}`);let r;try{r=pr(e,new Hy)}catch(s){throw new Ue("agent_syntax",`the agent file is not valid YAML${o}`,[],{cause:s})}let i=mn.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(c=>`${d}${c}`)}return[a.path.map(String).join(".")||"agent"]}))];throw new Ue("agent_validation",`invalid agent${o}: ${s.join(", ")}`,s)}return i.data}function Vy(e){return Be.some(t=>t===e)}function Jy(e,t){let n=t??[],o=n.filter(Vy);if(!(n.length===1&&o.length===1))return{field:`node \`${e}\`.output_modalities`,message:t===void 0?"a media_surface 'generative' model requires output_modalities to declare exactly one media modality (image | audio | video), but none were authored":`a media_surface 'generative' model requires output_modalities to declare exactly one media modality (image | audio | video) with no text, got [${t.join(", ")}]`}}function zy(e,t){if(e.type!=="agent"||e.model===void 0)return;let n=t(e.model);if(n!==void 0){if(n.media.surface==="generative")return Jy(e.id,e.output_modalities);if(e.output_modalities!==void 0&&!rr(n.media.outputCombinations,e.output_modalities))return{field:`node \`${e.id}\`.output_modalities`,message:`model '${e.model}' does not support the output-modality combination [${e.output_modalities.join(", ")}]`}}}function ws(e,t){let n=e.workflow.nodes.map(o=>zy(o,t)).filter(o=>o!==void 0);if(n.length>0)throw new Je(n)}var Wc={json:(e,t,n,o)=>{fr("json",t,0,o);let r;try{r=JSON.stringify(e,null,2)}catch(i){throw new q("unserializable",`\`${o.raw}\` could not be serialized as JSON`,{location:o.raw,cause:i})}if(r===void 0)throw bs("json","a JSON-serializable value",o);return r},length:(e,t,n,o)=>{if(fr("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 bs("length","a string, list, or object",o)},default:(e,t,n,o)=>(fr("default",t,1,o),e??t[0].value),read_file:async(e,t,n,o,r)=>{if(fr("read_file",t,0,o),typeof e!="string")throw bs("read_file","a file path string",o);if(n.readFile===void 0)throw new q("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||qy(i)?new q("aborted","`read_file` was aborted",{location:o.raw,cause:i}):new q("read_file_failed","`read_file` could not read the file",{location:o.raw,cause:i})}}};function Hc(e,t){let n=Object.hasOwn(Wc,e.name)?Wc[e.name]:void 0;if(n===void 0)throw new q("unknown_filter",`unknown filter \`${e.name}\``,{location:t.raw});return n}function fr(e,t,n,o){if(t.length!==n){let r=n===1?"1 argument":`${n} arguments`;throw new q("filter_arity",`filter \`${e}\` expects ${r}, got ${t.length}`,{location:o.raw})}}function bs(e,t,n){return new q("filter_type",`filter \`${e}\` expects ${t}`,{location:n.raw})}function qy(e){return typeof e=="object"&&e!==null&&"name"in e&&e.name==="AbortError"}var Ky=/[A-Za-z0-9_-]/,Vc=/\s/,Xy=/^-?\d+$/;function Jc(e,t,n){let o=e;for(let r of Yy(t,n)){if(o==null)return;o=Zy(o,r)}return o}function Zy(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 Yy(e,t){let n=[],o=0;for(;o<e.length;){let r=e[o];if(r===".")o=Qy(e,o+1,n,t);else if(r==="[")o=ew(e,o,n,t);else throw Jt(e,t)}return n}function Qy(e,t,n,o){let r=t,i="";for(;r<e.length&&Ky.test(e[r]);)i+=e[r],r+=1;if(i==="")throw Jt(e,o);return n.push({key:i}),r}function ew(e,t,n,o){let r=t+1;for(;r<e.length&&Vc.test(e[r]);)r+=1;let i=e[r];return i==='"'||i==="'"?tw(e,r,i,n,o):nw(e,t,n,o)}function tw(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 Jt(e,r);for(i+=1;i<e.length&&Vc.test(e[i]);)i+=1;if(e[i]!=="]")throw Jt(e,r);return o.push({key:s}),i+1}function nw(e,t,n,o){let r=e.indexOf("]",t+1);if(r===-1)throw Jt(e,o);let i=e.slice(t+1,r).trim();if(!Xy.test(i))throw Jt(e,o);let s=Number(i);if(!Number.isSafeInteger(s)||s<0)throw Jt(e,o);return n.push({index:s}),r+1}function Jt(e,t){return new q("invalid_path",`invalid property access \`${e}\``,{...t===void 0?{}:{location:t}})}async function ot(e,t,n={},o){let r="";for(let i of kn(e))if(i.kind==="literal")r+=i.text;else{zc(o);let s=await ow(i.reference,t,n,o);r+=iw(s,i.reference)}return r}async function Ss(e,t,n={},o){let r=Object.create(null);for(let i of e.workflow.context??[]){zc(o);let s={inputs:t,ctx:r,outputs:{}};r[i.key]=await ot(i.value,s,n,o)}return Object.freeze(r)}async function ow(e,t,n,o){let r=Jc(rw(e,t),e.path,e.raw);for(let i of e.filters)r=await Hc(i,e)(r,i.args,n,e,o);return r}function rw(e,t){switch(e.kind){case"inputs":return _s(t.inputs,e.identifier);case"ctx":return _s(t.ctx,e.identifier);case"node":return _s(t.outputs,e.identifier);case"run":return t.runId;case"secrets":throw new q("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 q("unknown_namespace",`cannot resolve \`${e.identifier}\` \u2014 not an inputs/ctx/run.outputs reference`,{location:e.raw})}}function _s(e,t){return Object.hasOwn(e,t)?e[t]:void 0}function zc(e){if(e?.aborted===!0)throw new q("aborted","interpolation was aborted")}function iw(e,t){if(e==null)throw new q("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 q("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 sw=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,aw=/^[A-Za-z0-9_-]+$/;function mr(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(($,ae)=>{i.set($.id,$),s.set($.id,ae)});let{agentsById:a,inlineAgentIds:d}=cw(n,t?.agents),c=uw(e,n,t?.agents,d);if(c.length>0)throw new Ht(c,r);let u=new Map,f=new Map;for(let $ of i.keys())u.set($,new Set),f.set($,new Set);let g=($,ae)=>{let dt=u.get($),Pa=f.get(ae);dt===void 0||Pa===void 0||(dt.add(ae),Pa.add($))},x=[];dw(n,i,a,t?.agents!==void 0,g,x);let y=ww(n.nodes,u,f,s);if(y.length<n.nodes.length){let $=bw(n.nodes,y,f,s);x.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(x.length>0)throw new yo(x,r);let J=new Map,Z=($,ae)=>(s.get($)??0)-(s.get(ae)??0),Me=Sw(n,f,s);for(let $ of n.nodes)J.set($.id,{id:$.id,type:_w($),dependencies:[...f.get($.id)??[]].sort(Z),dependents:[...u.get($.id)??[]].sort(Z),inputSites:lr($),config:vw($,a,Me)});return{workflowId:n.id,order:y,vertices:J,...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 dw(e,t,n,o,r,i){e.edges.forEach((s,a)=>lw(s,a,t,r,i));for(let s of e.nodes)s.type==="parallel"?pw(s,t,r,i):s.type==="condition"?fw(s,t,r,i):s.type==="agent"&&mw(s,n,o,t,r,i),hw(s,r)}function cw(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 uw(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=sw.test(s.agent_ref)?`\`${s.agent_ref}\``:"<agent>";r.push({location:`agent ${d}.system_prompt`,text:a.system_prompt})}return ms(e,r)}function lw(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),c=`edge \`${s}\`\u2192\`${e.to}\``;if(d===void 0&&r.push({kind:"unknown_edge_target",field:c,message:`edge source \`${s}\` is not a node`}),n.has(e.to)||r.push({kind:"unknown_edge_target",field:c,message:`edge target \`${e.to}\` is not a node`}),a!==void 0){d!==void 0&&yw(d,a,e.to,c,t,r);return}if(d?.type==="condition"&&n.has(e.to)){r.push({kind:"invalid_handle",field:c,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 pw(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 fw(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 mw(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&&gw(s.system_prompt,e.id,o,r)}function hw(e,t){for(let n of lr(e))for(let o of n.references)o.kind==="node"&&t(o.identifier,e.id)}function gw(e,t,n,o){for(let r of Vt(e))r.kind==="node"&&n.has(r.identifier)&&o(r.identifier,t)}function yw(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=aw.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 ww(e,t,n,o){let r=(d,c)=>(o.get(d)??0)-(o.get(c)??0),i=new Map;for(let[d,c]of n)i.set(d,c.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 c of t.get(d)??[]){let u=(i.get(c)??0)-1;i.set(c,u),u===0&&s.push(c)}}return a}function bw(e,t,n,o){let r=new Set(t),i=y=>!r.has(y),s=(y,J)=>(o.get(y)??0)-(o.get(J)??0),a;for(let y of e)if(i(y.id)){a=y.id;break}if(a===void 0)return[];let d=new Map,c=[],u=a;for(;u!==void 0&&!d.has(u);)d.set(u,c.length),c.push(u),u=[...n.get(u)??[]].filter(i).sort(s)[0];if(u===void 0)return c;let f=d.get(u)??0,g=c.slice(f).reverse(),x=g[0];return x!==void 0&&g.push(x),g}function _w(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 Sw(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(c=>c.parallel_of.length>0&&c.parallel_of.every(u=>a.has(u)));if(d===void 0)i.set(s.id,[...a].sort(o));else{let c=new Set(d.parallel_of),u=[...a].filter(f=>!c.has(f)).sort(o);i.set(s.id,[...d.parallel_of,...u])}}return i}function vw(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 xw from"@jitl/quickjs-singlefile-mjs-release-sync";import{newQuickJSWASMModuleFromVariant as kw,shouldInterruptAfterDeadline as Cw}from"quickjs-emscripten-core";var qc=Object.freeze({timeoutMs:1e3,memoryBytes:16*1024*1024,stackBytes:256*1024}),Iw={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},Ew=256,Mw=1e5,vs;function Rw(){return vs??=kw(xw).catch(e=>{throw vs=void 0,e}),vs}async function xs(e){let t=await Rw(),n=e?.limits??qc;return{evaluate(o){try{let r=o.limits??n,i=Aw(o.expression,o.scope),s=Tw(t,i,r);return jw(s.value,s.type,o.kind)}catch(r){throw r instanceof H?r:Kc(r)}}}}function Aw(e,t){if(e.length>Mw)throw new H("syntax","the expression is too large to evaluate");let n={inputs:t.inputs,ctx:t.ctx,run:{outputs:t.outputs},branches:t.branches??null};Ow(n);let o;try{o=JSON.stringify(n)}catch(i){throw new H("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 Tw(e,t,n){let o=e.newRuntime({memoryLimitBytes:n.memoryBytes,maxStackSizeBytes:n.stackBytes}),r,i=!1;try{r=o.newContext({intrinsics:Iw});let s=Date.now()+n.timeoutMs;o.setInterruptHandler(Cw(s));let a;try{a=r.evalCode(t,"expression.js")}catch(c){throw Kc(c)}if(a.error){let c=Pw(r,a.error);throw a.error.dispose(),$w(c,Date.now()>=s)}let d=r.typeof(a.value);try{let c=r.dump(a.value);return i=!0,{value:c,type:d}}catch(c){throw new H("non_serializable","the expression returned a value that could not be marshaled",{cause:c})}finally{a.value.dispose()}}finally{Dw(r,o,!i)}}function Ow(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>Ew)throw new H("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 Kc(e){if(e instanceof H)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 H("stack","the expression exceeded its stack limit",{detail:t,cause:e}):new H("runtime","the expression failed to evaluate",{detail:t,cause:e})}function Pw(e,t){try{return e.dump(t)}catch{return"<unavailable>"}}function $w(e,t){let n=Nw(e),o=Xc(e),r=Zc(e).toLowerCase();return t&&o==="InternalError"&&r.includes("interrupted")?new H("timeout","the expression exceeded its time limit",{detail:n}):o==="SyntaxError"?new H("syntax","the expression is not valid JavaScript",{detail:n}):o==="InternalError"?r.includes("stack overflow")?new H("stack","the expression exceeded its stack limit",{detail:n}):new H("memory","the expression exceeded a resource limit",{detail:n}):new H("runtime","the expression failed to evaluate",{detail:n})}function Nw(e){let t=Xc(e),n=Zc(e);return t.length>0?n.length>0?`${t}: ${n}`:t:n.length>0?n:String(e)}function Xc(e){return e!==null&&typeof e=="object"&&"name"in e&&typeof e.name=="string"?e.name:""}function Zc(e){return typeof e=="string"?e:e!==null&&typeof e=="object"&&"message"in e&&typeof e.message=="string"?e.message:""}function Dw(e,t,n){try{try{e?.dispose()}finally{t.dispose()}}catch(o){if(!n)throw new H("runtime","a sandbox resource leaked on disposal",{cause:o})}}function jw(e,t,n){if(n==="condition"){if(t!=="boolean"&&t!=="string"&&t!=="number")throw new H("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 H("non_serializable","the expression must return a JSON-serializable value");if(t==="object"&&e!==null&&typeof e!="object")throw new H("non_serializable","the expression returned a non-serializable value");return e}var V=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 ze=class extends Error{code;constructor(t,n){super(n),this.name="RunLoopInvariantError",this.code=t}};function Lw(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 ze("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 ze("no_correlation_key","RunEventBus: event draft has neither runId nor sessionId (exactly one required)")}var bt=class{#e;#n;#r;#t=new Set;#s=new Map;constructor(t){this.#e=t.now,this.#n=t.validate??!0,this.#r=t.onListenerError}next(t){let n=Lw(t),o=this.#s.get(n)??0,r={...t,timestamp:this.#e(),sequenceNumber:o},i=this.#n?yd.parse(r):r;return this.#s.set(n,o+1),i}seedSequence(t,n){let o=this.#s.get(t)??0;n>o&&this.#s.set(t,n)}deliver(t){for(let n of this.#t)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.#t.add(t),()=>{this.#t.delete(t)}}#c(t,n){if(this.#r!==void 0)try{this.#r(t,n);return}catch(o){this.#o(o);return}this.#o(t)}#o(t){Promise.resolve().then(()=>{throw t})}};var wo=4096,rt=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}},qe=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}}},zt=class{#e;#n;#r;#t=0;#s=!1;constructor(t){this.#e=t.budget,this.#n=t.defaultMaxTokensEstimate??wo,this.#r=t.emit}updateCost(t){this.#t=t}evaluatePreEgress(t,n,o){if(this.#e.max_cost_microcents<=0)return{kind:"allow"};let r;try{r=Yi(t,n??this.#n)+(o===void 0?0:Qi(t,o))}catch(a){if(a instanceof Lt)return{kind:"allow"};throw a}let i=this.#t+r;if(i<=this.#e.max_cost_microcents)return{kind:"allow"};let s=Uw(Math.round(this.#t/this.#e.max_cost_microcents*100));switch(this.#e.on_exceed){case"warn":return{kind:"warn",spentMicrocents:this.#t,limitMicrocents:this.#e.max_cost_microcents,thresholdPct:s};case"fail":return{kind:"fail",error:new rt(this.#t,this.#e.max_cost_microcents,i)};case"pause_for_approval":return{kind:"pause",error:new qe(this.#t,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.#s||(this.#s=!0,await this.#r({type:"budget:warning",spentMicrocents:r.spentMicrocents,limitMicrocents:r.limitMicrocents,thresholdPct:r.thresholdPct}));return}throw r.error}}};function Uw(e){return Math.max(0,Math.min(100,e))}var be=class extends Error{toolId;constructor(t,n,o){super(t,o===void 0?void 0:{cause:o}),n!==void 0&&(this.toolId=n)}},bo=class extends be{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"}},$e=class extends be{code="tool_denied";runErrorCode="tool_denied";retryable=!1;reason;constructor(t,n,o){super(o,t,void 0),this.name="ToolPolicyError",this.reason=n}},Ke=class extends be{code="invalid_args";runErrorCode="validation";retryable=!1;fields;constructor(t,n,o,r){super(o,t,r),this.name="ToolArgsInvalidError",this.fields=n}},Fe=class extends be{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}},_o=class extends be{code="execution_failed";runErrorCode="tool_failed";retryable=!0;constructor(t,n,o){super(n,t,o),this.name="ToolExecutionError"}},qt=class extends be{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 Fw=Symbol("relavium.untrusted");function ks(e){return{[Fw]:!0,value:e}}function Cs(e){return e.value}var So={maxToolTurns:16,maxToolCorrections:3},te=class extends Error{code;retryable;name="AgentTurnError";constructor(t,n,o){super(n),this.code=t,this.retryable=o}};function vo(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 Gw(e){return e.code==="unknown_tool"||e.code==="invalid_args"}function Bw(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 Ww(){return{text:"",toolArgs:new Map,toolOrder:[],reasoning:new Map,reasoningOrder:[]}}function Hw(e){if(e.length===0)return{};try{return JSON.parse(e)}catch{return{}}}function Vw(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:Hw(o.json)})}return t}function Yc(e){return e.filter(t=>t.type==="text").map(t=>t.text).join("")}function Cn(e){if(e.aborted)throw new te("cancelled","the run was cancelled",!1)}function eu(e,t){return{model:t.planEntries[0]?.model??"",...t.system===void 0?{}:{system:t.system},messages:[...e],...t.tools===void 0||nu(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 Jw(e,t,n,o){let r=Ww(),i="stop";for await(let s of e.stream(eu(t,n)))qw(s,r,n,o),s.type==="error"&&tu(s.error),s.type==="stop"&&(i=s.stopReason);return{content:Vw(r),stopReason:i}}async function zw(e,t,n){try{let o=await e.generate(eu(t,n));return{content:o.content,stopReason:o.stopReason}}catch(o){throw o instanceof E&&tu(o.llmError),o}}function tu(e){throw e.cause instanceof te?e.cause:e.cause instanceof rt?new te("budget_exceeded",e.cause.message,!1):e.cause instanceof qe?e.cause:new te(vo(e),e.message,e.retryable)}function nu(e){return e.outputModalities?.some(t=>t!=="text")??!1}function qw(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}Kw(e,t),Xw(e,t)}function Kw(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 Xw(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 Zw(e,t,n,o){let r=[],i=!1;for(let s of e){Cn(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=Cs(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 be&&Gw(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:c}=a instanceof be?Bw(a):{code:"internal",retryable:!1},u=a instanceof Error?a.message:"tool dispatch failed";throw new te(d,u,c)}}return{messages:r,correctable:i}}async function Qc(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 rt?new te("budget_exceeded",n.message,!1):n}}async function Yw(e,t,n,o,r,i){t.push({role:"assistant",content:e});let s=e.filter(c=>c.type==="tool_call");if(s.length===0)throw new te("provider_unavailable","the model signalled a tool_use stop but produced no tool call",!1);let a=await Zw(s,n,o,r),d=i;if(a.correctable&&(d+=1,d>n.limits.maxToolCorrections))throw new te("tool_failed",`agent exceeded the ${n.limits.maxToolCorrections}-round tool-correction budget`,!1);return t.push(...a.messages),d}async function hr(e){let t=e.planEntries[0]?.model;if(t===void 0)throw new te("internal","agent turn has no fallback-plan entries",!1);let n=new so,o=t,r=0,i=0,s=0,a=g=>{g.outcome!=="skipped"&&(o=g.model,r+=1,g.usage!==void 0&&(i+=g.usage.inputTokens,s+=g.usage.outputTokens,e.emit({type:"cost:updated",nodeId:e.nodeId,model:g.model,inputTokens:g.usage.inputTokens,outputTokens:g.usage.outputTokens,costMicrocents:g.cost?.costMicrocents??0,cumulativeCostMicrocents:0,attemptNumber:r})))},d=e.preEgress,c=new co([...e.planEntries],{...e.chainCapabilities,costTracker:n,onAttempt:a,...d===void 0?{}:{preAttempt:g=>d({...g,...e.outputModalities===void 0?{}:{outputModalities:e.outputModalities},...e.mediaUnitsEstimate===void 0?{}:{mediaUnitsEstimate:e.mediaUnitsEstimate}})}}),u=e.messages.map(g=>({role:g.role,content:[...g.content]}));if(nu(e)){await Qc(e,o),Cn(e.signal);let g=await zw(c,u,e);if(Cn(e.signal),g.stopReason==="tool_use")throw new te("provider_unavailable","a media-output turn signalled a tool_use stop but cannot run a tool round (ADR-0046)",!1);return{content:g.content,text:Yc(g.content),usage:{input:i,output:s},model:o,stopReason:g.stopReason}}let f=0;for(let g=0;;g+=1){if(Cn(e.signal),g>e.limits.maxToolTurns)throw new te("turn_limit",`agent exceeded the ${e.limits.maxToolTurns}-turn tool-call limit`,!1);await Qc(e,o),Cn(e.signal);let x=await Jw(c,u,e,()=>o);if(Cn(e.signal),x.stopReason!=="tool_use")return{content:x.content,text:Yc(x.content),usage:{input:i,output:s},model:o,stopReason:x.stopReason};f=await Yw(x.content,u,e,()=>o,r,f)}}var xo={image:1,audio:60,video:10};function Qw(e,t){if(e===void 0)return[];let n=[];for(let o of e)ou(o)&&n.push({modality:o,units:t?.[o]??xo[o]});return n}var eb=new Set(Be);function ou(e){return eb.has(e)}function Is(e){return{execute:t=>nb(t,e),pollMediaJob:(t,n)=>tb(e,t,n)}}async function tb(e,t,n){let o=e.resolveProvider(t.provider);if(o===void 0||o.pollMediaJob===void 0)return{state:"failed",error:k({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:k({provider:t.provider,kind:"auth",message:`credential resolution failed for provider ${t.provider}`})}}return o.pollMediaJob(t.jobId,r,n)}function K(e,t,n){return{kind:"failed",error:{code:e,message:t,retryable:n}}}function Es(e){if(e instanceof te)return K(e.code,e.message,e.retryable);if(e instanceof qe)return{kind:"paused",gate:e.toGateRequest()};throw e}async function nb(e,t){if(e.vertex.type!=="agent")return K("internal",`no executor for node type '${e.vertex.type}' yet (1.P)`,!1);let n=e.vertex.config;return n.kind!=="agent"?K("internal",`agent vertex '${e.vertex.id}' carries a '${n.kind}' config`,!1):ob(e,n,t)}async function ob(e,t,n){let o=t.node,r=t.resolvedAgent;if(r===void 0)return K("validation",`agent node '${o.id}': agent_ref '${o.agent_ref}' did not resolve to an agent`,!1);let i=cb(r,o,n);if(!i.ok)return K(i.code,i.message,!1);let s=ub(r.tools,o.tools);if(!s.ok)return K("validation",s.message,!1);let a=new Set(s.ids),d=o.prompt_template===void 0?{ok:!0,text:""}:await gb(o.prompt_template,e,n);if(!d.ok)return K("validation",d.message,!1);let c=i.entries[0];if(c!==void 0&&(n.resolveMediaSurface?.(c.model)??"chat")==="generative")return ib(e,o,c,d.text,n);let u=lb(r,o,d.text),f=fb(n.tools,a),g=o.output_schema??r.output_schema,x=pb(g),y={nodeId:o.id,grantedToolIds:a,config:{},toolPolicy:e.toolPolicy,fsScope:n.fsScope??"sandboxed",gateApproved:!1},J=e.preEgress??n.preEgress,Z;try{Z=await hr({...u.system===void 0?{}:{system:u.system},messages:u.messages,...f.length>0?{tools:f}:{},planEntries:i.entries,chainCapabilities:hb(n),...x===void 0?{}:{responseFormat:x},...mb(r,o),nodeId:o.id,emit:e.emit,signal:e.signal,registry:n.registry,dispatchContext:y,limits:n.limits??So,...J===void 0?{}:{preEgress:J},...o.output_modalities===void 0?{}:{outputModalities:o.output_modalities,mediaUnitsEstimate:Qw(o.output_modalities,n.mediaCostEstimate)}})}catch(Me){return Es(Me)}return rb(o,Z,g!==void 0)}function rb(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 K("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=yb(t.text);return i===ru?K("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 ib(e,t,n,o,r){let i=db(t.output_modalities,t.id);if(!i.ok)return K("validation",i.message,!1);if(o.length===0)return K("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 K("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=Ms(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(g){return g instanceof rt?K("budget_exceeded",g.message,!1):Es(g)}if(e.signal.aborted)return K("cancelled",`agent node '${t.id}': run cancelled before media generation`,!1);let c={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},u;try{u=await r.keyFor(s.id)}catch{return K("provider_auth",`agent node '${t.id}': credential resolution failed for provider ${s.id}`,!1)}let f;try{f=await s.generateMedia(c,u)}catch(g){return sb(g)}return e.signal.aborted?K("cancelled",`agent node '${t.id}': run cancelled during media generation`,!1):ab(e,t,n,i.modality,a,f)}function sb(e){return e instanceof E?K(vo(e.llmError),e.llmError.message,e.llmError.retryable):e instanceof et?K("validation",e.message,!1):Es(e)}function ab(e,t,n,o,r,i){return i.jobId!==void 0&&i.media!==void 0?K("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?K("internal",`agent node '${t.id}': generateMedia resolved neither media nor jobId`,!1):ue(i.media.mimeType)!==o?K("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:Rs(n.model,o,r),cumulativeCostMicrocents:0}),{kind:"completed",output:{text:"",media:[i.media]},tokensUsed:{input:0,output:0,model:n.model}})}function db(e,t){let n=e??[],o=n.filter(ou),[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 Ms(e,t){return e==="image"?t.count??xo.image:(t.duration_seconds??xo[e])*(t.count??1)}function Rs(e,t,n){let o=[{modality:t,direction:"output",units:n,unit:t==="image"?"count":"second"}];try{return sr(e,{inputTokens:0,outputTokens:0,mediaUnits:o})}catch{return 0}}function cb(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 ub(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 lb(e,t,n){let o=t.system_prompt_append,r=o===void 0||o.length===0?e.system_prompt:`${e.system_prompt}
|
|
7
7
|
|
|
8
|
-
${o}`,i=n.length>0?[{role:"user",content:[{type:"text",text:n}]}]:[];return{system:r,messages:i}}function
|
|
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
|
-
|
|
11
|
-
`),o=r.
|
|
12
|
-
|
|
8
|
+
${o}`,i=n.length>0?[{role:"user",content:[{type:"text",text:n}]}]:[];return{system:r,messages:i}}function pb(e){if(e!==void 0)return or.parse({type:"json",schema:e})}function fb(e,t){let n=[];for(let o of e){if(!t.has(o.id))continue;let r=bn.safeParse({name:o.id,...o.description.length>0?{description:o.description}:{},parameters:o.llmVisibleParams});if(!r.success)throw new te("internal",`granted tool '${o.id}' has an invalid LLM schema`,!1);n.push(r.data)}return n}function mb(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 hb(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 gb(e,t,n){let o={inputs:t.inputs,ctx:t.ctx,outputs:Object.fromEntries(t.runOutputs)};try{return{ok:!0,text:await ot(e,o,n.resolverCapabilities??{})}}catch(r){return{ok:!1,message:r instanceof Error?r.message:"prompt interpolation failed"}}}var ru=Symbol("parse-failed");function yb(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 ru}}var ko=256,Kt=class{#e=[];#n;#r;#t;#s=[];#c=!1;constructor(t,n){this.#n=t,this.#r=n}push(t){if(!this.#c){if(this.#t!==void 0){let n=this.#t;this.#t=void 0,n({value:t,done:!1});return}this.#e.push(t)}}close(){if(!this.#c){if(this.#c=!0,this.#t!==void 0){let t=this.#t;this.#t=void 0,t({value:void 0,done:!0})}this.#o(),this.#r?.()}}whenDrained(){return this.#c||this.#e.length<=this.#n?Promise.resolve():new Promise(t=>{this.#s.push(t)})}#o(){if(this.#c||this.#e.length<=this.#n){let t=this.#s;this.#s=[];for(let n of t)n()}}next(){let t=this.#e.shift();return t!==void 0?(this.#o(),Promise.resolve({value:t,done:!1})):this.#c?Promise.resolve({value:void 0,done:!0}):this.#t!==void 0?Promise.reject(new ze("concurrent_consumer","BoundedEventStream: a second concurrent next() is not supported (single-consumer stream)")):new Promise(n=>{this.#t=n})}return(){return this.close(),this.#e.length=0,Promise.resolve({value:void 0,done:!0})}[Symbol.asyncIterator](){return this}};var wb=new Set(["run:completed","run:failed","run:cancelled"]);function iu(e,t){return"runId"in e&&e.runId===t}function su(e,t,n,o=ko){let r=new Kt(o,()=>i()),i=e.subscribe(s=>{iu(s,t)&&(r.push(s),wb.has(s.type)&&r.close())});return{runId:t,events:r,subscribe:s=>e.subscribe(a=>{iu(a,t)&&s(a)}),cancel:n,whenConsumersReady:()=>r.whenDrained()}}function au(e){let t=new Kt(ko);return t.close(),{runId:e,events:t,subscribe:()=>()=>{},cancel:()=>{},whenConsumersReady:()=>Promise.resolve()}}var du=new Set(["completed","failed","skipped"]),As=new Set(["run:completed","run:failed","run:cancelled"]);function bb(e){return e.type==="run:completed"?{...e,outputs:{}}:e.type==="run:failed"?{...e,partialOutputs:{}}:e}var _b=new Set(["completed","failed","cancelled"]),Sb=1e3,vb=864e5;function xb(e){if(e.gateId===void 0!=(e.decision===void 0))throw new V("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&&!pi.safeParse(e.decision).success)throw new V("invalid_decision","the gate decision failed validation",{runId:e.runId,...e.gateId===void 0?{}:{gateId:e.gateId}})}function kb(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 gr=class{runId;handle;#e;#n;#r;#t;#s;#c;#o;#g;#w;#u;#v;#y;#x={};#i;#d=new Map;#p=new Map;#k=new Set;#S=new Map;#h=new Map;#C=new Map;#T;#E;#O=new Set;#R="";#a=!1;#f=!1;#l;#P=!1;#$=!1;#M=!1;#N=Promise.resolve();#b=0;#I=0;#B=0;#W=0;constructor(t){this.runId=t.runId,this.#e=t.plan,this.#n=t.workflow,this.#r=t.inputs,this.#c=t.executionMode,this.#o=t.host,this.#g=t.executor,this.#v=t.resolverCapabilities,this.#w=t.bus,this.#u=t.onSettled,this.#i=t.host.newAbortController();let n=new Set((t.workflow.workflow.inputs??[]).filter(o=>o.type==="secret").map(o=>o.name));if(this.#s=n,this.#t=kb(t.inputs,n),this.#y=t.maxTokensEstimate??wo,t.plan.budget!==void 0&&(this.#E=new zt({budget:t.plan.budget,defaultMaxTokensEstimate:this.#y,emit:o=>this.#m({...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=su(t.bus,t.runId,()=>{try{this.requestCancel()}catch(o){if(!(o instanceof V&&o.code==="run_already_terminal"))throw o}},t.capacity)}async begin(){this.#b=Date.parse(this.#o.clock.now()),this.#H();try{this.#R=await this.#o.store.resolveWorkflowId(this.#n.workflow.id),await this.#m({type:"run:started",runId:this.runId,workflowId:this.#R,inputs:this.#t,executionMode:this.#c})}catch{await this.#A("run:failed");return}if(!await this.#V()){await this.#A(this.#f?"run:cancelled":"run:failed");return}this.#_()}#H(){this.#L();let t=this.#e.timeoutMs;t!==void 0&&(this.#T=this.#o.setTimer(t,()=>{this.#re(t)}))}#L(){this.#T!==void 0&&(this.#T(),this.#T=void 0)}async#re(t){if(this.#a)return;this.#L();let n=this.#G();await this.#m({type:"run:timeout",runId:this.runId,elapsedMs:n,timeoutMs:t}),this.#a||(this.#l={error:{code:"run_timeout",message:`the run exceeded its ${t} ms timeout`,retryable:!1}},this.#i.abort(),this.#_())}async#V(){try{return this.#x=await Ss(this.#n,this.#r,this.#v,this.#i.signal),!0}catch(t){return this.#f||this.#i.signal.aborted||(this.#l={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.#p.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"?Ms(i.modality,s.config.node):xo[i.modality];this.#h.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:Vn.pollInitialMs}),this.#J(i.nodeId)}n.pendingMediaJobs.length>0&&n.runStatus==="paused"&&(this.#M=!0);for(let i of n.resolvedGateIds)this.#k.add(i);this.#B=n.totalInputTokens,this.#W=n.totalOutputTokens,this.#I=n.cumulativeCostMicrocents,this.#E?.updateCost(n.cumulativeCostMicrocents),o.seedSequence(r,n.lastSequenceNumber+1),this.#b=n.startedAtMs}async beginResume(t,n,o){if(this.#H(),o||this.#q(t),!await this.#V()){await this.#A(this.#f?"run:cancelled":"run:failed");return}o?this.#_():await this.resume(t,n)}async beginResumeMediaJobs(){if(this.#H(),this.#h.size===0)throw new V("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.#p.size>0)throw new V("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.#V()){await this.#A(this.#f?"run:cancelled":"run:failed");return}this.#_()}abandon(){if(!this.#a){this.#a=!0,this.#i.abort();for(let t of this.#S.values())t();this.#S.clear();for(let t of this.#C.values())t();this.#C.clear(),this.#h.clear(),this.#L()}}requestCancel(){if(this.#a)throw new V("run_already_terminal","the run has already terminated",{runId:this.runId});this.#f||(this.#f=!0,this.#i.abort(),this.#_())}#q(t){if(this.#p.size===0)throw new V("run_not_paused","the run has no pending gate to resume",{runId:this.runId,gateId:t});let n=this.#p.get(t);if(n===void 0)throw new V("unknown_gate","no pending gate matches the supplied gateId",{runId:this.runId,gateId:t});return n}async resume(t,n){if(this.#k.has(t))return;if(this.#a)throw new V("run_already_terminal","the run has already terminated",{runId:this.runId,gateId:t});let o=this.#q(t);if(this.#k.add(t),this.#p.delete(t),this.#X(t),this.#M=!1,await this.#se(o,n)){this.#_();return}let r=this.#d.get(o.vertexId);r!==void 0&&(r.status="completed",r.output=n.payload??{decision:n.decision});try{await this.#m({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.#l===void 0&&!this.#f&&(this.#l={nodeId:o.vertexId,error:{code:"internal",message:"the gate decision payload could not be made durable-safe",retryable:!1}},this.#i.abort())}this.#_()}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.#l===void 0&&!this.#f&&(this.#l={nodeId:t.vertexId,error:{code:"budget_exceeded",message:"the budget gate was rejected",retryable:!1}},this.#i.abort()),await this.#m({type:"human_gate:resumed",runId:this.runId,nodeId:t.vertexId,decision:"rejected",decidedBy:n.decidedBy}),!0):n.decision==="approved"?(this.#O.add(t.vertexId),o!==void 0&&(o.status="pending"),await this.#m({type:"human_gate:resumed",runId:this.runId,nodeId:t.vertexId,decision:"approved",decidedBy:n.decidedBy}),!0):!1}#_(){if(this.#P){this.#$=!0;return}this.#P=!0,this.#ae()}async#ae(){try{do this.#$=!1,await this.#de();while(this.#$&&!this.#a)}finally{this.#P=!1}}async#de(){if(this.#a)return;for(let{id:o,reason:r}of this.#Ee())await this.#m({type:"node:skipped",runId:this.runId,nodeId:o,reason:r});let t=this.#Re();if(this.#f){t===0&&await this.#A("run:cancelled");return}if(this.#l!==void 0){t===0&&await this.#A("run:failed");return}if(this.#Ae()){await this.#A("run:completed");return}let n=this.#ue(t);if(n.length===0){await this.#ce(t);return}for(let o of n)await this.handle.whenConsumersReady(),await this.#m({type:"node:started",runId:this.runId,nodeId:o.id,nodeType:o.type}),this.#le(o,1)}async#ce(t){if(!(t>0)){if(this.#p.size>0||this.#h.size>0){await this.#Ie();return}this.#l={error:{code:"internal",message:"run stalled with no runnable node",retryable:!1}},this.#_()}}#ue(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.#Y(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.#G(),s=this.#O.delete(t.id);for(;;){let a=await this.#fe(t,r,s);if(!(a.kind==="failed"&&!this.#a&&!this.#f&&this.#l===void 0&&!this.#i.signal.aborted&&this.#he(o,a.error,r))||a.kind!=="failed"){await this.#D(t,a,i,r);return}let c=this.#ge(o,r);await this.#m({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:c});let u=await this.#ye(c);if(this.#a)return;if(this.#f||this.#i.signal.aborted){await this.#D(t,a,i,r);return}if(!u){await this.#D(t,a,i,r);return}r+=1,await this.#m({type:"node:started",runId:this.runId,nodeId:t.id,nodeType:t.type,attemptNumber:r})}}#pe(){if(this.#E===void 0)return;let t=this.#E;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.#Te(),inputs:this.#r,ctx:this.#x,secretInputNames:this.#s,toolPolicy:this.#n.workflow.tools??{},emit:s=>{this.#te(s)},signal:this.#i.signal,attemptNumber:n,...r===void 0?{}:{preEgress:r}};return await this.#Pe(t,await this.#g.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??To).includes(n.code)}#ge(t,n){let o=t?.backoff_ms??Sb,r=t?.backoff==="exponential"?o*2**(n-1):o*n;return Math.min(r,vb)}#ye(t){return this.#i.signal.aborted?Promise.resolve(!1):new Promise(n=>{let o=()=>{this.#i.signal.removeEventListener("abort",r)},r=()=>{i(),o(),n(!1)},i=this.#o.setTimer(t,()=>{o(),n(!0)});this.#i.signal.addEventListener("abort",r)})}async#D(t,n,o,r=1){if(!this.#a){try{switch(n.kind){case"completed":case"branch":await this.#we(t,n,o,r);break;case"failed":await this.#K(t,n.error,r);break;case"paused":await this.#be(t,n.gate);break;case"media_job":await this.#_e(t,n.job);break}}catch{this.#Z(t,"the engine failed while settling a node")}this.#_()}}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.#W+=s.output,await this.#m({type:"node:completed",runId:this.runId,nodeId:t.id,output:n.output,tokensUsed:s,durationMs:Math.max(0,this.#G()-o),cumulativeCostMicrocents:this.#I,...n.kind==="branch"?{selected:[...n.selected]}:{},...r>1?{attemptNumber:r}:{}})}async#K(t,n,o=1){let r=this.#d.get(t.id);r!==void 0&&(r.status="failed"),this.#l===void 0&&!this.#f&&(this.#l={nodeId:t.id,error:n},this.#i.abort()),await this.#m({type:"node:failed",runId:this.runId,nodeId:t.id,error:{...n,correlationId:this.#o.ids.newId()},...o>1?{attemptNumber:o}:{},cumulativeCostMicrocents:this.#I})}async#be(t,n){let o=n.gateId??this.#o.ids.newId(),r=n.isBudgetGate===!0,i=this.#d.get(t.id);i!==void 0&&(i.status="paused"),this.#p.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.#o.clock.now())+n.timeoutMs).toISOString());if(n.timeoutMs!==void 0&&s!==void 0){let d=this.#o.setTimer(n.timeoutMs,()=>{this.#ke(o,t.id,s)});this.#S.set(o,d)}n.spentMicrocents!==void 0&&n.limitMicrocents!==void 0&&await this.#m({type:"budget:paused",runId:this.runId,nodeId:t.id,gateId:o,spentMicrocents:n.spentMicrocents,limitMicrocents:n.limitMicrocents}),await this.#m({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.#S.get(t);n!==void 0&&(this.#S.delete(t),n())}async#_e(t,n){let o=this.#d.get(t.id);o!==void 0&&(o.status="paused");let r=this.#o.clock.now(),i=new Date(Date.parse(r)+(n.deadlineMs??Vn.deadlineMs)).toISOString();this.#h.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.#b,backoffMs:Vn.pollInitialMs}),await this.#m({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.#J(t.id)}#J(t){let n=this.#h.get(t);if(n===void 0)return;this.#z(t);let o=this.#o.setTimer(n.backoffMs,()=>{this.#Se(t)});this.#C.set(t,o)}#z(t){let n=this.#C.get(t);n!==void 0&&(this.#C.delete(t),n())}#U(t){this.#h.delete(t),this.#z(t),this.#M=!1}#F(t,n){this.#te({type:"cost:updated",nodeId:t,model:n.model,inputTokens:0,outputTokens:0,costMicrocents:Rs(n.model,n.modality,n.units),cumulativeCostMicrocents:0})}async#Se(t){this.#z(t);let n=this.#h.get(t);if(this.#a||n===void 0)return;let o=this.#e.vertices.get(t);if(o===void 0){this.#F(t,n),this.#U(t),this.#_();return}try{if(Date.parse(this.#o.clock.now())>Date.parse(n.deadlineAt)){await this.#j(o,n,{code:"provider_unavailable",message:`media job '${n.jobId}' exceeded its deadline (${n.deadlineAt})`,retryable:!0});return}if(this.#g.pollMediaJob===void 0){await this.#j(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.#g.pollMediaJob(r,this.#i.signal)}catch{if(this.#a||this.#i.signal.aborted||!this.#h.has(t))return;await this.#j(o,n,{code:"provider_unavailable",message:`media job '${n.jobId}' poll failed`,retryable:!0});return}if(this.#a||this.#i.signal.aborted||!this.#h.has(t))return;await this.#ve(o,n,i)}catch{this.#a||(this.#U(t),this.#Z(o,"the media job poll loop failed while settling the node"),this.#_())}}async#ve(t,n,o){switch(o.state){case"pending":{n.backoffMs=Math.min(n.backoffMs*2,Vn.pollMaxMs),this.#J(t.id);return}case"done":await this.#xe(t,n,o.media);return;case"failed":await this.#j(t,n,{code:vo(o.error),message:o.error.message,retryable:o.error.retryable});return;default:await this.#j(t,n,{code:"internal",message:"media poll returned an unrecognized job state",retryable:!1})}}async#xe(t,n,o){this.#U(t.id),this.#F(t.id,n),await this.#D(t,{kind:"completed",output:{text:"",media:[o]},tokensUsed:{input:0,output:0,model:n.model}},n.submittedAtMs)}async#j(t,n,o){this.#U(t.id),this.#F(t.id,n),await this.#D(t,{kind:"failed",error:o},n.submittedAtMs)}async#ke(t,n,o){if(this.#X(t),!(this.#a||!this.#p.has(t))){if(o==="approve"){await this.resume(t,{decision:"approved",decidedBy:"timeout"});return}await this.#Ce(t,n)}}async#Ce(t,n){this.#p.delete(t),this.#k.add(t);let o=this.#e.vertices.get(n);o!==void 0&&(await this.#K(o,{code:"run_timeout",message:"the human gate timed out without a decision",retryable:!1}),this.#_())}#Z(t,n){let o=this.#d.get(t.id);(o?.status==="running"||o?.status==="paused")&&(o.status="failed"),!this.#a&&this.#l===void 0&&!this.#f&&(this.#l={nodeId:t.id,error:{code:"internal",message:n,retryable:!1}},this.#i.abort())}async#Ie(){if(this.#M)return;this.#M=!0;let t=[...this.#p.keys()],n=[...this.#h.keys()];await this.#m({type:"run:paused",runId:this.runId,pendingGateCount:t.length,gateIds:t,...n.length===0?{}:{pendingMediaJobNodeIds:n}})}async#A(t){if(this.#a)return;this.#a=!0,this.#i.abort();for(let r of this.#S.values())r();this.#S.clear();for(let[r,i]of this.#h)this.#F(r,i);for(let r of this.#C.values())r();this.#C.clear(),this.#h.clear(),this.#O.clear(),this.#L();let n=Math.max(0,this.#G()),o;if(t==="run:completed")o={type:t,runId:this.runId,outputs:this.#ee("output"),totalTokensUsed:{input:this.#B,output:this.#W},totalCostMicrocents:this.#I,durationMs:n};else if(t==="run:failed"){let r=this.#l??{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.#o.ids.newId()},partialOutputs:this.#ee("completed"),cumulativeCostMicrocents:this.#I}}else o={type:t,runId:this.runId,cumulativeCostMicrocents:this.#I};await this.#m(o),this.#u(this.runId)}#Y(t){for(let n of t.dependencies){let o=this.#d.get(n);if(o===void 0||!du.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}#Ee(){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.#Y(i)||this.#Q(i)||(r.status="skipped",t.push({id:o,reason:this.#Me(i)}),n=!0)}}return t}#Me(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"}#Re(){let t=0;for(let n of this.#d.values())n.status==="running"&&(t+=1);return t}#Ae(){for(let t of this.#d.values())if(!du.has(t.status))return!1;return!0}#Te(){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.#w.emit({...t,runId:n});return;case"cost:updated":this.#I+=t.costMicrocents,this.#E?.updateCost(this.#I),this.#w.emit({...t,runId:n,cumulativeCostMicrocents:this.#I});return}}async#m(t){let n;try{n=await this.#Oe(t)}catch(s){if(As.has(t.type))n=bb(t);else throw s}let o=this.#w.next(n);this.#Ne(n),As.has(o.type)&&this.#De();let r=this.#N,i=(async()=>{try{await this.#o.store.persistEvent(o)}catch{!As.has(o.type)&&this.#l===void 0&&!this.#f&&(this.#l={error:{code:"internal",message:"a durable run-event write failed",retryable:!1}},this.#i.abort(),this.#_())}await r,this.#w.deliver(o)})();this.#N=i.catch(()=>{}),await i}async#Oe(t){let n=this.#o.mediaStore;if(n!==void 0)return await ii(t,n,this.#ne());if(Fo(t))throw new ze("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.#o.fetchMedia;if(t!==void 0)return n=>t(n,Va,this.#i.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.#$e(o.node.save_to,n.output);return r===void 0?n:{kind:"failed",error:r}}async#$e(t,n){let o=this.#o.mediaStore,r=this.#o.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 ot(t,i,{},this.#i.signal),a=await ii(n,o,this.#ne()),d=Ct(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[c]=d;if(c===void 0)return{code:"internal",message:"output node `save_to`: no handle",retryable:!1};let u=await o.get(c.handle);await r(s,u,this.#i.signal);return}catch(i){return this.#i.signal.aborted?{code:"cancelled",message:"the run was cancelled",retryable:!1}:i instanceof q?{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}}}#Ne(t){let n=this.#o.mediaReferences;if(n===void 0)return;let o;try{o=Ct(t)}catch{return}for(let r of o)this.#oe(()=>n.recordRunMedia(r,this.runId))}#De(){let t=this.#o.mediaReferences;t!==void 0&&this.#oe(()=>t.reclaimRun(this.runId))}#oe(t){try{let n=t();n instanceof Promise&&n.catch(()=>{})}catch{}}#G(){return Date.parse(this.#o.clock.now())-this.#b}},Co=class{#e;#n;#r;#t;#s;#c;#o=new Map;constructor(t){this.#e=t.host,this.#n=t.executor,this.#r=t.validateEvents??!0,this.#t=t.eventBufferCapacity??256,this.#s=t.resolverCapabilities??{},this.#c=t.maxTokensEstimate??wo}start(t){let n=mr(t.workflow,t.planOptions),o=this.#e.ids.newId(),r=new bt({now:this.#e.clock.now,validate:this.#r}),i=new gr({runId:o,plan:n,workflow:t.workflow,inputs:t.inputs??{},executionMode:t.executionMode??"local",host:this.#e,executor:this.#n,bus:r,capacity:this.#t,onSettled:()=>{},resolverCapabilities:this.#s,maxTokensEstimate:this.#c});return this.#o.set(o,i),i.begin(),i.handle}async resume(t,n,o){let r=pi.safeParse(o);if(!r.success)throw new V("invalid_decision","the gate decision failed validation",{runId:t,gateId:n});let i=this.#o.get(t);if(i===void 0)throw new V("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(xb(t),this.#o.has(t.runId))throw new V("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 V("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 V("workflow_mismatch","the supplied workflow is not the one this run started on",{runId:t.runId});if(_b.has(o.runStatus))return au(t.runId);let i=mr(t.workflow,t.planOptions),s=new bt({now:this.#e.clock.now,validate:this.#r}),a=new gr({runId:t.runId,plan:i,workflow:t.workflow,inputs:t.inputs??{},executionMode:t.executionMode??"local",host:this.#e,executor:this.#n,bus:s,capacity:this.#t,onSettled:()=>{},resolverCapabilities:this.#s,maxTokensEstimate:this.#c,checkpoint:o});this.#o.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.#o.delete(t.runId),d}return a.handle}cancel(t){let n=this.#o.get(t);if(n===void 0)throw new V("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=hn.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.#g(o.runId)}catch{}}return n}#g(t){let n=this.#e.mediaReferences;if(n!==void 0)try{let o=n.reclaimRun(t);o instanceof Promise&&o.catch(()=>{})}catch{}}};var Cb={"run:paused":"paused","run:completed":"completed","run:failed":"failed","run:cancelled":"cancelled"};function Ib(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=Cb[t.type];n!==void 0&&(e.runStatus=n)}function Eb(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 Mb(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 Rb(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 Xt(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),Ib(t,o),Eb(t,o),Mb(t,o),Rb(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 Ab=new Set(["run:completed","run:failed","run:cancelled"]),Tb=new Set(["human_gate:paused","run:paused","budget:paused","media_job:submitted"]);function Ob(e){return`00000000-0000-4000-8000-${e.toString(16).padStart(12,"0")}`}var Zt=class{#e=new Map;#n=new Map;#r=0;resolveWorkflowId(t){let n=this.#n.get(t);return n===void 0&&(n=Ob(++this.#r),this.#n.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=>Ab.has(s.type)))continue;let i=o.at(-1);t.push({runId:n,workflowId:r.workflowId,resumable:i!==void 0&&Tb.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 Ts(e){return{load:t=>Promise.resolve(e instanceof Zt?Xt(e.eventsFor(t)):void 0)}}var yr=50,In=class extends Error{code;name="SessionStateError";constructor(t,n){super(n),this.code=t}},En=class e{sessionId;#e;#n;#r;#t;#s;#c;#o=[];#g=0;#w=0;#u="created";#v;#y;constructor(t){this.sessionId=t.sessionId,this.#e=t.agentRef,this.#n=t.agent,this.#r=t.context,this.#t=t.deps;let n=t.deps.maxTurns;this.#s=n===void 0||n<=0?yr:n,this.#c=t.deps.limits??So}static resume(t,n){let o=new e(t);return o.#o.push(...n.messages),o.#g=n.turnCount,o.#w=n.cumulativeCostMicrocents,o.#t.updateCost?.(n.cumulativeCostMicrocents),o.#u="idle",o}start(){if(this.#u!=="created")throw new In("already_started",`session ${this.sessionId} is already started`);this.#u="idle",this.#t.emit({type:"session:started",agentRef:this.#e,model:this.#n.model,context:this.#r})}async sendMessage(t){if(this.#u==="created")throw new In("not_started",`session ${this.sessionId}: call start() first`);if(this.#u!=="idle")throw new In("not_active",`session ${this.sessionId} is ${this.#u}; cannot send a message`);if(this.#u="running",this.#t.emit({type:"session:turn_started"}),this.#x("cancelled"))return;if(this.#g>=this.#s){this.#u="idle",this.#p("error",{input:0,output:0},{code:"turn_limit",message:`session reached its hard cap of ${this.#s} turns`,retryable:!1});return}this.#o.push({role:"user",content:[{type:"text",text:t}]});let n=this.#t.newAbortController();this.#v=n;try{let o=await this.#i(n.signal);if(this.#x("cancelled")){this.#o.pop();return}this.#g+=1,o.text.length>0&&this.#o.push({role:"assistant",content:[{type:"text",text:o.text}]}),this.#p(o.stopReason,{input:o.usage.input,output:o.usage.output,model:o.model})}catch(o){if(this.#o.pop(),this.#x("cancelled"))return;if(o instanceof te)this.#g+=1,this.#p("error",{input:0,output:0},{code:o.code,message:o.message,retryable:o.retryable});else if(o instanceof qe)this.#p("error",{input:0,output:0},{code:"budget_exceeded",message:o.message,retryable:!1});else throw this.#p("error",{input:0,output:0},{code:"internal",message:"the session turn failed with an unexpected error",retryable:!1}),o}finally{this.#v=void 0,this.#x("running")&&(this.#u="idle")}}#x(t){return this.#u===t}cancel(){this.#u!=="cancelled"&&(this.#u="cancelled",this.#v?.abort(),this.#v=void 0,this.#t.emit({type:"session:cancelled"}))}async#i(t){let n=this.#k();if(!n.ok)throw new te("internal",n.message,!1);let o=new Set(this.#n.tools??[]),r={nodeId:this.#e,grantedToolIds:o,config:{},toolPolicy:this.#t.toolPolicy??{},fsScope:this.#r.fsScopeTier,gateApproved:!1},i=Pb(this.#t.tools,o);return hr({system:this.#n.system_prompt,messages:this.#o,...i.length>0?{tools:i}:{},planEntries:n.entries,chainCapabilities:this.#S(),...this.#n.temperature===void 0?{}:{temperature:this.#n.temperature},...this.#n.max_tokens===void 0?{}:{maxTokens:this.#n.max_tokens},nodeId:this.#e,emit:s=>{this.#d(s)},signal:t,registry:this.#t.registry,dispatchContext:r,limits:this.#c,...this.#t.preEgress===void 0?{}:{preEgress:this.#t.preEgress}})}#d(t){if(t.type==="cost:updated"){this.#w+=t.costMicrocents,this.#t.updateCost?.(this.#w),this.#t.emit({...t,cumulativeCostMicrocents:this.#w});return}this.#t.emit(t)}#p(t,n,o){this.#t.emit({type:"session:turn_completed",stopReason:t,tokensUsed:n,...o===void 0?{}:{error:o}})}#k(){if(this.#y!==void 0)return this.#y;let t=this.#n,n=this.#t.resolveProvider(t.provider);if(n===void 0)return this.#y={ok:!1,message:`no provider wired for '${t.provider}'`},this.#y;let o=[{provider:n,model:t.model,maxAttempts:1}];for(let r of t.fallback_chain??[]){let i=this.#t.resolveProvider(r.provider);if(i===void 0)return this.#y={ok:!1,message:`no provider wired for fallback '${r.provider}'`},this.#y;o.push({provider:i,model:r.model,maxAttempts:r.max_attempts})}return this.#y={ok:!0,entries:o},this.#y}#S(){let t=this.#t;return{keyFor:t.keyFor,sleep:t.sleep,...t.now===void 0?{}:{now:t.now},...t.onAuthError===void 0?{}:{onAuthError:t.onAuthError}}}};function Pb(e,t){let n=[];for(let o of e){if(!t.has(o.id))continue;let r=bn.safeParse({name:o.id,...o.description.length>0?{description:o.description}:{},parameters:o.llmVisibleParams});if(!r.success)throw new te("internal",`granted tool '${o.id}' has an invalid LLM schema`,!1);n.push(r.data)}return n}function $b(e){return e.filter(t=>t.type==="text").map(t=>t.text).join(`
|
|
10
|
+
|
|
11
|
+
`)}function Nb(e){let t=[];for(let n of e){if(n.role!=="user"&&n.role!=="assistant")continue;let o=$b(n.content);o.length!==0&&t.push({role:n.role,content:[{type:"text",text:o}]})}return t}function Db(e){let t=[...e];for(;t.at(-1)?.role==="user";)t.pop();return t}function Os(e,t){let n=[...t].sort((r,i)=>r.sequenceNumber-i.sequenceNumber),o=Db(Nb(n));return{messages:o,turnCount:o.filter(r=>r.role==="assistant").length,cumulativeCostMicrocents:e.totalCostMicrocents}}var jb=new Set(["session:cancelled"]);function cu(e,t){return"sessionId"in e&&e.sessionId===t}function Ps(e,t){return n=>{n.type!=="agent:file_patch_proposed"&&e.emit({...n,sessionId:t})}}function wr(e,t,n,o=ko){let r=new Kt(o,()=>i()),i=e.subscribe(s=>{cu(s,t)&&(r.push(s),jb.has(s.type)&&r.close())});return{sessionId:t,events:r,subscribe:s=>e.subscribe(a=>{cu(a,t)&&s(a)}),cancel:n,whenConsumersReady:()=>r.whenDrained()}}import{stringify as lu}from"yaml";function Mn(e){return lu(e,{sortMapEntries:!0})}function br(e){return lu(e,{sortMapEntries:!0})}function uu(e){return e.filter(t=>t.type==="text").map(t=>t.text).join(`
|
|
12
|
+
|
|
13
|
+
`)}function Lb(e){return e.filter(t=>t.type==="tool_call").map(t=>t.name)}function Ub(e){return e.replace(/\{(?=\{)/g,"{ ")}function Fb(e){let t=[],n=null;for(let o of e)if(o.role==="user"){n?.hasAssistant&&(t.push(n),n=null),n??={promptSegments:[],toolNames:[],hasAssistant:!1,hasAssistantText:!1};let r=uu(o.content);r.length>0&&n.promptSegments.push(r)}else o.role==="assistant"&&(n??={promptSegments:[],toolNames:[],hasAssistant:!1,hasAssistantText:!1},n.hasAssistant=!0,uu(o.content).length>0&&(n.hasAssistantText=!0),n.toolNames.push(...Lb(o.content)));return n!==null&&t.push(n),t}function Gb(e){let t=(e.title??"").toLowerCase().split(/[^a-z0-9]+/).filter(n=>n.length>0).join("-");return t.length>0?t:"exported-session"}function $s(e,t){let n=[...t].sort((c,u)=>c.sequenceNumber-u.sequenceNumber),o=[{id:"input",type:"input"}],r=[],i="input",s=0;for(let c of Fb(n)){if(!c.hasAssistantText)continue;s+=1;let u=`turn-${s}`,f=Ub(c.promptSegments.join(`
|
|
14
|
+
|
|
15
|
+
`)),g=[...new Set(c.toolNames)],x={id:u,type:"agent",agent_ref:e.agentSlug,...f.length>0?{prompt_template:f}:{},...g.length>0?{tools:g}:{}};o.push(x),r.push({from:i,to:u}),i=u}o.push({id:"output",type:"output"}),r.push({from:i,to:"output"});let a={relaviumExport:{source:"session",sessionId:e.id,agentSlug:e.agentSlug,...e.title===void 0?{}:{title:e.title},createdAt:e.createdAt,updatedAt:e.updatedAt,messages:n}},d={id:Gb(e),...e.title===void 0?{}:{name:e.title},...e.agentSnapshot===void 0?{}:{agents:[e.agentSnapshot]},nodes:o,edges:r,metadata:a};return{schema_version:"1.0",workflow:d}}function F(e,t,n){return{kind:"failed",error:{code:e,message:t,retryable:n}}}function ne(){return F("cancelled","the run was cancelled",!1)}function Bb(e){let t={__proto__:null};for(let n of[...e.keys()].sort(Ns))t[n]=e.get(n);return t}function Ns(e,t){return e<t?-1:e>t?1:0}function Ds(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 Rn(e,t){return{inputs:Ds(e.inputs,e.secretInputNames),ctx:e.ctx,outputs:Bb(e.runOutputs),...t===void 0?{}:{branches:t}}}function An(e){return e instanceof H?F(e.code,e.message,e.retryable):F("internal","the node handler failed unexpectedly",!1)}function Wb(e,t){let{config:n}=e.vertex;if(n.kind!=="condition")return F("internal",`the condition handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return ne();let{node:o}=n,r;try{r=t.sandbox.evaluate({expression:o.expression,kind:"condition",scope:Rn(e)})}catch(a){return e.signal.aborted?ne():An(a)}if(e.signal.aborted)return ne();let s=o.branches.find(a=>a.when===r)?.target_node??o.default;return s===void 0?F("validation","the condition matched no branch and declares no default",!1):e.vertex.dependents.includes(s)?{kind:"branch",selected:[s]}:F("internal",`the condition selected '${s}', which is not a downstream node`,!1)}function js(e){return{execute:t=>Promise.resolve(Wb(t,e))}}function Hb(e,t){let n=[];for(let o of t)e.runOutputs.has(o)&&n.push(e.runOutputs.get(o));return n}function Vb(e){let t={__proto__:null};for(let n of e){if(n===null||typeof n!="object"||Array.isArray(n))return F("validation","object_merge requires every branch output to be a JSON object",!1);Object.assign(t,n)}return{kind:"completed",output:t}}function Jb(e,t,n,o){let r;try{r=t.evaluate({expression:n,kind:"merge_fn",scope:Rn(e,o)})}catch(i){return e.signal.aborted?ne():An(i)}return e.signal.aborted?ne():{kind:"completed",output:r}}function zb(e,t){let{config:n}=e.vertex;if(n.kind!=="fan_in")return F("internal",`the fan_in handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return ne();let o=Hb(e,n.branchNodeIds);switch(n.mergeStrategy){case"concat":return{kind:"completed",output:o};case"object_merge":return Vb(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?F("validation","merge_strategy 'custom' requires a merge_fn",!1):Jb(e,t.sandbox,r,o)}default:{let r=n.mergeStrategy;return F("internal",`unknown merge_strategy '${String(r)}'`,!1)}}}function Ls(e){return{execute:t=>Promise.resolve(zb(t,e))}}function qb(e){let{config:t}=e.vertex;return t.kind!=="fan_out"?F("internal",`the fan_out handler received a '${t.kind}' node`,!1):e.signal.aborted?ne():{kind:"completed",output:null}}function Us(){return{execute:e=>Promise.resolve(qb(e))}}async function Kb(e,t){let{config:n}=e.vertex;if(n.kind!=="human_in_the_loop")return F("internal",`the human-gate handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return ne();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 ot(o.message_template,r,i,e.signal),a=o.assignee===void 0?void 0:await ot(o.assignee,r,i,e.signal)}catch(c){return e.signal.aborted?ne():F("validation",c instanceof Error?c.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 Fs(e={}){return{execute:t=>Kb(t,e)}}function Xb(e){let{config:t}=e.vertex;return t.kind!=="input"?F("internal",`the input handler received a '${t.kind}' node`,!1):e.signal.aborted?ne():{kind:"completed",output:Ds(e.inputs,e.secretInputNames)}}function Zb(e){let{config:t}=e.vertex;if(t.kind!=="output")return F("internal",`the output handler received a '${t.kind}' node`,!1);if(e.signal.aborted)return ne();let n=[...e.vertex.dependencies].sort(Ns).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 Gs(){return{execute:e=>Promise.resolve(Xb(e))}}function Bs(){return{execute:e=>Promise.resolve(Zb(e))}}function Yb(e,t){let{config:n}=e.vertex;if(n.kind!=="transform")return F("internal",`the transform handler received a '${n.kind}' node`,!1);if(e.signal.aborted)return ne();let o;try{o=t.sandbox.evaluate({expression:n.node.transform,kind:"transform",scope:Rn(e)})}catch(r){return e.signal.aborted?ne():An(r)}return e.signal.aborted?ne():{kind:"completed",output:o}}function Ws(e){return{execute:t=>Promise.resolve(Yb(t,e))}}function pu(e){let t=e.agent;return{execute(n){let o=e[n.vertex.type];return o===void 0?Promise.resolve(F("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 Hs(e){let t={...e.agent===void 0?{}:{agent:Is(e.agent)},condition:js({sandbox:e.sandbox}),transform:Ws({sandbox:e.sandbox}),fan_in:Ls({sandbox:e.sandbox}),fan_out:Us(),human_in_the_loop:Fs(e.humanGate??{}),input:Gs(),output:Bs()};return pu(t)}var _r=500;function Qb(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 e_(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 t_(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function fu(e){return Sr(e,new WeakSet)}function Sr(e,t){if(typeof e=="string")return zn(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=>Sr(o,t));if(un(e))return"[binary buffer omitted]";if(!t_(e))return e;if(ln(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]=Sr(r,t);return n}function n_(e){if(typeof e=="string")return zn(e)?"[base64 data URI omitted]":e;if(e===void 0)return"";try{let t=Sr(e,new WeakSet);return JSON.stringify(t)??"[unserializable]"}catch{return"[unserializable]"}}function o_(e){let n=(e.length>_r*8?e.slice(0,_r*8):e).replace(/\s+/g," ").trim();return n.length<=_r?n:`${n.slice(0,_r)}\u2026`}function mu(e){return e<128?1:e<2048?2:e<65536?3:4}function r_(e,t){let n=0,o=0;for(;o<e.length;){let r=e.codePointAt(o);if(r===void 0)break;let i=mu(r);if(n+i>t)break;n+=i,o+=r>65535?2:1}return e.slice(0,o)}function i_(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 s_(e,t){let n=0,o=e.length;for(;o>0;){let r=i_(e,o),i=e.codePointAt(r);if(i===void 0)break;let s=mu(i);if(n+s>t)break;n+=s,o=r}return e.slice(o)}function Vs(e,t,n){return t<=0?"":n?s_(e,t):r_(e,t)}function a_(e,t){let n,o,r=e.split(`
|
|
16
|
+
`);if(r.length>t.maxLines){let d=Math.max(1,Math.floor((t.maxLines-1)*.7)),c=Math.max(1,t.maxLines-1-d);n=r.slice(0,d).join(`
|
|
17
|
+
`),o=r.slice(r.length-c).join(`
|
|
18
|
+
`)}else n=e,o=e;let i=Math.max(0,t.maxBytes);if(t.maxLines<3)return Vs(n,i,!1);let s=Vs(n,Math.floor(i*.7),!1),a=Vs(o,Math.floor(i*.3),!0);return a===""?s:`${s}
|
|
13
19
|
\u2026
|
|
14
|
-
${a}`}async function
|
|
20
|
+
${a}`}async function hu(e,t,n,o){let r=n_(e),i=o_(r),s=Qb(r),a=e_(r);if(s<=t.maxBytes&&a<=t.maxLines)return{value:e,truncated:!1,summary:i};let d,c="no output store";if(n.outputStore)try{d=(await n.outputStore.spill(r,t,o)).ref}catch(f){if(o?.aborted===!0||f instanceof Error&&f.name==="AbortError")throw f;c="spill failed"}let u=d===void 0?`
|
|
15
21
|
|
|
16
|
-
[\u2026 truncated: ${s} bytes / ${a} lines; full output unavailable (${
|
|
22
|
+
[\u2026 truncated: ${s} bytes / ${a} lines; full output unavailable (${c}) \u2026]`:`
|
|
17
23
|
|
|
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
|
|
20
|
-
`)
|
|
24
|
+
[\u2026 truncated: ${s} bytes / ${a} lines; full output at ${d} \u2026]`;return{value:a_(r,t)+u,truncated:!0,summary:i}}var Js={maxBytes:51200,maxLines:2e3};function Io(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)=>d_(t,n,o,r)}}async function d_(e,t,n,o){if(vr(o,void 0),n.providerExecuted===!0)throw new $e(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 bo(n.name,[...e.keys()]);if(!o.grantedToolIds.has(r.id))throw new $e(r.id,"not_granted",`tool \`${r.id}\` is not granted to node \`${o.nodeId}\``);let i=c_(r,n.args,o);u_(r.id,i,o.secretArgKeys);let s;try{s=r.parseArgs(i)}catch(u){throw l_(r.id,u)}f_(r,s,o);let a,d;try{vr(o,r.id);let u=await r.dispatch(s,t,o);vr(o,r.id),a=y_(u,o.config.outputMapping),d=await hu(u,o.limits??Js,t,o.signal),vr(o,r.id)}catch(u){throw u instanceof qt?u:__(u,o)?new qt(r.id,u):u instanceof be?u:new _o(r.id,`tool \`${r.id}\` failed`,u)}let c={type:"tool_result",toolCallId:n.id,result:d.value};return{output:a,toolResult:ks(c),truncated:d.truncated,events:{call:{toolId:r.id,toolInput:b_(r,i,o.secretArgKeys)},result:{toolId:r.id,success:!0,outputSummary:d.summary}}}}var zs=new Set(["__proto__","constructor","prototype"]);function c_(e,t,n){let o=new Set(e.configOnlyParams??[]),r={};gu(r,t,o),gu(r,n.config.inputMapping,o);let i=n.config.parameters;if(i!==void 0)for(let s of o)zs.has(s)||Object.hasOwn(i,s)&&(r[s]=i[s]);return r}function gu(e,t,n){if(xr(t))for(let o of Object.keys(t))zs.has(o)||n.has(o)||(e[o]=t[o])}function u_(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 Ke(e,r,`tool \`${e}\`: a secret-typed value cannot flow into tool arguments (${r.join(", ")}) \u2014 use a credential reference (ADR-0029)`)}}function l_(e,t){let n=p_(t),o=n.length>0?` (${n.join(", ")})`:"";return new Ke(e,n,`tool \`${e}\`: invalid arguments${o}`,t)}function p_(e){if(!xr(e))return[];let t=e.issues;if(!Array.isArray(t))return[];let n=new Set;for(let o of t)if(xr(o)){let r=o.path;Array.isArray(r)&&n.add(r.map(String).join(".")||"(root)")}return[...n].sort((o,r)=>o.localeCompare(r))}function f_(e,t,n){if(e.policy.requiresGateApproval&&!n.gateApproved)throw new $e(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&&!m_(o.command,n.toolPolicy))throw new $e(e.id,"command_not_allowed",`tool \`${e.id}\`: command not in the allowedCommands allowlist`);e.policy.egress==="http"&&o.url!==void 0&&h_(e.id,o.url,n)}function m_(e,t){if((t.allowedCommands??[]).includes(e))return!0;for(let o of t.allowedCommandGlobs??[])if(g_(o,e))return!0;return!1}function h_(e,t,n){let o=It(t);if(o===null||o.hasCredentials)throw new $e(e,"insecure_url",`tool \`${e}\`: outbound URL must be HTTPS without embedded credentials`);if(!(n.toolPolicy.allowedDomains??[]).includes(o.host))throw new $e(e,"domain_not_allowed",`tool \`${e}\`: host not in the allowedDomains allowlist`)}function g_(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 y_(e,t){if(t===void 0)return e;let n={};for(let[o,r]of Object.entries(t))zs.has(o)||(n[o]=w_(e,r));return n}function w_(e,t){if(t==="")return e;let n=e;for(let o of t.split(".")){if(!xr(n)||!Object.hasOwn(n,o))return;n=n[o]}return n}function b_(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]=fu(o[r]);return o}function vr(e,t){if(e.signal?.aborted===!0)throw new qt(t)}function __(e,t){return t.signal?.aborted===!0?!0:e instanceof Error&&e.name==="AbortError"}function xr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import{z as C}from"zod";function ke(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 S_(e,t,n){if(!/^https:\/\/[^/?#\s]+/i.test(e))throw new Ke("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 qs(e,t){if(e.fs===void 0)throw new Fe(t,"fs");return e.fs}function Ks(e,t){if(e.process===void 0)throw new Fe(t,"process");return e.process}function yu(e,t){if(e.egress===void 0)throw new Fe(t,"egress");return e.egress}function wu(e,t){if(e.os===void 0)throw new Fe(t,"os");return e.os}function v_(e,t){if(e.mcp===void 0)throw new Fe(t,"mcp");return e.mcp}var Xs={fsScoped:!0,spawnsProcess:!1,requiresGateApproval:!1},Zs={fsScoped:!1,spawnsProcess:!1,requiresGateApproval:!1},x_={fsScoped:!1,spawnsProcess:!1,requiresGateApproval:!1},k_=ke({id:"read_file",description:"Read a text file as UTF-8; binary/media content returns a durable media handle.",args:C.object({path:C.string().min(1),glob:C.boolean().optional()}).strict(),llmVisibleParams:{type:"object",properties:{path:{type:"string"},glob:{type:"boolean"}},required:["path"],additionalProperties:!1},policy:Xs,dispatch:(e,t,n)=>qs(t,"read_file").readFile(e.path,{glob:e.glob},n.signal)}),C_=ke({id:"write_file",description:"Write or append content to a file, within the allowed FS scope only.",args:C.object({path:C.string().min(1),content:C.string(),append:C.boolean().optional(),createDirs:C.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:Xs,dispatch:(e,t,n)=>qs(t,"write_file").writeFile(e.path,e.content,{append:e.append,createDirs:e.createDirs},n.signal)}),I_=ke({id:"list_directory",description:"List directory contents, optionally recursive with a glob filter.",args:C.object({path:C.string().min(1),recursive:C.boolean().optional(),glob:C.string().optional()}).strict(),llmVisibleParams:{type:"object",properties:{path:{type:"string"},recursive:{type:"boolean"},glob:{type:"string"}},required:["path"],additionalProperties:!1},policy:Xs,dispatch:(e,t,n)=>qs(t,"list_directory").listDirectory(e.path,{recursive:e.recursive,glob:e.glob},n.signal)}),E_=ke({id:"run_command",description:"Spawn an allowlisted shell command (shell:false) and capture stdout/stderr/exit code.",args:C.object({command:C.string().min(1),args:C.array(C.string()).optional(),cwd:C.string().optional(),timeoutMs:C.number().int().positive().optional(),env:C.record(C.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)=>Ks(t,"run_command").spawn(e.command,e.args??[],e.env??{},{cwd:e.cwd,timeoutMs:e.timeoutMs},n.signal)}),M_=ke({id:"git_status",description:"Run git status / log / diff in the workspace; extra flags are author-pinned via config, not model-supplied.",args:C.object({command:C.enum(["status","log","diff"]).optional(),args:C.array(C.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)=>Ks(t,"git_status").spawn("git",[e.command??"status",...e.args??[]],{},{},n.signal)}),R_=ke({id:"git_commit",description:"Create a commit, optionally restricting it to the given pathspecs \u2014 requires a human-gate approval in automated workflows.",args:C.object({message:C.string().min(1),files:C.array(C.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)=>Ks(t,"git_commit").spawn("git",["commit","-m",e.message,"--",...e.files??[]],{},{},n.signal)}),A_=ke({id:"http_request",description:"Outbound HTTPS request to an allowedDomains host (HTTPS-only, exact-FQDN, SSRF-guarded).",args:C.object({method:C.enum(["GET","POST","PUT","DELETE"]).optional(),url:C.string().min(1),headers:C.record(C.string()).optional(),body:C.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)=>yu(t,"http_request").fetch({method:e.method??"GET",url:e.url,headers:e.headers,body:e.body},n.signal)}),T_=ke({id:"web_search",description:"Search the web via the configured provider (key resolved host-side via a credential ref).",args:C.object({query:C.string().min(1),maxResults:C.number().int().positive().optional(),endpoint:C.string().min(1),credentialRef:C.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=S_(e.endpoint,e.query,e.maxResults);return yu(t,"web_search").fetch({method:"GET",url:o,credentialRef:e.credentialRef},n.signal)}}),O_=ke({id:"mcp_call",description:"Invoke a tool on a configured MCP server (server URL runs the same SSRF primitive).",args:C.object({server:C.string().min(1),tool:C.string().min(1),args:C.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)=>v_(t,"mcp_call").call({server:e.server,tool:e.tool,args:e.args},n.signal)}),P_=ke({id:"read_clipboard",description:"Read the current clipboard text.",args:C.object({}).strict(),llmVisibleParams:{type:"object",properties:{},additionalProperties:!1},policy:Zs,dispatch:(e,t,n)=>wu(t,"read_clipboard").readClipboard(n.signal)}),$_=ke({id:"notify",description:"Send a native desktop notification (title + body).",args:C.object({title:C.string().min(1),body:C.string()}).strict(),llmVisibleParams:{type:"object",properties:{title:{type:"string"},body:{type:"string"}},required:["title","body"],additionalProperties:!1},policy:Zs,dispatch:async(e,t,n)=>(await wu(t,"notify").notify({title:e.title,body:e.body},n.signal),{delivered:!0})}),N_=ke({id:"read_media",description:"Read a produced/received media handle (optionally a byte range) and return it inline for the model.",args:C.object({handle:C.string().regex(We,"must be a media://sha256-<64hex> handle"),start:C.number().int().nonnegative().optional(),end:C.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:x_,dispatch:async(e,t,n)=>{let o=n.mediaRead,r=n.requestingScope;if(o===void 0||r===void 0)throw new Fe("read_media","media-read");let i=await o.describe(e.handle,n.signal);if(i===void 0)throw new Ke("read_media",["handle"],"read_media: unknown media handle");if(!rd(i.allowedScopes,r))throw new $e("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=Bo(s,i.byteLength);if(!a.ok)throw new Ke("read_media",["start","end"],`read_media: ${a.reason}`);let d=await o.readRange(e.handle,a.range,n.signal);return{type:"media",mimeType:i.mimeType,source:d}}}),D_=ke({id:"invoke_agent",description:"Dispatch another agent node by id with explicit input (orchestrator delegation).",args:C.object({nodeId:C.string().min(1),input:C.unknown().optional()}).strict(),llmVisibleParams:{type:"object",properties:{nodeId:{type:"string"},input:{}},required:["nodeId"],additionalProperties:!1},policy:Zs,dispatch:(e,t,n)=>{if(n.invokeAgent===void 0)throw new Fe("invoke_agent","invokeAgent");return n.invokeAgent(e.nodeId,e.input)}}),_t=[k_,C_,I_,E_,M_,R_,A_,T_,O_,P_,$_,N_,D_],j_=_t.map(e=>e.id).sort((e,t)=>e.localeCompare(t));import{mkdirSync as L_,writeFileSync as U_}from"fs";import{dirname as F_,join as G_,resolve as B_}from"path";function kr(e){let t=e.store.loadFull(e.sessionId);if(t===void 0)throw new l("invalid_invocation",`no session found with id ${e.sessionId}`);let n=$s(t.session,t.messages),o=Mn(n),r=e.outPath===void 0?G_(e.cwd,`${e.sessionId}.relavium.yaml`):B_(e.cwd,e.outPath);try{L_(F_(r),{recursive:!0}),U_(r,o,{encoding:"utf8",flag:e.force?"w":"wx"})}catch(s){let a=s instanceof Error&&"code"in s?s.code:void 0;throw a==="EEXIST"?new l("invalid_invocation",`${r} already exists \u2014 pass --force to overwrite`,{cause:s}):a==="EISDIR"||a==="ENOTDIR"?new l("invalid_invocation",`cannot write ${r}: the target path is not a file`,{cause:s}):s}let i=t.messages.reduce((s,a)=>Math.max(s,a.sequenceNumber),-1)+1;return{path:r,workflowId:n.workflow.id,sequenceNumber:i,record:t.session}}function Ys(e){let t=()=>new Date(e.now()).toISOString(),n=t(),o=e.initialSequenceNumber??0,r=0,i=0,s=0,a,d="",c,u=!1,f=y=>({id:e.sessionId,agentSlug:e.agent.id,agentSnapshot:e.agent,context:e.context,status:y,totalInputTokens:r,totalOutputTokens:i,totalCostMicrocents:s,createdAt:n,updatedAt:t()}),g=(y,J)=>{let Z={id:e.uuid(),sessionId:e.sessionId,sequenceNumber:o++,role:y,content:[{type:"text",text:J}],timestamp:t()};e.store.appendMessage(Z)},x=y=>{switch(y.type){case"agent:token":d+=y.token;return;case"agent:tool_call":d="";return;case"cost:updated":s=y.cumulativeCostMicrocents;return;case"session:turn_completed":y.error===void 0&&a!==void 0&&(g("user",a),d.length>0&&g("assistant",d),r+=y.tokensUsed.input,i+=y.tokensUsed.output),e.store.updateSession(f("active")),a=void 0,d="";return;case"session:cancelled":e.store.updateSession(f("ended")),c?.(),c=void 0;return;default:return}};return{start(){if(u)return;u=!0;let y=e.store.loadSession(e.sessionId);y===void 0?e.store.createSession(f("active")):(r=y.totalInputTokens,i=y.totalOutputTokens,s=y.totalCostMicrocents),c=e.handle.subscribe(x)},beginUserTurn(y){a=y,d=""},close(){c?.(),c=void 0}}}import{z as X}from"zod";var Qs=16,it=2e3,ea=1e3,ta=500,oe=class extends Error{},W_=["$ref","$dynamicRef","oneOf","anyOf","allOf","not","if","then","else","patternProperties","dependencies","dependentSchemas","dependentRequired","unevaluatedProperties"];function vu(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function H_(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function oa(e){let t={nodes:0};try{return{ok:!0,schema:ra(e,t,0)}}catch(n){return{ok:!1,reason:n instanceof Error&&n.message.length>0?n.message:"invalid or unsupported schema"}}}function ra(e,t,n){if(n>Qs)throw new oe(`schema nesting exceeds the maximum depth of ${Qs}`);if((t.nodes+=1)>it)throw new oe(`schema exceeds the maximum of ${it} nodes`);if(e===!0)return X.unknown();if(e===!1)return X.never();if(!vu(e))throw new oe("schema node must be an object or a boolean");for(let a of W_)if(a in e)throw new oe(`unsupported JSON-Schema construct: "${a}"`);let o=V_(e,t),{types:r,nullableFlag:i}=J_(e,t),s;return o!==void 0?s=r.length===0?o:X.intersection(o,bu(r,e,t,n)):r.length>0?s=bu(r,e,t,n):s=X.unknown(),i?s.nullable():s}function V_(e,t){let n="const"in e,o="enum"in e;if(n&&o)return X.intersection(na(e.const),Su(e.enum,t));if(n)return na(e.const);if(o)return Su(e.enum,t)}function bu(e,t,n,o){let r=e.map(i=>z_(i,t,n,o));return r.length===1?r[0]:X.union(r)}function J_(e,t){let n=e.type,o=e.nullable===!0;if(n===void 0)return{types:[],nullableFlag:o};let r=Array.isArray(n)?n:[n];if((t.nodes+=r.length)>it)throw new oe(`schema exceeds the maximum of ${it} nodes`);let i=[];for(let s of r){if(typeof s!="string")throw new oe("`type` must be a string or an array of strings");i.push(s)}return{types:i,nullableFlag:o}}function z_(e,t,n,o){switch(e){case"string":return q_(t);case"integer":return _u(t,!0);case"number":return _u(t,!1);case"boolean":return X.boolean();case"null":return X.null();case"object":return X_(t,n,o);case"array":return Q_(t,n,o);default:throw new oe(`unsupported JSON-Schema type: "${e}"`)}}function q_(e){let t=X.string(),n=e.minLength,o=e.maxLength;return typeof n=="number"&&Number.isInteger(n)&&n>=0&&(t=t.min(n)),typeof o=="number"&&Number.isInteger(o)&&o>=0&&(t=t.max(o)),t}function _u(e,t){let n=t?X.number().int():X.number(),o=e.minimum,r=e.maximum;return typeof o=="number"&&Number.isFinite(o)&&(n=n.min(o)),typeof r=="number"&&Number.isFinite(r)&&(n=n.max(r)),n}function xu(e){if(e==="__proto__")throw new oe('a property named "__proto__" is not allowed')}function K_(e,t){let n=[];for(let o of t)Object.hasOwn(e,o)||(xu(o),e[o]=X.unknown(),n.push(o));return n}function X_(e,t,n){let o=e.properties;if(o!==void 0&&!vu(o))throw new oe("`properties` must be an object");let r=o===void 0?[]:Object.entries(o);if(r.length>ta)throw new oe(`object declares more than the maximum of ${ta} properties`);let i=Y_(e,t),s={};for(let[c,u]of r){xu(c);let f=ra(u,t,n+1);s[c]=i.has(c)?f:f.optional()}let a=K_(s,i),d=Z_(e)==="strict"?X.object(s).strict():X.object(s).passthrough();return a.length===0?d:d.superRefine((c,u)=>{for(let f of a)Object.hasOwn(c,f)||u.addIssue({code:X.ZodIssueCode.custom,message:`missing required property "${f}"`,path:[f]})})}function Z_(e){return e.additionalProperties===!1?"strict":"passthrough"}function Y_(e,t){let n=e.required;if(n===void 0)return new Set;if(!Array.isArray(n)||!n.every(o=>typeof o=="string"))throw new oe("`required` must be an array of strings");if((t.nodes+=n.length)>it)throw new oe(`schema exceeds the maximum of ${it} nodes`);return new Set(n)}function Q_(e,t,n){let o=e.items,r;if(o===void 0)r=X.unknown();else{if(Array.isArray(o))throw new oe("tuple `items` (an array of schemas) is not supported");r=ra(o,t,n+1)}let i=X.array(r),s=e.minItems,a=e.maxItems;return typeof s=="number"&&Number.isInteger(s)&&s>=0&&(i=i.min(s)),typeof a=="number"&&Number.isInteger(a)&&a>=0&&(i=i.max(a)),i}function na(e){if(e===null)return X.null();if(typeof e=="string"||typeof e=="boolean")return X.literal(e);if(typeof e=="number"&&Number.isFinite(e))return X.literal(e);throw new oe("`const` must be a finite number, string, boolean, or null")}function Su(e,t){if(!Array.isArray(e)||e.length===0)throw new oe("`enum` must be a non-empty array");if(e.length>ea)throw new oe(`\`enum\` exceeds the maximum of ${ea} members`);if((t.nodes+=e.length)>it)throw new oe(`schema exceeds the maximum of ${it} nodes`);if(!e.every(H_))throw new oe("`enum` members must be string/number/boolean/null scalars");let n=e.map(o=>na(o));return n.length===1?n[0]:X.union(n)}var me=class extends Error{constructor(t,n){super(t,n),this.name="McpError"}},Ce=class extends me{constructor(t,n){super(`MCP server "${t}" could not be connected or listed`,n),this.name="McpConnectError"}},Eo=class extends me{constructor(t){super(`the MCP capability is not wired on the host (tool "${t}")`),this.name="McpHostUnavailableError"}};function sa(e){let t=ia(e)?e:{},n=Array.isArray(t.content)?t.content:[],o=[];for(let r of n)if(ia(r)&&r.type==="text"&&typeof r.text=="string")o.push({type:"text",text:r.text});else{let i=ia(r)&&typeof r.type=="string"?r.type:"unknown";o.push({type:"non_text",kind:i})}return{content:o,isError:t.isError===!0}}function ia(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var eS={fsScoped:!1,spawnsProcess:!1,egress:"mcp",requiresGateApproval:!1},tS=/^[a-zA-Z0-9_-]+$/,nS=128;function aa(e,t,n,o=new Set){let r=[],i=[],s=n===void 0?void 0:new Set(n);for(let a of t){if(s!==void 0&&!s.has(a.name)){i.push({name:a.name,reason:"not in the server tools_allowlist"});continue}if(a.name.trim()===""){i.push({name:a.name,reason:"empty tool name"});continue}let d=oS(e,a.name);if(d===void 0){i.push({name:a.name,reason:"tool name is not a valid LLM tool id after namespacing"});continue}if(o.has(d)){i.push({name:a.name,reason:`namespaced id collides with another tool ("${d}")`});continue}let c=oa(a.inputSchema);if(!c.ok){i.push({name:a.name,reason:`unsupported inputSchema: ${c.reason}`});continue}o.add(d);let u=c.schema,f=a.name;r.push({id:d,source:"mcp",description:a.description??"",parseArgs:g=>u.parse(g),llmVisibleParams:a.inputSchema,policy:eS,dispatch:(g,x,y)=>{let J=x.mcp;if(J===void 0)throw new Eo(d);return J.call({server:e,tool:f,args:g},y.signal)}})}return{defs:r,skipped:i}}function oS(e,t){let n=`mcp_${e}_${t.replace(/[^a-zA-Z0-9_-]/g,"_")}`;if(!(n.length>nS||!tS.test(n)))return n}import{Client as rS}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as iS}from"@modelcontextprotocol/sdk/client/stdio.js";var sS={name:"relavium",version:"0.1.0"},ku=100;async function aS(e){let t=[],n;for(let o=0;o<ku;o+=1){let r=await e(n);for(let i of r.tools)t.push({name:i.name,...i.description===void 0?{}:{description:i.description},inputSchema:i.inputSchema});if(r.nextCursor===void 0)return t;n=r.nextCursor}throw new me(`tools/list exceeded the maximum of ${ku} pages`)}async function ca(e,t){let n=new iS({command:t.command,env:{...t.env},stderr:"ignore",...t.args===void 0?{}:{args:[...t.args]},...t.cwd===void 0?{}:{cwd:t.cwd}});return Yt(e,n)}async function Yt(e,t){let n=new rS(sS,{capabilities:{}});try{await n.connect(t)}catch(o){throw await Cu(n),new Ce(e,{cause:o})}return new da(n)}var da=class{#e;constructor(t){this.#e=t}async listTools(){return aS(t=>this.#e.listTools(t===void 0?void 0:{cursor:t}))}async callTool(t,n){let o=await this.#e.callTool({name:t,arguments:dS(n)?n:void 0});return sa(o)}async close(){await Cu(this.#e)}};async function Cu(e){try{await e.close()}catch{}}function dS(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import{StreamableHTTPClientTransport as cS}from"@modelcontextprotocol/sdk/client/streamableHttp.js";async function ua(e,t){let n;try{n=new URL(t.url)}catch(r){throw new Ce(e,{cause:r})}let o=new cS(n);return Yt(e,o)}import{SSEClientTransport as uS}from"@modelcontextprotocol/sdk/client/sse.js";async function la(e,t){let n;try{n=new URL(t.url)}catch(o){throw new Ce(e,{cause:o})}return Yt(e,new uS(n))}import{WebSocketClientTransport as lS}from"@modelcontextprotocol/sdk/client/websocket.js";async function pa(e,t){if(typeof globalThis.WebSocket!="function")throw new me(`MCP server "${e}": the websocket transport requires a global WebSocket (Node 22+). Upgrade Node, or use the 'http' (Streamable HTTP) transport instead.`);let n;try{n=new URL(t.url)}catch(o){throw new Ce(e,{cause:o})}return Yt(e,new lS(n))}async function fa(e){let t=new Map,n=[],o=new Map,r=[],i=new Set,s=new Set;for(let u of e){if(s.has(u.id))throw new me(`duplicate MCP server id "${u.id}"`);s.add(u.id)}let a=await Promise.allSettled(e.map(async u=>{try{let f=await u.open();t.set(u.id,f);let g=await f.listTools();return{server:u,tools:g}}catch(f){throw f instanceof me?f:new Ce(u.id,{cause:f})}})),d=a.find(u=>u.status==="rejected");if(d!==void 0)throw await Iu(t),d.reason;for(let u of a){if(u.status!=="fulfilled")continue;let{server:f,tools:g}=u.value,x=aa(f.id,g,f.toolsAllowlist,i);n.push(...x.defs),o.set(f.id,x.defs.map(y=>y.id));for(let y of x.skipped)r.push({server:f.id,name:y.name,reason:y.reason})}return{capability:{call:u=>{let f=t.get(u.server);return f===void 0?Promise.reject(new me(`no MCP connection for server "${u.server}"`)):f.callTool(u.tool,u.args)}},toolDefs:n,toolIdsByServer:o,skipped:r,close:()=>Iu(t)}}async function Iu(e){let t=[...e.values()];e.clear(),await Promise.all(t.map(n=>n.close().catch(()=>{})))}var ma=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function Cr(e){let t=ma.length,n=Number.isFinite(e)?(Math.trunc(e)%t+t)%t:0;return ma[n]??ma[0]}function Ir(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 Eu(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 Tn(e){return`$${(e/1e8).toFixed(4)}`}function On(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 Pn(e){return`\u2191${e.input} \u2193${e.output}`}function $n(e){return`\u25C6 ${e.mimeType} ${e.handle}`}var pS=String.raw`\x1b[\]P^_X][^\x07\x1b]*(?:\x07|\x1b\\)`,fS=String.raw`\x1b\[[0-?]*[ -/]*[@-~]`,mS=String.raw`\x1b[@-Z\\-_]`,hS=new RegExp(`${pS}|${fS}|${mS}`,"g"),gS=/[\x00-\x08\x0b-\x1f\x7f-\x9f]/g;function st(e){return e.replace(hS,"").replace(gS,"")}function Ge(e){return st(e).replace(/[\t\n]+/g," ")}function Mu(e){return[e.errorCode===void 0?e.stopReason:`error: ${e.errorCode}`,Pn(e.tokensUsed),e.durationMs===void 0?void 0:On(e.durationMs)].filter(o=>o!==void 0).join(" \xB7 ")}function Er(e){return`\u2192 ${Ge(e.toolId)} ${e.resolved?"\u2713":"\u2026"}`}function Mr(e){return[e.model===void 0?void 0:Ge(e.model),Tn(e.cumulativeCostMicrocents),`${e.turnCount} ${e.turnCount===1?"turn":"turns"}`].filter(n=>n!==void 0).join(" \xB7 ")}function Tu(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function Ou(e,t){if(e.ref===void 0)return e;let n=t.find(o=>o.name===e.ref);if(n===void 0)throw new l("invalid_invocation",`MCP server ref '${e.ref}' is not registered \u2014 add a [[mcp_servers]] entry named '${e.ref}' to your config.`);return{id:Tu(n.name),transport:n.transport,...n.command===void 0?{}:{command:n.command},...n.args===void 0?{}:{args:n.args},...n.env===void 0?{}:{env:n.env},...n.url===void 0?{}:{url:n.url},...n.allow_local_endpoint===void 0?{}:{allow_local_endpoint:n.allow_local_endpoint},...e.tools_allowlist===void 0?{}:{tools_allowlist:e.tools_allowlist}}}function yS(e){return e.ref===void 0?e.id:Tu(e.ref)}function Pu(e,t,n,o={}){let r=o.stdio??ca,i={http:o.http??ua,sse:o.sse??la,websocket:o.websocket??pa},s=[];for(let a of e??[]){if(a.id===void 0||a.transport===void 0)throw new l("invalid_invocation",`MCP server '${a.ref??a.id??"?"}': a by-name reference could not be resolved to a connection.`);s.push(a.transport==="stdio"?wS(a.id,a,t,n,r):bS(a.id,a.transport,a,i))}return s}function $u(e){return e.tools_allowlist===void 0?{}:{toolsAllowlist:e.tools_allowlist}}function wS(e,t,n,o,r){if(t.command===void 0)throw new l("invalid_invocation",`MCP server '${e}': a 'stdio' transport requires a 'command'.`);let i=t.command,s=SS(e,t.env,o),a=t.args;return{id:e,...$u(t),open:()=>r(e,{command:i,env:s,cwd:n,...a===void 0?{}:{args:a}})}}function bS(e,t,n,o){if(n.url===void 0)throw new l("invalid_invocation",`MCP server '${e}': the '${t}' transport requires a 'url'.`);if(n.env!==void 0)throw new l("invalid_invocation",`MCP server '${e}': 'env' is not used by a network transport \u2014 it is injected only into a stdio child.`);let r=n.url;_S(e,r,n.allow_local_endpoint===!0);let i=o[t];return{id:e,...$u(n),open:()=>i(e,{url:r})}}function _S(e,t,n){let o;try{o=new URL(t)}catch{throw new l("invalid_invocation",`MCP server '${e}': malformed url.`)}if(o.username!==""||o.password!=="")throw new l("invalid_invocation",`MCP server '${e}': the url must not embed credentials (user:pass@\u2026) \u2014 use env/keychain auth.`);let r=o.protocol;if(r!=="http:"&&r!=="https:"&&r!=="ws:"&&r!=="wss:")throw new l("invalid_invocation",`MCP server '${e}': unsupported url scheme '${r.replace(":","")}' (http/https/ws/wss only).`);let i=o.hostname.replace(/^\[/,"").replace(/\]$/,""),s=r==="https:"||r==="wss:";if(Re(i)){if(!n)throw new l("invalid_invocation",`MCP server '${e}': '${i}' is a private/loopback/link-local address. Set 'allow_local_endpoint: true' on the server to permit a local MCP endpoint.`);return}if(!s)throw new l("invalid_invocation",`MCP server '${e}': a remote MCP url must use https/wss (got '${o.protocol.replace(":","")}').`)}async function ha(e,t){let n=(e??[]).map(r=>Ou(r,t.registrations??[])),o=Pu(n,t.cwd,t.resolveSecret);if(o.length!==0)return Nu(o,t.startMcpClient)}async function Nu(e,t){let n=t??fa;try{return await n(e)}catch(o){throw o instanceof me?new l("invalid_invocation",`MCP server connection failed: ${o.message}`):o}}var Rr=/\{\{\s*secrets\.([A-Za-z0-9._-]+)\s*\}\}/g;function SS(e,t,n){let o={};for(let[r,i]of Object.entries(t??{})){if((n===void 0?i:i.replace(Rr,"")).includes("{{")){let a=n===void 0&&Rr.test(i);throw Rr.lastIndex=0,new l("invalid_invocation",a?`MCP server '${e}': env '${r}' uses {{secrets.<name>}} but no MCP secret resolver is wired.`:`MCP server '${e}': unsupported interpolation in env '${r}' \u2014 only {{secrets.<name>}} is supported.`)}o[r]=n===void 0?i:i.replace(Rr,(a,d)=>n(d))}return o}async function Du(e,t){let n=(e.workflow.agents??[]).filter(Ru),o=t.registrations??[],r=new Map;for(let a of n)for(let d of a.mcp_servers??[]){let c=Ou(d,o);if(c.id===void 0)continue;let u=r.get(c.id);if(u===void 0)r.set(c.id,c);else if(Au(u)!==Au(c))throw new l("invalid_invocation",`MCP server '${c.id}' is declared with conflicting settings by more than one agent \u2014 give the distinct servers distinct ids. (A by-name 'ref' uses the registration name sanitized to the [A-Za-z0-9_-] charset, so two different names can collapse to the same id \u2014 if that is the cause, make the registration names charset-distinct.)`)}if(r.size===0)return;let i=Pu([...r.values()],t.cwd,t.resolveSecret),s=await Nu(i,t.startMcpClient);try{let a=(e.workflow.agents??[]).map(c=>Ru(c)?vS(c,s.toolIdsByServer):c),d={...e,workflow:{...e.workflow,agents:a}};return{client:s,workflow:d}}catch(a){throw await s.close().catch(()=>{}),a}}function Ru(e){return"id"in e}function vS(e,t){let n=(e.mcp_servers??[]).flatMap(o=>{let r=yS(o);return r===void 0?[]:t.get(r)??[]});return n.length===0?e:{...e,tools:[...new Set([...e.tools??[],...n])]}}function Au(e){let t=Object.entries(e.env??{}).sort(([o],[r])=>o.localeCompare(r)),n=e.tools_allowlist===void 0?null:[...e.tools_allowlist].sort((o,r)=>o.localeCompare(r));return JSON.stringify({t:e.transport,c:e.command??null,a:e.args??[],u:e.url??null,e:t,w:n,l:e.allow_local_endpoint??!1})}function Qt(e,t){for(let n of t)e.writeErr(`note: MCP tool '${Ge(n.name)}' (server '${Ge(n.server)}') skipped \u2014 ${Ge(n.reason)}
|
|
25
|
+
`)}import{readFileSync as xS,statSync as kS}from"fs";import{isAbsolute as ju,join as Lu,resolve as CS,sep as IS}from"path";var Uu=Pe;function Fu(e,t){return ga(e,{cwd:t.cwd,kind:"workflow",subdir:"workflows",projectConfigDir:t.projectConfigDir,idSuffixes:[".relavium.yaml",".yaml"]})}function ga(e,t){let n=ES(e,t);for(let r of n){let i=MS(r,t.kind);if(i!==void 0)return{path:r,yaml:i}}let o=n.length>0?n.join(", "):"(no project .relavium/ found)";throw new l("invalid_invocation",`${t.kind} '${e}' not found \u2014 looked for: ${o}.`)}function ES(e,t){if(ju(e)||e.includes("/")||e.includes(IS)||e.endsWith(".yaml")||e.endsWith(".yml"))return[ju(e)?e:CS(t.cwd,e)];if(t.projectConfigDir===void 0)return[];let o=Lu(t.projectConfigDir,t.subdir);return t.idSuffixes.map(r=>Lu(o,`${e}${r}`))}function MS(e,t){let n;try{n=kS(e)}catch(o){if(RS(o)==="ENOENT")return;throw new l("invalid_invocation",`${t} file '${e}' could not be read.`,{cause:o})}if(!n.isFile())throw new l("invalid_invocation",`${t} path '${e}' is not a regular file.`);if(n.size>Uu)throw new l("invalid_invocation",`${t} file '${e}' exceeds the ${Uu}-byte size limit.`);try{return xS(e,"utf8")}catch(o){throw new l("invalid_invocation",`${t} file '${e}' could not be read.`,{cause:o})}}function RS(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}var Gu="claude-sonnet-4-6",AS="relavium-chat",TS="You are Relavium's built-in chat assistant, running locally in the user's terminal via `relavium chat`. Be concise, accurate, and helpful. You are granted a small set of read-only local tools (reading files, listing directories, and git status), each subject to the session's filesystem scope and the host's configuration \u2014 a tool may be unavailable, in which case say so plainly rather than guessing. You cannot modify files, run commands, or access the network unless the user binds an agent that grants those tools. When a request is ambiguous, ask a brief clarifying question.",OS=["read_file","list_directory","git_status"];function PS(e){let t=e.toLowerCase();if(t.startsWith("claude"))return"anthropic";if(t.startsWith("gpt")||/^o\d/.test(t))return"openai";if(t.startsWith("gemini"))return"gemini";if(t.startsWith("deepseek"))return"deepseek"}function Bu(e){let t=PS(e);if(t===void 0)throw new l("invalid_invocation",`cannot infer a provider for chat model '${e}'. Set [chat].default_model to a known model (claude-*, gpt-*, gemini-*, deepseek-*), or bind an explicit agent with 'relavium chat --agent <ref>'.`);return{id:AS,name:"Relavium chat",model:e,provider:t,system_prompt:TS,tools:[...OS]}}function Wu(e,t){if(e===void 0)return Bu(t.defaultModel??Gu);let n=ga(e,{cwd:t.cwd,kind:"agent",subdir:"agents",projectConfigDir:t.projectConfigDir,idSuffixes:[".agent.yaml",".relavium.yaml",".yaml"]});return wt(n.yaml,{source:n.path})}var $S="sandboxed";function Hu(e,t,n){let o=new bt({now:()=>new Date(e.now()).toISOString()}),r=e.providers??ee(),i=n===void 0?_t:[..._t,...n.toolDefs],s=e.toolHost??{},a=n===void 0?s:{...s,mcp:n.capability},d=Io({tools:i,host:a}),c=NS(e.chat,e.onBudgetWarning),u=Ps(o,t),f={resolveProvider:r.resolveProvider,keyFor:r.keyFor,registry:d,tools:i,sleep:g=>new Promise(x=>setTimeout(x,g)),now:e.now,newAbortController:()=>new AbortController,emit:u,...e.chat.maxTurns===void 0?{}:{maxTurns:e.chat.maxTurns},...c===void 0?{}:{preEgress:c.preEgress,updateCost:c.updateCost}};return{bus:o,deps:f,emit:u}}async function Ar(e){let t=e.uuid(),n=Wu(e.agentRef,{cwd:e.cwd,projectConfigDir:e.projectConfigDir,defaultModel:e.chat.defaultModel}),o={workingDir:e.cwd,fsScopeTier:e.chat.fsScope??$S,...e.variables===void 0?{}:{variables:e.variables}},r=e.disableMcp?void 0:await ha(n.mcp_servers,{cwd:e.cwd,...e.startMcpClient===void 0?{}:{startMcpClient:e.startMcpClient},...e.mcpSecretResolver===void 0?{}:{resolveSecret:e.mcpSecretResolver},...e.mcpRegistrations===void 0?{}:{registrations:e.mcpRegistrations}});try{let{bus:i,deps:s,emit:a}=Hu(e,t,r),d=new En({sessionId:t,agentRef:n.id,agent:Vu(n,r),context:o,deps:s}),c=wr(i,t,()=>d.cancel());return{session:d,handle:c,sessionId:t,agent:n,context:o,emitSessionEvent:a,mcpSkipped:r?.skipped??[],...r===void 0?{}:{closeMcp:()=>r.close()}}}catch(i){throw await r?.close().catch(()=>{}),i}}function Vu(e,t){if(t===void 0||t.toolDefs.length===0)return e;let n=[...new Set([...e.tools??[],...t.toolDefs.map(o=>o.id)])];return{...e,tools:n}}async function Ju(e){let{record:t,messages:n}=e,o=t.agentSnapshot;if(o===void 0)throw new l("invalid_invocation",`session ${t.id} has no stored agent snapshot and cannot be resumed`);let r=t.context,i=Os(t,n),s=await ha(o.mcp_servers,{cwd:r.workingDir,...e.startMcpClient===void 0?{}:{startMcpClient:e.startMcpClient},...e.mcpSecretResolver===void 0?{}:{resolveSecret:e.mcpSecretResolver},...e.mcpRegistrations===void 0?{}:{registrations:e.mcpRegistrations}});try{let{bus:a,deps:d,emit:c}=Hu(e,t.id,s),u=En.resume({sessionId:t.id,agentRef:o.id,agent:Vu(o,s),context:r,deps:d},i),f=wr(a,t.id,()=>u.cancel()),g=n.reduce((x,y)=>Math.max(x,y.sequenceNumber),-1)+1;return{session:u,handle:f,sessionId:t.id,agent:o,context:r,emitSessionEvent:c,resumeState:i,nextSequenceNumber:g,mcpSkipped:s?.skipped??[],...s===void 0?{}:{closeMcp:()=>s.close()}}}catch(a){throw await s?.close().catch(()=>{}),a}}function NS(e,t){let n=e.maxCostMicrocents;if(n===void 0||n<=0)return;let o={max_cost_microcents:n,on_exceed:e.onExceed??"pause_for_approval"},r=new zt({budget:o,emit:i=>{try{t?.({spentMicrocents:i.spentMicrocents,limitMicrocents:i.limitMicrocents,thresholdPct:i.thresholdPct})}catch{}return Promise.resolve()}});return{preEgress:i=>r.checkPreEgress(i.model,i.maxTokens,i.mediaUnitsEstimate),updateCost:i=>r.updateCost(i)}}function qu(e){return{...e?.agentRef===void 0?{}:{agentRef:e.agentRef},...e?.model===void 0?{}:{model:e.model},status:"idle",transcript:[],liveTokens:"",liveToolCalls:[],cumulativeCostMicrocents:e?.cumulativeCostMicrocents??0,turnCount:e?.turnCount??0,turnStartedAtMs:void 0,gapDetected:!1,warnings:[]}}function zu(e,t,n){let o=[...e,t];return o.length>n?o.slice(o.length-n):o}function DS(e,t){let n=e+t;return n.length>4e3?n.slice(n.length-4e3):n}function Ku(e,t){return[...e,t]}function Xu(e,t){return{...e,transcript:Ku(e.transcript,{role:"user",text:t})}}function jS(e,t){return e!==void 0&&t>e+1?{apply:!0,lastSequenceNumber:t,gapDetected:!0,warning:`event gap: #${e} \u2192 #${t} (some events were not observed)`}:e!==void 0&&t<=e?{apply:!1,lastSequenceNumber:e,gapDetected:!0,warning:`event out of order: #${t} after #${e} (ignored)`}:{apply:!0,lastSequenceNumber:t,gapDetected:!1}}function Zu(e,t){let n=jS(e.lastSequenceNumber,t.sequenceNumber),o={...e,lastSequenceNumber:n.lastSequenceNumber,gapDetected:e.gapDetected||n.gapDetected,...n.warning===void 0?{}:{warnings:zu(e.warnings,n.warning,6)}};if(!n.apply)return o;switch(t.type){case"session:started":return{...o,agentRef:t.agentRef,model:t.model};case"session:turn_started":return{...o,status:"running",liveTokens:"",liveToolCalls:[],turnStartedAtMs:Date.parse(t.timestamp)};case"agent:token":return{...o,liveTokens:DS(o.liveTokens,t.token)};case"agent:tool_call":return{...o,liveTokens:"",liveToolCalls:zu(o.liveToolCalls,{id:`tc-${t.sequenceNumber}`,toolId:t.toolId,resolved:!1},16)};case"agent:tool_result":return{...o,liveToolCalls:LS(o.liveToolCalls,t.toolId)};case"cost:updated":return{...o,cumulativeCostMicrocents:t.cumulativeCostMicrocents};case"session:turn_completed":return US(o,t);case"session:cancelled":return{...o,status:"ended",liveTokens:"",liveToolCalls:[],turnStartedAtMs:void 0};default:return o}}function LS(e,t){let n=!1;return e.map(o=>!n&&o.toolId===t&&!o.resolved?(n=!0,{...o,resolved:!0}):o)}function US(e,t){let n=e.turnStartedAtMs===void 0?Number.NaN:Date.parse(t.timestamp)-e.turnStartedAtMs,o=Number.isFinite(n)&&n>=0?n:void 0,r={stopReason:t.stopReason,tokensUsed:{input:t.tokensUsed.input,output:t.tokensUsed.output},...o===void 0?{}:{durationMs:o},...t.error===void 0?{}:{errorCode:t.error.code,errorMessage:t.error.message}},i=e.liveTokens,a=i.length>0||t.error!==void 0?Ku(e.transcript,{role:"assistant",text:i,summary:r}):e.transcript;return{...e,status:"idle",turnCount:e.turnCount+1,liveTokens:"",liveToolCalls:[],turnStartedAtMs:void 0,transcript:a}}var FS=new Set(["agent:token","agent:tool_call","agent:tool_result","cost:updated"]);function ya(e,t){let n=new Set,o=qu(t),r=0,i=!1,s={state:o,tick:r,color:e},a=()=>{s={state:o,tick:r,color:e};for(let d of n)d();i=!1};return{subscribe:d=>(n.add(d),()=>{n.delete(d)}),getSnapshot:()=>s,apply:d=>{o=Zu(o,d),FS.has(d.type)?i=!0:a()},appendUser:d=>{o=Xu(o,d),a()},tick:()=>{r+=1,(i||o.status==="running")&&a()},flush:a,summaryText:()=>Mr(o)}}var GS=/^[A-Za-z0-9._-]+$/;function Yu(e){return`mcp-secret:${e}`}function Qu(e){return`RELAVIUM_MCP_${e.toUpperCase().replace(/[^A-Z0-9]/g,"_")}`}function Ie(e=process.env,t){return n=>{if(!GS.test(n)){let r=n.replace(/[^A-Za-z0-9._-]/g,"?").slice(0,64);throw new l("invalid_invocation",`invalid MCP secret name '${r}' \u2014 use only letters, digits, '.', '_' or '-'.`)}if(t!==void 0){let r=null;try{r=t.get(Yu(n))}catch(i){if(!(i instanceof Te))throw i}if(r!==null&&r!=="")return r}let o=e[Qu(n)];if(o!==void 0&&o!=="")return o;throw new l("invalid_invocation",`MCP secret '${n}' is not set \u2014 store it in the OS keychain (account ${Yu(n)}) or set ${Qu(n)}.`)}}function wa(e,t,n){e.writeErr(`warning: ${t} teardown failed: ${n instanceof Error?n.message:String(n)}
|
|
26
|
+
`)}function Tr(e,t,n){try{n()}catch(o){wa(e,t,o)}}async function nl(e,t){let n=t.now??Date.now,o=t.uuid??el,{config:r,projectConfigDir:i,homeDir:s}=W({cwd:t.global.cwd,configPath:t.global.configPath}),a=t.providers??ee(t.io.env),d=ya(t.global.color),c=await(t.buildSession??Ar)({chat:r.chat,agentRef:e.agent,cwd:t.global.cwd,projectConfigDir:i,now:n,uuid:o,providers:a,mcpSecretResolver:t.mcpSecretResolver??Ie(t.io.env),mcpRegistrations:r.mcpServers,onBudgetWarning:g=>t.io.writeErr(`budget warning: ~${g.thresholdPct}% of the ${g.limitMicrocents}\xB5\xA2 cap reached
|
|
27
|
+
`)});Qt(t.io,c.mcpSkipped);let u;try{u=(t.openSessionStore??Oe)(s)}catch(g){throw await c.closeMcp?.().catch(()=>{}),g}let f;try{f=Ys({store:u.store,handle:c.handle,sessionId:c.sessionId,agent:c.agent,context:c.context,now:n,uuid:o})}catch(g){throw Tr(t.io,"session store",()=>u.close()),await c.closeMcp?.().catch(()=>{}),g}return rl({built:c,opened:u,store:d,persister:f,startSession:()=>c.session.start()},t)}async function ol(e,t){let n=t.now??Date.now,o=t.uuid??el,{config:r,homeDir:i}=W({cwd:t.global.cwd,configPath:t.global.configPath}),s=t.providers??ee(t.io.env),a=(t.openSessionStore??Oe)(i),d,c,u,f,g;try{let x=a.store.loadFull(e.sessionId);if(x===void 0)throw new l("invalid_invocation",`no session found with id ${e.sessionId}`);let y=await(t.buildResumedSession??Ju)({chat:r.chat,record:x.session,messages:x.messages,now:n,providers:s,mcpSecretResolver:t.mcpSecretResolver??Ie(t.io.env),mcpRegistrations:r.mcpServers,onBudgetWarning:Me=>t.io.writeErr(`budget warning: ~${Me.thresholdPct}% of the ${Me.limitMicrocents}\xB5\xA2 cap reached
|
|
28
|
+
`)});g=y.closeMcp,Qt(t.io,y.mcpSkipped),d=y,c=ya(t.global.color,{agentRef:y.agent.id,model:y.agent.model,cumulativeCostMicrocents:y.resumeState.cumulativeCostMicrocents,turnCount:y.resumeState.turnCount}),u=Ys({store:a.store,handle:y.handle,sessionId:y.sessionId,agent:y.agent,context:y.context,now:n,uuid:o,initialSequenceNumber:y.nextSequenceNumber});let J=y.resumeState.turnCount;f=`Resuming session ${Ge(y.sessionId)} \u2014 ${y.agent.id}, ${J} prior ${J===1?"turn":"turns"}. Type a message, or /exit to quit.`;let Z=r.chat.maxTurns??yr;J>=Z&&t.io.writeErr(`note: this session has ${J} turns, at or over the ${Z}-turn cap \u2014 new turns will be refused (turn_limit). Raise [chat].max_turns to continue it.
|
|
29
|
+
`)}catch(x){throw await g?.().catch(y=>wa(t.io,"MCP",y)),Tr(t.io,"session store",()=>a.close()),x}return rl({built:d,opened:a,store:c,persister:u,startSession:()=>{},intro:f},t)}async function rl(e,t){let{built:n,opened:o,store:r,persister:i,startSession:s,intro:a}=e,d=!1,c=!1,u=()=>{c||(c=!0,n.session.cancel())},f=async g=>{let x=g.trim();if(x.length!==0){if(x==="/exit"){d=!0;return}if(x==="/cancel"){u(),d=!0;return}if(x==="/export"){try{let y=kr({store:o.store,sessionId:n.sessionId,cwd:t.global.cwd,force:!0});t.global.json?n.emitSessionEvent({type:"session:exported",workflowPath:y.path}):t.io.writeErr(`exported session to ${y.path}
|
|
30
|
+
`)}catch(y){t.io.writeErr(`export failed: ${y instanceof Error?y.message:String(y)}
|
|
31
|
+
`)}return}if(x.startsWith("/")){let y=x.replace(/[^\x20-\x7e]/g,"?").slice(0,64);t.io.writeErr(`unknown command '${y}'. Available: /exit, /cancel, /export.
|
|
32
|
+
`);return}r.appendUser(x),i.beginUserTurn(x),await n.session.sendMessage(x)}};try{i.start(),await(t.drive??ba)({startSession:s,processLine:f,shouldStop:()=>d,handle:n.handle,store:r,io:t.io,global:t.global,finalize:u,...n.closeMcp===void 0?{}:{onForceExit:n.closeMcp},...a===void 0?{}:{intro:a}})}finally{u(),Tr(t.io,"persister",()=>i.close()),Tr(t.io,"session store",()=>o.close()),await n.closeMcp?.().catch(g=>wa(t.io,"MCP",g))}return _.chatEnded}async function ba(e){let t=e.handle.subscribe(_a(e.io)),n=tl({input:e.io.stdin,terminal:!1}),o=()=>n.close();process.once("SIGINT",o);try{e.io.writeOut(`${e.intro??"relavium chat \u2014 type a message, or /exit to quit."}
|
|
33
|
+
`),e.startSession();for await(let r of n)if(await e.processLine(r),e.shouldStop())break}finally{process.removeListener("SIGINT",o),n.close(),t()}}async function il(e){let t=e.handle.subscribe(r=>e.io.writeOut(`${JSON.stringify(r)}
|
|
34
|
+
`)),n=tl({input:e.io.stdin,terminal:!1}),o=()=>n.close();process.once("SIGINT",o);try{e.startSession();for await(let r of n)if(await e.processLine(r),e.shouldStop())break}finally{process.removeListener("SIGINT",o),n.close(),e.finalize?.(),t()}}function _a(e){return t=>{switch(t.type){case"agent:token":e.writeOut(st(t.token));return;case"agent:tool_call":{let n=Er({id:`tc-${t.sequenceNumber}`,toolId:t.toolId,resolved:!1});e.writeOut(`
|
|
35
|
+
${n}
|
|
36
|
+
`);return}case"session:turn_completed":e.writeOut(t.error===void 0?`
|
|
37
|
+
`:`
|
|
38
|
+
[turn failed: ${t.error.code}]
|
|
39
|
+
`);return;default:return}}}function Ee(e,t){return e?{color:t}:{}}function Sa(e){return e?{dimColor:!0}:{}}function Or(e){return e.status==="completed"&&e.durationMs!==void 0?` (${On(e.durationMs)})`:e.status==="failed"&&e.errorCode!==void 0?` \u2014 ${e.errorCode}`:e.status==="retrying"&&e.attempt!==void 0?` (retry ${e.attempt})`:""}import{jsx as Nn,jsxs as en}from"react/jsx-runtime";var sl=80,KS=2e3;function XS(e){let{entry:t,color:n}=e;return t.role==="user"?en(St,{...Ee(n,"cyan"),children:["> ",st(t.text)]}):en(va,{flexDirection:"column",children:[Nn(St,{children:st(t.text)}),en(St,{...Ee(n,"gray"),children:[" ",Mu(t.summary)]})]})}function ZS(e){let{state:t,tick:n,color:o}=qS(e.store.subscribe,e.store.getSnapshot),[r,i]=zS(""),s=JS(!1),a=t.status==="running",d=c=>{e.onSubmit(c).then(()=>{e.shouldStop()&&e.onExit()},u=>e.onError(u)).catch(u=>e.onError(u))};return HS((c,u)=>{if(u.ctrl&&c==="c"){s.current||(s.current=!0,d("/cancel"));return}if(!a){if(u.return){let f=r;i(""),d(f);return}if(u.backspace||u.delete){i(f=>f.slice(0,-1));return}c.length>0&&!u.ctrl&&!u.meta&&i(f=>f+c)}}),en(va,{flexDirection:"column",children:[Nn(BS,{items:[...t.transcript],children:(c,u)=>Nn(XS,{entry:c,color:o},u)}),a&&en(va,{flexDirection:"column",children:[t.liveToolCalls.map(c=>Nn(St,{...Ee(o,"yellow"),children:Er(c)},c.id)),en(St,{children:[Cr(n)," ",st(t.liveTokens)]})]}),!a&&en(St,{...Ee(o,"cyan"),children:["> ",st(r)]}),t.warnings.length>0&&Nn(St,{...Ee(o,"yellow"),wrap:"truncate-end",children:t.warnings.map(c=>`\u26A0 ${st(c)}`).join(`
|
|
40
|
+
`)}),Nn(St,{...Ee(o,"gray"),children:Mr(t)})]})}function YS(e){e.intro!==void 0&&e.io.writeOut(`${e.intro}
|
|
41
|
+
`);let t=e.handle.subscribe(c=>e.store.apply(c));e.startSession();let n=setInterval(()=>e.store.tick(),sl);n.unref();let o=()=>{},r=()=>{},i=new Promise((c,u)=>{o=c,r=u}),s,a=!1,d=()=>{if(a){s?.unmount();let c=e.onForceExit;c===void 0&&process.exit(_.chatEnded);let u=new Promise(f=>{setTimeout(f,KS)});Promise.race([c().catch(()=>{}),u]).finally(()=>process.exit(_.chatEnded));return}a=!0,e.processLine("/cancel").then(()=>o(),r)};process.on("SIGINT",d);try{return s=WS(VS(ZS,{store:e.store,onSubmit:e.processLine,shouldStop:e.shouldStop,onExit:()=>o(),onError:c=>r(c)}),{exitOnCtrlC:!1,patchConsole:!1,maxFps:Math.max(1,Math.round(1e3/sl))}),i.then(()=>{e.io.writeOut(`${e.store.summaryText()}
|
|
42
|
+
`)}).finally(()=>{clearInterval(n),t(),s?.unmount(),process.removeListener("SIGINT",d)})}catch(c){throw clearInterval(n),t(),process.removeListener("SIGINT",d),c}}var xa=e=>e.global.json?il(e):e.io.stdoutIsTty?YS(e):ba(e);import{Entry as QS}from"@napi-rs/keyring";var ev="relavium";function tn(e=ev){let t=n=>new QS(e,n);return{get:n=>{try{return t(n).getPassword()}catch(o){throw new Te(`OS keychain is unavailable: ${ka(o)}`,{cause:o})}},set:(n,o)=>{try{t(n).setPassword(o)}catch(r){throw new Te(`could not write to the OS keychain: ${ka(r)}`,{cause:r})}},delete:n=>{try{return t(n).deletePassword()}catch(o){throw new Te(`could not access the OS keychain: ${ka(o)}`,{cause:o})}}}}function ka(e){return e instanceof Error?e.message:String(e)}async function al(){if(process.stdin.isTTY===!0)throw new l("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 l("invalid_invocation","no API key was read from stdin (empty input).");return t}import{randomUUID as av}from"crypto";import{StringDecoder as dv}from"string_decoder";import{readFileSync as tv}from"fs";import{resolve as nv}from"path";import{z as Mo}from"zod";var ov=Mo.object({schema_version:Mo.literal("1.0"),provider:jt,model:Mo.string().optional(),calls:Mo.array(Mo.array(zi))}),rv=ro.parse({tools:!0,streaming:!0,parallelToolCalls:!1,vision:!1,promptCache:!1,reasoning:!1,media:{input:{image:!1,audio:!1,video:!1,document:!1},outputCombinations:[["text"]],surface:"chat"}});function dl(e,t){let n=nv(t,e),o;try{o=tv(n,"utf8")}catch(s){throw new l("invalid_invocation",`cannot read fixture ${n}`,{cause:s})}let r;try{r=JSON.parse(o)}catch(s){throw new l("invalid_invocation",`fixture ${n} is not valid JSON`,{cause:s})}let i=ov.safeParse(r);if(!i.success)throw new l("invalid_invocation",`fixture ${n} is not a valid cassette: ${i.error.issues[0]?.message??"schema mismatch"}`);return i.data}async function*iv(e){await Promise.resolve();for(let t of e)yield t}function sv(e){let t=0;return{id:e.provider,supports:rv,generate:()=>{throw new Error("agent run --fixture replays the streaming path, not generate()")},stream:()=>{let n=e.calls[t];if(t+=1,n===void 0)throw new Error(`fixture cassette: unexpected stream call #${t} (only ${e.calls.length} recorded)`);return iv(n)}}}function cl(e){let t=sv(e);return{resolveProvider:n=>n===e.provider?t:void 0,keyFor:()=>"fixture-key"}}async function ul(e,t){let n=t.now??Date.now,o=t.uuid??av,{config:r,projectConfigDir:i}=W({cwd:t.global.cwd,configPath:t.global.configPath}),s=await cv(e,t),a=e.fixture!==void 0,d=e.fixture===void 0?t.providers??ee(t.io.env):cl(dl(e.fixture,t.global.cwd)),c=await(t.buildSession??Ar)({chat:r.chat,agentRef:e.agent,cwd:t.global.cwd,projectConfigDir:i,now:n,uuid:o,providers:d,mcpSecretResolver:a?Ie(t.io.env):t.mcpSecretResolver??Ie(t.io.env),mcpRegistrations:a?[]:r.mcpServers,...a?{disableMcp:!0}:{}});return await uv(c,s,t)===void 0?_.success:_.workflowFailed}async function cv(e,t){if(e.input.length>0)throw new l("invalid_invocation","`--input` is not supported yet \u2014 a session does not interpolate {{ctx.*}} into the agent prompt (a tracked engine follow-up). Omit it for now.");let n=(await lv(t.io.stdin)).trim();if(n.length===0)throw new l("invalid_invocation",'no input message \u2014 pipe the prompt on stdin (e.g. `echo "\u2026" | relavium agent run <agent>`)');return n}async function uv(e,t,n){let o,r=n.global.json?s=>n.io.writeOut(`${JSON.stringify(s)}
|
|
43
|
+
`):_a(n.io),i=()=>{};try{Qt(n.io,e.mcpSkipped),i=e.handle.subscribe(s=>{r(s),s.type==="session:turn_completed"&&s.error!==void 0&&(o=s.error.code)}),e.session.start(),await e.session.sendMessage(t)}catch(s){o??="internal",n.global.json||n.io.writeErr(`turn failed: ${s instanceof Error?s.message:String(s)}
|
|
44
|
+
`)}finally{e.session.cancel(),i(),await e.closeMcp?.().catch(s=>{n.io.writeErr(`warning: MCP teardown failed: ${s instanceof Error?s.message:String(s)}
|
|
45
|
+
`)})}return o}async function lv(e){let t=new dv("utf8"),n="";for await(let o of e)n+=o instanceof Uint8Array?t.write(Buffer.from(o)):String(o);return n+=t.end(),n}function ll(e,t){let n=t.now??Date.now,{homeDir:o}=W({cwd:t.global.cwd,configPath:t.global.configPath}),r=(t.openSessionStore??Oe)(o);try{let i=kr({store:r.store,sessionId:e.sessionId,cwd:t.global.cwd,...e.out===void 0?{}:{outPath:e.out},force:e.force});i.record.agentSnapshot===void 0&&t.io.writeErr(`note: this session has no stored agent \u2014 set agent_ref in ${i.path} to a workspace agent before running it.
|
|
46
|
+
`);try{r.store.updateSession({...i.record,status:"exported",exportedWorkflowPath:i.path,updatedAt:new Date(n()).toISOString()})}catch(s){t.io.writeErr(`note: scaffold written but could not mark the session exported: ${s instanceof Error?s.message:String(s)}
|
|
47
|
+
`)}if(t.global.json){let s=li.parse({type:"session:exported",sessionId:e.sessionId,timestamp:new Date(n()).toISOString(),sequenceNumber:i.sequenceNumber,workflowPath:i.path});t.io.writeOut(`${JSON.stringify(s)}
|
|
48
|
+
`)}else t.io.writeOut(`Exported session ${e.sessionId} to ${i.path}
|
|
49
|
+
`);return _.success}finally{r.close()}}function Xe(e,t){for(let n of t)e.writeOut(`${JSON.stringify(n)}
|
|
50
|
+
`)}function pl(e){let{homeDir:t}=W({cwd:e.global.cwd,configPath:e.global.configPath}),n=(e.openSessionStore??Oe)(t);try{let o=n.store.listSessions();if(e.global.json)return Xe(e.io,o.map(fv)),_.success;if(o.length===0)return e.io.writeOut(`No agent sessions yet.
|
|
51
|
+
`),_.success;e.io.writeOut(`Agent sessions (${o.length}):
|
|
52
|
+
`);for(let r of o)e.io.writeOut(pv(r));return _.success}finally{n.close()}}function pv(e){let t=e.title===void 0?"":` "${Ge(e.title)}"`;return` ${Ge(e.id)} ${e.agentSlug} [${e.status}] ${e.updatedAt}${t}
|
|
53
|
+
`}function fv(e){return{sessionId:e.id,agentSlug:e.agentSlug,title:e.title??null,status:e.status,modelId:e.modelId??null,createdAt:e.createdAt,updatedAt:e.updatedAt,totalCostMicrocents:e.totalCostMicrocents}}import{relative as jv}from"path";import{mkdirSync as xv,readFileSync as kv,statSync as Cv,writeFileSync as Iv}from"fs";import{dirname as Ev,join as gl,resolve as Mv}from"path";import{readFileSync as mv,readdirSync as hv,statSync as gv}from"fs";import{basename as yv,join as fl,relative as wv}from"path";var bv=[".relavium.yaml",".relavium.yml",".agent.yaml",".agent.yml",".yaml",".yml"];function _v(e){for(let t of bv)if(e.endsWith(t))return e.slice(0,-t.length);return e}function Ro(e){let t=fl(e.projectConfigDir,e.kind),n;try{n=hv(t,{withFileTypes:!0}).filter(r=>r.isFile()||r.isSymbolicLink()).map(r=>r.name).filter(r=>r.endsWith(".yaml")||r.endsWith(".yml"))}catch(r){if(ml(r)==="ENOENT")return[];throw new l("invalid_invocation",`could not read the ${e.kind} catalog at '${t}'.`,{cause:r})}return n.map(r=>Sv(fl(t,r),e.cwd,e.kind)).sort((r,i)=>r.slug.localeCompare(i.slug))}function Pr(e,t,n){return{slug:_v(yv(e)),name:void 0,tags:[],path:t,valid:!1,error:n}}function Sv(e,t,n){let o=wv(t,e),r;try{let i=gv(e);if(!i.isFile())return Pr(e,o,"not a regular file");if(i.size>Pe*4)return Pr(e,o,"exceeds the size limit");r=mv(e,"utf8")}catch(i){return Pr(e,o,ml(i)==="EACCES"?"permission denied":"could not read the file")}try{if(n==="workflows"){let s=yt(r,{source:o});return{slug:s.workflow.id,name:s.workflow.name,tags:s.workflow.tags??[],path:o,valid:!0}}let i=wt(r,{source:o});return{slug:i.id,name:i.name,tags:[],path:o,valid:!0}}catch(i){return Pr(e,o,vv(i))}}function vv(e){return e instanceof Ue||e instanceof we?e.message:"could not parse the file"}function ml(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}var Ca={workflow:"workflows",agent:"agents"},Rv={workflow:".relavium.yaml",agent:".agent.yaml"};function jn(e){return tr(e)??gl(e,".relavium")}function Ia(e,t){return`${t}${Rv[e]}`}function $r(e,t,n){return gl(e,Ca[t],Ia(t,n))}function Ln(e){return e.kind==="workflow"?Mn(e.definition):br(e.definition)}function Dn(e,t,n){let o=n.toLowerCase();if(o.endsWith(".agent.yaml")||o.endsWith(".agent.yml"))return Tv(e,t);if(o.endsWith(".relavium.yaml")||o.endsWith(".relavium.yml"))return Av(e,t);let r;try{return yl(yt(e,{source:t}))}catch(i){if(!(i instanceof we))throw i;r=i}try{return wl(wt(e,{source:t}))}catch(i){throw i instanceof Ue?new l("invalid_invocation",`${t} is not a valid workflow (${r.message}) or agent (${i.message}).`):i}}function Av(e,t){try{return yl(yt(e,{source:t}))}catch(n){throw n instanceof we?new l("invalid_invocation",n.message,{cause:n}):n}}function Tv(e,t){try{return wl(wt(e,{source:t}))}catch(n){throw n instanceof Ue?new l("invalid_invocation",n.message,{cause:n}):n}}function yl(e){return{kind:"workflow",slug:e.workflow.id,definition:e}}function wl(e){return{kind:"agent",slug:e.id,definition:e}}function Ov(e){let t=e.toLowerCase().split(/[^a-z0-9]+/).filter(n=>n.length>0).join("-");if(t.length===0)throw new l("invalid_invocation","the name needs at least one ASCII letter or digit to form an id.");return t}function bl(e){let t=Ov(e.name),n={id:t,...e.name===t?{}:{name:e.name},provider:e.provider,model:e.model,system_prompt:e.systemPrompt,...e.tools.length===0?{}:{tools:[...e.tools]}};if(e.kind==="agent")return Dn(br(n),"<new agent>",".agent.yaml");let o={schema_version:"1.0",workflow:{id:t,...n.name===void 0?{}:{name:n.name},agents:[n],nodes:[{id:"input",type:"input"},{id:"main",type:"agent",agent_ref:t},{id:"output",type:"output"}],edges:[{from:"input",to:"main"},{from:"main",to:"output"}]}};return Dn(Mn(o),"<new workflow>",".relavium.yaml")}function Nr(e,t){let n;try{n=Cv(e)}catch(o){throw Sl(o)==="ENOENT"?new l("invalid_invocation",`no file at ${t}`):new l("invalid_invocation",`could not read ${t}`)}if(!n.isFile())throw new l("invalid_invocation",`${t} is not a regular file`);if(n.size>Pe*4)throw new l("invalid_invocation",`${t} exceeds the size limit`);try{return kv(e,"utf8")}catch{throw new l("invalid_invocation",`could not read ${t}`)}}function Un(e,t,n,o){try{xv(Ev(e),{recursive:!0}),Iv(e,n,{encoding:"utf8",flag:o?"w":"wx"})}catch(r){let i=Sl(r);throw i==="EEXIST"?new l("invalid_invocation",`${t} already exists \u2014 pass --force to overwrite`,{cause:r}):i==="EISDIR"||i==="ENOTDIR"?new l("invalid_invocation",`cannot write ${t}: the target path is not a file`,{cause:r}):r}}function _l(e){let t=[];for(let n of["workflow","agent"]){let o=Ro({projectConfigDir:e.projectConfigDir,cwd:e.cwd,kind:Ca[n]}).find(r=>r.valid&&r.slug===e.id);o!==void 0&&t.push({kind:n,path:Mv(e.cwd,o.path)})}if(t.length===0)throw new l("invalid_invocation",`no workflow or agent with id '${e.id}' in this project.`);if(t.length>1)throw new l("invalid_invocation",`'${e.id}' names both a workflow and an agent \u2014 rename one to disambiguate.`);return t[0]}function hl(e){return Ro({projectConfigDir:e.projectConfigDir,cwd:e.cwd,kind:Ca[e.kind]}).some(t=>t.valid&&t.slug===e.slug)}function Dr(e){let{projectConfigDir:t,cwd:n,kind:o,slug:r,force:i}=e,s=o==="agent"?"workflow":"agent";if(hl({projectConfigDir:t,cwd:n,kind:s,slug:r}))throw new l("invalid_invocation",`'${r}' already exists as a ${s} in this project \u2014 an id must be unique across agents and workflows; rename one.`);if(!i&&hl({projectConfigDir:t,cwd:n,kind:o,slug:r}))throw new l("invalid_invocation",`${o} '${r}' already exists in this project \u2014 pass --force to overwrite.`)}function Sl(e){if(typeof e=="object"&&e!==null&&"code"in e){let t=e.code;return typeof t=="string"?t:void 0}}import{isCancel as Pv,select as $v,text as Nv}from"@clack/prompts";var Dv={select:e=>$v({message:e.message,options:e.options.map(t=>({value:t.value,label:t.label}))}),text:e=>Nv({message:e.message,...e.placeholder===void 0?{}:{placeholder:e.placeholder},...e.validate===void 0?{}:{validate:e.validate}}),isCancel:Pv},Ea=e=>t=>(t??"").trim()===""?`${e} is required.`:void 0;function vl(e=Dv){return{gather:async()=>{let t=await e.select({message:"Create a\u2026",options:[{value:"agent",label:"Agent (.agent.yaml)"},{value:"workflow",label:"Workflow (.relavium.yaml \u2014 a single-agent scaffold)"}]});if(e.isCancel(t))return null;let n=t==="agent"?"agent":t==="workflow"?"workflow":void 0;if(n===void 0)return null;let o=await e.text({message:"Name",validate:Ea("Name")});if(e.isCancel(o))return null;let r=await e.select({message:"Provider",options:Ze.map(f=>({value:f,label:f}))});if(e.isCancel(r))return null;let i=Ze.find(f=>f===r);if(i===void 0)return null;let s=await e.text({message:"Model id",placeholder:"claude-sonnet-4-6",validate:Ea("Model id")});if(e.isCancel(s))return null;let a=await e.text({message:"System prompt",validate:Ea("System prompt")});if(e.isCancel(a))return null;let d=await e.text({message:"Tools (comma-separated tool ids, optional)",placeholder:"read_file, web_search"});if(e.isCancel(d))return null;let c=d.split(",").map(f=>f.trim()).filter(f=>f.length>0);return{kind:n,name:o,provider:i,model:s,systemPrompt:a,tools:c}}}}async function xl(e,t){if(t.prompter===void 0&&(t.global.json||!t.io.stdoutIsTty||!t.io.stdinIsTty))throw new l("invalid_invocation","`relavium create` needs an interactive terminal \u2014 it is not available under --json or a non-TTY pipe.");let n=await(t.prompter??vl()).gather();if(n===null)return t.io.writeErr(`create cancelled.
|
|
54
|
+
`),_.success;let o=bl(n),r=t.global.cwd,i=jn(r);Dr({projectConfigDir:i,cwd:r,kind:o.kind,slug:o.slug,force:e.force});let s=$r(i,o.kind,o.slug),a=jv(r,s);return Un(s,a,Ln(o),e.force),t.io.writeOut(`Created ${o.kind} '${o.slug}' at ${a}
|
|
55
|
+
`),_.success}import{basename as Lv,join as Uv,relative as kl,resolve as Fv}from"path";function Cl(e,t){let n=t.global.cwd,o=jn(n),{path:r}=_l({projectConfigDir:o,cwd:n,id:e.id}),i=kl(n,r),s=Nr(r,i),a=Dn(s,i,Lv(r)),d=e.out===void 0?Uv(n,Ia(a.kind,a.slug)):Fv(n,e.out),c=kl(n,d);return Un(d,c,Ln(a),e.force),t.global.json?t.io.writeOut(`${JSON.stringify({id:a.slug,kind:a.kind,path:c})}
|
|
56
|
+
`):t.io.writeOut(`Exported ${a.kind} '${a.slug}' to ${c}
|
|
57
|
+
`),_.success}import{randomUUID as bx}from"crypto";import{statSync as _x}from"fs";import{randomUUID as Gv}from"crypto";import{mkdir as Bv}from"fs/promises";function Wv(e){let t=Fi(e);return async(n,o,r)=>(await Bv(e,{recursive:!0}),t(n,o,r))}function Fn(e=new Zt,t){if(t?.checkpointer!==void 0&&e instanceof Zt)throw new Error("createCliHost: a checkpointer requires an explicit durable RunStore (the checkpointer must reconstruct from the same store the run persists to)");let n=t?.media,o=n?.casRoot===void 0?void 0:new Pt(n.casRoot),r=n?.referenceDb===void 0?void 0:Di(oo(n.referenceDb)),i=n?.saveToRoot===void 0?void 0:Wv(n.saveToRoot);return{clock:{now:()=>new Date().toISOString()},ids:{newId:()=>Gv()},store:e,checkpointer:t?.checkpointer??Ts(e),newAbortController:()=>new AbortController,setTimer:(s,a)=>{let d=setTimeout(a,s);return()=>{clearTimeout(d)}},fetchMedia:(s,a,d)=>$i(s,{maxBytes:a,allowPrivate:!1,...d===void 0?{}:{signal:d}}),...o===void 0?{}:{mediaStore:o},...r===void 0?{}:{mediaReferences:r},...i===void 0?{}:{mediaWrite:i}}}async function jr(e={}){let t=e.host??Fn(),n=e.providers??ee(),o=await xs(),r=e.mcp===void 0?_t:[..._t,...e.mcp.toolDefs],i=e.mcp===void 0?{}:{mcp:e.mcp.capability},s=Io({tools:r,host:i}),a=t.mediaStore,d={resolveProvider:n.resolveProvider,keyFor:n.keyFor,registry:s,tools:r,sleep:c=>new Promise(u=>setTimeout(u,c)),now:()=>Date.now(),...e.resolveMediaSurface===void 0?{}:{resolveMediaSurface:e.resolveMediaSurface},...a===void 0?{}:{resolveForEgress:(c,u)=>a.resolveForEgress(c,u)},...e.mediaCostEstimate===void 0?{}:{mediaCostEstimate:e.mediaCostEstimate}};return new Co({host:t,executor:Hs({sandbox:o,agent:d,humanGate:{}})})}function Il(e){return{load:t=>Promise.resolve(Xt(e.loadRunEvents(t)))}}var Hv=new Set(["completed","failed","cancelled"]),Vv=10080*60*1e3,Jv=3600*1e3;async function zv(e){let t=0;for(let i of e.references.runReferenceRunIds())i===e.currentRunId||!e.isReclaimableRun(i)||e.references.removeRunReferences(i)>0&&(t+=1);let n=e.references.reclaimExpired(e.graceMs);await Promise.all(n.map(i=>e.casStore.delete(i)));let o=0,r=!e.hasOtherActiveRuns();if(r){let i=new Set(e.references.listObjectHandles()),s=e.now()-e.orphanMinAgeMs,a=(await e.casStore.listHandles()).filter(({handle:d,mtimeMs:c})=>!i.has(d)&&c<=s).map(({handle:d})=>d);await Promise.all(a.map(d=>e.casStore.delete(d))),o=a.length}return{reclaimedRuns:t,graceReclaimed:n.length,orphansDeleted:o,orphanSweepRan:r}}async function Lr(e){try{let t=yn(e.db),n=e.now??Date.now;return await zv({casStore:new Pt(e.casRoot),references:oo(e.db,n),isReclaimableRun:o=>{let r=t.loadRun(o)?.status;return r===void 0||Hv.has(r)},hasOtherActiveRuns:()=>t.listActiveRuns().some(o=>o.id!==e.currentRunId),graceMs:e.graceMs??Vv,now:n,orphanMinAgeMs:e.orphanMinAgeMs??Jv,currentRunId:e.currentRunId})}catch{return}}async function Ur(e){if(!(!e.isTerminal||e.db===void 0||e.casRoot===void 0))try{await e.sweep({db:e.db,casRoot:e.casRoot,currentRunId:e.currentRunId,...e.graceMs===void 0?{}:{graceMs:e.graceMs}})}catch{}}import{randomUUID as qv}from"crypto";import{join as El}from"path";function Kv(e,t){let n=new Set;return o=>{let r;try{r=e.getByModelId(o)}catch(s){if(s instanceof $t)return;throw s}if(r===void 0)return;let i=ro.safeParse(r.capabilities);if(!i.success){t!==void 0&&!n.has(o)&&(n.add(o),t(`media: model '${o}' has a capabilities row that failed validation \u2014 the D15 load-check defers it (treated as unresolvable). Issues: ${i.error.issues.map(s=>s.message).join("; ")}`));return}return i.data}}function Fr(e,t,n,o,r){let i=Gi(e,{uuid:()=>qv(),now:()=>Date.now()});return{media:{casRoot:El(Nt(t),"media"),saveToRoot:El(n,".relavium","runs"),referenceDb:e},resolveMediaSurface:i.resolveMediaSurface,workflowModelCatalog:Kv(i,r),mediaCostEstimate:o.mediaCostEstimate}}function Ma(e){let t=e?.trim();return t!==void 0&&t!==""?{comment:t}:{}}function Ra(e){return{decision:"approved",decidedBy:"cli",...Ma(e)}}function Aa(e){return{decision:"rejected",decidedBy:"cli",...Ma(e)}}function Ta(e,t){return{decision:"input_provided",decidedBy:"cli",payload:e,...Ma(t)}}function Xv(e){try{return JSON.parse(e)}catch{return e}}function Ml(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:Ta(Xv(e.input))}:e.approve===!0?{ok:!0,decision:Ra(e.comment)}:{ok:!0,decision:Aa(e.comment)}}function Gr(e){return e.json||e.ci||!e.stdoutIsTty?"plain":"tui"}function Br(e){let t=e.CI;return t!==void 0&&t!==""&&t!=="false"&&t!=="0"}import{confirm as Zv,isCancel as Yv,note as Qv,text as ex}from"@clack/prompts";var tx={note:(e,t)=>{Qv(e,t)},confirm:e=>Zv(e),text:e=>ex(e),isCancel:Yv},nx={approval:"Approval gate",review:"Review gate",input:"Input gate"};function ox(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(`
|
|
58
|
+
`)}function Rl(e=tx){return{prompt:async t=>{if(e.note(ox(t),`\u23F8 ${nx[t.gateType]} \xB7 ${t.nodeId}`),t.gateType==="input"){let r=await e.text({message:"Enter value",placeholder:""});return e.isCancel(r)?null:Ta(r)}let n=await e.confirm({message:"Approve?",active:"Approve",inactive:"Reject"});if(e.isCancel(n))return null;if(n)return Ra();let o=await e.text({message:"Reason for rejection (optional)",placeholder:""});return e.isCancel(o)?null:Aa(o)}}}function Wr(e,t){return Gr({stdoutIsTty:e.stdoutIsTty,json:t.json,ci:Br(e.env)})==="tui"?Rl():void 0}import{render as fx}from"ink";import{createElement as mx}from"react";import{Box as nn,Text as on}from"ink";import{useSyncExternalStore as ux}from"react";var Al=4e3,Hr=8,vt=6,Tl=50,Pl=6;function $l(){return{nodeOrder:[],nodes:{},activeModel:void 0,activeTokens:"",toolLines:[],cumulativeCostMicrocents:0,gapDetected:!1,warnings:[],producedMedia:[]}}function Ne(e,t,n){let o=[...e,t];return o.length>n?o.slice(o.length-n):o}function rx(e,t){let n=new Set(e.map(i=>i.handle)),o=t.filter(i=>!n.has(i.handle));if(o.length===0)return e;let r=[...e,...o];return r.length>Tl?r.slice(r.length-Tl):r}function ix(e,t){let n=e+t;return n.length>Al?n.slice(n.length-Al):n}function Ol(e){return e===void 0?{}:{attempt:e}}function Gn(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 sx(e,t){let n=t.sequenceNumber,o=e.lastSequenceNumber;return o!==void 0&&n>o+1?{apply:!0,patch:{lastSequenceNumber:n,gapDetected:!0,warnings:Ne(e.warnings,`event gap: #${o} \u2192 #${n} (some events were not observed)`,vt)}}:o!==void 0&&n<=o?{apply:!1,patch:{lastSequenceNumber:o,gapDetected:!0,warnings:Ne(e.warnings,`event out of order: #${n} after #${o} (ignored)`,vt)}}:{apply:!0,patch:{lastSequenceNumber:n,gapDetected:e.gapDetected,warnings:e.warnings}}}function ax(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 dx(e,t){let n=t.nodeId!==e.activeNodeId,o=e.nodes[t.nodeId]===void 0?Gn(e,t.nodeId,{status:"running"}):{};return{...e,...o,activeNodeId:t.nodeId,activeModel:t.model,activeTokens:ix(n?"":e.activeTokens,t.token)}}function cx(e,t){let n=Ct(t.output).map(o=>({nodeId:t.nodeId,handle:o.handle,mimeType:o.mimeType}));return{...e,...Gn(e,t.nodeId,{status:"completed",durationMs:t.durationMs}),...t.cumulativeCostMicrocents===void 0?{}:{cumulativeCostMicrocents:t.cumulativeCostMicrocents},...n.length===0?{}:{producedMedia:rx(e.producedMedia,n)}}}function Nl(e,t){let n=sx(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,...Gn(o,t.nodeId,{status:"running",nodeType:t.nodeType,...Ol(t.attemptNumber)}),activeNodeId:t.nodeId,activeModel:void 0,activeTokens:""};case"agent:token":return dx(o,t);case"agent:tool_call":return{...o,toolLines:Ne(o.toolLines,`\u2192 ${t.toolId}`,Hr)};case"agent:tool_result":{let r=t.success?"\u2713":"\u2717",i=ax(t.outputSummary),s=i===""?`${r} ${t.toolId}`:`${r} ${t.toolId}: ${i}`;return{...o,toolLines:Ne(o.toolLines,s,Hr)}}case"agent:file_patch_proposed":return{...o,toolLines:Ne(o.toolLines,`\u270E patch proposed (${t.patches.length} file${t.patches.length===1?"":"s"})`,Hr)};case"cost:updated":return{...o,cumulativeCostMicrocents:t.cumulativeCostMicrocents};case"node:completed":return cx(o,t);case"node:failed":return{...o,...Gn(o,t.nodeId,{status:"failed",errorCode:t.error.code,...Ol(t.attemptNumber)}),...t.cumulativeCostMicrocents===void 0?{}:{cumulativeCostMicrocents:t.cumulativeCostMicrocents}};case"node:skipped":return{...o,...Gn(o,t.nodeId,{status:"skipped"})};case"node:retrying":return{...o,...Gn(o,t.nodeId,{status:"retrying",attempt:t.attemptNumber}),warnings:Ne(o.warnings,`${t.nodeId} retrying after attempt ${t.attemptNumber} (${t.error.code})`,vt)};case"media_job:submitted":return{...o,toolLines:Ne(o.toolLines,`\u29D7 media job (${t.modality}) submitted`,Hr)};case"human_gate:paused":return{...o,warnings:Ne(o.warnings,`gate "${t.gateId}" (${t.gateType}) awaiting input`,vt)};case"human_gate:resumed":return{...o,warnings:Ne(o.warnings,`gate resumed: ${t.decision}`,vt)};case"budget:warning":return{...o,warnings:Ne(o.warnings,`budget ${t.thresholdPct}% spent`,vt)};case"budget:paused":return{...o,warnings:Ne(o.warnings,`budget cap reached at ${t.nodeId} \u2014 run paused`,vt)};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",...t.cumulativeCostMicrocents===void 0?{}:{totalCostMicrocents:t.cumulativeCostMicrocents}},...t.cumulativeCostMicrocents===void 0?{}:{cumulativeCostMicrocents:t.cumulativeCostMicrocents}};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:Ne(o.warnings,`run timed out (${t.elapsedMs}ms)`,vt)};default:return o}}import{jsx as at,jsxs as Bn}from"react/jsx-runtime";function lx(e){let{node:t,tick:n,useColor:o}=e,r=t.status==="running"?Cr(n):Ir(t.status);return Bn(on,{...Ee(o,Eu(t.status)),children:[r," ",t.nodeId,Or(t)]})}function Dl(e){let{state:t,tick:n,color:o}=ux(e.store.subscribe,e.store.getSnapshot),r=t.activeNodeId===void 0?void 0:t.nodes[t.activeNodeId],i=t.activeTokens===""?[]:t.activeTokens.split(`
|
|
59
|
+
`).slice(-Pl);return Bn(nn,{flexDirection:"column",children:[at(nn,{flexDirection:"column",children:t.nodeOrder.map(s=>{let a=t.nodes[s];return a===void 0?null:at(lx,{node:a,tick:n,useColor:o},s)})}),r!==void 0&&i.length>0?Bn(nn,{flexDirection:"column",marginTop:1,children:[Bn(on,{...Ee(o,"cyan"),children:["\u258C ",r.nodeId,t.activeModel===void 0?"":` \xB7 ${t.activeModel}`]}),i.map((s,a)=>at(on,{...Sa(o),wrap:"truncate-end",children:s},a))]}):null,t.toolLines.length>0?at(nn,{flexDirection:"column",marginTop:1,children:t.toolLines.map((s,a)=>at(on,{...Sa(o),wrap:"truncate-end",children:s},a))}):null,t.producedMedia.length>0?at(nn,{flexDirection:"column",marginTop:1,children:t.producedMedia.map(s=>at(on,{...Ee(o,"magenta"),wrap:"truncate-end",children:$n(s)},s.handle))}):null,t.warnings.length>0?at(nn,{flexDirection:"column",marginTop:1,children:t.warnings.map((s,a)=>Bn(on,{...Ee(o,"yellow"),wrap:"truncate-end",children:["\u26A0 ",s]},a))}):null,at(nn,{marginTop:1,children:Bn(on,{...Ee(o,"gray"),children:["cost ",Tn(t.cumulativeCostMicrocents),t.summary?.totalTokens===void 0?"":` \xB7 ${Pn(t.summary.totalTokens)}`]})})]})}function jl(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(On(t.durationMs)),r.push(`cost ${Tn(t?.totalCostMicrocents??e.cumulativeCostMicrocents)}`),t?.totalTokens!==void 0&&r.push(Pn(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(` ${Ir(s.status)} ${i}${Or(s)}`)}if(e.producedMedia.length>0){n.push(" produced media:");for(let i of e.producedMedia)n.push(` ${$n(i)} (${i.nodeId})`)}return`${n.join(`
|
|
21
60
|
`)}
|
|
22
|
-
`}var
|
|
23
|
-
`)}}}function
|
|
24
|
-
`)}}}function
|
|
25
|
-
`)}
|
|
26
|
-
`)}
|
|
27
|
-
`)
|
|
28
|
-
`),
|
|
29
|
-
`)
|
|
61
|
+
`}var px=new Set(["agent:token","agent:tool_call","agent:tool_result","agent:file_patch_proposed","cost:updated"]);function Ll(e){let t=new Set,n=$l(),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=Nl(n,d),px.has(d.type)?r=!0:s()},tick:()=>{o+=1,(r||a())&&s()},flush:s,summaryText:()=>jl(n)}}var Ul=80;function Fl(e){let t=e.stdout??process.stdout,n=Ll(e.color),o=e.mount??(c=>fx(mx(Dl,{store:c}),{stdout:t,exitOnCtrlC:!1,patchConsole:!1,maxFps:Math.max(1,Math.round(1e3/Ul))})),r,i,s=()=>{let c=setInterval(()=>{n.tick()},Ul);c.unref();try{i=o(n)}catch(u){throw clearInterval(c),u}r=c},a=async()=>{if(r!==void 0&&(clearInterval(r),r=void 0),i!==void 0){let c=i;i=void 0,c.unmount(),await c.waitUntilExit()}};s();let d=!1;return{onEvent:c=>{n.apply(c)},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??(u=>{t.write(u)}))(n.summaryText())}}}}}function Gl(e){return{onEvent:t=>{e.writeOut(`${JSON.stringify(t)}
|
|
62
|
+
`)}}}function Bl(e){return{onEvent:t=>{let n=hx(t);n!==void 0&&e.writeOut(`${n}
|
|
63
|
+
`)}}}function hx(e){switch(e.type){case"run:started":return`> run ${e.runId} started`;case"node:started":return` - ${e.nodeId} ...`;case"node:completed":{let t=` ok ${e.nodeId}`,n=Ct(e.output).map(o=>` ${$n(o)}`);return[t,...n].join(`
|
|
64
|
+
`)}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 Vr(e,t){return Gr({stdoutIsTty:e.stdoutIsTty,json:t.json,ci:Br(e.env)})==="tui"?Fl({color:t.color}):t.json?Gl(e):Bl(e)}function Jr(e,t){try{ws(e,t)}catch(n){throw n instanceof Je?new l("invalid_invocation",n.message,{cause:n}):n}}async function zr(e){let{engine:t,handle:n,makeRenderer:o,gatePrompter:r,io:i}=e,s,a=!1,d=new Set,c=()=>{a&&process.exit(_.workflowFailed),a=!0,n.cancel()};process.on("SIGINT",c);let u;try{u=o();for await(let f of n.events){if(u.onEvent(f),s=wx(s,f),f.type==="human_gate:paused"&&r!==void 0){d.add(f.gateId),await gx(t,n,u,r,f,i);continue}if(f.type==="run:paused"&&yx(f,r!==void 0,d))break}}finally{s===void 0&&n.cancel();try{await u?.finalize?.()}catch(f){i.writeErr(`renderer teardown failed: ${f instanceof Error?f.message:String(f)}
|
|
65
|
+
`)}process.removeListener("SIGINT",c)}return s}async function gx(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)}
|
|
66
|
+
`)}}if(s===null){t.cancel();return}try{await e.resume(r.runId,r.gateId,s)}catch(a){if(a instanceof V&&a.code==="run_already_terminal")return;throw a}}function yx(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 qr(e){switch(e){case"completed":return _.success;case"paused":return _.gatePaused;default:return _.workflowFailed}}function Kr(e){return e!==void 0&&e!=="paused"}function wx(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 Sx=new Set(["completed","failed","cancelled"]);function vx(e,t){return e!==null&&_x(e,{throwIfNoEntry:!1})?.isDirectory()===!0?e:t}async function xx(e,t){try{return await e.resumeFromCheckpoint(t)}catch(n){throw n instanceof V?new l("invalid_invocation",`cannot resume run ${t.runId}: ${n.message}`,{cause:n}):n}}async function Hl(e,t){let n=Ml(e);if(!n.ok)throw new l("invalid_invocation",n.error);let o=n.decision,{config:r,homeDir:i}=W({cwd:t.global.cwd,configPath:t.global.configPath}),s;try{s=(t.openDb??He)(i)}catch(a){throw new l("invalid_invocation",`could not open the run history database: ${a instanceof Error?a.message:String(a)}`,{cause:a})}try{let a=Ii(s.db,e.runId);if(a===void 0)throw new l("invalid_invocation",`no run found with id ${e.runId}`);let d=Cx(a.workflowDefinitionSnapshot,e.runId),c=Ex(a.inputJson,e.runId);Mx(c,e.runId);let u=no(s.db,{uuid:()=>bx(),now:()=>Date.now(),workflow:{slug:d.workflow.id,name:d.workflow.name??d.workflow.id,definitionJson:a.workflowDefinitionSnapshot}}),f=Il(u),g;try{g=await f.load(e.runId)}catch(dt){throw new l("invalid_invocation",`the persisted event log for run ${e.runId} could not be read`,{cause:dt})}if(g===void 0)throw new l("invalid_invocation",`run ${e.runId} has no resumable state`);let x=kx(g,g.runStatus,e.gate);if(x.kind==="invalid")throw new l("invalid_invocation",x.message);if(x.kind==="idempotent")return t.io.writeOut(`${x.message}
|
|
67
|
+
`),_.success;let y=t.providers??ee(t.io.env),J=vx(a.projectRoot,t.global.cwd),Z=Fr(s.db,i,J,r,dt=>t.io.writeErr(`${dt}
|
|
68
|
+
`));Jr(d,Z.workflowModelCatalog);let Me=await(t.buildEngine??jr)({providers:y,host:Fn(u,{checkpointer:f,media:Z.media}),resolveMediaSurface:Z.resolveMediaSurface,...Z.mediaCostEstimate===void 0?{}:{mediaCostEstimate:Z.mediaCostEstimate}}),$=await xx(Me,{runId:e.runId,workflow:d,inputs:c,gateId:x.gateId,decision:o}),ae=await zr({engine:Me,handle:$,makeRenderer:()=>(t.selectRenderer??Vr)(t.io,t.global),gatePrompter:(t.selectGatePrompter??Wr)(t.io,t.global),io:t.io});return ae===void 0?(t.io.writeOut(`run ${e.runId} already settled; nothing to resume
|
|
69
|
+
`),_.success):(await Ur({sweep:t.sweepMedia??Lr,isTerminal:Kr(ae),db:s.db,casRoot:Z.media.casRoot,currentRunId:e.runId,graceMs:r.mediaGcGraceMs}),qr(ae))}finally{s.close()}}function kx(e,t,n){if(Sx.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${Wl(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>:${Wl(o)}`}}function Wl(e){return e.length===0?"":` (pending: ${e.map(t=>t.gateId).join(", ")})`}function Cx(e,t){try{return Vo.parse(JSON.parse(e))}catch(n){throw new l("invalid_invocation",`the stored workflow snapshot for run ${t} could not be parsed`,{cause:n})}}function Ix(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ex(e,t){let n;try{n=JSON.parse(e)}catch(o){throw new l("invalid_invocation",`the stored inputs for run ${t} could not be parsed`,{cause:o})}if(!Ix(n))throw new l("invalid_invocation",`the stored inputs for run ${t} are not a JSON object`);return n}function Mx(e,t){let n=Object.keys(e).filter(o=>hd.safeParse(e[o]).success);if(n.length>0)throw new l("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 Xr(e){let t=Xt(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 xt(e,t=He){let n;try{n=t(e)}catch(o){throw new l("invalid_invocation",`could not open the run history database: ${o instanceof Error?o.message:String(o)}`,{cause:o})}return{reader:yn(n.db),close:n.close}}function Vl(e,t){let{homeDir:n}=W({cwd:t.global.cwd,configPath:t.global.configPath}),{reader:o,close:r}=xt(n,t.openDb);try{let i=Rx(o,e.runId).flatMap(s=>Xr(o.loadRunEvents(s)).map(a=>({runId:s,...a})));return t.global.json?(Xe(t.io,i),_.success):(Ax(t.io,i,e.runId),_.success)}finally{r()}}function Rx(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 l("invalid_invocation",`no run found with id ${t}`);return n.status==="paused"?[n.id]:[]}function Ax(e,t,n){if(t.length===0){e.writeOut(n===void 0?`No pending human gates.
|
|
30
70
|
`:`Run ${n} has no pending human gate.
|
|
31
71
|
`);return}e.writeOut(`Pending human gates (${t.length}):
|
|
32
72
|
`);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{
|
|
73
|
+
`)}}import{basename as Tx,relative as Jl,resolve as Ox}from"path";function zl(e,t){let n=t.global.cwd,o=Ox(n,e.path),r=Jl(n,o),i=Nr(o,r),s=Dn(i,r,Tx(e.path)),a=jn(n);Dr({projectConfigDir:a,cwd:n,kind:s.kind,slug:s.slug,force:e.force});let d=$r(a,s.kind,s.slug),c=Jl(n,d);return Un(d,c,Ln(s),e.force),t.global.json?t.io.writeOut(`${JSON.stringify({id:s.slug,kind:s.kind,path:c})}
|
|
74
|
+
`):t.io.writeOut(`Imported ${s.kind} '${s.slug}' to ${c}
|
|
75
|
+
`),_.success}var Ao="(untagged)";function Kl(e,t){let{projectConfigDir:n,homeDir:o}=W({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
76
|
`):t.io.writeOut(`No .relavium/ project found from ${t.global.cwd}.
|
|
35
|
-
`),
|
|
77
|
+
`),_.success;let i=e.agents?"agents":"workflows",s=(t.discoverCatalog??Ro)({projectConfigDir:n,cwd:t.global.cwd,kind:i}),a=new Map;if(i==="workflows"&&s.some(c=>c.valid)){let{reader:c,close:u}=xt(o,t.openDb);try{for(let f of c.loadLatestRunPerWorkflow())a.set(f.slug,f.lastRun)}finally{u()}}let d=c=>c.valid?a.get(c.slug):void 0;return r?(Xe(t.io,s.map(c=>Px(c,i,d(c)))),_.success):($x(t.io,s,i,d),_.success)}function Px(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 $x(e,t,n,o){let r=n==="workflows"?"Workflows":"Agents";if(t.length===0){e.writeOut(`No ${n} found under .relavium/${n}/.
|
|
36
78
|
`);return}if(e.writeOut(`${r} (${t.length}):
|
|
37
|
-
`),n==="agents"){for(let a of t)e.writeOut(` ${
|
|
38
|
-
`);return}let i=new Map;for(let a of t){let d=a.tags.length>0?a.tags:[
|
|
39
|
-
`);for(let
|
|
40
|
-
`)}}function
|
|
41
|
-
`);for(let a of s)t.io.writeOut(`${
|
|
42
|
-
`);return
|
|
43
|
-
`)}function
|
|
44
|
-
`)}async function
|
|
45
|
-
`)}function
|
|
79
|
+
`),n==="agents"){for(let a of t)e.writeOut(` ${ql(a,void 0)}
|
|
80
|
+
`);return}let i=new Map;for(let a of t){let d=a.tags.length>0?a.tags:[Ao];for(let c of d){let u=i.get(c)??[];u.push(a),i.set(c,u)}}let s=[...i.keys()].sort((a,d)=>a===Ao?1:d===Ao?-1:a.localeCompare(d));for(let a of s){let d=a===Ao?Ao:`#${a}`;e.writeOut(` ${d}
|
|
81
|
+
`);for(let c of i.get(a)??[])e.writeOut(` ${ql(c,o(c)??null)}
|
|
82
|
+
`)}}function ql(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 Xl(e,t){let{homeDir:n}=W({cwd:t.global.cwd,configPath:t.global.configPath}),{reader:o,close:r}=xt(n,t.openDb);try{let i=o.loadRun(e.runId);if(i===void 0)throw new l("invalid_invocation",`no run found with id ${e.runId}`);let s=o.loadRunEvents(e.runId);if(t.global.json)return Xe(t.io,s),_.success;t.io.writeOut(`run ${i.id} \u2014 ${i.status} (${s.length} event${s.length===1?"":"s"})
|
|
83
|
+
`);for(let a of s)t.io.writeOut(`${Nx(a)}
|
|
84
|
+
`);return _.success}finally{r()}}function Nx(e){let t=`[${e.sequenceNumber}] ${e.type}`,n="nodeId"in e&&typeof e.nodeId=="string"?` ${e.nodeId}`:"";return`${t}${n}${Dx(e)}`}function Dx(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 Oa={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 Zr(e){let t=jt.safeParse(e);if(!t.success)throw new l("invalid_invocation",`unknown provider '${e}' \u2014 known providers: ${jt.options.join(", ")}.`);return t.data}function Yr(e){if(e.name===void 0||e.name==="")throw new l("invalid_invocation",`\`relavium provider ${e.action}\` requires a provider name.`);return e.name}function jx(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"}]
|
|
85
|
+
`)}function Lx(e,t){let n=Zr(Yr(e)),o=Oa[n],r=t.store.upsert({name:n,displayName:o.displayName,baseUrl:e.baseUrl===void 0?o.baseUrl:Bx(e.baseUrl)});t.io.writeOut(`Registered provider '${n}' (${r.baseUrl}). Store a key with \`relavium provider set-key ${n}\`.
|
|
86
|
+
`)}async function Ux(e,t){let n=Zr(Yr(e)),o=Oa[n],r=await t.readSecret(),i=go(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 ${us(r)} in the OS keychain.
|
|
87
|
+
`)}function Fx(e,t){let n=Zr(Yr(e)),o=t.keychain.delete(go(n));t.store.clearKeychainRef(n),t.io.writeOut(o?`Removed ${n} key from the OS keychain.
|
|
46
88
|
`:`No ${n} key was stored.
|
|
47
|
-
`)}async function
|
|
48
|
-
`)}function
|
|
49
|
-
`),
|
|
89
|
+
`)}async function Gx(e,t){let n=Zr(Yr(e)),o=t.resolver.resolveProvider(n);if(o===void 0)throw new l("invalid_invocation",`no adapter for provider '${n}'.`);let r=t.resolver.keyFor(n),i=e.model??Oa[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(us(r));throw new l("invalid_invocation",`${n}: key test failed \u2014 ${d}`)}t.io.writeOut(`${n}: key works (${i}).
|
|
90
|
+
`)}function Bx(e){let t;try{t=new URL(e)}catch{throw new l("invalid_invocation",`invalid base URL: '${e}'.`)}if(t.protocol!=="https:")throw new l("invalid_invocation",`base URL must be HTTPS, got '${e}'.`);return e}async function Zl(e,t){try{switch(e.action){case"list":jx(t);break;case"add":Lx(e,t);break;case"set-key":await Ux(e,t);break;case"remove-key":Fx(e,t);break;case"test":await Gx(e,t);break}return _.success}catch(n){throw n instanceof Te?new l("invalid_invocation",n.message,{cause:n}):n}}import{relative as Hx}from"path";function Yl(e){let t={};for(let n of e){let o=n.indexOf("=");if(o<=0)throw new l("invalid_invocation",`--input must be key=value (got '${n}').`);let r=n.slice(0,o);if(Object.hasOwn(t,r))throw new l("invalid_invocation",`--input '${r}' was given more than once.`);t[r]=n.slice(o+1)}return t}function Ql(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 l("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 l("invalid_invocation",`missing required input '${i.name}'.`);continue}r[i.name]=Wx(i.name,i.type,s)}return r}function Wx(e,t,n){switch(t){case"number":{let o=n.trim();if(o==="")throw new l("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 l("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 l("invalid_invocation",`input '${e}' must be a boolean (true/false or 1/0).`)}default:return n}}async function ep(e,t){let n=t.buildEngine??jr,o=t.providers??ee(t.io.env),{config:r,projectConfigDir:i,homeDir:s}=W({cwd:t.global.cwd,configPath:t.global.configPath}),a=Fu(e.workflow,{cwd:t.global.cwd,projectConfigDir:i}),d;try{d=yt(a.yaml,{source:Hx(t.global.cwd,a.path)})}catch(g){throw g instanceof we?new l("invalid_invocation",g.message,{cause:g}):g}let c=Ql(d,Yl(e.input));for(let g of Tc(d))o.keyFor(g);let u;try{u=t.openRunStore?.(d,s,t.global.cwd)}catch(g){throw new l("invalid_invocation",`could not open the run history database: ${g instanceof Error?g.message:String(g)}`,{cause:g})}let f;try{f=await Du(d,{cwd:t.global.cwd,resolveSecret:t.mcpSecretResolver??Ie(t.io.env),registrations:r.mcpServers,...t.startMcpClient===void 0?{}:{startMcpClient:t.startMcpClient}}),f!==void 0&&Qt(t.io,f.client.skipped);let g=f?.workflow??d,x=f===void 0?{}:{mcp:{toolDefs:f.client.toolDefs,capability:f.client.capability}},y={providers:o,...x},J;if(u!==void 0){let ae=Fr(u.db,s,t.global.cwd,r,dt=>t.io.writeErr(`${dt}
|
|
91
|
+
`));J=ae.media.casRoot,Jr(d,ae.workflowModelCatalog),y={providers:o,host:Fn(u.store,{media:ae.media}),resolveMediaSurface:ae.resolveMediaSurface,...ae.mediaCostEstimate===void 0?{}:{mediaCostEstimate:ae.mediaCostEstimate},...x}}let Z=await n(y),Me=Z.start({workflow:g,inputs:c}),$=await zr({engine:Z,handle:Me,makeRenderer:()=>(t.selectRenderer??Vr)(t.io,t.global),gatePrompter:(t.selectGatePrompter??Wr)(t.io,t.global),io:t.io});return await Ur({sweep:t.sweepMedia??Lr,isTerminal:Kr($),db:u?.db,casRoot:J,currentRunId:Me.runId,graceMs:r.mediaGcGraceMs}),qr($)}finally{try{u?.close()}finally{await f?.client.close()}}}function tp(e){let{homeDir:t}=W({cwd:e.global.cwd,configPath:e.global.configPath}),{reader:n,close:o}=xt(t,e.openDb);try{let r=n.listActiveRuns().map(i=>({run:i,steps:n.loadStepExecutions(i.id),pendingGates:i.status==="paused"?Xr(n.loadRunEvents(i.id)):[]}));if(e.global.json)return Xe(e.io,r.map(Vx)),_.success;if(r.length===0)return e.io.writeOut(`No active runs.
|
|
92
|
+
`),_.success;for(let i of r)Jx(e.io,i);return _.success}finally{o()}}function Vx(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 Jx(e,t){e.writeOut(`run ${t.run.id} \u2014 ${t.run.status} (workflow ${t.run.workflowId})
|
|
50
93
|
`),t.steps.length===0&&e.writeOut(` (no node activity recorded yet)
|
|
51
94
|
`);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
95
|
`)}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
|
|
96
|
+
`)}}var qx=[{name:"budget",summary:"Budget commands (resume a budget-paused run, etc.) \u2014 not yet available.",landsIn:"a tracked follow-up"},{name:"init",summary:"Initialize a .relavium/ directory in the current project.",landsIn:"a later workstream"}];function np(e,t){Kx(e,t),Xx(e,t),Zx(e,t),Yx(e,t),Qx(e,t),ek(e,t),tk(e,t),nk(e,t),ok(e,t),rk(e,t),dk(e,t),ik(e,t),sk(e,t),ak(e,t);for(let n of qx)e.command(n.name).description(n.summary).action(()=>{throw new l("not_implemented",`\`relavium ${uk(n.name)}\` is not available yet (lands in ${n.landsIn}).`)})}function Kx(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 l("not_implemented","`relavium run` requires the CLI runtime context.")});return}n.action(async(o,r)=>{let i=tn();t.result.exitCode=await ep({workflow:o,input:r.input??[]},{io:t.io,global:t.global,openRunStore:Oc,providers:ee(t.io.env,i),mcpSecretResolver:Ie(t.io.env,i)})})}function Xx(e,t){let n=e.command("chat").description("Start an interactive agent chat session (REPL).").option("--agent <ref>","bind a specific agent (.agent.yaml path or .relavium/ id)");if(t===void 0){n.action(()=>{throw new l("not_implemented","`relavium chat` requires the CLI runtime context.")});return}n.action(async o=>{let r=tn();t.result.exitCode=await nl({agent:o.agent},{io:t.io,global:t.global,providers:ee(t.io.env,r),mcpSecretResolver:Ie(t.io.env,r),openSessionStore:Oe,drive:xa})})}function Zx(e,t){let n=e.command("chat-resume <sessionId>").description("Reload a persisted session from history.db and continue the conversation.");if(t===void 0){n.action(()=>{throw new l("not_implemented","`relavium chat-resume` requires the CLI runtime context.")});return}n.action(async o=>{let r=tn();t.result.exitCode=await ol({sessionId:o},{io:t.io,global:t.global,providers:ee(t.io.env,r),mcpSecretResolver:Ie(t.io.env,r),openSessionStore:Oe,drive:xa})})}function Yx(e,t){let n=e.command("chat-list").description("List past agent sessions (id, agent, title, last activity).");if(t===void 0){n.action(()=>{throw new l("not_implemented","`relavium chat-list` requires the CLI runtime context.")});return}n.action(()=>{t.result.exitCode=pl({io:t.io,global:t.global,openSessionStore:Oe})})}function Qx(e,t){let n=e.command("chat-export <sessionId>").description("Export a session to a .relavium.yaml scaffold for review (ADR-0026).").option("--out <path>","write the scaffold here instead of <id>.relavium.yaml").option("--force","overwrite an existing file at the target path");if(t===void 0){n.action(()=>{throw new l("not_implemented","`relavium chat-export` requires the CLI runtime context.")});return}n.action((o,r)=>{t.result.exitCode=ll({sessionId:o,...r.out===void 0?{}:{out:r.out},force:r.force??!1},{io:t.io,global:t.global,openSessionStore:Oe})})}function ek(e,t){let n=e.command("create").description("Scaffold a new agent or workflow via an interactive wizard.").option("--force","overwrite an existing project entry with the same id");if(t===void 0){n.action(()=>{throw new l("not_implemented","`relavium create` requires the CLI runtime context.")});return}n.action(async o=>{t.result.exitCode=await xl({force:o.force??!1},{io:t.io,global:t.global})})}function tk(e,t){let n=e.command("export <id>").description("Export a workflow/agent to a portable YAML (secret references stay placeholdered).").option("--out <path>","write the copy here instead of <id>.<suffix> in cwd").option("--force","overwrite an existing file at the target path");if(t===void 0){n.action(()=>{throw new l("not_implemented","`relavium export` requires the CLI runtime context.")});return}n.action((o,r)=>{t.result.exitCode=Cl({id:o,...r.out===void 0?{}:{out:r.out},force:r.force??!1},{io:t.io,global:t.global})})}function nk(e,t){let n=e.command("import <path>").description("Import an external workflow/agent YAML into the project (validated, deduplicated).").option("--force","overwrite an existing project entry with the same id");if(t===void 0){n.action(()=>{throw new l("not_implemented","`relavium import` requires the CLI runtime context.")});return}n.action((o,r)=>{t.result.exitCode=zl({path:o,force:r.force??!1},{io:t.io,global:t.global})})}function ok(e,t){let n=e.command("agent").description("Manage and run agents."),o=n.command("run <agent>").description("Run a single agent one-shot (prompt on stdin); --fixture replays a recorded cassette.").option("--input <key=value...>","a session {{ctx.*}} variable (repeatable)").option("--fixture <path>","replay a recorded LLM cassette (deterministic, offline)");if(t===void 0){o.action(()=>{throw new l("not_implemented","`relavium agent run` requires the CLI runtime context.")}),n.action(()=>{throw new l("not_implemented","`relavium agent` requires the CLI runtime context.")});return}o.action(async(r,i)=>{let s=tn();t.result.exitCode=await ul({agent:r,input:i.input??[],...i.fixture===void 0?{}:{fixture:i.fixture}},{io:t.io,global:t.global,providers:ee(t.io.env,s),mcpSecretResolver:Ie(t.io.env,s)})}),n.action(()=>{throw new l("invalid_invocation","`relavium agent` requires a subcommand (run).")})}function rk(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 l("not_implemented","`relavium gate` requires the CLI runtime context.")}),o.action(()=>{throw new l("not_implemented","`relavium gate list` requires the CLI runtime context.")});return}n.action(async(r,i)=>{if(r===void 0)throw new l("invalid_invocation","`relavium gate` requires a <runId> (or use `relavium gate list`).");t.result.exitCode=await Hl({runId:r,...i},{io:t.io,global:t.global,providers:ee(t.io.env,tn())})}),o.action(r=>{t.result.exitCode=Vl(r===void 0?{}:{runId:r},{io:t.io,global:t.global})})}function ik(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 l("not_implemented","`relavium list` requires the CLI runtime context.")});return}n.action(o=>{t.result.exitCode=Kl({agents:o.agents??!1},{io:t.io,global:t.global})})}function sk(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 l("not_implemented","`relavium logs` requires the CLI runtime context.")});return}n.action(o=>{t.result.exitCode=Xl({runId:o},{io:t.io,global:t.global})})}function ak(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 l("not_implemented","`relavium status` requires the CLI runtime context.")});return}n.action(()=>{t.result.exitCode=tp({io:t.io,global:t.global})})}function dk(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 c of[o,r,i,s,a])c.action(()=>{throw new l("not_implemented","`relavium provider` requires the CLI runtime context.")});return}let d=async c=>{t.result.exitCode=await ck(t,u=>Zl(c,u))};o.action(async()=>{await d({action:"list"})}),r.action(async(c,u)=>{await d({action:"add",name:c,...u.baseUrl===void 0?{}:{baseUrl:u.baseUrl}})}),i.action(async c=>{await d({action:"set-key",name:c})}),s.action(async c=>{await d({action:"remove-key",name:c})}),a.action(async(c,u)=>{await d({action:"test",name:c,...u.model===void 0?{}:{model:u.model}})})}async function ck(e,t){let{homeDir:n}=W({cwd:e.global.cwd,configPath:e.global.configPath}),{db:o,close:r}=He(n);try{let i=tn(),s={io:e.io,store:Ri(o,{uuid:()=>zx(),now:()=>Date.now()}),keychain:i,resolver:ee(e.io.env,i),readSecret:al};return await t(s)}finally{r()}}function uk(e){return e.split(" ",1)[0]??e}var pk="0.1.1",fk=`
|
|
54
97
|
Global options (usable anywhere on the command line):
|
|
55
98
|
--json emit machine-readable NDJSON output (disables the TUI)
|
|
56
99
|
--no-color disable colored output
|
|
57
100
|
--cwd <dir> run as if started in <dir>
|
|
58
101
|
--config <path> use an explicit config file
|
|
59
102
|
-v, --verbose print verbose diagnostics to stderr
|
|
60
|
-
-q, --quiet suppress non-essential output`;function
|
|
61
|
-
`),
|
|
62
|
-
`),process.exitCode=
|
|
103
|
+
-q, --quiet suppress non-essential output`;function op(e,t){let n=new lk;return n.name("relavium").description("Relavium \u2014 run agent workflows from the terminal.").version(pk,"-V, --version","output the version number").configureOutput({writeOut:o=>{e.writeOut(o)},writeErr:o=>{t?.suppressErrorOutput!==!0&&e.writeErr(o)}}).addHelpText("after",fk),n.exitOverride(),np(n,t?.context),n}async function rp(e,t){let{raw:n,rest:o,error:r}=ja(e),i={json:n.json===!0,verbose:n.verbose===!0};if(r!==void 0)return Hn(r,i,t),r.exitCode;let s;try{s=La(n,process.cwd())}catch(c){return Hn(c,i,t),Wn(c).exitCode}let a={},d=op(t,{suppressErrorOutput:i.json,context:{io:t,global:s,result:a}});if(!o.slice(2).some(c=>c!=="--"))return t.writeOut(d.helpInformation()),_.success;try{return await d.parseAsync([...o]),a.exitCode??_.success}catch(c){return c instanceof mk?(c.exitCode!==0&&i.json&&Hn(new l("invalid_invocation",hk(c.message)),i,t),c.exitCode===0?_.success:_.invalidInvocation):(Hn(c,i,t),Wn(c).exitCode)}}function hk(e){let t="error:";return e.startsWith(t)?e.slice(t.length).trimStart():e}var Qr=$a();try{process.exitCode=await rp(process.argv,Qr)}catch(e){Qr.writeErr(`relavium: a fatal internal error occurred.
|
|
104
|
+
`),Qr.env.RELAVIUM_DEBUG!==void 0&&e instanceof Error&&e.stack!==void 0&&Qr.writeErr(`${e.stack}
|
|
105
|
+
`),process.exitCode=_.workflowFailed}
|