@robota-sdk/agent-cli 3.0.0 → 3.0.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @robota-sdk/agent-cli
2
2
 
3
+ ## 3.0.1
4
+ ### Patch Changes
5
+
6
+ - 95af165: Restore consistent stable package and desktop delivery after the incomplete 3.0.0 publication.
7
+ - 5f6b7ad: Consume the published workflow package while preserving host SDK identity.
8
+
3
9
  ## 3.0.0
4
10
  ### Major Changes
5
11
 
package/dist/node/bin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  ;(function(){var v=parseInt(process.versions.node.split('.')[0],10);if(v<22){process.stderr.write('\n✗ Node.js 22+ is required (current: '+process.version+')\n\nUpgrade:\n nvm: nvm install 22 && nvm use 22\n Volta: volta install node@22\n Download: https://nodejs.org/en/download\n\n');process.exit(1);}})();
3
- import{D as e,Et as t,Ft as n,Rt as r,Vt as i,Y as a,nt as o,ut as s}from"./node-PhNl8kvo.js";import{A as c,C as l,D as u,E as d,F as f,H as p,I as m,L as h,M as g,N as _,O as v,P as ee,R as y,S as te,T as b,_ as ne,b as re,d as ie,g as ae,h as oe,j as se,k as ce,m as x,p as le,t as S,u as ue,v as de,w as C,x as w,y as fe,z as T}from"./cli-core-Bz_5Fzj0.js";import{watch as pe}from"node:fs";import{basename as me,dirname as he,join as ge}from"node:path";import{mkdir as _e,readFile as E,writeFile as ve}from"node:fs/promises";import{Readable as ye}from"node:stream";import D,{Chalk as be,backgroundColorNames as xe,foregroundColorNames as O}from"chalk";import{Box as k,Static as Se,Text as A,render as Ce,useApp as we,useBoxMetrics as j,useCursor as Te,useInput as Ee,usePaste as De,useStdout as Oe,useWindowSize as ke}from"ink";import M,{createContext as N,useCallback as P,useContext as F,useEffect as I,useLayoutEffect as Ae,useMemo as L,useRef as R,useState as z}from"react";import{Fragment as B,jsx as V,jsxs as H}from"react/jsx-runtime";import je from"string-width";import{marked as Me}from"marked";import Ne from"marked-terminal";let Pe=null,Fe=!1,Ie=`robota`;function Le(){return Fe}const U=[`string-width`,`setCursorPosition`,`getStringWidth`,`slice`,`charCodeAt`];function Re(e,t){if(!t)return`rethrow`;let n=e.message??``;return U.some(e=>n.includes(e))?`ime-hint`:`guard-owned`}function ze(e){Pe=e}function Be(e,t){try{if(Pe){Pe.getSession().reportBackgroundError(e,t);return}}catch{}process.stderr.write(`\n[${Ie}] ${t}: ${e.message}\n`)}function Ve(e=`robota`){Ie=e,!Fe&&(Fe=!0,process.on(`unhandledRejection`,e=>{Be(e instanceof Error?e:Error(String(e)),`unhandled rejection`)}),process.on(`uncaughtException`,e=>{Be(e instanceof Error?e:Error(String(e)),`uncaught exception`)}))}let He=!1,Ue=`CLI`;function We(e){return`\n[${e}] CJK/IME input error — this is a known issue with macOS Terminal.app.\n Workaround: use iTerm2 (https://iterm2.com) or input your prompt in English.
3
+ import{D as e,Et as t,Ft as n,Rt as r,Vt as i,Y as a,nt as o,ut as s}from"./node-PhNl8kvo.js";import{A as c,C as l,D as u,E as d,F as f,H as p,I as m,L as h,M as g,N as _,O as v,P as ee,R as y,S as te,T as b,_ as ne,b as re,d as ie,g as ae,h as oe,j as se,k as ce,m as x,p as le,t as S,u as ue,v as de,w as C,x as w,y as fe,z as T}from"./cli-core-Cus9ebuT.js";import{watch as pe}from"node:fs";import{basename as me,dirname as he,join as ge}from"node:path";import{mkdir as _e,readFile as E,writeFile as ve}from"node:fs/promises";import{Readable as ye}from"node:stream";import D,{Chalk as be,backgroundColorNames as xe,foregroundColorNames as O}from"chalk";import{Box as k,Static as Se,Text as A,render as Ce,useApp as we,useBoxMetrics as j,useCursor as Te,useInput as Ee,usePaste as De,useStdout as Oe,useWindowSize as ke}from"ink";import M,{createContext as N,useCallback as P,useContext as F,useEffect as I,useLayoutEffect as Ae,useMemo as L,useRef as R,useState as z}from"react";import{Fragment as B,jsx as V,jsxs as H}from"react/jsx-runtime";import je from"string-width";import{marked as Me}from"marked";import Ne from"marked-terminal";let Pe=null,Fe=!1,Ie=`robota`;function Le(){return Fe}const U=[`string-width`,`setCursorPosition`,`getStringWidth`,`slice`,`charCodeAt`];function Re(e,t){if(!t)return`rethrow`;let n=e.message??``;return U.some(e=>n.includes(e))?`ime-hint`:`guard-owned`}function ze(e){Pe=e}function Be(e,t){try{if(Pe){Pe.getSession().reportBackgroundError(e,t);return}}catch{}process.stderr.write(`\n[${Ie}] ${t}: ${e.message}\n`)}function Ve(e=`robota`){Ie=e,!Fe&&(Fe=!0,process.on(`unhandledRejection`,e=>{Be(e instanceof Error?e:Error(String(e)),`unhandled rejection`)}),process.on(`uncaughtException`,e=>{Be(e instanceof Error?e:Error(String(e)),`uncaught exception`)}))}let He=!1,Ue=`CLI`;function We(e){return`\n[${e}] CJK/IME input error — this is a known issue with macOS Terminal.app.\n Workaround: use iTerm2 (https://iterm2.com) or input your prompt in English.
4
4
  Alternatively, use headless mode: -p "your prompt here"
5
5
 
6
6
  `}function Ge(e){Ue=e,!He&&(He=!0,process.on(`uncaughtException`,e=>{let t=Re(e,Le());if(t===`ime-hint`){process.stderr.write(We(Ue));return}if(t!==`guard-owned`)throw e}))}const Ke=e=>typeof e==`string`,qe=e=>t=>t===void 0||e(t),Je={user:!0,"agent-wakeup":!0,peer:!0,external:!0},Ye={driverId:qe(Ke)};({...Ye}),{...Ye},{...Ye},{...Ye},{...Ye},{...Ye},{...Ye},{...Ye},{...Ye},Object.keys(Je);const Xe=new Set([`get-messages`,`get-history`,`get-context`,`get-status`,`get-commands`,`list-models`,`get-executing`,`get-pending`,`get-execution-workspace`,`read-execution-detail`,`get-agent-definitions`,`get-usage-report`,`list-sessions`,`get-background-tasks`,`get-background-task`,`get-background-job-groups`,`get-background-job-group`,`wait-background-job-group`,`read-background-task-log`,`get-settings`,`project-status`,`project-diff`,`project-memory`]);function Ze(e){return Xe.has(e)}const Qe=new Set([` `,`
@@ -2744,7 +2744,7 @@ Options:
2744
2744
  `);return}let u=l.at(-1);u||(process.stderr.write(`No sessions found.
2745
2745
  `),process.exit(1)),process.stdout.write(JJ(UJ(u))+`
2746
2746
  `)}function ZNe(e){let t,n,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`--threshold`){let t=e[i+1],a=t===void 0?NaN:Number.parseFloat(t);Number.isFinite(a)?n=a:r=!0,i++}else a&&!a.startsWith(`-`)&&t===void 0&&(t=a)}return{definitionPath:t,threshold:n,thresholdInvalid:r}}async function QNe(e){let t=await import(Mee(e).href),n=t.default??t.evalDefinition;if(!n)throw Error(`eval definition module '${e}' has no default (or 'evalDefinition') export`);return n}async function $Ne(e,t){let n=t.settingsSources??(()=>{throw Error(`Eval startup requires explicit host settings sources.`)})(),r=t.providerDefinitions??Cz(),i=yy(n,{providerDefinitions:r,...t.environment===void 0?{}:{env:t.environment}});return Pme(the({cwd:e,provider:Et(t.resolveProviderCredential===void 0?i:await t.resolveProviderCredential(i),r),userSettingsSources:n.filter(e=>e.kind===`host`),...t.projectAccess===void 0?{}:{projectAccess:t.projectAccess}}))}async function L1(e,t=process.cwd(),n={}){let r=ZNe(e);if(!r.definitionPath||r.thresholdInvalid)return process.stderr.write(`Usage: eval <definition-file> [--threshold <0..1>]
2747
- `),1;let i=j.resolve(t,r.definitionPath),a;try{let e=await(n.loadDefinition??QNe)(i);a=r.threshold===void 0?e:{...e,threshold:r.threshold},ES(a)}catch(e){return process.stderr.write(`Failed to load eval definition: ${e instanceof Error?e.message:String(e)}\n`),1}let o;try{let e=n.runFn??await $Ne(t,n);o=await jme(a,e)}catch(e){return process.stderr.write(`Eval run failed: ${e instanceof Error?e.message:String(e)}\n`),1}return process.stdout.write(Lme(o)),+!o.passed}const R1=()=>`3.0.0`,ePe=()=>`3.0.0`,tPe=()=>null,z1=e=>e.artifact?.version??R1(),nPe=e=>e.artifact===void 0?ePe():e.artifact.sourceVersion??e.artifact.version,rPe=e=>e.artifact===void 0?tPe():e.artifact.buildMetadata??null;async function iPe(e){let t=$r({input:process.stdin,output:process.stdout});try{let n=(await t.question(e)).trim().toLowerCase();return n===`y`||n===`yes`}finally{t.close()}}async function aPe(e,t){let n=iC(t.productRuntime);if(!pn(n))return e.writeLine(`No user settings found.`),0;if(!t.yes){if(!t.isTTY)return e.writeError(`--reset deletes ${n}. Refusing without confirmation in non-interactive mode — pass --yes to proceed.`),1;if(!await(t.confirm??iPe)(`Delete ${n}? [y/N] `))return e.writeLine(`Reset cancelled.`),1}let r=Kme(n);return r.deleted?e.writeLine(`Deleted ${r.path}`):e.writeLine(`No user settings found.`),0}function oPe(e){return!pn(e)}function sPe(e){yn(Nn(e),{recursive:!0}),An(e,new Date().toISOString())}function cPe(e){return[`Welcome to ${e.vocabulary.cliName}! — AI coding assistant`,``,`Try asking:`,` "Explain this project structure"`,` "Find files with TODO comments"`,` "Run tests and analyze failures"`,` "What changed recently in git?"`,``,`Useful commands:`,` /help show all slash commands`,` /cost show token usage and estimated cost`,` /clear clear conversation history`,``,`${e.vocabulary.cliName} diagnose — check your setup`]}function lPe(e){let t=Math.max(...e.map(e=>Or(e)))+4,n=e.map(e=>{let n=t-2-Or(e);return`│${` `.repeat(2)}${e}${` `.repeat(n)}│`});return[`╭${`─`.repeat(t)}╮`,...n,`╰${`─`.repeat(t)}╯`].join(`
2747
+ `),1;let i=j.resolve(t,r.definitionPath),a;try{let e=await(n.loadDefinition??QNe)(i);a=r.threshold===void 0?e:{...e,threshold:r.threshold},ES(a)}catch(e){return process.stderr.write(`Failed to load eval definition: ${e instanceof Error?e.message:String(e)}\n`),1}let o;try{let e=n.runFn??await $Ne(t,n);o=await jme(a,e)}catch(e){return process.stderr.write(`Eval run failed: ${e instanceof Error?e.message:String(e)}\n`),1}return process.stdout.write(Lme(o)),+!o.passed}const R1=()=>`3.0.1`,ePe=()=>`3.0.1`,tPe=()=>null,z1=e=>e.artifact?.version??R1(),nPe=e=>e.artifact===void 0?ePe():e.artifact.sourceVersion??e.artifact.version,rPe=e=>e.artifact===void 0?tPe():e.artifact.buildMetadata??null;async function iPe(e){let t=$r({input:process.stdin,output:process.stdout});try{let n=(await t.question(e)).trim().toLowerCase();return n===`y`||n===`yes`}finally{t.close()}}async function aPe(e,t){let n=iC(t.productRuntime);if(!pn(n))return e.writeLine(`No user settings found.`),0;if(!t.yes){if(!t.isTTY)return e.writeError(`--reset deletes ${n}. Refusing without confirmation in non-interactive mode — pass --yes to proceed.`),1;if(!await(t.confirm??iPe)(`Delete ${n}? [y/N] `))return e.writeLine(`Reset cancelled.`),1}let r=Kme(n);return r.deleted?e.writeLine(`Deleted ${r.path}`):e.writeLine(`No user settings found.`),0}function oPe(e){return!pn(e)}function sPe(e){yn(Nn(e),{recursive:!0}),An(e,new Date().toISOString())}function cPe(e){return[`Welcome to ${e.vocabulary.cliName}! — AI coding assistant`,``,`Try asking:`,` "Explain this project structure"`,` "Find files with TODO comments"`,` "Run tests and analyze failures"`,` "What changed recently in git?"`,``,`Useful commands:`,` /help show all slash commands`,` /cost show token usage and estimated cost`,` /clear clear conversation history`,``,`${e.vocabulary.cliName} diagnose — check your setup`]}function lPe(e){let t=Math.max(...e.map(e=>Or(e)))+4,n=e.map(e=>{let n=t-2-Or(e);return`│${` `.repeat(2)}${e}${` `.repeat(n)}│`});return[`╭${`─`.repeat(t)}╮`,...n,`╰${`─`.repeat(t)}╯`].join(`
2748
2748
  `)}function uPe(e,t,n={}){let r=cPe(t);e.writeLine(`\n${n.screenReader===!0?r.join(`
2749
2749
  `):lPe(r)}\n`)}function dPe(e,t){process.platform===`darwin`&&t.TERM_PROGRAM===`Apple_Terminal`&&e.writeError(`
2750
2750
  ⚠ macOS Terminal.app detected: CJK/IME input may be unstable.
@@ -2756,7 +2756,7 @@ Options:
2756
2756
  `,0,1)||!r(e,o,s)?!1:(i=!0,!0)};if(t===``){for(let t=0;t<e.length;t++)if(!a(t,t+1))return!1;return!0}let o=0;for(;;){let n=e.indexOf(t,o);if(n<0)return a(o,e.length);if(!a(o,n))return!1;o=n+t.length}},r,`text-split`)}function Z0(e,t,n){let r=0,i=!1;for(let a of e){let e=n===`text-lower`?a.toLowerCase():a.toUpperCase();for(let a=0;a<e.length;a++){let o=e.charCodeAt(a);if(r+=o<128?1:o<2048?2:o>=56320&&o<=57343&&i?1:3,i=o>=55296&&o<=56319,r>t)return{ok:!1,error:H1(`DAG_TASK_EXECUTION_BYTE_LIMIT_EXCEEDED`,`${n} output exceeds its UTF-8 byte limit`,!1,{maxBytes:t,nodeType:n})}}}return{ok:!0,value:n===`text-lower`?e.toLowerCase():e.toUpperCase()}}const Q0={ok:!0,value:{estimatedCredits:0}},$0=P.object({});var MFe=class extends x0{nodeType=`string-to-number`;displayName=`String → Number`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`number`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`number`,label:`Number`,order:0,type:`string`,required:!0}];configSchemaDefinition=$0;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Number(i.value);return isNaN(a)?{ok:!1,error:Q(`DAG_VALIDATION_STRING_TO_NUMBER_INVALID`,`Cannot convert "${i.value}" to a number`,{nodeId:t.nodeDefinition.nodeId})}:(r.setOutput(`number`,String(a)),{ok:!0,value:r.toOutput()})}},NFe=class extends x0{nodeType=`number-to-string`;displayName=`Number → String`;category=`Utility`;defaultInputPort=`number`;defaultOutputPort=`text`;inputs=[{key:`number`,label:`Number`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=$0;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`number`);return i.ok?(r.setOutput(`text`,i.value),{ok:!0,value:r.toOutput()}):i}};const PFe=P.object({separator:P.string().default(`, `)});var FFe=class extends x0{nodeType=`text-join`;displayName=`Text Join`;category=`Utility`;defaultInputPort=`items`;defaultOutputPort=`text`;inputs=[{key:`items`,label:`Items (newline-separated)`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=PFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`items`);if(!i.ok)return i;let a=AFe(i.value,n.separator,Y1(t.byteLimits).maxTextJoinOutputBytes);return a.ok?(r.setOutput(`text`,a.value),{ok:!0,value:r.toOutput()}):a}};const IFe=P.object({separator:P.string().default(`
2757
2757
  `),trim:P.boolean().default(!0)});var LFe=class extends x0{nodeType=`text-split`;displayName=`Text Split`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`items`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`items`,label:`Items (newline-separated)`,order:0,type:`string`,required:!0}];configSchemaDefinition=IFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=jFe(i.value,n.separator,n.trim,Y1(t.byteLimits).maxTextSplitOutputBytes);return a.ok?(r.setOutput(`items`,a.value),{ok:!0,value:r.toOutput()}):a}};const RFe=P.object({search:P.string().default(``),replacement:P.string().default(``),useRegex:P.boolean().default(!1),flags:P.string().default(`g`)});var zFe=class extends x0{nodeType=`text-replace`;displayName=`Text Replace`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=RFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a;if(n.useRegex){if(!t.regexReplaceOperation)return{ok:!1,error:H1(`DAG_TASK_ISOLATION_UNAVAILABLE`,`Regex-based text-replace requires an isolated regex executor; none was supplied for this run`,!1,{nodeId:t.nodeDefinition.nodeId})};let e=await t.regexReplaceOperation.execute({text:i.value,search:n.search,replacement:n.replacement,flags:n.flags},t.signal);if(!e.ok)return e;a=e.value}else{let e=DFe(i.value,n.search,n.replacement,Y1(t.byteLimits).maxTextReplaceOutputBytes);if(!e.ok)return e;a=e.value}return r.setOutput(`text`,a),{ok:!0,value:r.toOutput()}}},BFe=class extends x0{nodeType=`text-length`;displayName=`Text Length`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Length`,order:0,type:`string`,required:!0}];configSchemaDefinition=$0;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t){let n=new T0(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,String(r.value.length)),{ok:!0,value:n.toOutput()}):r}},VFe=class extends x0{nodeType=`text-upper`;displayName=`Text Uppercase`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=$0;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t){let n=new T0(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);if(!r.ok)return r;let i=Z0(r.value,Y1(t.byteLimits).maxTextUpperOutputBytes,`text-upper`);return i.ok?(n.setOutput(`text`,i.value),{ok:!0,value:n.toOutput()}):i}},HFe=class extends x0{nodeType=`text-lower`;displayName=`Text Lowercase`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=$0;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t){let n=new T0(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);if(!r.ok)return r;let i=Z0(r.value,Y1(t.byteLimits).maxTextLowerOutputBytes,`text-lower`);return i.ok?(n.setOutput(`text`,i.value),{ok:!0,value:n.toOutput()}):i}};const UFe=P.object({mode:P.enum([`both`,`start`,`end`]).default(`both`)});var WFe=class extends x0{nodeType=`text-trim`;displayName=`Text Trim`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=UFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=n.mode===`start`?i.value.trimStart():n.mode===`end`?i.value.trimEnd():i.value.trim();return r.setOutput(`text`,a),{ok:!0,value:r.toOutput()}}};const GFe=P.object({path:P.string().default(``),fallback:P.string().default(``)});var KFe=class extends x0{nodeType=`json-extract`;displayName=`JSON Extract`;category=`Utility`;defaultInputPort=`json`;defaultOutputPort=`text`;inputs=[{key:`json`,label:`JSON`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Value`,order:0,type:`string`,required:!0}];configSchemaDefinition=GFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`json`);if(!i.ok)return i;let a;try{a=JSON.parse(i.value)}catch{return{ok:!1,error:Q(`DAG_VALIDATION_JSON_EXTRACT_INVALID_JSON`,`Input is not valid JSON`,{nodeId:t.nodeDefinition.nodeId})}}let o=n.path?n.path.split(`.`):[],s=a;for(let e of o){if(typeof s!=`object`||!s){s=void 0;break}s=s[e]}let c=s===void 0?n.fallback:String(s);return r.setOutput(`text`,c),{ok:!0,value:r.toOutput()}}};const qFe=P.object({operator:P.enum([`non-empty`,`equals`,`contains`,`starts-with`,`ends-with`]).default(`non-empty`),operand:P.string().default(``)});var JFe=class extends x0{nodeType=`conditional-text`;displayName=`Conditional Text`;category=`Utility`;defaultInputPort=`condition`;defaultOutputPort=`text`;inputs=[{key:`condition`,label:`Condition`,order:0,type:`string`,required:!0},{key:`text_true`,label:`If True`,order:1,type:`string`,required:!0},{key:`text_false`,label:`If False`,order:2,type:`string`,required:!1}];outputs=[{key:`text`,label:`Result`,order:0,type:`string`,required:!0}];configSchemaDefinition=qFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`condition`);if(!i.ok)return i;let a=r.requireInputString(`text_true`);if(!a.ok)return a;let o=r.getInput(`text_false`),s=i.value,c=n.operand,l;switch(n.operator){case`non-empty`:l=s.trim().length>0;break;case`equals`:l=s===c;break;case`contains`:l=s.includes(c);break;case`starts-with`:l=s.startsWith(c);break;case`ends-with`:l=s.endsWith(c)}let u=l?a.value:typeof o==`string`?o:``;return r.setOutput(`text`,u),{ok:!0,value:r.toOutput()}}};const YFe=P.object({skipEmpty:P.boolean().default(!1)}),XFe=/\S/;function ZFe(e,t){if(!t){let t=1;for(let n=0;n<e.length;n++)e[n]===`
2758
2758
  `&&t++;return t}let n=0,r=!1;for(let t=0;t<e.length;t++){let i=e[t];i===`
2759
- `?(r&&n++,r=!1):!r&&XFe.test(i)&&(r=!0)}return r&&n++,n}var QFe=class extends x0{nodeType=`text-count-lines`;displayName=`Text Count Lines`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Line Count`,order:0,type:`string`,required:!0}];configSchemaDefinition=YFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,String(ZFe(i.value,n.skipEmpty))),{ok:!0,value:r.toOutput()}):i}};const $Fe=P.object({times:P.number().int().min(0).max(2**53-1).default(2),separator:P.string().default(``)});var eIe=class extends x0{nodeType=`text-repeat`;displayName=`Text Repeat`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Repeated Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=$Fe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Y1(t.byteLimits),o=kFe(i.value,n.separator,n.times,a.maxTextRepeatOutputBytes);return o.ok?(r.setOutput(`text`,o.value),{ok:!0,value:r.toOutput()}):o}};const tIe=P.object({start:P.number().int().default(0),end:P.number().int().optional()});var nIe=class extends x0{nodeType=`text-slice`;displayName=`Text Slice`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Sliced Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=tIe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,i.value.slice(n.start,n.end)),{ok:!0,value:r.toOutput()}):i}},rIe=KPe({createDefaultNodeRegistry:()=>t2,createDefaultNodeRegistrySync:()=>e2});function e2(){return[new tFe,new rFe,new oFe,new lFe,new dFe,new pFe,new hFe,new _Fe,new EFe,new MFe,new NFe,new FFe,new LFe,new zFe,new BFe,new VFe,new HFe,new WFe,new KFe,new JFe,new QFe,new eIe,new nIe]}const iIe=async()=>{try{return(await Promise.resolve().then(()=>_z)).createDefaultMediaProviderDefinitions()}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to load the default media provider definitions. Install @robota-sdk/agent-builtin-providers (and its provider SDKs), or inject mediaProviders explicitly. Cause: ${t}`)}},aIe=async()=>{try{return(await Promise.resolve().then(()=>_z)).createDefaultProviderDefinitions()}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to load the default LLM provider set for the llm-text node. A provider SDK package is likely not installed. Install @robota-sdk/agent-builtin-providers (and its provider SDKs), or pass createDagFramework({ providers: [...] }) explicitly. Cause: ${t}`)}};async function t2(e,t=aIe,n={},r=[],i=[]){let a=e??await t(),o=[...e2(),new $Pe(a)],s=n.mediaProviders??await(n.loadMediaDefaults??iIe)(),c=ue(s,`gemini-image`),l=ue(s,`seedance-video`),u=await Promise.all([...[{modulePath:`@robota-sdk/dag-node-gemini-image-edit`,factories:[e=>new e.GeminiImageEditNodeDefinition({imageProviderDefinition:c}),e=>new e.GeminiImageComposeNodeDefinition({imageProviderDefinition:c})]},{modulePath:`@robota-sdk/dag-node-text-to-image`,factories:[e=>new e.TextToImageNodeDefinition({imageProviderDefinition:c})]},{modulePath:`@robota-sdk/dag-node-seedance-video`,factories:[e=>new e.SeedanceVideoNodeDefinition({videoProviderDefinition:l})]}].map(sIe),oIe(i,r)]);for(let e of u)o.push(...e);return o}async function oIe(e,t){try{return[new(await(import(`./src-DwAfU-9z-CalH1ynp.js`))).SkillNodeDefinition({skillPort:dde(e,t)})]}catch{return[]}}async function sIe(e){let t=await cIe(e.modulePath);if(!t)return[];let n=[];for(let r of e.factories){let e=lIe(r,t);e&&n.push(e)}return n}async function cIe(e){try{switch(e){case`@robota-sdk/dag-node-gemini-image-edit`:return await import(`./src-B9UMvThT-B-MlnUJH.js`);case`@robota-sdk/dag-node-text-to-image`:return await import(`./src-BzaNFPZx-CIKPBZac.js`);case`@robota-sdk/dag-node-seedance-video`:return await import(`./src-UPsd6jNY-CUahgEdL.js`);default:return}}catch{return}}function lIe(e,t){try{return e(t)}catch{return}}var uIe=class{limit;committed=0;reserved=0;closed=!1;constructor(e){if(this.limit=e,e!==void 0&&(!Number.isFinite(e)||e<=0))throw RangeError(`Root credit limit must be positive and finite`)}close(){this.closed=!0}reserve(e){if(!Number.isFinite(e)||e<0)return{ok:!1,error:Q(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be finite and zero or positive`,{estimatedCredits:e})};if(this.closed||this.limit!==void 0&&e>this.limit-this.committed-this.reserved)return{ok:!1,error:Q(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds root runCreditLimit`,{estimatedCredits:e,...this.limit===void 0?{}:{runCreditLimit:this.limit}})};this.reserved+=e;let t=!1;return{ok:!0,value:{commit:()=>(t||(t=!0,this.reserved-=e,this.committed+=e),this.committed),release:()=>{t||(t=!0,this.reserved-=e)}}}}};function n2(e){if(e==null)return;if(typeof e!=`object`||Array.isArray(e))throw Error(`Invalid persisted DAG execution lineage`);let t=e,n=t.parentRunId!==void 0,r=!n||typeof t.parentRunId==`string`&&t.parentRunId.length>0;if(typeof t.rootRunId!=`string`||t.rootRunId.length===0||!r||!Number.isSafeInteger(t.depth)||t.depth<0||t.maxDepth!==void 0&&(!Number.isSafeInteger(t.maxDepth)||t.maxDepth<1)||!Array.isArray(t.ancestorCompositeNodeTypes)||!t.ancestorCompositeNodeTypes.every(e=>typeof e==`string`&&e.length>0))throw Error(`Invalid persisted DAG execution lineage`);let i=t.depth,a=t.ancestorCompositeNodeTypes.length;if(!(i===0?!n&&a===0:n&&a===i))throw Error(`Invalid persisted DAG execution lineage`);return{rootRunId:t.rootRunId,...n?{parentRunId:t.parentRunId}:{},depth:i,...t.maxDepth===void 0?{}:{maxDepth:t.maxDepth},ancestorCompositeNodeTypes:[...t.ancestorCompositeNodeTypes]}}const r2={STARTED:`execution.started`,COMPLETED:`execution.completed`,FAILED:`execution.failed`},i2={STARTED:`task.started`,COMPLETED:`task.completed`,FAILED:`task.failed`};function a2(e){let t=Date.parse(e);return Number.isNaN(t)?{ok:!1,error:Q(`DAG_VALIDATION_INVALID_LOGICAL_DATE`,`logicalDate must be a valid ISO-8601 datetime string`,{logicalDate:e})}:{ok:!0,value:new Date(t).toISOString()}}var dIe=class{clock;constructor(e){this.clock=e}resolve(e,t){let n=this.clock.nowIso();if(e===`scheduled`){if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_MISSING_LOGICAL_DATE`,`scheduled trigger requires logicalDate`,{trigger:e})};let r=a2(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}if(!t)return{ok:!0,value:{trigger:e,logicalDate:n,requestedAt:n}};let r=a2(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}},fIe=class{assertWithinBudget(e,t,n){if(t<0)return{ok:!1,error:Q(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be zero or positive`,{nextEstimatedCredits:t})};let r=e+t;return typeof n==`number`&&r>n?{ok:!1,error:Q(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:r,runCreditLimit:n})}:{ok:!0,value:r}}},pIe=class{lifecycleFactory;costPolicyEvaluator;constructor(e,t){this.lifecycleFactory=e,this.costPolicyEvaluator=t}async runNode(e){let t=()=>({ok:!1,error:U1(e.context.taskRunId)});if(e.context.signal?.aborted)return t();let n=this.lifecycleFactory.create(e.context.nodeDefinition.nodeType);if(!n.ok)return n;let r=await n.value.initialize(e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return r;let i=await n.value.validateInput(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let a=await n.value.estimateCost(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!a.ok)return await n.value.dispose(e.context),a;let o=this.costPolicyEvaluator.assertWithinBudget(e.context.currentTotalCredits,a.value.estimatedCredits,e.context.runCreditLimit);if(!o.ok)return await n.value.dispose(e.context),o;if(e.context.reserveCredits){let r=await e.context.reserveCredits(a.value.estimatedCredits);if(!r.ok)return await n.value.dispose(e.context),r;if(e.context.signal?.aborted)return await n.value.dispose(e.context),t()}let s=e.context.rootCreditBudget?.reserve(a.value.estimatedCredits);if(s&&!s.ok)return await n.value.dispose(e.context),s;try{let r=await n.value.execute(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return await n.value.dispose(e.context),r;let i=await n.value.validateOutput(r.value,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let c=await n.value.dispose(e.context);return e.context.signal?.aborted?t():c.ok?(s?.value.commit(),{ok:!0,value:{output:r.value,estimatedCredits:a.value.estimatedCredits,totalCredits:o.value}}):{ok:!1,error:H1(`DAG_TASK_EXECUTION_DISPOSE_FAILED`,`Node dispose step failed after execution`,!1,{nodeType:e.context.nodeDefinition.nodeType,taskRunId:e.context.taskRunId})}}finally{s?.ok&&s.value.release()}}},mIe=class{create(e){return{ok:!1,error:Q(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},o2=class{nodeManifestRegistry;lineage;lifecycleFactory;runner;constructor(e,t,n){this.nodeManifestRegistry=e,this.lineage=n,this.lifecycleFactory=t??new mIe,this.runner=new pIe(this.lifecycleFactory,new fIe)}async execute(e){if(!e.nodeDefinition)return{ok:!1,error:Q(`DAG_VALIDATION_NODE_DEFINITION_MISSING`,`Task execution requires nodeDefinition in execution input`,{nodeId:e.nodeId})};let t=this.nodeManifestRegistry.getManifest(e.nodeDefinition.nodeType);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_NODE_MANIFEST_NOT_FOUND`,`Node manifest is not registered for nodeType`,{nodeType:e.nodeDefinition.nodeType})};let n=await this.runner.runNode({input:e.input,context:{executionRoot:e.executionRoot,regexReplaceOperation:e.regexReplaceOperation,snapshotBudget:e.snapshotBudget,rootCreditBudget:e.rootCreditBudget,reserveCredits:e.reserveCredits,...e.byteLimits===void 0?{}:{byteLimits:e.byteLimits},...e.signal===void 0?{}:{signal:e.signal},dagId:e.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeDefinition:e.nodeDefinition,nodeManifest:t,attempt:e.attempt,executionPath:e.executionPath,lineage:e.lineage??this.lineage??{rootRunId:e.dagRunId,depth:0,ancestorCompositeNodeTypes:[]},runCreditLimit:e.costPolicy?.runCreditLimit,currentTotalCredits:e.currentTotalCredits??0,...e.runtimeBaseUrl===void 0?{}:{runtimeBaseUrl:e.runtimeBaseUrl}}});return n.ok?{ok:!0,output:n.value.output,estimatedCredits:n.value.estimatedCredits,totalCredits:n.value.totalCredits}:n}};const s2={root:`.workflows`,workflowExt:`.json`};var hIe=class{manifestByType=new Map;constructor(e){for(let t of e)this.manifestByType.set(t.nodeType,t)}getManifest(e){return this.manifestByType.get(e)}listManifests(){return[...this.manifestByType.values()]}};function gIe(e){let t=[],n=xIe(e,``,t);return n!==void 0&&t.length===0?{ok:!0,value:n}:{ok:!1,error:t}}function c2(e,t,n){if(!Array.isArray(e)||e.length!==2)return e0(n,t,`expected a [number, number] pair`);let r=i0(e[0],t0(t,0),n),i=i0(e[1],t0(t,1),n);return r===void 0||i===void 0?void 0:[r,i]}function _Ie(e,t,n){if(!Array.isArray(e)||e.length!==6)return e0(n,t,`expected a 6-tuple [linkId, srcId, srcSlot, tgtId, tgtSlot, type]`);let r=[0,1,2,3,4].map(r=>i0(e[r],t0(t,r),n)),i=r0(e[5],t0(t,5),n);if(r.some(e=>e===void 0)||i===void 0)return;let[a,o,s,c,l]=r;return[a,o,s,c,l,i]}function vIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=r0(r.name,t0(t,`name`),n),a=r0(r.type,t0(t,`type`),n),o=r.link,s=o===null?null:i0(o,t0(t,`link`),n);return i===void 0||a===void 0||s===void 0?void 0:{name:i,type:a,link:s}}function yIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=r0(r.name,t0(t,`name`),n),a=r0(r.type,t0(t,`type`),n),o=c0(r.links,t0(t,`links`),n,i0),s=s0(r.slot_index,t0(t,`slot_index`),n,i0);if(i===void 0||a===void 0||o===void 0)return;let c={name:i,type:a,links:o};return s!==void 0&&(c.slot_index=s),c}function bIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=e=>t0(t,e),a=i0(r.id,i(`id`),n),o=r0(r.type,i(`type`),n),s=c2(r.pos,i(`pos`),n),c=s0(r.size,i(`size`),n,c2),l=s0(r.flags,i(`flags`),n,n0),u=s0(r.order,i(`order`),n,i0),d=s0(r.mode,i(`mode`),n,i0),f=s0(r.inputs,i(`inputs`),n,(e,t,n)=>c0(e,t,n,vIe)),p=s0(r.outputs,i(`outputs`),n,(e,t,n)=>c0(e,t,n,yIe)),m=s0(r.properties,i(`properties`),n,n0),h=s0(r.widgets_values,i(`widgets_values`),n,(e,t,n)=>Array.isArray(e)?e:e0(n,t,`expected an array`));if(a===void 0||o===void 0||s===void 0)return;let g={id:a,type:o,pos:s};return c!==void 0&&(g.size=c),l!==void 0&&(g.flags=l),u!==void 0&&(g.order=u),d!==void 0&&(g.mode=d),f!==void 0&&(g.inputs=f),p!==void 0&&(g.outputs=p),m!==void 0&&(g.properties=m),h!==void 0&&(g.widgets_values=h),g}function xIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=e=>t0(t,e);if(`dagId`in r)return e0(n,i(`dagId`),`a workflow file carries no dagId — that is a definition file`);let a=i0(r.last_node_id,i(`last_node_id`),n),o=i0(r.last_link_id,i(`last_link_id`),n),s=c0(r.nodes,i(`nodes`),n,bIe),c=c0(r.links,i(`links`),n,_Ie),l=i0(r.version,i(`version`),n),u=s0(r.groups,i(`groups`),n,(e,t,n)=>Array.isArray(e)?e:e0(n,t,`expected an array`)),d=s0(r.config,i(`config`),n,n0),f=s0(r.extra,i(`extra`),n,n0);if(a===void 0||o===void 0||s===void 0||c===void 0||l===void 0)return;let p={last_node_id:a,last_link_id:o,nodes:s,links:c,version:l};return u!==void 0&&(p.groups=u),d!==void 0&&(p.config=d),f!==void 0&&(p.extra=f),p}function SIe(e){return`parallel`in e}function l2(e,t){return e.id??`${e.nodeType}-${t}`}function u2(e,t){return e.find(e=>e.nodeType===t)}function d2(e,t){let n=t.map(e=>e.nodeType),r={action:`replace_node_type`,suggestion:n[0],options:n};return Q(`UNKNOWN_NODE_TYPE`,`Node type "${e}" is not registered`,{requestedType:e},r)}function CIe(e,t){let n=[],r=[],i=[],a=[],o=0;for(let s of e.pipeline)if(SIe(s)){let e=[];for(let c of s.parallel){let l=l2(c,o);o+=1;let u=u2(t,c.nodeType);if(!u)return{ok:!1,error:d2(c.nodeType,t),warnings:n};let d=a.map(e=>e.nodeId);r.push({nodeId:l,nodeType:c.nodeType,dependsOn:d,config:c.config??{}});for(let e of a){let t=c.toPort??u.defaultInputPort;if(!t){n.push({message:`Node "${l}" (${c.nodeType}) has no defaultInputPort; edge from "${e.nodeId}" requires explicit toPort`});continue}i.push({from:e.nodeId,to:l,bindings:[{outputKey:e.portKey,inputKey:t}]})}let f=s.fromPort??c.fromPort??u.defaultOutputPort;f?e.push({nodeId:l,portKey:f}):n.push({message:`Node "${l}" (${c.nodeType}) has no defaultOutputPort; downstream connections require explicit fromPort`})}a=e}else{let e=l2(s,o);o+=1;let c=u2(t,s.nodeType);if(!c)return{ok:!1,error:d2(s.nodeType,t),warnings:n};let l=a.map(e=>e.nodeId);r.push({nodeId:e,nodeType:s.nodeType,dependsOn:l,config:s.config??{}});for(let t of a){let r=s.toPort??c.defaultInputPort;if(!r){n.push({message:`Node "${e}" (${s.nodeType}) has no defaultInputPort; edge from "${t.nodeId}" requires explicit toPort`});continue}i.push({from:t.nodeId,to:e,bindings:[{outputKey:t.portKey,inputKey:r}]})}let u=s.fromPort??c.defaultOutputPort;a=u?[{nodeId:e,portKey:u}]:[]}return r.length===0?{ok:!1,error:Q(`EMPTY_PIPELINE`,`pipeline must contain at least one node`,void 0,{action:`add_node`,suggestion:`Add at least one node spec to the pipeline array`}),warnings:n}:{ok:!0,definition:{dagId:e.dagId??`dag-build-result`,version:1,status:`draft`,nodes:r,edges:i},warnings:n,nodeCount:r.length,edgeCount:i.length}}function wIe(e){return(e.startsWith(`ConversationAgent`)?e.slice(17):e).replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`).replace(/^-/,``)}function TIe(e,t){let n=new Map;for(let t of e.links)n.set(t[0],t);let r=t?.nodes??{},i=e.nodes.map(e=>{let t=r[String(e.id)],n={nodeId:t?.nodeId??`node-${e.id}`,nodeType:wIe(e.type),dependsOn:[],config:e.properties?.agent_config??{},position:e.pos[0]!==0||e.pos[1]!==0?{x:e.pos[0],y:e.pos[1]}:void 0};return t?.retryPolicy&&(n.retryPolicy=t.retryPolicy),t?.timeoutMs!==void 0&&(n.timeoutMs=t.timeoutMs),t?.costPolicy&&(n.costPolicy=t.costPolicy),n}),a=new Map;e.nodes.forEach((e,t)=>{a.set(e.id,i[t])});let o=new Map,s=[],c=new Map;for(let t of e.links){let[,n,,r]=t,i=a.get(n),l=a.get(r);if(!i||!l)continue;let u=e.nodes.find(e=>e.id===n),d=e.nodes.find(e=>e.id===r),f=t[2],p=t[4],m=u?.outputs?.[f]?.name??`out${f}`,h=d?.inputs?.[p]?.name??`in${p}`,g=JSON.stringify([i.nodeId,l.nodeId]),_=o.get(g);_||(_=[],o.set(g,_),s.push({from:i.nodeId,to:l.nodeId,bindings:_})),_.push({outputKey:m,inputKey:h}),c.has(l.nodeId)||c.set(l.nodeId,new Set),c.get(l.nodeId).add(i.nodeId)}for(let e of i){let t=c.get(e.nodeId);t&&(e.dependsOn=[...t])}return{dagId:t?.dagId??`unknown`,version:t?.version??1,status:t?.status??`draft`,nodes:i,edges:s,...t?.costPolicy?{costPolicy:t.costPolicy}:{},...t?.inputSchema?{inputSchema:t.inputSchema}:{},...t?.outputSchema?{outputSchema:t.outputSchema}:{}}}const EIe={absentStatus:`draft`,absentEdgesAsEmpty:!0};function DIe(e){if(typeof e!=`object`||!e||Array.isArray(e))return`unrecognised`;let t=e;return`dagId`in t?`definition`:`links`in t||`last_node_id`in t?`workflow-file`:`unrecognised`}function OIe(e,t){let n=DIe(e);if(n===`unrecognised`)return{ok:!1,error:{format:n,issues:[{path:``,message:`expected either a workflow file (nodes + links + version) or a definition (dagId + nodes)`}]}};if(n===`workflow-file`){let r=gIe(e);return r.ok?kIe(TIe(r.value,t),n):{ok:!1,error:{format:n,issues:r.error}}}let r=f0(e,EIe);return r.ok?r:{ok:!1,error:{format:n,issues:r.error}}}function kIe(e,t){let n=f0(e);return n.ok?n:{ok:!1,error:{format:t,issues:n.error}}}function AIe(e){return e.format===`unrecognised`?`Not a DAG file: ${d0(e.issues)}.`:`Malformed ${e.format===`workflow-file`?`workflow file`:`DAG definition`}: ${d0(e.issues)}`}var jIe=class extends Error{failure;constructor(e){super(AIe(e)),this.name=`DagFileDecodeError`,this.failure=e}};function f2(e,t){let n=OIe(e,t);if(n.ok)return n.value;throw new jIe(n.error)}function MIe(e,t,n,r){for(let[i,a]of e.entries())if(a.taskRunId===t){e.set(i,{...a,leaseOwner:n,leaseUntil:r});return}}function NIe(e,t){return[...e.values()].filter(e=>e.status===`running`&&(e.leaseUntil===void 0||e.leaseUntil<=t))}function p2(e,t){return`${e}:${t}`}var PIe=class{definitions=new Map;latestPublishedVersionByDagId=new Map;dagRuns=new Map;taskRuns=new Map;async commitExecution(e,t){let n=[...this.taskRuns.values()].filter(t=>t.dagRunId===e),r=jPe(this.dagRuns.get(e),n,t);return r.dagRun&&this.dagRuns.set(e,r.dagRun),r.taskRun&&this.taskRuns.set(p2(e,r.taskRun.taskRunId),r.taskRun),r.result}async saveDefinition(e){let t=`${e.dagId}:${e.version}`;if(this.definitions.set(t,e),e.status===`published`){let t=this.latestPublishedVersionByDagId.get(e.dagId)??0;e.version>t&&this.latestPublishedVersionByDagId.set(e.dagId,e.version)}}async getDefinition(e,t){let n=`${e}:${t}`;return this.definitions.get(n)}async listDefinitions(){return[...this.definitions.values()].sort((e,t)=>e.dagId.localeCompare(t.dagId)||e.version-t.version)}async listDefinitionsByDagId(e){return[...this.definitions.values()].filter(t=>t.dagId===e).sort((e,t)=>e.version-t.version)}async getLatestPublishedDefinition(e){let t=this.latestPublishedVersionByDagId.get(e);if(t)return this.definitions.get(`${e}:${t}`)}async deleteDefinition(e,t){this.definitions.delete(`${e}:${t}`);let n=[...this.definitions.values()].filter(t=>t.dagId===e&&t.status===`published`).sort((e,t)=>e.version-t.version);if(n.length===0){this.latestPublishedVersionByDagId.delete(e);return}this.latestPublishedVersionByDagId.set(e,n[n.length-1].version)}async createDagRun(e){this.dagRuns.set(e.dagRunId,e)}async getDagRun(e){return this.dagRuns.get(e)}async listDagRuns(){return[...this.dagRuns.values()].sort((e,t)=>e.dagRunId.localeCompare(t.dagRunId))}async getDagRunByRunKey(e){for(let t of this.dagRuns.values())if(t.runKey===e)return t}async updateDagRunStatus(e,t,n){let r=this.dagRuns.get(e);if(!r)return;let i={...r,status:t,endedAt:n};this.dagRuns.set(e,i)}async deleteDagRun(e){this.dagRuns.delete(e)}async createTaskRun(e){let t=p2(e.dagRunId,e.taskRunId);this.taskRuns.set(t,e)}async getTaskRun(e){for(let t of this.taskRuns.values())if(t.taskRunId===e)return t}async listTaskRunsByDagRunId(e){let t=[];for(let n of this.taskRuns.values())n.dagRunId===e&&t.push(n);return t}async deleteTaskRunsByDagRunId(e){for(let[t,n]of this.taskRuns.entries())n.dagRunId===e&&this.taskRuns.delete(t)}async updateTaskRunStatus(e,t,n){for(let[r,i]of this.taskRuns.entries()){if(i.taskRunId!==e)continue;let a={...i,status:t,...[`failed`,`cancelled`,`queued`].includes(t)?{reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0}:{},errorCode:n?.code,errorMessage:n?.message};this.taskRuns.set(r,a);return}}async setTaskRunLease(e,t,n){MIe(this.taskRuns,e,t,n)}async listStaleRunningTaskRuns(e){return NIe(this.taskRuns,e)}async saveTaskRunSnapshots(e,t,n,r,i){for(let[a,o]of this.taskRuns.entries()){if(o.taskRunId!==e)continue;let s={...o,inputSnapshot:typeof t==`string`?t:o.inputSnapshot,outputSnapshot:typeof n==`string`?n:o.outputSnapshot,estimatedCredits:typeof r==`number`?r:o.estimatedCredits,totalCredits:typeof i==`number`?i:o.totalCredits};this.taskRuns.set(a,s);return}}async incrementTaskAttempt(e){for(let[t,n]of this.taskRuns.entries()){if(n.taskRunId!==e)continue;let r={...n,attempt:n.attempt+1,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0};this.taskRuns.set(t,r);return}}},m2=class{pendingQueue=[];inFlight=new Map;waiters=[];async enqueue(e){this.pendingQueue.push(e),this.notifyNextWaiter()}async dequeue(e,t,n=0){let r=this.tryDequeue(e,t);return r||n<=0?r:(await this.waitForMessage(n),this.tryDequeue(e,t))}async ack(e){this.inFlight.delete(e)}async nack(e){let t=this.inFlight.get(e);t&&(this.inFlight.delete(e),this.pendingQueue.unshift(t.message),this.notifyNextWaiter())}tryDequeue(e,t){this.requeueExpiredMessages();let n=this.pendingQueue.shift();if(!n)return;let r=Date.now();return this.inFlight.set(n.messageId,{message:n,ownerId:e,visibleAtEpochMs:r+t}),n}requeueExpiredMessages(){let e=Date.now();for(let[t,n]of this.inFlight.entries())n.visibleAtEpochMs>e||(this.inFlight.delete(t),this.pendingQueue.push(n.message))}async waitForMessage(e){return new Promise(t=>{let n={resolve:()=>{clearTimeout(n.timeout),this.removeWaiter(n),t()},timeout:setTimeout(()=>{n.resolve()},e)};this.waiters.push(n)})}notifyNextWaiter(){this.waiters.shift()?.resolve()}removeWaiter(e){let t=this.waiters.indexOf(e);t>=0&&this.waiters.splice(t,1)}},FIe=class{records=new Map;async acquire(e,t,n){let r=new Date().toISOString(),i=Date.now(),a=this.records.get(e);if(a&&Date.parse(a.leaseUntil)>i)return;let o={leaseKey:e,ownerId:t,acquiredAt:r,leaseUntil:new Date(i+n).toISOString()};return this.records.set(e,o),o}async release(e,t){let n=this.records.get(e);!n||n.ownerId!==t||this.records.delete(e)}async get(e){return this.records.get(e)}},IIe=class{nowIso(){return new Date().toISOString()}nowEpochMs(){return Date.now()}},LIe=class{listeners=new Set;logger;constructor(e){this.logger=e}publish(e){let t=[];for(let n of[...this.listeners])try{n(e)}catch(n){t.push(n),this.logger&&this.logger.error(`RunProgressEventBus listener threw an error`,{eventType:e.eventType,error:n instanceof Error?n.message:String(n)})}if(t.length>0&&!this.logger)throw t[0]instanceof Error?t[0]:Error(String(t[0]))}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}};function RIe(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)?{ok:!1,error:Q(`DAG_VALIDATION_PAYLOAD_INVALID`,`Payload must be a JSON object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:Q(`DAG_VALIDATION_PAYLOAD_PARSE_FAILED`,`Failed to parse payload JSON`)}}}function zIe(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse definition snapshot JSON`)}}return p0(t,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`Definition snapshot must be a valid DAG definition object`)}async function BIe(e,t,n,r,i){let{dagRunId:a,definition:o,input:s}=e,c=o.nodes.filter(e=>e.dependsOn.length===0);if(c.length===0)return{ok:!1,error:Q(`DAG_VALIDATION_NO_ENTRY_NODE`,`DAG must include at least one entry node (dependsOn = [])`,{dagId:o.dagId,version:o.version})};let l=Q1.transition(`created`,`QUEUE`);if(!l.ok)return l;if(!(await t.commitExecution(a,{kind:`transition-run`,expectedStatus:`created`,event:`QUEUE`})).applied)return{ok:!0,value:{taskRunIds:[]}};let u=Q1.transition(`queued`,`START`);if(!u.ok)return u;if(!(await t.commitExecution(a,{kind:`transition-run`,expectedStatus:`queued`,event:`START`})).applied)return{ok:!0,value:{taskRunIds:[]}};i?.publish({dagRunId:a,eventType:r2.STARTED,occurredAt:r.nowIso(),dagId:o.dagId,version:o.version});let d=[],f=[];for(let e of c){let n=`${a}:${e.nodeId}:attempt:1`;(await t.commitExecution(a,{kind:`admit`,dependsOn:[],taskRun:{taskRunId:n,dagRunId:a,nodeId:e.nodeId,status:`queued`,attempt:1}})).applied&&(d.push(n),f.push({messageId:`${n}:message`,dagRunId:a,taskRunId:n,nodeId:e.nodeId,attempt:1,executionPath:[`dagId:${o.dagId}`,`dagRunId:${a}`,`nodeId:${e.nodeId}`,`taskRunId:${n}`,`attempt:1`],payload:s,createdAt:r.nowIso()}))}for(let e of f)try{await n.enqueue(e)}catch(n){return VIe(a,e.taskRunId,e.nodeId,d,n,t,r,i)}return{ok:!0,value:{taskRunIds:d}}}async function VIe(e,t,n,r,i,a,o,s){let c=V1(`DAG_DISPATCH_ENQUEUE_FAILED`,`Failed to enqueue entry task`,{dagRunId:e,taskRunId:t,nodeId:n,errorMessage:i instanceof Error&&i.message.trim().length>0?i.message:`Unknown error`});Q1.transition(`running`,`COMPLETE_FAILURE`).ok&&(await a.commitExecution(e,{kind:`transition-run`,expectedStatus:`running`,event:`COMPLETE_FAILURE`,endedAt:o.nowIso()})).applied&&s?.publish({dagRunId:e,eventType:r2.FAILED,occurredAt:o.nowIso(),error:c});for(let t of r)await a.commitExecution(e,{kind:`cancel-task`,taskRunId:t,error:c});return{ok:!1,error:c}}function HIe(e,t){return e===void 0||t===void 0?e===t:e.rootRunId===t.rootRunId&&e.parentRunId===t.parentRunId&&e.depth===t.depth&&e.maxDepth===t.maxDepth&&e.ancestorCompositeNodeTypes.length===t.ancestorCompositeNodeTypes.length&&e.ancestorCompositeNodeTypes.every((e,n)=>e===t.ancestorCompositeNodeTypes[n])}var UIe=class{storage;queue;clock;runProgressEventReporter;snapshotBudget;timeSemanticsService;constructor(e,t,n,r,i){this.storage=e,this.queue=t,this.clock=n,this.runProgressEventReporter=r,this.snapshotBudget=i,this.timeSemanticsService=new dIe(n)}async createRun(e){let t=e.version?await this.storage.getDefinition(e.dagId,e.version):await this.storage.getLatestPublishedDefinition(e.dagId);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_NOT_FOUND`,`Published DAG definition was not found`,{dagId:e.dagId,hasVersion:!!e.version})};if(t.status!==`published`)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_NOT_PUBLISHED`,`Only published definitions can be executed`,{dagId:t.dagId,version:t.version,status:t.status})};let n=this.timeSemanticsService.resolve(e.trigger,e.logicalDate);if(!n.ok)return n;let r;try{r=n2(e.lineage)}catch{return{ok:!1,error:Q(`DAG_VALIDATION_RUN_LINEAGE_INVALID`,`Composite child run lineage is invalid`,{dagId:t.dagId})}}let i=e.rerunKey?`${t.dagId}:${n.value.logicalDate}:rerun:${e.rerunKey}`:`${t.dagId}:${n.value.logicalDate}`,a=await this.storage.getDagRunByRunKey(i);if(a){let e;try{e=n2(a.lineage)}catch{return{ok:!1,error:Q(`DAG_VALIDATION_RUN_LINEAGE_INVALID`,`Existing run for this run key has invalid persisted lineage`,{dagId:t.dagId,runKey:i})}}return HIe(e,r)?{ok:!0,value:{dagRunId:a.dagRunId,dagId:a.dagId,version:a.version,logicalDate:a.logicalDate,status:a.status}}:{ok:!1,error:Q(`DAG_VALIDATION_RUN_KEY_LINEAGE_MISMATCH`,`An existing run for this run key has different composite lineage`,{dagId:t.dagId,runKey:i,existingDagRunId:a.dagRunId})}}let o=this.generateDagRunId(t.dagId,n.value.logicalDate,e.rerunKey);try{let a=(a,s)=>this.storage.createDagRun({dagRunId:o,dagId:t.dagId,version:t.version,status:`created`,definitionSnapshot:a,inputSnapshot:s,runKey:i,logicalDate:n.value.logicalDate,trigger:e.trigger,...r===void 0?{}:{lineage:r},startedAt:this.clock.nowIso()});if(this.snapshotBudget){let n=await this.snapshotBudget.admitRun(t,e.input,a);if(!n.ok)return n}else await a(JSON.stringify(t),JSON.stringify(e.input))}catch(e){return this.snapshotBudget?{ok:!1,error:H1(`DAG_RUN_SNAPSHOT_PERSISTENCE_UNCERTAIN`,`Run snapshot persistence outcome is uncertain; root snapshot admission is closed`,!1)}:{ok:!1,error:V1(`DAG_DISPATCH_DAG_RUN_CREATE_FAILED`,`Failed to create DagRun`,{dagId:t.dagId,version:t.version,runKey:i,errorMessage:this.resolveErrorMessage(e instanceof Error?e:void 0)})}}return{ok:!0,value:{dagRunId:o,dagId:t.dagId,version:t.version,logicalDate:n.value.logicalDate,status:`created`}}}async startCreatedRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};if(t.status!==`created`){let n=await this.storage.listTaskRunsByDagRunId(e);return{ok:!0,value:{dagRunId:e,dagId:t.dagId,version:t.version,logicalDate:t.logicalDate,taskRunIds:n.map(e=>e.taskRunId)}}}if(typeof t.definitionSnapshot!=`string`||t.definitionSnapshot.trim().length===0)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:e})};let n=zIe(t.definitionSnapshot);if(!n.ok)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot is invalid`,{dagRunId:e})};let r=RIe(t.inputSnapshot??`{}`);if(!r.ok)return{ok:!1,error:Q(`DAG_VALIDATION_RUN_INPUT_SNAPSHOT_INVALID`,`DagRun input snapshot is invalid`,{dagRunId:e})};let i=await BIe({dagRunId:e,definition:n.value,input:r.value},this.storage,this.queue,this.clock,this.runProgressEventReporter);return i.ok?{ok:!0,value:{dagRunId:e,dagId:t.dagId,version:t.version,logicalDate:t.logicalDate,taskRunIds:i.value.taskRunIds}}:i}async startRun(e){let t=await this.createRun(e);if(!t.ok)return t;if(t.value.status===`created`)return this.startCreatedRun(t.value.dagRunId);let n=await this.storage.listTaskRunsByDagRunId(t.value.dagRunId);return{ok:!0,value:{dagRunId:t.value.dagRunId,dagId:t.value.dagId,version:t.value.version,logicalDate:t.value.logicalDate,taskRunIds:n.map(e=>e.taskRunId)}}}generateDagRunId(e,t,n){let r=Date.parse(t);return n?`${e}:run:${r}:rerun:${n}`:`${e}:run:${r}`}resolveErrorMessage(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}},WIe=class{storage;constructor(e){this.storage=e}async getRun(e){let t=await this.storage.getDagRun(e);return t?{ok:!0,value:{dagRun:t,taskRuns:await this.storage.listTaskRunsByDagRunId(e)}}:{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})}}},GIe=class{storage;clock;notifier;constructor(e,t,n){this.storage=e,this.clock=t,this.notifier=n}async cancelRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};let n=Q1.transition(t.status,`CANCEL`);if(!n.ok)return n;let r=await this.storage.commitExecution(e,{kind:`transition-run`,expectedStatus:t.status,event:`CANCEL`,endedAt:this.clock.nowIso()});if(!r.applied){if(r.runStatus===`cancelled`)return this.notify(e),{ok:!0,value:{dagRunId:e,status:`cancelled`}};if(r.runStatus!==void 0){let t=Q1.transition(r.runStatus,`CANCEL`);return t.ok?this.cancelRun(e):t}return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})}}return this.notify(e),{ok:!0,value:{dagRunId:e,status:`cancelled`}}}notify(e){try{this.notifier?.notifyRunCancelled(e)}catch{}}};async function h2(e,t,n,r){let i=await t.commitExecution(e,{kind:`finalize`,endedAt:n.nowIso()});if(i.error)return{ok:!1,error:i.error};if(i.runStatus===void 0)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found while finalizing run status`,{dagRunId:e})};if(!i.applied)return{ok:!0,value:void 0};let a=i.runStatus===`failed`,o=await t.listTaskRunsByDagRunId(e);return a?KIe(e,o,n,r):r?.publish({dagRunId:e,eventType:r2.COMPLETED,occurredAt:n.nowIso()}),{ok:!0,value:void 0}}function KIe(e,t,n,r){let i=t.find(e=>e.status===`failed`),a=typeof i?.errorCode==`string`&&typeof i.errorMessage==`string`?H1(i.errorCode,i.errorMessage,!1,{dagRunId:e,taskRunId:i.taskRunId,nodeId:i.nodeId}):H1(`DAG_TASK_EXECUTION_FAILED`,`Run completed with failure.`,!1,{dagRunId:e});r?.publish({dagRunId:e,eventType:r2.FAILED,occurredAt:n.nowIso(),error:a})}async function g2(e,t,n,r,i){await e.updateTaskRunStatus(n.taskRunId,r,i),await e.setTaskRunLease(n.taskRunId,void 0,void 0),await h2(n.dagRunId,e,t)}async function qIe(e,t){let n=$1.transition(t.status,`CANCEL`);return n.ok?(await e.updateTaskRunStatus(t.taskRunId,n.value.nextStatus,{code:`DAG_TASK_EXECUTION_ORPHANED`,category:`task_execution`,message:`Task's DAG run ${t.dagRunId} no longer exists; the task cannot be run or finalized`,retryable:!1,context:{taskRunId:t.taskRunId,dagRunId:t.dagRunId}}),await e.setTaskRunLease(t.taskRunId,void 0,void 0),{ok:!0,value:void 0}):n}async function JIe(e,t,n,r,i){let a=await e.listStaleRunningTaskRuns(n.nowIso()),o={requeued:[],abandoned:[],skipped:[],failed:[],orphaned:[]};for(let s of a){let a=`taskRun:${s.taskRunId}`;if(!await r.acquire(a,i.workerId,i.leaseDurationMs)){o.skipped.push(s.taskRunId);continue}try{let r=await e.getTaskRun(s.taskRunId);if(r===void 0||r.status!==`running`||$Ie(r,n.nowIso())){o.skipped.push(s.taskRunId);continue}await YIe(e,t,n,r,i.maxAttempts,o)}catch(e){o.failed.push({taskRunId:s.taskRunId,error:e})}finally{await r.release(a,i.workerId)}}return o}async function YIe(e,t,n,r,i,a){{let o=$1.transition(r.status,`RECLAIM`);if(!o.ok){a.skipped.push(r.taskRunId);return}let s=await e.getDagRun(r.dagRunId);if(s===void 0){if(!(await qIe(e,r)).ok){a.skipped.push(r.taskRunId);return}a.orphaned.push(r.taskRunId);return}if(XIe.has(s.status)){let t=$1.transition(r.status,`CANCEL`);if(!t.ok){a.skipped.push(r.taskRunId);return}await g2(e,n,r,t.value.nextStatus),a.abandoned.push(r.taskRunId);return}if(r.attempt>=i){let t=$1.transition(r.status,`COMPLETE_FAILURE`);if(!t.ok){a.skipped.push(r.taskRunId);return}await g2(e,n,r,t.value.nextStatus,{code:`DAG_TASK_EXECUTION_ABANDONED`,category:`task_execution`,message:`Task was abandoned by its worker ${r.attempt} time(s) and has no attempts left`,retryable:!1,context:{taskRunId:r.taskRunId,attempt:r.attempt,maxAttempts:i}}),a.abandoned.push(r.taskRunId);return}let c=r.attempt+1;await e.incrementTaskAttempt(r.taskRunId),await t.enqueue(ZIe(r,c,n.nowIso())),await e.updateTaskRunStatus(r.taskRunId,o.value.nextStatus),await e.setTaskRunLease(r.taskRunId,void 0,void 0),a.requeued.push(r.taskRunId)}}const XIe=new Set([`success`,`failed`,`cancelled`]);function ZIe(e,t,n){return{payload:QIe(e.inputSnapshot),messageId:`${e.taskRunId}:reclaim:${t}`,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeId:e.nodeId,attempt:t,executionPath:[`dagRunId:${e.dagRunId}`,`nodeId:${e.nodeId}`,`taskRunId:${e.taskRunId}`,`attempt:${t}`,`reclaimed:true`],createdAt:n}}function QIe(e){if(e===void 0)return{};try{let t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return{}}}function $Ie(e,t){return e.leaseUntil!==void 0&&e.leaseUntil>t}var eLe=class{clock;lease;options;lastSweepAtMs=0;sweeping=!1;constructor(e,t,n){this.clock=e,this.lease=t,this.options=n}async sweepIfDue(e,t){let n=this.clock.nowEpochMs();if(!(this.sweeping||n-this.lastSweepAtMs<this.options.leaseDurationMs)){this.sweeping=!0;try{let n=(await JIe(e,t,this.clock,this.lease,this.options)).failed[0];if(n===void 0)return;throw n.error}catch(e){return{code:`DAG_TASK_SWEEP_FAILED`,category:`task_execution`,message:`Stale-task sweep failed: ${e instanceof Error?e.message:String(e)}`,retryable:!0,context:{workerId:this.options.workerId}}}finally{this.lastSweepAtMs=this.clock.nowEpochMs(),this.sweeping=!1}}}};function tLe(e,t){let n=e.map(e=>e.startsWith(`attempt:`)?`attempt:${t}`:e);return n.some(e=>e.startsWith(`attempt:`))||n.push(`attempt:${t}`),n}function _2(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function v2(e,t,n,r,i,a,o,s){if(r.deadLetterEnabled){let t=await rLe(e,n,r,o);if(!t.ok)return y2(a,e.messageId,t.error)}let c=await h2(e.dagRunId,i,o,s);return c.ok?b2(a,e.messageId,t,!1):y2(a,e.messageId,c.error)}async function nLe(e,t,n,r){let i=e.attempt+1,a={...e,messageId:`${e.taskRunId}:message:${i}`,attempt:i,executionPath:tLe(e.executionPath,i),createdAt:r.nowIso()};try{await n.enqueue(a)}catch(r){return y2(n,e.messageId,V1(`DAG_DISPATCH_ENQUEUE_RETRY_FAILED`,`Failed to enqueue retry message`,{taskRunId:t,attempt:i,errorMessage:_2(r)}))}return b2(n,e.messageId,t,!0)}async function rLe(e,t,n,r){if(!n.deadLetterQueue)return{ok:!1,error:Q(`DAG_VALIDATION_DEAD_LETTER_QUEUE_NOT_CONFIGURED`,`deadLetterEnabled requires deadLetterQueue to be configured`,{taskRunId:e.taskRunId})};let i={...e,messageId:`${e.taskRunId}:dlq:${r.nowEpochMs()}`,payload:{...e.payload,dlqReasonCode:t.code,dlqReasonMessage:t.message,dlqSourceMessageId:e.messageId},createdAt:r.nowIso()};try{return await n.deadLetterQueue.enqueue(i),{ok:!0,value:void 0}}catch(t){return{ok:!1,error:V1(`DAG_DISPATCH_DEAD_LETTER_ENQUEUE_FAILED`,`Failed to enqueue dead letter message`,{taskRunId:e.taskRunId,originalMessageId:e.messageId,errorMessage:_2(t)})}}}async function y2(e,t,n){return await e.ack(t),{ok:!1,error:n}}async function b2(e,t,n,r){return await e.ack(t),{ok:!0,value:{processed:!0,taskRunId:n,retried:r}}}function iLe(e){if(e.status!==`running`)return{ok:!0,value:e.status};let t=$1.transition(e.status,`RECLAIM`);return t.ok?{ok:!0,value:t.value.nextStatus}:t}function x2(e,t){return Math.max(e,t)+3e4}function aLe(e,t,n){return new Date(e.nowEpochMs()+x2(t,n)).toISOString()}async function oLe(e){let{storage:t,clock:n,message:r,taskRun:i}=e,a=i.status===`running`,o=iLe(i);if(!o.ok)return o;if(a){if(i.attempt>=e.options.maxAttempts)return{ok:!1,error:{code:`DAG_TASK_EXECUTION_ABANDONED`,category:`task_execution`,message:`Task was abandoned by its worker ${i.attempt} time(s) and has no attempts left`,retryable:!1,context:{taskRunId:i.taskRunId,attempt:i.attempt,maxAttempts:e.options.maxAttempts}}};await t.incrementTaskAttempt(i.taskRunId)}let s=a?i.attempt+1:i.attempt,c=$1.transition(o.value,`START`);return c.ok?(await t.setTaskRunLease(i.taskRunId,e.options.workerId,aLe(n,e.timeoutMs,e.options.leaseDurationMs)),await t.updateTaskRunStatus(i.taskRunId,c.value.nextStatus),e.reporter?.publish({dagRunId:r.dagRunId,eventType:i2.STARTED,occurredAt:n.nowIso(),taskRunId:i.taskRunId,nodeId:r.nodeId,input:r.payload}),{ok:!0,value:s}):c}async function sLe(e,t,n,r,i,a){let o=`taskRun:${t}`;if(!await e.acquire(o,n,r))return a();try{return await i()}finally{await e.release(o,n)}}async function cLe(e,t){let{message:n,taskRun:r,storage:i,queue:a,clock:o}=t;if(e.code!==`DAG_TASK_EXECUTION_ABANDONED`)return y2(a,n.messageId,e);let s=$1.transition(r.status,`COMPLETE_FAILURE`);return s.ok?(await i.updateTaskRunStatus(r.taskRunId,s.value.nextStatus,e),await i.setTaskRunLease(r.taskRunId,void 0,void 0),v2(n,r.taskRunId,e,t.options,i,a,o,t.reporter)):y2(a,n.messageId,s.error)}function lLe(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function uLe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function dLe(e,t,n){let r=e.nodes.find(e=>e.nodeId===n);if(!r)return{ok:!1,error:Q(`DAG_VALIDATION_DOWNSTREAM_NODE_NOT_FOUND`,`Downstream node was not found while building payload`,{downstreamNodeId:n})};let i=e.edges.filter(e=>e.to===n);if(i.length===0)return{ok:!0,value:{}};let a={};for(let e of i){let n=fLe(a,e,r,t);if(!n.ok)return n}return _Le(a,r.inputs??[]),{ok:!0,value:a}}function fLe(e,t,n,r){if(!t.bindings||t.bindings.length===0)return{ok:!1,error:Q(`DAG_VALIDATION_BINDING_REQUIRED`,`Incoming edge must define at least one binding`,{from:t.from,to:t.to})};let i=pLe(t.from,t.to,r);if(!i.ok)return i;let a=i.value;for(let r of t.bindings){let i=mLe(e,r,a,t,n);if(!i.ok)return i}return{ok:!0,value:void 0}}function pLe(e,t,n){let r=n.find(t=>t.nodeId===e&&t.status===`success`);if(!r||!r.outputSnapshot)return{ok:!1,error:Q(`DAG_VALIDATION_UPSTREAM_OUTPUT_MISSING`,`Upstream output snapshot is missing for binding dispatch`,{from:e,to:t})};try{let n=JSON.parse(r.outputSnapshot);return uLe(n)?{ok:!0,value:n}:{ok:!1,error:Q(`DAG_VALIDATION_UPSTREAM_OUTPUT_INVALID`,`Upstream output snapshot has invalid payload shape`,{from:e,to:t})}}catch(n){return{ok:!1,error:Q(`DAG_VALIDATION_UPSTREAM_OUTPUT_PARSE_FAILED`,`Failed to parse upstream output snapshot`,{from:e,to:t,errorMessage:lLe(n)})}}}function mLe(e,t,n,r,i){let a=n[t.outputKey];if(a===void 0)return{ok:!1,error:Q(`DAG_VALIDATION_BINDING_OUTPUT_KEY_MISSING`,`Binding outputKey was not found in upstream output`,{from:r.from,outputKey:t.outputKey})};if((i.inputs??[]).find(e=>e.key===t.inputKey)?.isList)return hLe(e,t.inputKey,a,r.to);let o=b0(t.inputKey);return o?gLe(e,o,a,t.inputKey,r.to,i):e[t.inputKey]===void 0?(e[t.inputKey]=a,{ok:!0,value:void 0}):{ok:!1,error:Q(`DAG_VALIDATION_BINDING_INPUT_KEY_CONFLICT`,`Multiple bindings target the same input key`,{to:r.to,inputKey:t.inputKey})}}function hLe(e,t,n,r){Array.isArray(e[t])||(e[t]=[]);let i=e[t];return Array.isArray(i)?(i.push(n),{ok:!0,value:void 0}):{ok:!1,error:Q(`DAG_VALIDATION_BINDING_LIST_PAYLOAD_INVALID`,`List payload container is invalid`,{to:r,inputKey:t})}}function gLe(e,t,n,r,i,a){if(!(a.inputs??[]).find(e=>e.key===t.portKey)?.isList)return{ok:!1,error:Q(`DAG_VALIDATION_BINDING_INPUT_KEY_MISSING`,`Binding inputKey does not resolve to a valid list input port`,{to:i,inputKey:r})};let o=e[t.portKey],s=Array.isArray(o)?o:[];return s[t.index]=n,e[t.portKey]=s,{ok:!0,value:void 0}}function _Le(e,t){for(let n of t){if(!n.isList)continue;let t=e[n.key];Array.isArray(t)&&(e[n.key]=t.filter(e=>e!==void 0))}}function vLe(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function yLe(e,t,n,r,i,a,o){let s=t.nodes.filter(e=>e.dependsOn.includes(n));if(s.length===0)return{ok:!0,value:void 0};let c=await i.listTaskRunsByDagRunId(e.dagRunId);for(let n of s){let r=await bLe(e,t,n,c,i,a,o);if(!r.ok)return r}return{ok:!0,value:void 0}}async function bLe(e,t,n,r,i,a,o){if(r.some(e=>e.nodeId===n.nodeId)||!n.dependsOn.every(e=>r.some(t=>t.nodeId===e&&t.status===`success`)))return{ok:!0,value:void 0};let s=`${e.dagRunId}:${n.nodeId}:attempt:1`;if(!(await i.commitExecution(e.dagRunId,{kind:`admit`,dependsOn:n.dependsOn,taskRun:{taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1}})).applied)return{ok:!0,value:void 0};let c=dLe(t,r,n.nodeId);if(!c.ok)return c;let l={messageId:`${s}:message:1`,dagRunId:e.dagRunId,taskRunId:s,nodeId:n.nodeId,attempt:1,executionPath:[`dagId:${e.dagId}`,`dagRunId:${e.dagRunId}`,`nodeId:${n.nodeId}`,`taskRunId:${s}`,`attempt:1`],payload:c.value,createdAt:o.nowIso()};try{await a.enqueue(l)}catch(t){let r=$1.transition(`queued`,`CANCEL`);return r.ok&&await i.updateTaskRunStatus(s,r.value.nextStatus),{ok:!1,error:V1(`DAG_DISPATCH_ENQUEUE_DOWNSTREAM_FAILED`,`Failed to enqueue downstream task`,{dagRunId:e.dagRunId,nodeId:n.nodeId,errorMessage:vLe(t)})}}return r.push({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1}),{ok:!0,value:void 0}}var xLe=class{storage;queue;clock;options;runProgressEventReporter;snapshotBudget;constructor(e,t,n,r,i,a){this.storage=e,this.queue=t,this.clock=n,this.options=r,this.runProgressEventReporter=i,this.snapshotBudget=a}async handleSuccessPath(e,t,n,r,i,a,o){let s=n=>this.storage.commitExecution(e.dagRunId,{kind:`settle`,taskRunId:t,attempt:e.attempt,leaseOwner:this.options.workerId,status:`success`,outputSnapshot:n,estimatedCredits:a,totalCredits:o}),c=this.snapshotBudget?await this.snapshotBudget.admitValue(`output`,i,s):{ok:!0,value:await s(JSON.stringify(i))};if(!c.ok)return this.handleFailurePath(e,t,c.error);if(!c.value.applied){let[n,r]=await Promise.all([this.storage.getDagRun(e.dagRunId),this.storage.getTaskRun(t)]);return n?.status===`running`&&r?.status===`running`&&r.attempt===e.attempt&&r.leaseOwner===this.options.workerId?this.handleFailurePath(e,t,Q(`DAG_VALIDATION_EXECUTION_SETTLEMENT_REJECTED`,`Current task attempt could not settle its successful output`,{taskRunId:t})):b2(this.queue,e.messageId,t,!1)}this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:i2.COMPLETED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,output:i});let l=await yLe(n,r,e.nodeId,i,this.storage,this.queue,this.clock);if(!l.ok)return y2(this.queue,e.messageId,l.error);let u=await h2(e.dagRunId,this.storage,this.clock,this.runProgressEventReporter);return u.ok?b2(this.queue,e.messageId,t,!1):y2(this.queue,e.messageId,u.error)}async handleFailurePath(e,t,n){let r=this.options.retryEnabled&&n.retryable&&e.attempt<this.options.maxAttempts;return(await this.storage.commitExecution(e.dagRunId,{kind:`settle`,taskRunId:t,attempt:e.attempt,leaseOwner:this.options.workerId,status:`failed`,reserveRetry:r,error:n})).applied?(this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:i2.FAILED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,error:n}),r?nLe(e,t,this.queue,this.clock):v2(e,t,n,this.options,this.storage,this.queue,this.clock,this.runProgressEventReporter)):b2(this.queue,e.messageId,t,!1)}};function SLe(e,t){return H1(`DAG_TASK_EXECUTION_TIMEOUT`,`Task execution timed out after ${t}ms`,!0,{taskRunId:e,timeoutMs:t})}function S2(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function C2(e,t,n,r){return new Promise(i=>{let a=new AbortController,o=!1,s,c=e=>{o||(o=!0,clearTimeout(s),t.signal?.removeEventListener(`abort`,u),i(e))},l=n=>{if(!o){if(o=!0,clearTimeout(s),t.signal?.removeEventListener(`abort`,u),a.abort(n),!e.stopAndWait){i({ok:!1,error:n});return}Promise.resolve().then(()=>e.stopAndWait?.(t)).then(()=>i({ok:!1,error:n}),e=>i({ok:!1,error:{...n,retryable:!1,context:{...n.context,isolationStopError:S2(e)}}}))}},u=()=>l(U1(r));if(t.signal?.aborted){u();return}t.signal?.addEventListener(`abort`,u,{once:!0}),s=setTimeout(()=>l(SLe(r,n)),n);let d=e=>c({ok:!1,error:H1(`DAG_TASK_EXECUTION_EXCEPTION`,`Task executor threw an exception`,!0,{taskRunId:r,errorMessage:S2(e)})});try{e.execute({...t,signal:a.signal}).then(c,d)}catch(e){d(e)}})}function CLe(e){let t=0;for(let n of e)typeof n.totalCredits==`number`&&n.totalCredits>t&&(t=n.totalCredits);return t}function wLe(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function TLe(e,t){if(typeof e.definitionSnapshot!=`string`||e.definitionSnapshot.trim().length===0)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:t})};let n;try{n=JSON.parse(e.definitionSnapshot)}catch(e){return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse DagRun definition snapshot`,{dagRunId:t,errorMessage:wLe(e)})}}return p0(n,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:t})}async function w2(e,t){let n=await e.getDagRun(t.dagRunId);if(!n)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found for dequeued message`,{dagRunId:t.dagRunId})};let r=TLe(n,t.dagRunId);if(!r.ok)return r;let i=r.value,a=i.nodes.find(e=>e.nodeId===t.nodeId);return a?{ok:!0,value:{dagRun:n,definition:i,nodeDefinition:a}}:{ok:!1,error:Q(`DAG_VALIDATION_NODE_NOT_FOUND`,`Node definition not found for task execution`,{nodeId:t.nodeId,dagId:n.dagId,version:n.version})}}var ELe=class{storage;queue;lease;executor;clock;options;runProgressEventReporter;snapshotBudget;rootCreditBudget;lifecycleCreditAdmission;executionRoot;byteLimits;cancellationPollMs;activeAttempts=new Set;notifyRunCancelled(e){for(let t of this.activeAttempts)t.dagRunId===e&&t.controller.abort()}constructor(e,t,n,r,i,a,o,s,c,l,u,d=!1){if(this.storage=e,this.queue=t,this.lease=n,this.executor=r,this.clock=i,this.options=o,this.runProgressEventReporter=s,this.snapshotBudget=l,this.rootCreditBudget=u,this.lifecycleCreditAdmission=d,this.executionRoot=tn(a),this.byteLimits=Y1(c),this.cancellationPollMs=o.cancellationPollMs??250,!Number.isSafeInteger(this.cancellationPollMs)||this.cancellationPollMs<1||this.cancellationPollMs>6e4)throw RangeError(`cancellationPollMs must be an integer between 1 and 60000`)}sweeper;outcomesInstance;get outcomes(){return this.outcomesInstance??=new xLe(this.storage,this.queue,this.clock,this.options,this.runProgressEventReporter,this.snapshotBudget),this.outcomesInstance}async processOnce(){let e=await this.queue.dequeue(this.options.workerId,this.options.visibilityTimeoutMs,this.options.idleWaitMs);if(!e){this.sweeper??=new eLe(this.clock,this.lease,this.options);let e=await this.sweeper.sweepIfDue(this.storage,this.queue);return e?{ok:!1,error:e}:{ok:!0,value:{processed:!1}}}let t=await this.resolveTimeoutMs(e);return sLe(this.lease,e.taskRunId,this.options.workerId,x2(t,this.options.leaseDurationMs),async()=>this.processAcquiredMessage(e,t),async()=>(await this.queue.nack(e.messageId),{ok:!0,value:{processed:!1}}))}async processAcquiredMessage(e,t){let n=await this.storage.getTaskRun(e.taskRunId);if(!n){let t=Q(`DAG_VALIDATION_TASK_RUN_NOT_FOUND`,`TaskRun not found for dequeued message`,{taskRunId:e.taskRunId});return y2(this.queue,e.messageId,t)}let r=await this.cancelIfRunCancelled(e);if(r)return r;let i=this.claimDepsFor(e,n,t),a=await oLe(i);if(!a.ok)return cLe(a.error,i);let o={...e,attempt:a.value},s=await w2(this.storage,o);if(!s.ok)return y2(this.queue,e.messageId,s.error);let{dagRun:c,definition:l,nodeDefinition:u}=s.value;if(c.status===`cancelled`)return this.settleCancelledRunMessage(e);let d;try{d=n2(c.lineage)}catch{return this.outcomes.handleFailurePath(o,o.taskRunId,Q(`DAG_VALIDATION_RUN_LINEAGE_INVALID`,`Persisted composite child run lineage is invalid`,{dagRunId:o.dagRunId}))}if(d){let t=await this.cancelIfAncestorCancelled(e,c,d);if(t)return t}let f=e=>this.storage.commitExecution(o.dagRunId,{kind:`snapshot-input`,taskRunId:o.taskRunId,attempt:o.attempt,leaseOwner:this.options.workerId,inputSnapshot:e}),p=this.snapshotBudget?await this.snapshotBudget.admitValue(`input`,o.payload,f):{ok:!0,value:await f(JSON.stringify(o.payload))};if(!p.ok)return this.outcomes.handleFailurePath(o,o.taskRunId,p.error);if(!p.value.applied)return b2(this.queue,e.messageId,o.taskRunId,!1);let m=await this.buildExecutionInput(o,c,l,u,d),h=new AbortController,g={dagRunId:o.dagRunId,taskRunId:o.taskRunId,attempt:o.attempt,controller:h};this.activeAttempts.add(g);let _,v,y=Date.now()+i.timeoutMs,b;try{let t=await this.cancelIfRunCancelled(e);if(t)return t;if(b=this.watchCommittedCancellation(g),l.costPolicy&&!this.lifecycleCreditAdmission&&!(this.executor instanceof o2)){let t=this.executor.estimateCost;if(!t)return this.outcomes.handleFailurePath(o,n.taskRunId,Q(`DAG_VALIDATION_CREDIT_ESTIMATE_REQUIRED`,`Cost-limited runs require a custom executor to estimate credits before execution`,{taskRunId:o.taskRunId}));let r=await C2({execute:async e=>{let n=await t.call(this.executor,e);return n.ok?{ok:!0,output:{},estimatedCredits:n.value}:n},...this.executor.stopAndWait?{stopAndWait:this.executor.stopAndWait.bind(this.executor)}:{}},{...m,signal:h.signal},Math.max(1,y-Date.now()),e.taskRunId);if(!r.ok)return this.outcomes.handleFailurePath(o,n.taskRunId,r.error);if(r.estimatedCredits===void 0||!Number.isFinite(r.estimatedCredits)||r.estimatedCredits<0)return this.outcomes.handleFailurePath(o,n.taskRunId,Q(`DAG_VALIDATION_CREDIT_ESTIMATE_INVALID`,`Custom executor credit estimate must be a finite nonnegative number`,{taskRunId:o.taskRunId}));let i=await m.reserveCredits(r.estimatedCredits);if(!i.ok)return this.outcomes.handleFailurePath(o,n.taskRunId,i.error);v=r.estimatedCredits}let r=y-Date.now();if(r<=0)return this.outcomes.handleFailurePath(o,n.taskRunId,H1(`DAG_TASK_EXECUTION_TIMEOUT`,`Task execution timed out after ${i.timeoutMs}ms`,!0,{taskRunId:e.taskRunId,timeoutMs:i.timeoutMs}));_=await C2(this.executor,{...m,signal:h.signal},r,e.taskRunId)}finally{b?.(),this.activeAttempts.delete(g)}return _.ok?v!==void 0&&_.estimatedCredits!==void 0&&_.estimatedCredits!==v?this.outcomes.handleFailurePath(o,n.taskRunId,Q(`DAG_VALIDATION_CREDIT_ESTIMATE_MISMATCH`,`Custom executor reported credits different from its preflight estimate`,{taskRunId:o.taskRunId})):this.outcomes.handleSuccessPath(o,n.taskRunId,c,l,_.output,v??_.estimatedCredits,_.totalCredits):this.outcomes.handleFailurePath(o,n.taskRunId,_.error)}watchCommittedCancellation(e){let t=!1,n,r=async()=>{if(!t){try{let n=await this.storage.getDagRun(e.dagRunId);!t&&n?.status!==`running`&&e.controller.abort()}catch{t||e.controller.abort()}!t&&!e.controller.signal.aborted&&(n=setTimeout(()=>{r()},this.cancellationPollMs))}};return n=setTimeout(()=>{r()},this.cancellationPollMs),()=>{t=!0,clearTimeout(n)}}async cancelIfRunCancelled(e){return(await this.storage.getDagRun(e.dagRunId))?.status===`cancelled`?this.settleCancelledRunMessage(e):void 0}async cancelIfAncestorCancelled(e,t,n){if(n.parentRunId===void 0)return;let r=new Set([n.rootRunId,n.parentRunId]);for(let n of r)if((await this.storage.getDagRun(n))?.status===`cancelled`)return await this.cancelOwnRunForAncestor(t),this.settleCancelledRunMessage(e)}async cancelOwnRunForAncestor(e){if(!Q1.transition(e.status,`CANCEL`).ok)return;let t=await this.storage.commitExecution(e.dagRunId,{kind:`transition-run`,expectedStatus:e.status,event:`CANCEL`,endedAt:this.clock.nowIso()});if(t.applied||t.runStatus===`cancelled`){this.notifyRunCancelled(e.dagRunId);return}if(t.runStatus!==void 0){let t=await this.storage.getDagRun(e.dagRunId);t&&await this.cancelOwnRunForAncestor(t)}}async settleCancelledRunMessage(e){let t=await this.storage.getTaskRun(e.taskRunId);if(t){let e=$1.transition(t.status,`CANCEL`);e.ok&&await this.storage.updateTaskRunStatus(t.taskRunId,e.value.nextStatus),await this.storage.setTaskRunLease(t.taskRunId,void 0,void 0)}return b2(this.queue,e.messageId,e.taskRunId,!1)}async buildExecutionInput(e,t,n,r,i){let a=CLe(await this.storage.listTaskRunsByDagRunId(e.dagRunId));return{executionRoot:this.executionRoot,...i===void 0?{}:{lineage:i},byteLimits:this.byteLimits,snapshotBudget:this.snapshotBudget,rootCreditBudget:this.rootCreditBudget,reserveCredits:n.costPolicy?async t=>{let n=await this.storage.commitExecution(e.dagRunId,{kind:`reserve-credits`,taskRunId:e.taskRunId,attempt:e.attempt,leaseOwner:this.options.workerId,estimatedCredits:t});return n.applied?{ok:!0,value:void 0}:{ok:!1,error:n.error??Q(`DAG_VALIDATION_CREDIT_RESERVATION_REJECTED`,`Task attempt lost credit reservation authority`,{taskRunId:e.taskRunId})}}:void 0,dagId:t.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeId:e.nodeId,attempt:e.attempt,executionPath:e.executionPath,input:e.payload,nodeDefinition:r,costPolicy:n.costPolicy,currentTotalCredits:a}}claimDepsFor(e,t,n){return{storage:this.storage,queue:this.queue,clock:this.clock,reporter:this.runProgressEventReporter,options:this.options,timeoutMs:n,message:e,taskRun:t}}async resolveTimeoutMs(e){let t=await w2(this.storage,e);if(!t.ok)return this.options.defaultTimeoutMs;let n=t.value.nodeDefinition.timeoutMs;return typeof n==`number`&&n>0?n:this.options.defaultTimeoutMs}},DLe=class extends Error{constructor(){super(`Run advancement has stopped and cannot be restarted.`),this.name=`RunAdvancementStoppedError`}};function OLe(e){return e===`success`||e===`failed`||e===`cancelled`}function T2(e,t,n){return V1(e,t,{dagRunId:n})}var kLe=class{workerStep;runReader;logger;lifecycle=`created`;continuousDemand=!1;waiters=new Map;actorPromise=null;stopPromise=null;wakeSleep=null;constructor(e,t,n={error:()=>void 0}){this.workerStep=e,this.runReader=t,this.logger=n}async start(){if(this.lifecycle===`stopping`||this.lifecycle===`stopped`)throw new DLe;this.lifecycle=`running`,this.continuousDemand=!0,this.wake(),this.ensureActor()}waitForTerminal(e,t={}){if(this.lifecycle===`stopping`||this.lifecycle===`stopped`)return Promise.resolve({ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_STOPPED`,`Run advancement stopped before the observed run became terminal.`,e)});if(t.signal?.aborted)return Promise.resolve({ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_ABORTED`,`Run terminal-state observation was aborted.`,e)});if(t.deadlineEpochMs!==void 0&&t.deadlineEpochMs<=Date.now())return Promise.resolve({ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_DEADLINE`,`Run terminal-state observation exceeded its deadline.`,e)});let n=new Promise(n=>{let r={id:Symbol(e),dagRunId:e,resolve:n,signal:t.signal,settled:!1};t.signal!==void 0&&(r.abortListener=()=>{this.settle(r,{ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_ABORTED`,`Run terminal-state observation was aborted.`,e)})},t.signal.addEventListener(`abort`,r.abortListener,{once:!0})),t.deadlineEpochMs!==void 0&&(r.deadlineTimer=setTimeout(()=>{this.settle(r,{ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_DEADLINE`,`Run terminal-state observation exceeded its deadline.`,e)})},Math.max(0,t.deadlineEpochMs-Date.now())),r.deadlineTimer.unref?.()),this.waiters.set(r.id,r)});return this.wake(),this.ensureActor(),n}stop(){if(this.stopPromise!==null)return this.stopPromise;this.lifecycle=`stopping`,this.continuousDemand=!1;for(let e of[...this.waiters.values()])this.settle(e,{ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_STOPPED`,`Run advancement stopped before the observed run became terminal.`,e.dagRunId)});return this.wake(),this.stopPromise=(async()=>{await this.actorPromise,this.lifecycle=`stopped`})(),this.stopPromise}hasDemand(){return(this.lifecycle===`created`||this.lifecycle===`running`)&&(this.continuousDemand||this.waiters.size>0)}ensureActor(){if(!this.hasDemand()||this.actorPromise!==null)return;let e=this.runActor().catch(e=>{this.logger.error(`Run advancement actor failed unexpectedly.`,e)}).finally(()=>{this.actorPromise===e&&(this.actorPromise=null),this.hasDemand()&&this.ensureActor()});this.actorPromise=e}async runActor(){let e=25;for(;this.hasDemand();){if(await this.queryAndSettleWaiters(),!this.hasDemand())return;let t;try{t=await this.workerStep.processOnce()}catch(e){this.logger.error(`Worker step threw during run advancement.`,e),await this.sleepUntilWake(500);continue}if(!this.hasDemand())return;if(!t.ok){this.logger.error(`Worker step failed during run advancement.`,t.error),await this.sleepUntilWake(500);continue}if(t.value.processed){e=25;continue}await this.sleepUntilWake(e),e=Math.min(e*2,500)}}async queryAndSettleWaiters(){let e=new Set([...this.waiters.values()].map(e=>e.dagRunId));for(let t of e){let e;try{e=await this.runReader.getRun(t)}catch(n){e={ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_QUERY_THROW`,n instanceof Error?n.message:String(n),t)}}let n=[...this.waiters.values()].filter(e=>e.dagRunId===t);if(!e.ok||OLe(e.value.dagRun.status))for(let t of n)this.settle(t,e)}}settle(e,t){e.settled||(e.settled=!0,this.waiters.delete(e.id),e.deadlineTimer!==void 0&&clearTimeout(e.deadlineTimer),e.signal!==void 0&&e.abortListener!==void 0&&e.signal.removeEventListener(`abort`,e.abortListener),e.resolve(t),this.wake())}wake(){this.wakeSleep?.()}async sleepUntilWake(e){this.hasDemand()&&await new Promise(t=>{let n=!1,r=()=>{n||(n=!0,clearTimeout(i),this.wakeSleep===r&&(this.wakeSleep=null),t())},i=setTimeout(r,e);i.unref?.(),this.wakeSleep=r,this.hasDemand()||r()})}};function ALe(e,t){let n={...t,retryEnabled:t.retryEnabled??!1,deadLetterEnabled:t.deadLetterEnabled??!1,deadLetterQueue:e.deadLetterQueue};return new ELe(e.storage,e.queue,e.lease,e.executor,e.clock,e.executionRoot,n,e.runProgressEventReporter,e.byteLimits,e.snapshotBudget,e.rootCreditBudget,e.lifecycleCreditAdmission)}function jLe(e,t){let n=new LIe,r=new UIe(e.storage,e.queue,e.clock,n,e.snapshotBudget),i=new WIe(e.storage),a=ALe({executionRoot:e.executionRoot,byteLimits:e.byteLimits,snapshotBudget:e.snapshotBudget,rootCreditBudget:e.rootCreditBudget,lifecycleCreditAdmission:e.lifecycleCreditAdmission,storage:e.storage,queue:e.queue,deadLetterQueue:e.deadLetterQueue,lease:e.lease,executor:e.executor,clock:e.clock,runProgressEventReporter:n},{...t.worker,retryEnabled:t.worker.retryEnabled??!1});return{runOrchestrator:r,runQuery:i,runCancel:new GIe(e.storage,e.clock,{notifyRunCancelled(t){e.snapshotBudget?.close(),e.rootCreditBudget?.close(),a.notifyRunCancelled(t)}}),runAdvancement:new kLe(a,i,t.logger),runProgressEventBus:n}}function E2(e,t){let{text:n,search:r,replacement:i,flags:a}=e,o;try{o=new RegExp(r,a)}catch{return{type:`invalid-regex`}}let s=Symbol(`regex output exceeds byte limit`),c=new Uint16Array(t),l=0,u=0,d=!1,f=0,p=(e,n,r)=>{for(let i=n;i<r;i++){let n=e.charCodeAt(i);if(u+=n<128?1:n<2048?2:n>=56320&&n<=57343&&d?1:3,d=n>=55296&&n<=56319,u>t)throw s;c[l++]=n}},m=(e,t,r,a)=>{for(let o=0;o<i.length;){let s=i.indexOf(`$`,o);if(s<0){p(i,o,i.length);return}p(i,o,s);let c=i[s+1];if(c===`$`)p(i,s,s+1),o=s+2;else if(c===`&`)p(e,0,e.length),o=s+2;else if(c==="`")p(n,0,r),o=s+2;else if(c===`'`)p(n,r+e.length,n.length),o=s+2;else if(c!==void 0&&c>=`0`&&c<=`9`){let e=i[s+2],n=e!==void 0&&e>=`0`&&e<=`9`?2:1,r=Number(i.slice(s+1,s+1+n));if(n===2&&r>t.length&&(n=1,r=Number(c)),r>=1&&r<=t.length){let e=t[r-1];e!==void 0&&p(e,0,e.length)}else p(i,s,s+1+n);o=s+1+n}else if(c===`<`){let e=i.indexOf(`>`,s+2);if(e>=0&&a!==void 0){let t=a[i.slice(s+2,e)];t!==void 0&&p(t,0,t.length),o=e+1}else p(i,s,s+2),o=s+2}else p(i,s,s+1),o=s+1}};try{let e=a.includes(`u`)||a.includes(`v`);for(let t=o.exec(n);t!==null;t=o.exec(n)){let r=t[0],i=t.index;if(p(n,f,i),m(r,t.slice(1),i,t.groups),f=i+r.length,!o.global)break;if(r.length===0){let t=o.lastIndex,r=n.charCodeAt(t),i=n.charCodeAt(t+1);o.lastIndex+=e&&r>=55296&&r<=56319&&i>=56320&&i<=57343?2:1}}p(n,f,n.length)}catch(e){return e===s?{type:`oversized`}:{type:`invalid-regex`}}let h=[];for(let e=0;e<l;e+=8192)h.push(String.fromCharCode(...c.subarray(e,Math.min(e+8192,l))));return{type:`result`,value:h.join(``)}}const D2=25166848,MLe=`
2759
+ `?(r&&n++,r=!1):!r&&XFe.test(i)&&(r=!0)}return r&&n++,n}var QFe=class extends x0{nodeType=`text-count-lines`;displayName=`Text Count Lines`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Line Count`,order:0,type:`string`,required:!0}];configSchemaDefinition=YFe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,String(ZFe(i.value,n.skipEmpty))),{ok:!0,value:r.toOutput()}):i}};const $Fe=P.object({times:P.number().int().min(0).max(2**53-1).default(2),separator:P.string().default(``)});var eIe=class extends x0{nodeType=`text-repeat`;displayName=`Text Repeat`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Repeated Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=$Fe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Y1(t.byteLimits),o=kFe(i.value,n.separator,n.times,a.maxTextRepeatOutputBytes);return o.ok?(r.setOutput(`text`,o.value),{ok:!0,value:r.toOutput()}):o}};const tIe=P.object({start:P.number().int().default(0),end:P.number().int().optional()});var nIe=class extends x0{nodeType=`text-slice`;displayName=`Text Slice`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Sliced Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=tIe;async estimateCostWithConfig(){return Q0}async executeWithConfig(e,t,n){let r=new T0(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,i.value.slice(n.start,n.end)),{ok:!0,value:r.toOutput()}):i}},rIe=KPe({createDefaultNodeRegistry:()=>t2,createDefaultNodeRegistrySync:()=>e2});function e2(){return[new tFe,new rFe,new oFe,new lFe,new dFe,new pFe,new hFe,new _Fe,new EFe,new MFe,new NFe,new FFe,new LFe,new zFe,new BFe,new VFe,new HFe,new WFe,new KFe,new JFe,new QFe,new eIe,new nIe]}const iIe=async()=>{try{return(await Promise.resolve().then(()=>_z)).createDefaultMediaProviderDefinitions()}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to load the default media provider definitions. Install @robota-sdk/agent-builtin-providers (and its provider SDKs), or inject mediaProviders explicitly. Cause: ${t}`)}},aIe=async()=>{try{return(await Promise.resolve().then(()=>_z)).createDefaultProviderDefinitions()}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to load the default LLM provider set for the llm-text node. A provider SDK package is likely not installed. Install @robota-sdk/agent-builtin-providers (and its provider SDKs), or pass createDagFramework({ providers: [...] }) explicitly. Cause: ${t}`)}};async function t2(e,t=aIe,n={},r=[],i=[]){let a=e??await t(),o=[...e2(),new $Pe(a)],s=n.mediaProviders??await(n.loadMediaDefaults??iIe)(),c=ue(s,`gemini-image`),l=ue(s,`seedance-video`),u=await Promise.all([...[{modulePath:`@robota-sdk/dag-node-gemini-image-edit`,factories:[e=>new e.GeminiImageEditNodeDefinition({imageProviderDefinition:c}),e=>new e.GeminiImageComposeNodeDefinition({imageProviderDefinition:c})]},{modulePath:`@robota-sdk/dag-node-text-to-image`,factories:[e=>new e.TextToImageNodeDefinition({imageProviderDefinition:c})]},{modulePath:`@robota-sdk/dag-node-seedance-video`,factories:[e=>new e.SeedanceVideoNodeDefinition({videoProviderDefinition:l})]}].map(sIe),oIe(i,r)]);for(let e of u)o.push(...e);return o}async function oIe(e,t){try{return[new(await(import(`./src-DwAfU-9z-B8gxThPt.js`))).SkillNodeDefinition({skillPort:dde(e,t)})]}catch{return[]}}async function sIe(e){let t=await cIe(e.modulePath);if(!t)return[];let n=[];for(let r of e.factories){let e=lIe(r,t);e&&n.push(e)}return n}async function cIe(e){try{switch(e){case`@robota-sdk/dag-node-gemini-image-edit`:return await import(`./src-B9UMvThT-fOIUDLqp.js`);case`@robota-sdk/dag-node-text-to-image`:return await import(`./src-BzaNFPZx-Df7aFS3N.js`);case`@robota-sdk/dag-node-seedance-video`:return await import(`./src-UPsd6jNY-B387swGC.js`);default:return}}catch{return}}function lIe(e,t){try{return e(t)}catch{return}}var uIe=class{limit;committed=0;reserved=0;closed=!1;constructor(e){if(this.limit=e,e!==void 0&&(!Number.isFinite(e)||e<=0))throw RangeError(`Root credit limit must be positive and finite`)}close(){this.closed=!0}reserve(e){if(!Number.isFinite(e)||e<0)return{ok:!1,error:Q(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be finite and zero or positive`,{estimatedCredits:e})};if(this.closed||this.limit!==void 0&&e>this.limit-this.committed-this.reserved)return{ok:!1,error:Q(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds root runCreditLimit`,{estimatedCredits:e,...this.limit===void 0?{}:{runCreditLimit:this.limit}})};this.reserved+=e;let t=!1;return{ok:!0,value:{commit:()=>(t||(t=!0,this.reserved-=e,this.committed+=e),this.committed),release:()=>{t||(t=!0,this.reserved-=e)}}}}};function n2(e){if(e==null)return;if(typeof e!=`object`||Array.isArray(e))throw Error(`Invalid persisted DAG execution lineage`);let t=e,n=t.parentRunId!==void 0,r=!n||typeof t.parentRunId==`string`&&t.parentRunId.length>0;if(typeof t.rootRunId!=`string`||t.rootRunId.length===0||!r||!Number.isSafeInteger(t.depth)||t.depth<0||t.maxDepth!==void 0&&(!Number.isSafeInteger(t.maxDepth)||t.maxDepth<1)||!Array.isArray(t.ancestorCompositeNodeTypes)||!t.ancestorCompositeNodeTypes.every(e=>typeof e==`string`&&e.length>0))throw Error(`Invalid persisted DAG execution lineage`);let i=t.depth,a=t.ancestorCompositeNodeTypes.length;if(!(i===0?!n&&a===0:n&&a===i))throw Error(`Invalid persisted DAG execution lineage`);return{rootRunId:t.rootRunId,...n?{parentRunId:t.parentRunId}:{},depth:i,...t.maxDepth===void 0?{}:{maxDepth:t.maxDepth},ancestorCompositeNodeTypes:[...t.ancestorCompositeNodeTypes]}}const r2={STARTED:`execution.started`,COMPLETED:`execution.completed`,FAILED:`execution.failed`},i2={STARTED:`task.started`,COMPLETED:`task.completed`,FAILED:`task.failed`};function a2(e){let t=Date.parse(e);return Number.isNaN(t)?{ok:!1,error:Q(`DAG_VALIDATION_INVALID_LOGICAL_DATE`,`logicalDate must be a valid ISO-8601 datetime string`,{logicalDate:e})}:{ok:!0,value:new Date(t).toISOString()}}var dIe=class{clock;constructor(e){this.clock=e}resolve(e,t){let n=this.clock.nowIso();if(e===`scheduled`){if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_MISSING_LOGICAL_DATE`,`scheduled trigger requires logicalDate`,{trigger:e})};let r=a2(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}if(!t)return{ok:!0,value:{trigger:e,logicalDate:n,requestedAt:n}};let r=a2(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}},fIe=class{assertWithinBudget(e,t,n){if(t<0)return{ok:!1,error:Q(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be zero or positive`,{nextEstimatedCredits:t})};let r=e+t;return typeof n==`number`&&r>n?{ok:!1,error:Q(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:r,runCreditLimit:n})}:{ok:!0,value:r}}},pIe=class{lifecycleFactory;costPolicyEvaluator;constructor(e,t){this.lifecycleFactory=e,this.costPolicyEvaluator=t}async runNode(e){let t=()=>({ok:!1,error:U1(e.context.taskRunId)});if(e.context.signal?.aborted)return t();let n=this.lifecycleFactory.create(e.context.nodeDefinition.nodeType);if(!n.ok)return n;let r=await n.value.initialize(e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return r;let i=await n.value.validateInput(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let a=await n.value.estimateCost(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!a.ok)return await n.value.dispose(e.context),a;let o=this.costPolicyEvaluator.assertWithinBudget(e.context.currentTotalCredits,a.value.estimatedCredits,e.context.runCreditLimit);if(!o.ok)return await n.value.dispose(e.context),o;if(e.context.reserveCredits){let r=await e.context.reserveCredits(a.value.estimatedCredits);if(!r.ok)return await n.value.dispose(e.context),r;if(e.context.signal?.aborted)return await n.value.dispose(e.context),t()}let s=e.context.rootCreditBudget?.reserve(a.value.estimatedCredits);if(s&&!s.ok)return await n.value.dispose(e.context),s;try{let r=await n.value.execute(e.input,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!r.ok)return await n.value.dispose(e.context),r;let i=await n.value.validateOutput(r.value,e.context);if(e.context.signal?.aborted)return await n.value.dispose(e.context),t();if(!i.ok)return await n.value.dispose(e.context),i;let c=await n.value.dispose(e.context);return e.context.signal?.aborted?t():c.ok?(s?.value.commit(),{ok:!0,value:{output:r.value,estimatedCredits:a.value.estimatedCredits,totalCredits:o.value}}):{ok:!1,error:H1(`DAG_TASK_EXECUTION_DISPOSE_FAILED`,`Node dispose step failed after execution`,!1,{nodeType:e.context.nodeDefinition.nodeType,taskRunId:e.context.taskRunId})}}finally{s?.ok&&s.value.release()}}},mIe=class{create(e){return{ok:!1,error:Q(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},o2=class{nodeManifestRegistry;lineage;lifecycleFactory;runner;constructor(e,t,n){this.nodeManifestRegistry=e,this.lineage=n,this.lifecycleFactory=t??new mIe,this.runner=new pIe(this.lifecycleFactory,new fIe)}async execute(e){if(!e.nodeDefinition)return{ok:!1,error:Q(`DAG_VALIDATION_NODE_DEFINITION_MISSING`,`Task execution requires nodeDefinition in execution input`,{nodeId:e.nodeId})};let t=this.nodeManifestRegistry.getManifest(e.nodeDefinition.nodeType);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_NODE_MANIFEST_NOT_FOUND`,`Node manifest is not registered for nodeType`,{nodeType:e.nodeDefinition.nodeType})};let n=await this.runner.runNode({input:e.input,context:{executionRoot:e.executionRoot,regexReplaceOperation:e.regexReplaceOperation,snapshotBudget:e.snapshotBudget,rootCreditBudget:e.rootCreditBudget,reserveCredits:e.reserveCredits,...e.byteLimits===void 0?{}:{byteLimits:e.byteLimits},...e.signal===void 0?{}:{signal:e.signal},dagId:e.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeDefinition:e.nodeDefinition,nodeManifest:t,attempt:e.attempt,executionPath:e.executionPath,lineage:e.lineage??this.lineage??{rootRunId:e.dagRunId,depth:0,ancestorCompositeNodeTypes:[]},runCreditLimit:e.costPolicy?.runCreditLimit,currentTotalCredits:e.currentTotalCredits??0,...e.runtimeBaseUrl===void 0?{}:{runtimeBaseUrl:e.runtimeBaseUrl}}});return n.ok?{ok:!0,output:n.value.output,estimatedCredits:n.value.estimatedCredits,totalCredits:n.value.totalCredits}:n}};const s2={root:`.workflows`,workflowExt:`.json`};var hIe=class{manifestByType=new Map;constructor(e){for(let t of e)this.manifestByType.set(t.nodeType,t)}getManifest(e){return this.manifestByType.get(e)}listManifests(){return[...this.manifestByType.values()]}};function gIe(e){let t=[],n=xIe(e,``,t);return n!==void 0&&t.length===0?{ok:!0,value:n}:{ok:!1,error:t}}function c2(e,t,n){if(!Array.isArray(e)||e.length!==2)return e0(n,t,`expected a [number, number] pair`);let r=i0(e[0],t0(t,0),n),i=i0(e[1],t0(t,1),n);return r===void 0||i===void 0?void 0:[r,i]}function _Ie(e,t,n){if(!Array.isArray(e)||e.length!==6)return e0(n,t,`expected a 6-tuple [linkId, srcId, srcSlot, tgtId, tgtSlot, type]`);let r=[0,1,2,3,4].map(r=>i0(e[r],t0(t,r),n)),i=r0(e[5],t0(t,5),n);if(r.some(e=>e===void 0)||i===void 0)return;let[a,o,s,c,l]=r;return[a,o,s,c,l,i]}function vIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=r0(r.name,t0(t,`name`),n),a=r0(r.type,t0(t,`type`),n),o=r.link,s=o===null?null:i0(o,t0(t,`link`),n);return i===void 0||a===void 0||s===void 0?void 0:{name:i,type:a,link:s}}function yIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=r0(r.name,t0(t,`name`),n),a=r0(r.type,t0(t,`type`),n),o=c0(r.links,t0(t,`links`),n,i0),s=s0(r.slot_index,t0(t,`slot_index`),n,i0);if(i===void 0||a===void 0||o===void 0)return;let c={name:i,type:a,links:o};return s!==void 0&&(c.slot_index=s),c}function bIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=e=>t0(t,e),a=i0(r.id,i(`id`),n),o=r0(r.type,i(`type`),n),s=c2(r.pos,i(`pos`),n),c=s0(r.size,i(`size`),n,c2),l=s0(r.flags,i(`flags`),n,n0),u=s0(r.order,i(`order`),n,i0),d=s0(r.mode,i(`mode`),n,i0),f=s0(r.inputs,i(`inputs`),n,(e,t,n)=>c0(e,t,n,vIe)),p=s0(r.outputs,i(`outputs`),n,(e,t,n)=>c0(e,t,n,yIe)),m=s0(r.properties,i(`properties`),n,n0),h=s0(r.widgets_values,i(`widgets_values`),n,(e,t,n)=>Array.isArray(e)?e:e0(n,t,`expected an array`));if(a===void 0||o===void 0||s===void 0)return;let g={id:a,type:o,pos:s};return c!==void 0&&(g.size=c),l!==void 0&&(g.flags=l),u!==void 0&&(g.order=u),d!==void 0&&(g.mode=d),f!==void 0&&(g.inputs=f),p!==void 0&&(g.outputs=p),m!==void 0&&(g.properties=m),h!==void 0&&(g.widgets_values=h),g}function xIe(e,t,n){let r=n0(e,t,n);if(r===void 0)return;let i=e=>t0(t,e);if(`dagId`in r)return e0(n,i(`dagId`),`a workflow file carries no dagId — that is a definition file`);let a=i0(r.last_node_id,i(`last_node_id`),n),o=i0(r.last_link_id,i(`last_link_id`),n),s=c0(r.nodes,i(`nodes`),n,bIe),c=c0(r.links,i(`links`),n,_Ie),l=i0(r.version,i(`version`),n),u=s0(r.groups,i(`groups`),n,(e,t,n)=>Array.isArray(e)?e:e0(n,t,`expected an array`)),d=s0(r.config,i(`config`),n,n0),f=s0(r.extra,i(`extra`),n,n0);if(a===void 0||o===void 0||s===void 0||c===void 0||l===void 0)return;let p={last_node_id:a,last_link_id:o,nodes:s,links:c,version:l};return u!==void 0&&(p.groups=u),d!==void 0&&(p.config=d),f!==void 0&&(p.extra=f),p}function SIe(e){return`parallel`in e}function l2(e,t){return e.id??`${e.nodeType}-${t}`}function u2(e,t){return e.find(e=>e.nodeType===t)}function d2(e,t){let n=t.map(e=>e.nodeType),r={action:`replace_node_type`,suggestion:n[0],options:n};return Q(`UNKNOWN_NODE_TYPE`,`Node type "${e}" is not registered`,{requestedType:e},r)}function CIe(e,t){let n=[],r=[],i=[],a=[],o=0;for(let s of e.pipeline)if(SIe(s)){let e=[];for(let c of s.parallel){let l=l2(c,o);o+=1;let u=u2(t,c.nodeType);if(!u)return{ok:!1,error:d2(c.nodeType,t),warnings:n};let d=a.map(e=>e.nodeId);r.push({nodeId:l,nodeType:c.nodeType,dependsOn:d,config:c.config??{}});for(let e of a){let t=c.toPort??u.defaultInputPort;if(!t){n.push({message:`Node "${l}" (${c.nodeType}) has no defaultInputPort; edge from "${e.nodeId}" requires explicit toPort`});continue}i.push({from:e.nodeId,to:l,bindings:[{outputKey:e.portKey,inputKey:t}]})}let f=s.fromPort??c.fromPort??u.defaultOutputPort;f?e.push({nodeId:l,portKey:f}):n.push({message:`Node "${l}" (${c.nodeType}) has no defaultOutputPort; downstream connections require explicit fromPort`})}a=e}else{let e=l2(s,o);o+=1;let c=u2(t,s.nodeType);if(!c)return{ok:!1,error:d2(s.nodeType,t),warnings:n};let l=a.map(e=>e.nodeId);r.push({nodeId:e,nodeType:s.nodeType,dependsOn:l,config:s.config??{}});for(let t of a){let r=s.toPort??c.defaultInputPort;if(!r){n.push({message:`Node "${e}" (${s.nodeType}) has no defaultInputPort; edge from "${t.nodeId}" requires explicit toPort`});continue}i.push({from:t.nodeId,to:e,bindings:[{outputKey:t.portKey,inputKey:r}]})}let u=s.fromPort??c.defaultOutputPort;a=u?[{nodeId:e,portKey:u}]:[]}return r.length===0?{ok:!1,error:Q(`EMPTY_PIPELINE`,`pipeline must contain at least one node`,void 0,{action:`add_node`,suggestion:`Add at least one node spec to the pipeline array`}),warnings:n}:{ok:!0,definition:{dagId:e.dagId??`dag-build-result`,version:1,status:`draft`,nodes:r,edges:i},warnings:n,nodeCount:r.length,edgeCount:i.length}}function wIe(e){return(e.startsWith(`ConversationAgent`)?e.slice(17):e).replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`).replace(/^-/,``)}function TIe(e,t){let n=new Map;for(let t of e.links)n.set(t[0],t);let r=t?.nodes??{},i=e.nodes.map(e=>{let t=r[String(e.id)],n={nodeId:t?.nodeId??`node-${e.id}`,nodeType:wIe(e.type),dependsOn:[],config:e.properties?.agent_config??{},position:e.pos[0]!==0||e.pos[1]!==0?{x:e.pos[0],y:e.pos[1]}:void 0};return t?.retryPolicy&&(n.retryPolicy=t.retryPolicy),t?.timeoutMs!==void 0&&(n.timeoutMs=t.timeoutMs),t?.costPolicy&&(n.costPolicy=t.costPolicy),n}),a=new Map;e.nodes.forEach((e,t)=>{a.set(e.id,i[t])});let o=new Map,s=[],c=new Map;for(let t of e.links){let[,n,,r]=t,i=a.get(n),l=a.get(r);if(!i||!l)continue;let u=e.nodes.find(e=>e.id===n),d=e.nodes.find(e=>e.id===r),f=t[2],p=t[4],m=u?.outputs?.[f]?.name??`out${f}`,h=d?.inputs?.[p]?.name??`in${p}`,g=JSON.stringify([i.nodeId,l.nodeId]),_=o.get(g);_||(_=[],o.set(g,_),s.push({from:i.nodeId,to:l.nodeId,bindings:_})),_.push({outputKey:m,inputKey:h}),c.has(l.nodeId)||c.set(l.nodeId,new Set),c.get(l.nodeId).add(i.nodeId)}for(let e of i){let t=c.get(e.nodeId);t&&(e.dependsOn=[...t])}return{dagId:t?.dagId??`unknown`,version:t?.version??1,status:t?.status??`draft`,nodes:i,edges:s,...t?.costPolicy?{costPolicy:t.costPolicy}:{},...t?.inputSchema?{inputSchema:t.inputSchema}:{},...t?.outputSchema?{outputSchema:t.outputSchema}:{}}}const EIe={absentStatus:`draft`,absentEdgesAsEmpty:!0};function DIe(e){if(typeof e!=`object`||!e||Array.isArray(e))return`unrecognised`;let t=e;return`dagId`in t?`definition`:`links`in t||`last_node_id`in t?`workflow-file`:`unrecognised`}function OIe(e,t){let n=DIe(e);if(n===`unrecognised`)return{ok:!1,error:{format:n,issues:[{path:``,message:`expected either a workflow file (nodes + links + version) or a definition (dagId + nodes)`}]}};if(n===`workflow-file`){let r=gIe(e);return r.ok?kIe(TIe(r.value,t),n):{ok:!1,error:{format:n,issues:r.error}}}let r=f0(e,EIe);return r.ok?r:{ok:!1,error:{format:n,issues:r.error}}}function kIe(e,t){let n=f0(e);return n.ok?n:{ok:!1,error:{format:t,issues:n.error}}}function AIe(e){return e.format===`unrecognised`?`Not a DAG file: ${d0(e.issues)}.`:`Malformed ${e.format===`workflow-file`?`workflow file`:`DAG definition`}: ${d0(e.issues)}`}var jIe=class extends Error{failure;constructor(e){super(AIe(e)),this.name=`DagFileDecodeError`,this.failure=e}};function f2(e,t){let n=OIe(e,t);if(n.ok)return n.value;throw new jIe(n.error)}function MIe(e,t,n,r){for(let[i,a]of e.entries())if(a.taskRunId===t){e.set(i,{...a,leaseOwner:n,leaseUntil:r});return}}function NIe(e,t){return[...e.values()].filter(e=>e.status===`running`&&(e.leaseUntil===void 0||e.leaseUntil<=t))}function p2(e,t){return`${e}:${t}`}var PIe=class{definitions=new Map;latestPublishedVersionByDagId=new Map;dagRuns=new Map;taskRuns=new Map;async commitExecution(e,t){let n=[...this.taskRuns.values()].filter(t=>t.dagRunId===e),r=jPe(this.dagRuns.get(e),n,t);return r.dagRun&&this.dagRuns.set(e,r.dagRun),r.taskRun&&this.taskRuns.set(p2(e,r.taskRun.taskRunId),r.taskRun),r.result}async saveDefinition(e){let t=`${e.dagId}:${e.version}`;if(this.definitions.set(t,e),e.status===`published`){let t=this.latestPublishedVersionByDagId.get(e.dagId)??0;e.version>t&&this.latestPublishedVersionByDagId.set(e.dagId,e.version)}}async getDefinition(e,t){let n=`${e}:${t}`;return this.definitions.get(n)}async listDefinitions(){return[...this.definitions.values()].sort((e,t)=>e.dagId.localeCompare(t.dagId)||e.version-t.version)}async listDefinitionsByDagId(e){return[...this.definitions.values()].filter(t=>t.dagId===e).sort((e,t)=>e.version-t.version)}async getLatestPublishedDefinition(e){let t=this.latestPublishedVersionByDagId.get(e);if(t)return this.definitions.get(`${e}:${t}`)}async deleteDefinition(e,t){this.definitions.delete(`${e}:${t}`);let n=[...this.definitions.values()].filter(t=>t.dagId===e&&t.status===`published`).sort((e,t)=>e.version-t.version);if(n.length===0){this.latestPublishedVersionByDagId.delete(e);return}this.latestPublishedVersionByDagId.set(e,n[n.length-1].version)}async createDagRun(e){this.dagRuns.set(e.dagRunId,e)}async getDagRun(e){return this.dagRuns.get(e)}async listDagRuns(){return[...this.dagRuns.values()].sort((e,t)=>e.dagRunId.localeCompare(t.dagRunId))}async getDagRunByRunKey(e){for(let t of this.dagRuns.values())if(t.runKey===e)return t}async updateDagRunStatus(e,t,n){let r=this.dagRuns.get(e);if(!r)return;let i={...r,status:t,endedAt:n};this.dagRuns.set(e,i)}async deleteDagRun(e){this.dagRuns.delete(e)}async createTaskRun(e){let t=p2(e.dagRunId,e.taskRunId);this.taskRuns.set(t,e)}async getTaskRun(e){for(let t of this.taskRuns.values())if(t.taskRunId===e)return t}async listTaskRunsByDagRunId(e){let t=[];for(let n of this.taskRuns.values())n.dagRunId===e&&t.push(n);return t}async deleteTaskRunsByDagRunId(e){for(let[t,n]of this.taskRuns.entries())n.dagRunId===e&&this.taskRuns.delete(t)}async updateTaskRunStatus(e,t,n){for(let[r,i]of this.taskRuns.entries()){if(i.taskRunId!==e)continue;let a={...i,status:t,...[`failed`,`cancelled`,`queued`].includes(t)?{reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0}:{},errorCode:n?.code,errorMessage:n?.message};this.taskRuns.set(r,a);return}}async setTaskRunLease(e,t,n){MIe(this.taskRuns,e,t,n)}async listStaleRunningTaskRuns(e){return NIe(this.taskRuns,e)}async saveTaskRunSnapshots(e,t,n,r,i){for(let[a,o]of this.taskRuns.entries()){if(o.taskRunId!==e)continue;let s={...o,inputSnapshot:typeof t==`string`?t:o.inputSnapshot,outputSnapshot:typeof n==`string`?n:o.outputSnapshot,estimatedCredits:typeof r==`number`?r:o.estimatedCredits,totalCredits:typeof i==`number`?i:o.totalCredits};this.taskRuns.set(a,s);return}}async incrementTaskAttempt(e){for(let[t,n]of this.taskRuns.entries()){if(n.taskRunId!==e)continue;let r={...n,attempt:n.attempt+1,reservedCredits:void 0,reservationAttempt:void 0,reservationOwner:void 0};this.taskRuns.set(t,r);return}}},m2=class{pendingQueue=[];inFlight=new Map;waiters=[];async enqueue(e){this.pendingQueue.push(e),this.notifyNextWaiter()}async dequeue(e,t,n=0){let r=this.tryDequeue(e,t);return r||n<=0?r:(await this.waitForMessage(n),this.tryDequeue(e,t))}async ack(e){this.inFlight.delete(e)}async nack(e){let t=this.inFlight.get(e);t&&(this.inFlight.delete(e),this.pendingQueue.unshift(t.message),this.notifyNextWaiter())}tryDequeue(e,t){this.requeueExpiredMessages();let n=this.pendingQueue.shift();if(!n)return;let r=Date.now();return this.inFlight.set(n.messageId,{message:n,ownerId:e,visibleAtEpochMs:r+t}),n}requeueExpiredMessages(){let e=Date.now();for(let[t,n]of this.inFlight.entries())n.visibleAtEpochMs>e||(this.inFlight.delete(t),this.pendingQueue.push(n.message))}async waitForMessage(e){return new Promise(t=>{let n={resolve:()=>{clearTimeout(n.timeout),this.removeWaiter(n),t()},timeout:setTimeout(()=>{n.resolve()},e)};this.waiters.push(n)})}notifyNextWaiter(){this.waiters.shift()?.resolve()}removeWaiter(e){let t=this.waiters.indexOf(e);t>=0&&this.waiters.splice(t,1)}},FIe=class{records=new Map;async acquire(e,t,n){let r=new Date().toISOString(),i=Date.now(),a=this.records.get(e);if(a&&Date.parse(a.leaseUntil)>i)return;let o={leaseKey:e,ownerId:t,acquiredAt:r,leaseUntil:new Date(i+n).toISOString()};return this.records.set(e,o),o}async release(e,t){let n=this.records.get(e);!n||n.ownerId!==t||this.records.delete(e)}async get(e){return this.records.get(e)}},IIe=class{nowIso(){return new Date().toISOString()}nowEpochMs(){return Date.now()}},LIe=class{listeners=new Set;logger;constructor(e){this.logger=e}publish(e){let t=[];for(let n of[...this.listeners])try{n(e)}catch(n){t.push(n),this.logger&&this.logger.error(`RunProgressEventBus listener threw an error`,{eventType:e.eventType,error:n instanceof Error?n.message:String(n)})}if(t.length>0&&!this.logger)throw t[0]instanceof Error?t[0]:Error(String(t[0]))}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}};function RIe(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)?{ok:!1,error:Q(`DAG_VALIDATION_PAYLOAD_INVALID`,`Payload must be a JSON object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:Q(`DAG_VALIDATION_PAYLOAD_PARSE_FAILED`,`Failed to parse payload JSON`)}}}function zIe(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse definition snapshot JSON`)}}return p0(t,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`Definition snapshot must be a valid DAG definition object`)}async function BIe(e,t,n,r,i){let{dagRunId:a,definition:o,input:s}=e,c=o.nodes.filter(e=>e.dependsOn.length===0);if(c.length===0)return{ok:!1,error:Q(`DAG_VALIDATION_NO_ENTRY_NODE`,`DAG must include at least one entry node (dependsOn = [])`,{dagId:o.dagId,version:o.version})};let l=Q1.transition(`created`,`QUEUE`);if(!l.ok)return l;if(!(await t.commitExecution(a,{kind:`transition-run`,expectedStatus:`created`,event:`QUEUE`})).applied)return{ok:!0,value:{taskRunIds:[]}};let u=Q1.transition(`queued`,`START`);if(!u.ok)return u;if(!(await t.commitExecution(a,{kind:`transition-run`,expectedStatus:`queued`,event:`START`})).applied)return{ok:!0,value:{taskRunIds:[]}};i?.publish({dagRunId:a,eventType:r2.STARTED,occurredAt:r.nowIso(),dagId:o.dagId,version:o.version});let d=[],f=[];for(let e of c){let n=`${a}:${e.nodeId}:attempt:1`;(await t.commitExecution(a,{kind:`admit`,dependsOn:[],taskRun:{taskRunId:n,dagRunId:a,nodeId:e.nodeId,status:`queued`,attempt:1}})).applied&&(d.push(n),f.push({messageId:`${n}:message`,dagRunId:a,taskRunId:n,nodeId:e.nodeId,attempt:1,executionPath:[`dagId:${o.dagId}`,`dagRunId:${a}`,`nodeId:${e.nodeId}`,`taskRunId:${n}`,`attempt:1`],payload:s,createdAt:r.nowIso()}))}for(let e of f)try{await n.enqueue(e)}catch(n){return VIe(a,e.taskRunId,e.nodeId,d,n,t,r,i)}return{ok:!0,value:{taskRunIds:d}}}async function VIe(e,t,n,r,i,a,o,s){let c=V1(`DAG_DISPATCH_ENQUEUE_FAILED`,`Failed to enqueue entry task`,{dagRunId:e,taskRunId:t,nodeId:n,errorMessage:i instanceof Error&&i.message.trim().length>0?i.message:`Unknown error`});Q1.transition(`running`,`COMPLETE_FAILURE`).ok&&(await a.commitExecution(e,{kind:`transition-run`,expectedStatus:`running`,event:`COMPLETE_FAILURE`,endedAt:o.nowIso()})).applied&&s?.publish({dagRunId:e,eventType:r2.FAILED,occurredAt:o.nowIso(),error:c});for(let t of r)await a.commitExecution(e,{kind:`cancel-task`,taskRunId:t,error:c});return{ok:!1,error:c}}function HIe(e,t){return e===void 0||t===void 0?e===t:e.rootRunId===t.rootRunId&&e.parentRunId===t.parentRunId&&e.depth===t.depth&&e.maxDepth===t.maxDepth&&e.ancestorCompositeNodeTypes.length===t.ancestorCompositeNodeTypes.length&&e.ancestorCompositeNodeTypes.every((e,n)=>e===t.ancestorCompositeNodeTypes[n])}var UIe=class{storage;queue;clock;runProgressEventReporter;snapshotBudget;timeSemanticsService;constructor(e,t,n,r,i){this.storage=e,this.queue=t,this.clock=n,this.runProgressEventReporter=r,this.snapshotBudget=i,this.timeSemanticsService=new dIe(n)}async createRun(e){let t=e.version?await this.storage.getDefinition(e.dagId,e.version):await this.storage.getLatestPublishedDefinition(e.dagId);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_NOT_FOUND`,`Published DAG definition was not found`,{dagId:e.dagId,hasVersion:!!e.version})};if(t.status!==`published`)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_NOT_PUBLISHED`,`Only published definitions can be executed`,{dagId:t.dagId,version:t.version,status:t.status})};let n=this.timeSemanticsService.resolve(e.trigger,e.logicalDate);if(!n.ok)return n;let r;try{r=n2(e.lineage)}catch{return{ok:!1,error:Q(`DAG_VALIDATION_RUN_LINEAGE_INVALID`,`Composite child run lineage is invalid`,{dagId:t.dagId})}}let i=e.rerunKey?`${t.dagId}:${n.value.logicalDate}:rerun:${e.rerunKey}`:`${t.dagId}:${n.value.logicalDate}`,a=await this.storage.getDagRunByRunKey(i);if(a){let e;try{e=n2(a.lineage)}catch{return{ok:!1,error:Q(`DAG_VALIDATION_RUN_LINEAGE_INVALID`,`Existing run for this run key has invalid persisted lineage`,{dagId:t.dagId,runKey:i})}}return HIe(e,r)?{ok:!0,value:{dagRunId:a.dagRunId,dagId:a.dagId,version:a.version,logicalDate:a.logicalDate,status:a.status}}:{ok:!1,error:Q(`DAG_VALIDATION_RUN_KEY_LINEAGE_MISMATCH`,`An existing run for this run key has different composite lineage`,{dagId:t.dagId,runKey:i,existingDagRunId:a.dagRunId})}}let o=this.generateDagRunId(t.dagId,n.value.logicalDate,e.rerunKey);try{let a=(a,s)=>this.storage.createDagRun({dagRunId:o,dagId:t.dagId,version:t.version,status:`created`,definitionSnapshot:a,inputSnapshot:s,runKey:i,logicalDate:n.value.logicalDate,trigger:e.trigger,...r===void 0?{}:{lineage:r},startedAt:this.clock.nowIso()});if(this.snapshotBudget){let n=await this.snapshotBudget.admitRun(t,e.input,a);if(!n.ok)return n}else await a(JSON.stringify(t),JSON.stringify(e.input))}catch(e){return this.snapshotBudget?{ok:!1,error:H1(`DAG_RUN_SNAPSHOT_PERSISTENCE_UNCERTAIN`,`Run snapshot persistence outcome is uncertain; root snapshot admission is closed`,!1)}:{ok:!1,error:V1(`DAG_DISPATCH_DAG_RUN_CREATE_FAILED`,`Failed to create DagRun`,{dagId:t.dagId,version:t.version,runKey:i,errorMessage:this.resolveErrorMessage(e instanceof Error?e:void 0)})}}return{ok:!0,value:{dagRunId:o,dagId:t.dagId,version:t.version,logicalDate:n.value.logicalDate,status:`created`}}}async startCreatedRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};if(t.status!==`created`){let n=await this.storage.listTaskRunsByDagRunId(e);return{ok:!0,value:{dagRunId:e,dagId:t.dagId,version:t.version,logicalDate:t.logicalDate,taskRunIds:n.map(e=>e.taskRunId)}}}if(typeof t.definitionSnapshot!=`string`||t.definitionSnapshot.trim().length===0)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:e})};let n=zIe(t.definitionSnapshot);if(!n.ok)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot is invalid`,{dagRunId:e})};let r=RIe(t.inputSnapshot??`{}`);if(!r.ok)return{ok:!1,error:Q(`DAG_VALIDATION_RUN_INPUT_SNAPSHOT_INVALID`,`DagRun input snapshot is invalid`,{dagRunId:e})};let i=await BIe({dagRunId:e,definition:n.value,input:r.value},this.storage,this.queue,this.clock,this.runProgressEventReporter);return i.ok?{ok:!0,value:{dagRunId:e,dagId:t.dagId,version:t.version,logicalDate:t.logicalDate,taskRunIds:i.value.taskRunIds}}:i}async startRun(e){let t=await this.createRun(e);if(!t.ok)return t;if(t.value.status===`created`)return this.startCreatedRun(t.value.dagRunId);let n=await this.storage.listTaskRunsByDagRunId(t.value.dagRunId);return{ok:!0,value:{dagRunId:t.value.dagRunId,dagId:t.value.dagId,version:t.value.version,logicalDate:t.value.logicalDate,taskRunIds:n.map(e=>e.taskRunId)}}}generateDagRunId(e,t,n){let r=Date.parse(t);return n?`${e}:run:${r}:rerun:${n}`:`${e}:run:${r}`}resolveErrorMessage(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}},WIe=class{storage;constructor(e){this.storage=e}async getRun(e){let t=await this.storage.getDagRun(e);return t?{ok:!0,value:{dagRun:t,taskRuns:await this.storage.listTaskRunsByDagRunId(e)}}:{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})}}},GIe=class{storage;clock;notifier;constructor(e,t,n){this.storage=e,this.clock=t,this.notifier=n}async cancelRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};let n=Q1.transition(t.status,`CANCEL`);if(!n.ok)return n;let r=await this.storage.commitExecution(e,{kind:`transition-run`,expectedStatus:t.status,event:`CANCEL`,endedAt:this.clock.nowIso()});if(!r.applied){if(r.runStatus===`cancelled`)return this.notify(e),{ok:!0,value:{dagRunId:e,status:`cancelled`}};if(r.runStatus!==void 0){let t=Q1.transition(r.runStatus,`CANCEL`);return t.ok?this.cancelRun(e):t}return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})}}return this.notify(e),{ok:!0,value:{dagRunId:e,status:`cancelled`}}}notify(e){try{this.notifier?.notifyRunCancelled(e)}catch{}}};async function h2(e,t,n,r){let i=await t.commitExecution(e,{kind:`finalize`,endedAt:n.nowIso()});if(i.error)return{ok:!1,error:i.error};if(i.runStatus===void 0)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found while finalizing run status`,{dagRunId:e})};if(!i.applied)return{ok:!0,value:void 0};let a=i.runStatus===`failed`,o=await t.listTaskRunsByDagRunId(e);return a?KIe(e,o,n,r):r?.publish({dagRunId:e,eventType:r2.COMPLETED,occurredAt:n.nowIso()}),{ok:!0,value:void 0}}function KIe(e,t,n,r){let i=t.find(e=>e.status===`failed`),a=typeof i?.errorCode==`string`&&typeof i.errorMessage==`string`?H1(i.errorCode,i.errorMessage,!1,{dagRunId:e,taskRunId:i.taskRunId,nodeId:i.nodeId}):H1(`DAG_TASK_EXECUTION_FAILED`,`Run completed with failure.`,!1,{dagRunId:e});r?.publish({dagRunId:e,eventType:r2.FAILED,occurredAt:n.nowIso(),error:a})}async function g2(e,t,n,r,i){await e.updateTaskRunStatus(n.taskRunId,r,i),await e.setTaskRunLease(n.taskRunId,void 0,void 0),await h2(n.dagRunId,e,t)}async function qIe(e,t){let n=$1.transition(t.status,`CANCEL`);return n.ok?(await e.updateTaskRunStatus(t.taskRunId,n.value.nextStatus,{code:`DAG_TASK_EXECUTION_ORPHANED`,category:`task_execution`,message:`Task's DAG run ${t.dagRunId} no longer exists; the task cannot be run or finalized`,retryable:!1,context:{taskRunId:t.taskRunId,dagRunId:t.dagRunId}}),await e.setTaskRunLease(t.taskRunId,void 0,void 0),{ok:!0,value:void 0}):n}async function JIe(e,t,n,r,i){let a=await e.listStaleRunningTaskRuns(n.nowIso()),o={requeued:[],abandoned:[],skipped:[],failed:[],orphaned:[]};for(let s of a){let a=`taskRun:${s.taskRunId}`;if(!await r.acquire(a,i.workerId,i.leaseDurationMs)){o.skipped.push(s.taskRunId);continue}try{let r=await e.getTaskRun(s.taskRunId);if(r===void 0||r.status!==`running`||$Ie(r,n.nowIso())){o.skipped.push(s.taskRunId);continue}await YIe(e,t,n,r,i.maxAttempts,o)}catch(e){o.failed.push({taskRunId:s.taskRunId,error:e})}finally{await r.release(a,i.workerId)}}return o}async function YIe(e,t,n,r,i,a){{let o=$1.transition(r.status,`RECLAIM`);if(!o.ok){a.skipped.push(r.taskRunId);return}let s=await e.getDagRun(r.dagRunId);if(s===void 0){if(!(await qIe(e,r)).ok){a.skipped.push(r.taskRunId);return}a.orphaned.push(r.taskRunId);return}if(XIe.has(s.status)){let t=$1.transition(r.status,`CANCEL`);if(!t.ok){a.skipped.push(r.taskRunId);return}await g2(e,n,r,t.value.nextStatus),a.abandoned.push(r.taskRunId);return}if(r.attempt>=i){let t=$1.transition(r.status,`COMPLETE_FAILURE`);if(!t.ok){a.skipped.push(r.taskRunId);return}await g2(e,n,r,t.value.nextStatus,{code:`DAG_TASK_EXECUTION_ABANDONED`,category:`task_execution`,message:`Task was abandoned by its worker ${r.attempt} time(s) and has no attempts left`,retryable:!1,context:{taskRunId:r.taskRunId,attempt:r.attempt,maxAttempts:i}}),a.abandoned.push(r.taskRunId);return}let c=r.attempt+1;await e.incrementTaskAttempt(r.taskRunId),await t.enqueue(ZIe(r,c,n.nowIso())),await e.updateTaskRunStatus(r.taskRunId,o.value.nextStatus),await e.setTaskRunLease(r.taskRunId,void 0,void 0),a.requeued.push(r.taskRunId)}}const XIe=new Set([`success`,`failed`,`cancelled`]);function ZIe(e,t,n){return{payload:QIe(e.inputSnapshot),messageId:`${e.taskRunId}:reclaim:${t}`,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeId:e.nodeId,attempt:t,executionPath:[`dagRunId:${e.dagRunId}`,`nodeId:${e.nodeId}`,`taskRunId:${e.taskRunId}`,`attempt:${t}`,`reclaimed:true`],createdAt:n}}function QIe(e){if(e===void 0)return{};try{let t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return{}}}function $Ie(e,t){return e.leaseUntil!==void 0&&e.leaseUntil>t}var eLe=class{clock;lease;options;lastSweepAtMs=0;sweeping=!1;constructor(e,t,n){this.clock=e,this.lease=t,this.options=n}async sweepIfDue(e,t){let n=this.clock.nowEpochMs();if(!(this.sweeping||n-this.lastSweepAtMs<this.options.leaseDurationMs)){this.sweeping=!0;try{let n=(await JIe(e,t,this.clock,this.lease,this.options)).failed[0];if(n===void 0)return;throw n.error}catch(e){return{code:`DAG_TASK_SWEEP_FAILED`,category:`task_execution`,message:`Stale-task sweep failed: ${e instanceof Error?e.message:String(e)}`,retryable:!0,context:{workerId:this.options.workerId}}}finally{this.lastSweepAtMs=this.clock.nowEpochMs(),this.sweeping=!1}}}};function tLe(e,t){let n=e.map(e=>e.startsWith(`attempt:`)?`attempt:${t}`:e);return n.some(e=>e.startsWith(`attempt:`))||n.push(`attempt:${t}`),n}function _2(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function v2(e,t,n,r,i,a,o,s){if(r.deadLetterEnabled){let t=await rLe(e,n,r,o);if(!t.ok)return y2(a,e.messageId,t.error)}let c=await h2(e.dagRunId,i,o,s);return c.ok?b2(a,e.messageId,t,!1):y2(a,e.messageId,c.error)}async function nLe(e,t,n,r){let i=e.attempt+1,a={...e,messageId:`${e.taskRunId}:message:${i}`,attempt:i,executionPath:tLe(e.executionPath,i),createdAt:r.nowIso()};try{await n.enqueue(a)}catch(r){return y2(n,e.messageId,V1(`DAG_DISPATCH_ENQUEUE_RETRY_FAILED`,`Failed to enqueue retry message`,{taskRunId:t,attempt:i,errorMessage:_2(r)}))}return b2(n,e.messageId,t,!0)}async function rLe(e,t,n,r){if(!n.deadLetterQueue)return{ok:!1,error:Q(`DAG_VALIDATION_DEAD_LETTER_QUEUE_NOT_CONFIGURED`,`deadLetterEnabled requires deadLetterQueue to be configured`,{taskRunId:e.taskRunId})};let i={...e,messageId:`${e.taskRunId}:dlq:${r.nowEpochMs()}`,payload:{...e.payload,dlqReasonCode:t.code,dlqReasonMessage:t.message,dlqSourceMessageId:e.messageId},createdAt:r.nowIso()};try{return await n.deadLetterQueue.enqueue(i),{ok:!0,value:void 0}}catch(t){return{ok:!1,error:V1(`DAG_DISPATCH_DEAD_LETTER_ENQUEUE_FAILED`,`Failed to enqueue dead letter message`,{taskRunId:e.taskRunId,originalMessageId:e.messageId,errorMessage:_2(t)})}}}async function y2(e,t,n){return await e.ack(t),{ok:!1,error:n}}async function b2(e,t,n,r){return await e.ack(t),{ok:!0,value:{processed:!0,taskRunId:n,retried:r}}}function iLe(e){if(e.status!==`running`)return{ok:!0,value:e.status};let t=$1.transition(e.status,`RECLAIM`);return t.ok?{ok:!0,value:t.value.nextStatus}:t}function x2(e,t){return Math.max(e,t)+3e4}function aLe(e,t,n){return new Date(e.nowEpochMs()+x2(t,n)).toISOString()}async function oLe(e){let{storage:t,clock:n,message:r,taskRun:i}=e,a=i.status===`running`,o=iLe(i);if(!o.ok)return o;if(a){if(i.attempt>=e.options.maxAttempts)return{ok:!1,error:{code:`DAG_TASK_EXECUTION_ABANDONED`,category:`task_execution`,message:`Task was abandoned by its worker ${i.attempt} time(s) and has no attempts left`,retryable:!1,context:{taskRunId:i.taskRunId,attempt:i.attempt,maxAttempts:e.options.maxAttempts}}};await t.incrementTaskAttempt(i.taskRunId)}let s=a?i.attempt+1:i.attempt,c=$1.transition(o.value,`START`);return c.ok?(await t.setTaskRunLease(i.taskRunId,e.options.workerId,aLe(n,e.timeoutMs,e.options.leaseDurationMs)),await t.updateTaskRunStatus(i.taskRunId,c.value.nextStatus),e.reporter?.publish({dagRunId:r.dagRunId,eventType:i2.STARTED,occurredAt:n.nowIso(),taskRunId:i.taskRunId,nodeId:r.nodeId,input:r.payload}),{ok:!0,value:s}):c}async function sLe(e,t,n,r,i,a){let o=`taskRun:${t}`;if(!await e.acquire(o,n,r))return a();try{return await i()}finally{await e.release(o,n)}}async function cLe(e,t){let{message:n,taskRun:r,storage:i,queue:a,clock:o}=t;if(e.code!==`DAG_TASK_EXECUTION_ABANDONED`)return y2(a,n.messageId,e);let s=$1.transition(r.status,`COMPLETE_FAILURE`);return s.ok?(await i.updateTaskRunStatus(r.taskRunId,s.value.nextStatus,e),await i.setTaskRunLease(r.taskRunId,void 0,void 0),v2(n,r.taskRunId,e,t.options,i,a,o,t.reporter)):y2(a,n.messageId,s.error)}function lLe(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function uLe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function dLe(e,t,n){let r=e.nodes.find(e=>e.nodeId===n);if(!r)return{ok:!1,error:Q(`DAG_VALIDATION_DOWNSTREAM_NODE_NOT_FOUND`,`Downstream node was not found while building payload`,{downstreamNodeId:n})};let i=e.edges.filter(e=>e.to===n);if(i.length===0)return{ok:!0,value:{}};let a={};for(let e of i){let n=fLe(a,e,r,t);if(!n.ok)return n}return _Le(a,r.inputs??[]),{ok:!0,value:a}}function fLe(e,t,n,r){if(!t.bindings||t.bindings.length===0)return{ok:!1,error:Q(`DAG_VALIDATION_BINDING_REQUIRED`,`Incoming edge must define at least one binding`,{from:t.from,to:t.to})};let i=pLe(t.from,t.to,r);if(!i.ok)return i;let a=i.value;for(let r of t.bindings){let i=mLe(e,r,a,t,n);if(!i.ok)return i}return{ok:!0,value:void 0}}function pLe(e,t,n){let r=n.find(t=>t.nodeId===e&&t.status===`success`);if(!r||!r.outputSnapshot)return{ok:!1,error:Q(`DAG_VALIDATION_UPSTREAM_OUTPUT_MISSING`,`Upstream output snapshot is missing for binding dispatch`,{from:e,to:t})};try{let n=JSON.parse(r.outputSnapshot);return uLe(n)?{ok:!0,value:n}:{ok:!1,error:Q(`DAG_VALIDATION_UPSTREAM_OUTPUT_INVALID`,`Upstream output snapshot has invalid payload shape`,{from:e,to:t})}}catch(n){return{ok:!1,error:Q(`DAG_VALIDATION_UPSTREAM_OUTPUT_PARSE_FAILED`,`Failed to parse upstream output snapshot`,{from:e,to:t,errorMessage:lLe(n)})}}}function mLe(e,t,n,r,i){let a=n[t.outputKey];if(a===void 0)return{ok:!1,error:Q(`DAG_VALIDATION_BINDING_OUTPUT_KEY_MISSING`,`Binding outputKey was not found in upstream output`,{from:r.from,outputKey:t.outputKey})};if((i.inputs??[]).find(e=>e.key===t.inputKey)?.isList)return hLe(e,t.inputKey,a,r.to);let o=b0(t.inputKey);return o?gLe(e,o,a,t.inputKey,r.to,i):e[t.inputKey]===void 0?(e[t.inputKey]=a,{ok:!0,value:void 0}):{ok:!1,error:Q(`DAG_VALIDATION_BINDING_INPUT_KEY_CONFLICT`,`Multiple bindings target the same input key`,{to:r.to,inputKey:t.inputKey})}}function hLe(e,t,n,r){Array.isArray(e[t])||(e[t]=[]);let i=e[t];return Array.isArray(i)?(i.push(n),{ok:!0,value:void 0}):{ok:!1,error:Q(`DAG_VALIDATION_BINDING_LIST_PAYLOAD_INVALID`,`List payload container is invalid`,{to:r,inputKey:t})}}function gLe(e,t,n,r,i,a){if(!(a.inputs??[]).find(e=>e.key===t.portKey)?.isList)return{ok:!1,error:Q(`DAG_VALIDATION_BINDING_INPUT_KEY_MISSING`,`Binding inputKey does not resolve to a valid list input port`,{to:i,inputKey:r})};let o=e[t.portKey],s=Array.isArray(o)?o:[];return s[t.index]=n,e[t.portKey]=s,{ok:!0,value:void 0}}function _Le(e,t){for(let n of t){if(!n.isList)continue;let t=e[n.key];Array.isArray(t)&&(e[n.key]=t.filter(e=>e!==void 0))}}function vLe(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function yLe(e,t,n,r,i,a,o){let s=t.nodes.filter(e=>e.dependsOn.includes(n));if(s.length===0)return{ok:!0,value:void 0};let c=await i.listTaskRunsByDagRunId(e.dagRunId);for(let n of s){let r=await bLe(e,t,n,c,i,a,o);if(!r.ok)return r}return{ok:!0,value:void 0}}async function bLe(e,t,n,r,i,a,o){if(r.some(e=>e.nodeId===n.nodeId)||!n.dependsOn.every(e=>r.some(t=>t.nodeId===e&&t.status===`success`)))return{ok:!0,value:void 0};let s=`${e.dagRunId}:${n.nodeId}:attempt:1`;if(!(await i.commitExecution(e.dagRunId,{kind:`admit`,dependsOn:n.dependsOn,taskRun:{taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1}})).applied)return{ok:!0,value:void 0};let c=dLe(t,r,n.nodeId);if(!c.ok)return c;let l={messageId:`${s}:message:1`,dagRunId:e.dagRunId,taskRunId:s,nodeId:n.nodeId,attempt:1,executionPath:[`dagId:${e.dagId}`,`dagRunId:${e.dagRunId}`,`nodeId:${n.nodeId}`,`taskRunId:${s}`,`attempt:1`],payload:c.value,createdAt:o.nowIso()};try{await a.enqueue(l)}catch(t){let r=$1.transition(`queued`,`CANCEL`);return r.ok&&await i.updateTaskRunStatus(s,r.value.nextStatus),{ok:!1,error:V1(`DAG_DISPATCH_ENQUEUE_DOWNSTREAM_FAILED`,`Failed to enqueue downstream task`,{dagRunId:e.dagRunId,nodeId:n.nodeId,errorMessage:vLe(t)})}}return r.push({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1}),{ok:!0,value:void 0}}var xLe=class{storage;queue;clock;options;runProgressEventReporter;snapshotBudget;constructor(e,t,n,r,i,a){this.storage=e,this.queue=t,this.clock=n,this.options=r,this.runProgressEventReporter=i,this.snapshotBudget=a}async handleSuccessPath(e,t,n,r,i,a,o){let s=n=>this.storage.commitExecution(e.dagRunId,{kind:`settle`,taskRunId:t,attempt:e.attempt,leaseOwner:this.options.workerId,status:`success`,outputSnapshot:n,estimatedCredits:a,totalCredits:o}),c=this.snapshotBudget?await this.snapshotBudget.admitValue(`output`,i,s):{ok:!0,value:await s(JSON.stringify(i))};if(!c.ok)return this.handleFailurePath(e,t,c.error);if(!c.value.applied){let[n,r]=await Promise.all([this.storage.getDagRun(e.dagRunId),this.storage.getTaskRun(t)]);return n?.status===`running`&&r?.status===`running`&&r.attempt===e.attempt&&r.leaseOwner===this.options.workerId?this.handleFailurePath(e,t,Q(`DAG_VALIDATION_EXECUTION_SETTLEMENT_REJECTED`,`Current task attempt could not settle its successful output`,{taskRunId:t})):b2(this.queue,e.messageId,t,!1)}this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:i2.COMPLETED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,output:i});let l=await yLe(n,r,e.nodeId,i,this.storage,this.queue,this.clock);if(!l.ok)return y2(this.queue,e.messageId,l.error);let u=await h2(e.dagRunId,this.storage,this.clock,this.runProgressEventReporter);return u.ok?b2(this.queue,e.messageId,t,!1):y2(this.queue,e.messageId,u.error)}async handleFailurePath(e,t,n){let r=this.options.retryEnabled&&n.retryable&&e.attempt<this.options.maxAttempts;return(await this.storage.commitExecution(e.dagRunId,{kind:`settle`,taskRunId:t,attempt:e.attempt,leaseOwner:this.options.workerId,status:`failed`,reserveRetry:r,error:n})).applied?(this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:i2.FAILED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,error:n}),r?nLe(e,t,this.queue,this.clock):v2(e,t,n,this.options,this.storage,this.queue,this.clock,this.runProgressEventReporter)):b2(this.queue,e.messageId,t,!1)}};function SLe(e,t){return H1(`DAG_TASK_EXECUTION_TIMEOUT`,`Task execution timed out after ${t}ms`,!0,{taskRunId:e,timeoutMs:t})}function S2(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function C2(e,t,n,r){return new Promise(i=>{let a=new AbortController,o=!1,s,c=e=>{o||(o=!0,clearTimeout(s),t.signal?.removeEventListener(`abort`,u),i(e))},l=n=>{if(!o){if(o=!0,clearTimeout(s),t.signal?.removeEventListener(`abort`,u),a.abort(n),!e.stopAndWait){i({ok:!1,error:n});return}Promise.resolve().then(()=>e.stopAndWait?.(t)).then(()=>i({ok:!1,error:n}),e=>i({ok:!1,error:{...n,retryable:!1,context:{...n.context,isolationStopError:S2(e)}}}))}},u=()=>l(U1(r));if(t.signal?.aborted){u();return}t.signal?.addEventListener(`abort`,u,{once:!0}),s=setTimeout(()=>l(SLe(r,n)),n);let d=e=>c({ok:!1,error:H1(`DAG_TASK_EXECUTION_EXCEPTION`,`Task executor threw an exception`,!0,{taskRunId:r,errorMessage:S2(e)})});try{e.execute({...t,signal:a.signal}).then(c,d)}catch(e){d(e)}})}function CLe(e){let t=0;for(let n of e)typeof n.totalCredits==`number`&&n.totalCredits>t&&(t=n.totalCredits);return t}function wLe(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function TLe(e,t){if(typeof e.definitionSnapshot!=`string`||e.definitionSnapshot.trim().length===0)return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:t})};let n;try{n=JSON.parse(e.definitionSnapshot)}catch(e){return{ok:!1,error:Q(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse DagRun definition snapshot`,{dagRunId:t,errorMessage:wLe(e)})}}return p0(n,`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:t})}async function w2(e,t){let n=await e.getDagRun(t.dagRunId);if(!n)return{ok:!1,error:Q(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found for dequeued message`,{dagRunId:t.dagRunId})};let r=TLe(n,t.dagRunId);if(!r.ok)return r;let i=r.value,a=i.nodes.find(e=>e.nodeId===t.nodeId);return a?{ok:!0,value:{dagRun:n,definition:i,nodeDefinition:a}}:{ok:!1,error:Q(`DAG_VALIDATION_NODE_NOT_FOUND`,`Node definition not found for task execution`,{nodeId:t.nodeId,dagId:n.dagId,version:n.version})}}var ELe=class{storage;queue;lease;executor;clock;options;runProgressEventReporter;snapshotBudget;rootCreditBudget;lifecycleCreditAdmission;executionRoot;byteLimits;cancellationPollMs;activeAttempts=new Set;notifyRunCancelled(e){for(let t of this.activeAttempts)t.dagRunId===e&&t.controller.abort()}constructor(e,t,n,r,i,a,o,s,c,l,u,d=!1){if(this.storage=e,this.queue=t,this.lease=n,this.executor=r,this.clock=i,this.options=o,this.runProgressEventReporter=s,this.snapshotBudget=l,this.rootCreditBudget=u,this.lifecycleCreditAdmission=d,this.executionRoot=tn(a),this.byteLimits=Y1(c),this.cancellationPollMs=o.cancellationPollMs??250,!Number.isSafeInteger(this.cancellationPollMs)||this.cancellationPollMs<1||this.cancellationPollMs>6e4)throw RangeError(`cancellationPollMs must be an integer between 1 and 60000`)}sweeper;outcomesInstance;get outcomes(){return this.outcomesInstance??=new xLe(this.storage,this.queue,this.clock,this.options,this.runProgressEventReporter,this.snapshotBudget),this.outcomesInstance}async processOnce(){let e=await this.queue.dequeue(this.options.workerId,this.options.visibilityTimeoutMs,this.options.idleWaitMs);if(!e){this.sweeper??=new eLe(this.clock,this.lease,this.options);let e=await this.sweeper.sweepIfDue(this.storage,this.queue);return e?{ok:!1,error:e}:{ok:!0,value:{processed:!1}}}let t=await this.resolveTimeoutMs(e);return sLe(this.lease,e.taskRunId,this.options.workerId,x2(t,this.options.leaseDurationMs),async()=>this.processAcquiredMessage(e,t),async()=>(await this.queue.nack(e.messageId),{ok:!0,value:{processed:!1}}))}async processAcquiredMessage(e,t){let n=await this.storage.getTaskRun(e.taskRunId);if(!n){let t=Q(`DAG_VALIDATION_TASK_RUN_NOT_FOUND`,`TaskRun not found for dequeued message`,{taskRunId:e.taskRunId});return y2(this.queue,e.messageId,t)}let r=await this.cancelIfRunCancelled(e);if(r)return r;let i=this.claimDepsFor(e,n,t),a=await oLe(i);if(!a.ok)return cLe(a.error,i);let o={...e,attempt:a.value},s=await w2(this.storage,o);if(!s.ok)return y2(this.queue,e.messageId,s.error);let{dagRun:c,definition:l,nodeDefinition:u}=s.value;if(c.status===`cancelled`)return this.settleCancelledRunMessage(e);let d;try{d=n2(c.lineage)}catch{return this.outcomes.handleFailurePath(o,o.taskRunId,Q(`DAG_VALIDATION_RUN_LINEAGE_INVALID`,`Persisted composite child run lineage is invalid`,{dagRunId:o.dagRunId}))}if(d){let t=await this.cancelIfAncestorCancelled(e,c,d);if(t)return t}let f=e=>this.storage.commitExecution(o.dagRunId,{kind:`snapshot-input`,taskRunId:o.taskRunId,attempt:o.attempt,leaseOwner:this.options.workerId,inputSnapshot:e}),p=this.snapshotBudget?await this.snapshotBudget.admitValue(`input`,o.payload,f):{ok:!0,value:await f(JSON.stringify(o.payload))};if(!p.ok)return this.outcomes.handleFailurePath(o,o.taskRunId,p.error);if(!p.value.applied)return b2(this.queue,e.messageId,o.taskRunId,!1);let m=await this.buildExecutionInput(o,c,l,u,d),h=new AbortController,g={dagRunId:o.dagRunId,taskRunId:o.taskRunId,attempt:o.attempt,controller:h};this.activeAttempts.add(g);let _,v,y=Date.now()+i.timeoutMs,b;try{let t=await this.cancelIfRunCancelled(e);if(t)return t;if(b=this.watchCommittedCancellation(g),l.costPolicy&&!this.lifecycleCreditAdmission&&!(this.executor instanceof o2)){let t=this.executor.estimateCost;if(!t)return this.outcomes.handleFailurePath(o,n.taskRunId,Q(`DAG_VALIDATION_CREDIT_ESTIMATE_REQUIRED`,`Cost-limited runs require a custom executor to estimate credits before execution`,{taskRunId:o.taskRunId}));let r=await C2({execute:async e=>{let n=await t.call(this.executor,e);return n.ok?{ok:!0,output:{},estimatedCredits:n.value}:n},...this.executor.stopAndWait?{stopAndWait:this.executor.stopAndWait.bind(this.executor)}:{}},{...m,signal:h.signal},Math.max(1,y-Date.now()),e.taskRunId);if(!r.ok)return this.outcomes.handleFailurePath(o,n.taskRunId,r.error);if(r.estimatedCredits===void 0||!Number.isFinite(r.estimatedCredits)||r.estimatedCredits<0)return this.outcomes.handleFailurePath(o,n.taskRunId,Q(`DAG_VALIDATION_CREDIT_ESTIMATE_INVALID`,`Custom executor credit estimate must be a finite nonnegative number`,{taskRunId:o.taskRunId}));let i=await m.reserveCredits(r.estimatedCredits);if(!i.ok)return this.outcomes.handleFailurePath(o,n.taskRunId,i.error);v=r.estimatedCredits}let r=y-Date.now();if(r<=0)return this.outcomes.handleFailurePath(o,n.taskRunId,H1(`DAG_TASK_EXECUTION_TIMEOUT`,`Task execution timed out after ${i.timeoutMs}ms`,!0,{taskRunId:e.taskRunId,timeoutMs:i.timeoutMs}));_=await C2(this.executor,{...m,signal:h.signal},r,e.taskRunId)}finally{b?.(),this.activeAttempts.delete(g)}return _.ok?v!==void 0&&_.estimatedCredits!==void 0&&_.estimatedCredits!==v?this.outcomes.handleFailurePath(o,n.taskRunId,Q(`DAG_VALIDATION_CREDIT_ESTIMATE_MISMATCH`,`Custom executor reported credits different from its preflight estimate`,{taskRunId:o.taskRunId})):this.outcomes.handleSuccessPath(o,n.taskRunId,c,l,_.output,v??_.estimatedCredits,_.totalCredits):this.outcomes.handleFailurePath(o,n.taskRunId,_.error)}watchCommittedCancellation(e){let t=!1,n,r=async()=>{if(!t){try{let n=await this.storage.getDagRun(e.dagRunId);!t&&n?.status!==`running`&&e.controller.abort()}catch{t||e.controller.abort()}!t&&!e.controller.signal.aborted&&(n=setTimeout(()=>{r()},this.cancellationPollMs))}};return n=setTimeout(()=>{r()},this.cancellationPollMs),()=>{t=!0,clearTimeout(n)}}async cancelIfRunCancelled(e){return(await this.storage.getDagRun(e.dagRunId))?.status===`cancelled`?this.settleCancelledRunMessage(e):void 0}async cancelIfAncestorCancelled(e,t,n){if(n.parentRunId===void 0)return;let r=new Set([n.rootRunId,n.parentRunId]);for(let n of r)if((await this.storage.getDagRun(n))?.status===`cancelled`)return await this.cancelOwnRunForAncestor(t),this.settleCancelledRunMessage(e)}async cancelOwnRunForAncestor(e){if(!Q1.transition(e.status,`CANCEL`).ok)return;let t=await this.storage.commitExecution(e.dagRunId,{kind:`transition-run`,expectedStatus:e.status,event:`CANCEL`,endedAt:this.clock.nowIso()});if(t.applied||t.runStatus===`cancelled`){this.notifyRunCancelled(e.dagRunId);return}if(t.runStatus!==void 0){let t=await this.storage.getDagRun(e.dagRunId);t&&await this.cancelOwnRunForAncestor(t)}}async settleCancelledRunMessage(e){let t=await this.storage.getTaskRun(e.taskRunId);if(t){let e=$1.transition(t.status,`CANCEL`);e.ok&&await this.storage.updateTaskRunStatus(t.taskRunId,e.value.nextStatus),await this.storage.setTaskRunLease(t.taskRunId,void 0,void 0)}return b2(this.queue,e.messageId,e.taskRunId,!1)}async buildExecutionInput(e,t,n,r,i){let a=CLe(await this.storage.listTaskRunsByDagRunId(e.dagRunId));return{executionRoot:this.executionRoot,...i===void 0?{}:{lineage:i},byteLimits:this.byteLimits,snapshotBudget:this.snapshotBudget,rootCreditBudget:this.rootCreditBudget,reserveCredits:n.costPolicy?async t=>{let n=await this.storage.commitExecution(e.dagRunId,{kind:`reserve-credits`,taskRunId:e.taskRunId,attempt:e.attempt,leaseOwner:this.options.workerId,estimatedCredits:t});return n.applied?{ok:!0,value:void 0}:{ok:!1,error:n.error??Q(`DAG_VALIDATION_CREDIT_RESERVATION_REJECTED`,`Task attempt lost credit reservation authority`,{taskRunId:e.taskRunId})}}:void 0,dagId:t.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeId:e.nodeId,attempt:e.attempt,executionPath:e.executionPath,input:e.payload,nodeDefinition:r,costPolicy:n.costPolicy,currentTotalCredits:a}}claimDepsFor(e,t,n){return{storage:this.storage,queue:this.queue,clock:this.clock,reporter:this.runProgressEventReporter,options:this.options,timeoutMs:n,message:e,taskRun:t}}async resolveTimeoutMs(e){let t=await w2(this.storage,e);if(!t.ok)return this.options.defaultTimeoutMs;let n=t.value.nodeDefinition.timeoutMs;return typeof n==`number`&&n>0?n:this.options.defaultTimeoutMs}},DLe=class extends Error{constructor(){super(`Run advancement has stopped and cannot be restarted.`),this.name=`RunAdvancementStoppedError`}};function OLe(e){return e===`success`||e===`failed`||e===`cancelled`}function T2(e,t,n){return V1(e,t,{dagRunId:n})}var kLe=class{workerStep;runReader;logger;lifecycle=`created`;continuousDemand=!1;waiters=new Map;actorPromise=null;stopPromise=null;wakeSleep=null;constructor(e,t,n={error:()=>void 0}){this.workerStep=e,this.runReader=t,this.logger=n}async start(){if(this.lifecycle===`stopping`||this.lifecycle===`stopped`)throw new DLe;this.lifecycle=`running`,this.continuousDemand=!0,this.wake(),this.ensureActor()}waitForTerminal(e,t={}){if(this.lifecycle===`stopping`||this.lifecycle===`stopped`)return Promise.resolve({ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_STOPPED`,`Run advancement stopped before the observed run became terminal.`,e)});if(t.signal?.aborted)return Promise.resolve({ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_ABORTED`,`Run terminal-state observation was aborted.`,e)});if(t.deadlineEpochMs!==void 0&&t.deadlineEpochMs<=Date.now())return Promise.resolve({ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_DEADLINE`,`Run terminal-state observation exceeded its deadline.`,e)});let n=new Promise(n=>{let r={id:Symbol(e),dagRunId:e,resolve:n,signal:t.signal,settled:!1};t.signal!==void 0&&(r.abortListener=()=>{this.settle(r,{ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_ABORTED`,`Run terminal-state observation was aborted.`,e)})},t.signal.addEventListener(`abort`,r.abortListener,{once:!0})),t.deadlineEpochMs!==void 0&&(r.deadlineTimer=setTimeout(()=>{this.settle(r,{ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_WAIT_DEADLINE`,`Run terminal-state observation exceeded its deadline.`,e)})},Math.max(0,t.deadlineEpochMs-Date.now())),r.deadlineTimer.unref?.()),this.waiters.set(r.id,r)});return this.wake(),this.ensureActor(),n}stop(){if(this.stopPromise!==null)return this.stopPromise;this.lifecycle=`stopping`,this.continuousDemand=!1;for(let e of[...this.waiters.values()])this.settle(e,{ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_STOPPED`,`Run advancement stopped before the observed run became terminal.`,e.dagRunId)});return this.wake(),this.stopPromise=(async()=>{await this.actorPromise,this.lifecycle=`stopped`})(),this.stopPromise}hasDemand(){return(this.lifecycle===`created`||this.lifecycle===`running`)&&(this.continuousDemand||this.waiters.size>0)}ensureActor(){if(!this.hasDemand()||this.actorPromise!==null)return;let e=this.runActor().catch(e=>{this.logger.error(`Run advancement actor failed unexpectedly.`,e)}).finally(()=>{this.actorPromise===e&&(this.actorPromise=null),this.hasDemand()&&this.ensureActor()});this.actorPromise=e}async runActor(){let e=25;for(;this.hasDemand();){if(await this.queryAndSettleWaiters(),!this.hasDemand())return;let t;try{t=await this.workerStep.processOnce()}catch(e){this.logger.error(`Worker step threw during run advancement.`,e),await this.sleepUntilWake(500);continue}if(!this.hasDemand())return;if(!t.ok){this.logger.error(`Worker step failed during run advancement.`,t.error),await this.sleepUntilWake(500);continue}if(t.value.processed){e=25;continue}await this.sleepUntilWake(e),e=Math.min(e*2,500)}}async queryAndSettleWaiters(){let e=new Set([...this.waiters.values()].map(e=>e.dagRunId));for(let t of e){let e;try{e=await this.runReader.getRun(t)}catch(n){e={ok:!1,error:T2(`DAG_RUNTIME_ADVANCEMENT_QUERY_THROW`,n instanceof Error?n.message:String(n),t)}}let n=[...this.waiters.values()].filter(e=>e.dagRunId===t);if(!e.ok||OLe(e.value.dagRun.status))for(let t of n)this.settle(t,e)}}settle(e,t){e.settled||(e.settled=!0,this.waiters.delete(e.id),e.deadlineTimer!==void 0&&clearTimeout(e.deadlineTimer),e.signal!==void 0&&e.abortListener!==void 0&&e.signal.removeEventListener(`abort`,e.abortListener),e.resolve(t),this.wake())}wake(){this.wakeSleep?.()}async sleepUntilWake(e){this.hasDemand()&&await new Promise(t=>{let n=!1,r=()=>{n||(n=!0,clearTimeout(i),this.wakeSleep===r&&(this.wakeSleep=null),t())},i=setTimeout(r,e);i.unref?.(),this.wakeSleep=r,this.hasDemand()||r()})}};function ALe(e,t){let n={...t,retryEnabled:t.retryEnabled??!1,deadLetterEnabled:t.deadLetterEnabled??!1,deadLetterQueue:e.deadLetterQueue};return new ELe(e.storage,e.queue,e.lease,e.executor,e.clock,e.executionRoot,n,e.runProgressEventReporter,e.byteLimits,e.snapshotBudget,e.rootCreditBudget,e.lifecycleCreditAdmission)}function jLe(e,t){let n=new LIe,r=new UIe(e.storage,e.queue,e.clock,n,e.snapshotBudget),i=new WIe(e.storage),a=ALe({executionRoot:e.executionRoot,byteLimits:e.byteLimits,snapshotBudget:e.snapshotBudget,rootCreditBudget:e.rootCreditBudget,lifecycleCreditAdmission:e.lifecycleCreditAdmission,storage:e.storage,queue:e.queue,deadLetterQueue:e.deadLetterQueue,lease:e.lease,executor:e.executor,clock:e.clock,runProgressEventReporter:n},{...t.worker,retryEnabled:t.worker.retryEnabled??!1});return{runOrchestrator:r,runQuery:i,runCancel:new GIe(e.storage,e.clock,{notifyRunCancelled(t){e.snapshotBudget?.close(),e.rootCreditBudget?.close(),a.notifyRunCancelled(t)}}),runAdvancement:new kLe(a,i,t.logger),runProgressEventBus:n}}function E2(e,t){let{text:n,search:r,replacement:i,flags:a}=e,o;try{o=new RegExp(r,a)}catch{return{type:`invalid-regex`}}let s=Symbol(`regex output exceeds byte limit`),c=new Uint16Array(t),l=0,u=0,d=!1,f=0,p=(e,n,r)=>{for(let i=n;i<r;i++){let n=e.charCodeAt(i);if(u+=n<128?1:n<2048?2:n>=56320&&n<=57343&&d?1:3,d=n>=55296&&n<=56319,u>t)throw s;c[l++]=n}},m=(e,t,r,a)=>{for(let o=0;o<i.length;){let s=i.indexOf(`$`,o);if(s<0){p(i,o,i.length);return}p(i,o,s);let c=i[s+1];if(c===`$`)p(i,s,s+1),o=s+2;else if(c===`&`)p(e,0,e.length),o=s+2;else if(c==="`")p(n,0,r),o=s+2;else if(c===`'`)p(n,r+e.length,n.length),o=s+2;else if(c!==void 0&&c>=`0`&&c<=`9`){let e=i[s+2],n=e!==void 0&&e>=`0`&&e<=`9`?2:1,r=Number(i.slice(s+1,s+1+n));if(n===2&&r>t.length&&(n=1,r=Number(c)),r>=1&&r<=t.length){let e=t[r-1];e!==void 0&&p(e,0,e.length)}else p(i,s,s+1+n);o=s+1+n}else if(c===`<`){let e=i.indexOf(`>`,s+2);if(e>=0&&a!==void 0){let t=a[i.slice(s+2,e)];t!==void 0&&p(t,0,t.length),o=e+1}else p(i,s,s+2),o=s+2}else p(i,s,s+1),o=s+1}};try{let e=a.includes(`u`)||a.includes(`v`);for(let t=o.exec(n);t!==null;t=o.exec(n)){let r=t[0],i=t.index;if(p(n,f,i),m(r,t.slice(1),i,t.groups),f=i+r.length,!o.global)break;if(r.length===0){let t=o.lastIndex,r=n.charCodeAt(t),i=n.charCodeAt(t+1);o.lastIndex+=e&&r>=55296&&r<=56319&&i>=56320&&i<=57343?2:1}}p(n,f,n.length)}catch(e){return e===s?{type:`oversized`}:{type:`invalid-regex`}}let h=[];for(let e=0;e<l;e+=8192)h.push(String.fromCharCode(...c.subarray(e,Math.min(e+8192,l))));return{type:`result`,value:h.join(``)}}const D2=25166848,MLe=`
2760
2760
  const boundedRegexReplace = ${E2.toString()};
2761
2761
  const send = (message) => process.stdout.write(JSON.stringify(message) + '\\n');
2762
2762
  let input = '';
@@ -1,2 +1,2 @@
1
- import{M as e,N as t,j as n,t as r}from"./product-host-BPPyJk9w.js";import{join as i}from"node:path";const a=[`PATH`,`HOME`,`USERPROFILE`,`SystemRoot`,`TEMP`,`TMP`,`LANG`,`LC_ALL`,`XDG_RUNTIME_DIR`,`DISPLAY`,`WAYLAND_DISPLAY`,`XAUTHORITY`,`DBUS_SESSION_BUS_ADDRESS`,`APPDATA`,`LOCALAPPDATA`,`PROGRAMDATA`],o=/^ws:\/\/127\.0\.0\.1:([0-9]{1,5})\/?\?token=([A-Za-z0-9%._~-]+)$/u;function s(e){let t=e.split(/\r?\n/u).filter(e=>e.trim()!==``);if(t.length===1)try{let e=JSON.parse(t[0]);return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}catch{return}}function c(e){let t=s(e);if(t===void 0)return;let n=t.providerEnvRefs;if(!(n!==void 0&&(!Array.isArray(n)||n.length>128||!n.every(e=>typeof e==`string`&&/^[A-Za-z_][A-Za-z0-9_]*$/u.test(e))))){if(t.state===`trusted`)return t.askable===!1?{trusted:!0,providerEnvRefs:Object.freeze([...new Set(n??[])])}:void 0;if(t.askable===!0&&typeof t.workspace==`string`&&t.workspace.trim()!==``){let e=Array.isArray(t.loads)?t.loads.filter(e=>typeof e==`string`):[];return{trusted:!1,question:{folder:t.workspace,loads:e.slice(0,64)},providerEnvRefs:[]}}return{trusted:!1,providerEnvRefs:[]}}}function l(e){let t=s(e);if(typeof t?.id!=`string`||t.id.trim()===``||typeof t.url!=`string`)return;let n=o.exec(t.url);if(!n)return;let r=Number(n[1]);return Number.isInteger(r)&&r>0&&r<=65535?{id:t.id,url:t.url,port:r}:void 0}function u(e){return`default-src 'self'; connect-src ${e===void 0?`'none'`:`ws://127.0.0.1:${e}`}; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'`}function d(o){let s=Object.freeze({...o.environment}),d=r(o.artifact).resolveRuntime({environment:s}).config,f=t(s,n(d)),p=null,m=null,h,g=!1,_=(t=[])=>{let n={};for(let e of a)f[e]!==void 0&&(n[e]=f[e]);for(let e of t)f[e]!==void 0&&(n[e]=f[e]);for(let{section:t,field:r,descriptor:i}of e()){if(i.exposure===`private`||!i.consumers.includes(`cli`))continue;let e=d[t][r];e!==void 0&&(n[i.variable]=typeof e==`string`?e:JSON.stringify(e))}return f.PRODUCT_CONFIG_FILE!==void 0&&(n.PRODUCT_CONFIG_FILE=f.PRODUCT_CONFIG_FILE),n};async function v(){let e=[],t=g?void 0:await o.execute([`trust`,`status`,`--json`],_()),n=t?.exitCode===0?c(t.stdout):void 0;if(!g&&n?.question!==void 0){let t=await o.chooseTrust(n.question);if(t!==`trust`&&t!==`restricted`&&t!==`quit`)return{ok:!1,detail:`Desktop trust answer was invalid.`};if(t===`quit`)return{ok:!1,detail:`Desktop launch cancelled.`};if(t===`restricted`&&(g=!0),t===`trust`){let t=await o.execute([`trust`,`--yes`],_());if(t.exitCode!==0)return{ok:!1,detail:t.stderr.trim()||`Workspace trust grant failed.`};let n=await o.execute([`trust`,`status`,`--json`],_()),r=n.exitCode===0?c(n.stdout):void 0;if(r?.trusted!==!0)return{ok:!1,detail:`Workspace trust could not be confirmed after grant.`};e=r.providerEnvRefs}}else e=n?.providerEnvRefs??[];let r=await o.execute([`daemon`,`start`,`--json`,...g?[`--restricted-workspace`]:[]],_(g?[]:e)),i=r.exitCode===0?l(r.stdout):void 0;return i===void 0?{ok:!1,detail:r.stderr.trim()||`Desktop daemon did not return a loopback endpoint.`}:{ok:!0,endpoint:i}}let y=()=>{if(m!==null)return m;let e=v().then(e=>(h=e.ok?e.endpoint.port:void 0,m=null,e),e=>{throw h=void 0,m=null,e});return p=m=e,e};return Object.freeze({config:d,userDataPath:i(d.storage.userRoot,`desktop`),start:y,reconnect:y,current:()=>p,port:()=>h,csp:()=>u(h)})}export{d as createDesktopCliController,u as desktopContentSecurityPolicy,l as parseDesktopDaemonStart,c as parseDesktopTrustStatus};
1
+ import{M as e,N as t,j as n,t as r}from"./product-host-C-IQQ6ph.js";import{join as i}from"node:path";const a=[`PATH`,`HOME`,`USERPROFILE`,`SystemRoot`,`TEMP`,`TMP`,`LANG`,`LC_ALL`,`XDG_RUNTIME_DIR`,`DISPLAY`,`WAYLAND_DISPLAY`,`XAUTHORITY`,`DBUS_SESSION_BUS_ADDRESS`,`APPDATA`,`LOCALAPPDATA`,`PROGRAMDATA`],o=/^ws:\/\/127\.0\.0\.1:([0-9]{1,5})\/?\?token=([A-Za-z0-9%._~-]+)$/u;function s(e){let t=e.split(/\r?\n/u).filter(e=>e.trim()!==``);if(t.length===1)try{let e=JSON.parse(t[0]);return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}catch{return}}function c(e){let t=s(e);if(t===void 0)return;let n=t.providerEnvRefs;if(!(n!==void 0&&(!Array.isArray(n)||n.length>128||!n.every(e=>typeof e==`string`&&/^[A-Za-z_][A-Za-z0-9_]*$/u.test(e))))){if(t.state===`trusted`)return t.askable===!1?{trusted:!0,providerEnvRefs:Object.freeze([...new Set(n??[])])}:void 0;if(t.askable===!0&&typeof t.workspace==`string`&&t.workspace.trim()!==``){let e=Array.isArray(t.loads)?t.loads.filter(e=>typeof e==`string`):[];return{trusted:!1,question:{folder:t.workspace,loads:e.slice(0,64)},providerEnvRefs:[]}}return{trusted:!1,providerEnvRefs:[]}}}function l(e){let t=s(e);if(typeof t?.id!=`string`||t.id.trim()===``||typeof t.url!=`string`)return;let n=o.exec(t.url);if(!n)return;let r=Number(n[1]);return Number.isInteger(r)&&r>0&&r<=65535?{id:t.id,url:t.url,port:r}:void 0}function u(e){return`default-src 'self'; connect-src ${e===void 0?`'none'`:`ws://127.0.0.1:${e}`}; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'`}function d(o){let s=Object.freeze({...o.environment}),d=r(o.artifact).resolveRuntime({environment:s}).config,f=t(s,n(d)),p=null,m=null,h,g=!1,_=(t=[])=>{let n={};for(let e of a)f[e]!==void 0&&(n[e]=f[e]);for(let e of t)f[e]!==void 0&&(n[e]=f[e]);for(let{section:t,field:r,descriptor:i}of e()){if(i.exposure===`private`||!i.consumers.includes(`cli`))continue;let e=d[t][r];e!==void 0&&(n[i.variable]=typeof e==`string`?e:JSON.stringify(e))}return f.PRODUCT_CONFIG_FILE!==void 0&&(n.PRODUCT_CONFIG_FILE=f.PRODUCT_CONFIG_FILE),n};async function v(){let e=[],t=g?void 0:await o.execute([`trust`,`status`,`--json`],_()),n=t?.exitCode===0?c(t.stdout):void 0;if(!g&&n?.question!==void 0){let t=await o.chooseTrust(n.question);if(t!==`trust`&&t!==`restricted`&&t!==`quit`)return{ok:!1,detail:`Desktop trust answer was invalid.`};if(t===`quit`)return{ok:!1,detail:`Desktop launch cancelled.`};if(t===`restricted`&&(g=!0),t===`trust`){let t=await o.execute([`trust`,`--yes`],_());if(t.exitCode!==0)return{ok:!1,detail:t.stderr.trim()||`Workspace trust grant failed.`};let n=await o.execute([`trust`,`status`,`--json`],_()),r=n.exitCode===0?c(n.stdout):void 0;if(r?.trusted!==!0)return{ok:!1,detail:`Workspace trust could not be confirmed after grant.`};e=r.providerEnvRefs}}else e=n?.providerEnvRefs??[];let r=await o.execute([`daemon`,`start`,`--json`,...g?[`--restricted-workspace`]:[]],_(g?[]:e)),i=r.exitCode===0?l(r.stdout):void 0;return i===void 0?{ok:!1,detail:r.stderr.trim()||`Desktop daemon did not return a loopback endpoint.`}:{ok:!0,endpoint:i}}let y=()=>{if(m!==null)return m;let e=v().then(e=>(h=e.ok?e.endpoint.port:void 0,m=null,e),e=>{throw h=void 0,m=null,e});return p=m=e,e};return Object.freeze({config:d,userDataPath:i(d.storage.userRoot,`desktop`),start:y,reconnect:y,current:()=>p,port:()=>h,csp:()=>u(h)})}export{d as createDesktopCliController,u as desktopContentSecurityPolicy,l as parseDesktopDaemonStart,c as parseDesktopTrustStatus};
2
2
  //# sourceMappingURL=desktop-host.js.map
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
  ;(function(){var v=parseInt(process.versions.node.split('.')[0],10);if(v<22){process.stderr.write('\n✗ Node.js 22+ is required (current: '+process.version+')\n\nUpgrade:\n nvm: nvm install 22 && nvm use 22\n Volta: volta install node@22\n Download: https://nodejs.org/en/download\n\n');process.exit(1);}})();
3
- import{H as e,_ as t,b as n,d as r,f as i,m as a,p as o,t as s,u as c,v as l,y as u}from"./cli-core-Bz_5Fzj0.js";if(u(r(process.argv)))try{let e=a({});t(e),l(e.config.identity.cliName),o(e.environment),n(c(e))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}else try{let n=a({});t(n),l(n.config.identity.cliName);let r=i();!r.serve||r.printMode||r.goal!==void 0||r.positional.length>0||r.reset||r.configure||r.configureProvider!==void 0||r.checkUpdate||r.help||r.version?(process.stderr.write(`This headless runtime accepts only --serve.
3
+ import{H as e,_ as t,b as n,d as r,f as i,m as a,p as o,t as s,u as c,v as l,y as u}from"./cli-core-Cus9ebuT.js";if(u(r(process.argv)))try{let e=a({});t(e),l(e.config.identity.cliName),o(e.environment),n(c(e))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}else try{let n=a({});t(n),l(n.config.identity.cliName);let r=i();!r.serve||r.printMode||r.goal!==void 0||r.positional.length>0||r.reset||r.configure||r.configureProvider!==void 0||r.checkUpdate||r.help||r.version?(process.stderr.write(`This headless runtime accepts only --serve.
4
4
  `),process.exitCode=2):s({productRuntime:n},e).catch(e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1})}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=2}export{};
package/dist/node/host.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./product-host-BPPyJk9w.js";export{e as createProductCliHost};
1
+ import{t as e}from"./product-host-C-IQQ6ph.js";export{e as createProductCliHost};