@robota-sdk/agent-cli 3.0.0-beta.78 → 3.0.0-beta.79

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.
@@ -387,15 +387,17 @@ npm run build
387
387
  ⚠ macOS Terminal.app detected: CJK/IME input may be unstable.
388
388
  Recommended: use iTerm2 (https://iterm2.com) for Korean/Japanese/Chinese input.
389
389
  Or use headless mode: robota -p "your prompt"
390
- `)}function Az(e){let t=e.lastIndexOf(`[`);if(t<=0||!e.endsWith(`]`))return;let n=e.slice(0,t),r=e.slice(t+1,e.length-1);if(/^\d+$/.test(r))return{portKey:n,index:Number.parseInt(r,10)}}const J={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,CANCELLED:`cancelled`},Y={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,UPSTREAM_FAILED:`upstream_failed`,SKIPPED:`skipped`,CANCELLED:`cancelled`},jz={STARTED:`execution.started`,COMPLETED:`execution.completed`,FAILED:`execution.failed`},Mz={STARTED:`task.started`,COMPLETED:`task.completed`,FAILED:`task.failed`},Nz={[`${J.CREATED}:QUEUE`]:J.QUEUED,[`${J.CREATED}:CANCEL`]:J.CANCELLED,[`${J.QUEUED}:START`]:J.RUNNING,[`${J.QUEUED}:CANCEL`]:J.CANCELLED,[`${J.RUNNING}:COMPLETE_SUCCESS`]:J.SUCCESS,[`${J.RUNNING}:COMPLETE_FAILURE`]:J.FAILED,[`${J.RUNNING}:CANCEL`]:J.CANCELLED};function Pz(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`DagRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function Fz(e){return`run.${e}`}var Iz=class{static transition(e,t){let n=Nz[`${e}:${t}`];return n?{ok:!0,value:{nextStatus:n,domainEvents:[Fz(n)]}}:{ok:!1,error:Pz(e,t)}}};const Lz={[`${Y.CREATED}:QUEUE`]:Y.QUEUED,[`${Y.CREATED}:CANCEL`]:Y.CANCELLED,[`${Y.QUEUED}:START`]:Y.RUNNING,[`${Y.QUEUED}:UPSTREAM_FAIL`]:Y.UPSTREAM_FAILED,[`${Y.QUEUED}:SKIP`]:Y.SKIPPED,[`${Y.QUEUED}:CANCEL`]:Y.CANCELLED,[`${Y.RUNNING}:COMPLETE_SUCCESS`]:Y.SUCCESS,[`${Y.RUNNING}:COMPLETE_FAILURE`]:Y.FAILED,[`${Y.RUNNING}:CANCEL`]:Y.CANCELLED,[`${Y.FAILED}:RETRY`]:Y.QUEUED};function Rz(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`TaskRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function zz(e){return`task.${e}`}var Bz=class{static transition(e,t){let n=Lz[`${e}:${t}`];return n?{ok:!0,value:{nextStatus:n,domainEvents:[zz(n)]}}:{ok:!1,error:Rz(e,t)}}};function Vz(e,t,n,r,i,a,o){return{code:t,category:e,message:n,retryable:r,context:i,fix:a,agentHint:o}}function X(e,t,n,r,i){return Vz(`validation`,e,t,!1,n,r,i)}function Hz(e,t,n,r,i){return Vz(`dispatch`,e,t,!0,n,r,i)}function Uz(e,t,n,r,i,a){return Vz(`task_execution`,e,t,n,r,i,a)}function Wz(e){let t=Date.parse(e);return Number.isNaN(t)?{ok:!1,error:X(`DAG_VALIDATION_INVALID_LOGICAL_DATE`,`logicalDate must be a valid ISO-8601 datetime string`,{logicalDate:e})}:{ok:!0,value:new Date(t).toISOString()}}var Gz=class{clock;constructor(e){this.clock=e}resolve(e,t){let n=this.clock.nowIso();if(e===`scheduled`){if(!t)return{ok:!1,error:X(`DAG_VALIDATION_MISSING_LOGICAL_DATE`,`scheduled trigger requires logicalDate`,{trigger:e})};let r=Wz(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=Wz(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}},Kz=class{assertWithinBudget(e,t,n){if(t<0)return{ok:!1,error:X(`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:X(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:r,runCreditLimit:n})}:{ok:!0,value:r}}},qz=class{lifecycleFactory;costPolicyEvaluator;constructor(e,t){this.lifecycleFactory=e,this.costPolicyEvaluator=t}async runNode(e){let t=this.lifecycleFactory.create(e.context.nodeDefinition.nodeType);if(!t.ok)return t;let n=await t.value.initialize(e.context);if(!n.ok)return n;let r=await t.value.validateInput(e.input,e.context);if(!r.ok)return await t.value.dispose(e.context),r;let i=await t.value.estimateCost(e.input,e.context);if(!i.ok)return await t.value.dispose(e.context),i;let a=this.costPolicyEvaluator.assertWithinBudget(e.context.currentTotalCredits,i.value.estimatedCredits,e.context.runCreditLimit);if(!a.ok)return await t.value.dispose(e.context),a;let o=await t.value.execute(e.input,e.context);if(!o.ok)return await t.value.dispose(e.context),o;let s=await t.value.validateOutput(o.value,e.context);return s.ok?(await t.value.dispose(e.context)).ok?{ok:!0,value:{output:o.value,estimatedCredits:i.value.estimatedCredits,totalCredits:a.value}}:{ok:!1,error:Uz(`DAG_TASK_EXECUTION_DISPOSE_FAILED`,`Node dispose step failed after execution`,!1,{nodeType:e.context.nodeDefinition.nodeType,taskRunId:e.context.taskRunId})}:(await t.value.dispose(e.context),s)}},Jz=class{create(e){return{ok:!1,error:X(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},Yz=class{nodeManifestRegistry;lifecycleFactory;runner;constructor(e,t){this.nodeManifestRegistry=e,this.lifecycleFactory=t??new Jz,this.runner=new qz(this.lifecycleFactory,new Kz)}async execute(e){if(!e.nodeDefinition)return{ok:!1,error:X(`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:X(`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:{dagId:e.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeDefinition:e.nodeDefinition,nodeManifest:t,attempt:e.attempt,executionPath:e.executionPath,runCreditLimit:e.costPolicy?.runCreditLimit,currentTotalCredits:e.currentTotalCredits??0}});return n.ok?{ok:!0,output:n.value.output,estimatedCredits:n.value.estimatedCredits,totalCredits:n.value.totalCredits}:n}};function Xz(e,t){return`${e}:${t}`}var Zz=class{definitions=new Map;latestPublishedVersionByDagId=new Map;dagRuns=new Map;taskRuns=new Map;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=Xz(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,errorCode:n?.code,errorMessage:n?.message};this.taskRuns.set(r,a);return}}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};this.taskRuns.set(t,r);return}}},Qz=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)}},$z=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 renew(e,t,n){let r=this.records.get(e);if(!r||r.ownerId!==t)return;let i=Date.now(),a={leaseKey:e,ownerId:t,acquiredAt:r.acquiredAt,leaseUntil:new Date(i+n).toISOString()};return this.records.set(e,a),a}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)}},eB=class{nowIso(){return new Date().toISOString()}nowEpochMs(){return Date.now()}};function tB(e,t,n){let r=n.issues[0];return X(`DAG_VALIDATION_NODE_CONFIG_SCHEMA_INVALID`,`Node config does not satisfy schema: ${r?.path.join(`.`)??`config`} ${r?.message??`Invalid config`}`,{nodeId:t.nodeDefinition.nodeId,nodeType:e,issueCount:n.issues.length})}var Z=class{defaultInputPort;defaultOutputPort;taskHandler;constructor(){this.taskHandler={initialize:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.initializeWithConfig(e,t.value):t},validateInput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateInputWithConfig(e,t,n.value):n},estimateCost:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.estimateCostWithConfig(e,t,n.value):n},execute:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.executeWithConfig(e,t,n.value):n},validateOutput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateOutputWithConfig(e,t,n.value):n},dispose:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.disposeWithConfig(e,t.value):t}}}parseNodeConfig(e){let t=this.configSchemaDefinition.safeParse(e.nodeDefinition.config);return t.success?{ok:!0,value:t.data}:{ok:!1,error:tB(this.nodeType,e,t.error)}}async initializeWithConfig(e,t){return{ok:!0,value:void 0}}async validateInputWithConfig(e,t,n){return{ok:!0,value:void 0}}async validateOutputWithConfig(e,t,n){return{ok:!0,value:void 0}}async disposeWithConfig(e,t){return{ok:!0,value:void 0}}};const nB=`asset://`;var rB=class e{value;constructor(e){this.value=e}static fromAssetReference(t){return t.referenceType===`asset`?new e({referenceType:`asset`,assetId:t.assetId,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes}):new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}static fromBinary(t){if(typeof t.assetId==`string`&&t.assetId.trim().length>0)return{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mimeType,sizeBytes:t.sizeBytes})};if(t.uri.startsWith(nB)){let n=t.uri.slice(8).trim();return n.length===0?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`Binary asset URI must include non-empty assetId`)}:{ok:!0,value:new e({referenceType:`asset`,assetId:n,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}return{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}static fromCandidate(e,t){let n=typeof e.assetId==`string`&&(t?.allowEmptyAssetId===!0||e.assetId.trim().length>0),r=typeof e.uri==`string`&&(t?.allowEmptyUri===!0||e.uri.trim().length>0);return n===r?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_XOR_REQUIRED`,`Exactly one of assetId or uri must be provided`)}:e.referenceType===`asset`&&!n?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType asset requires assetId`)}:e.referenceType===`uri`&&!r?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType uri requires uri`)}:this.buildFromValidatedCandidate(e,n)}static buildFromValidatedCandidate(t,n){return n&&typeof t.assetId==`string`?{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:typeof t.uri==`string`?{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`uri must be a string when referenceType is uri`)}}isAsset(){return this.value.referenceType===`asset`}isUri(){return this.value.referenceType===`uri`}assetId(){return this.value.assetId}uri(){return this.value.uri}mediaType(){return this.value.mediaType}toAssetIdOrUri(){return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{referenceType:`asset`,assetId:this.value.assetId}:{referenceType:`uri`,uri:this.value.uri??``}}toAssetContentUrl(e){if(!(!this.isAsset()||typeof this.value.assetId!=`string`))return`${e.replace(/\/$/,``)}/view?filename=${encodeURIComponent(this.value.assetId)}`}toBinary(e,t){let n=typeof this.value.mediaType==`string`&&this.value.mediaType.trim().length>0?this.value.mediaType:t;return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{kind:e,mimeType:n,uri:`${nB}${this.value.assetId}`,referenceType:`asset`,assetId:this.value.assetId,sizeBytes:this.value.sizeBytes}:{kind:e,mimeType:n,uri:this.value.uri??``,referenceType:`uri`,sizeBytes:this.value.sizeBytes}}};function iB(e,t,n,r){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be binary payload object`,{nodeId:t,key:n,expectedType:`binary`})};let i=e;if(!(i.kind===`image`||i.kind===`video`||i.kind===`audio`||i.kind===`file`)||typeof i.mimeType!=`string`||typeof i.uri!=`string`)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be valid binary payload`,{nodeId:t,key:n,expectedType:`binary`})};let a=i.kind;return r&&a!==r?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input binary kind does not match expected kind`,{nodeId:t,key:n,expectedKind:r,actualKind:a})}:{ok:!0,value:{kind:a,mimeType:i.mimeType,uri:i.uri,referenceType:i.referenceType===`asset`||i.referenceType===`uri`?i.referenceType:void 0,assetId:typeof i.assetId==`string`?i.assetId:void 0,sizeBytes:typeof i.sizeBytes==`number`?i.sizeBytes:void 0}}}var Q=class{input;nodeId;output={};constructor(e,t){this.input=e,this.nodeId=t}getInput(e){return this.input[e]}requireInput(e){let t=this.getInput(e);return t===void 0?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!0,value:t}}requireInputString(e){let t=this.requireInput(e);return t.ok?typeof t.value==`string`?{ok:!0,value:t.value}:{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be string`,{nodeId:this.nodeId,key:e,expectedType:`string`})}:t}requireInputArray(e){let t=this.getInput(e);if(Array.isArray(t))return{ok:!0,value:t};let n=this.collectListHandleValues(e);return n?{ok:!0,value:n}:t===void 0?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be array`,{nodeId:this.nodeId,key:e,expectedType:`array`})}}requireInputBinary(e,t){let n=this.requireInput(e);return n.ok?iB(n.value,this.nodeId,e,t):n}requireInputBinaryList(e,t,n){let r=this.requireInputArray(e);if(!r.ok)return r;let i=r.value;if(typeof n?.minItems==`number`&&i.length<n.minItems)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`,`Node input list does not satisfy minItems`,{nodeId:this.nodeId,key:e,minItems:n.minItems,actualItems:i.length})};if(typeof n?.maxItems==`number`&&i.length>n.maxItems)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`,`Node input list exceeds maxItems`,{nodeId:this.nodeId,key:e,maxItems:n.maxItems,actualItems:i.length})};let a=[];for(let[n,r]of i.entries()){let i=iB(r,this.nodeId,`${e}[${n}]`,t);if(!i.ok)return i;a.push(i.value)}return{ok:!0,value:a}}requireInputMediaReference(e,t){let n=this.requireInput(e);return n.ok?this.parseMediaReferenceValue(n.value,e,t):n}requireInputBinaryReference(e,t){let n=this.requireInputBinary(e,t);if(!n.ok)return n;let r=rB.fromBinary(n.value);return r.ok?r:{ok:!1,error:X(r.error.code,r.error.message,{nodeId:this.nodeId,key:e,...r.error.context??{}})}}setOutput(e,t){this.output[e]=t}toOutput(){return{...this.output}}collectListHandleValues(e){let t=new Map;for(let[n,r]of Object.entries(this.input)){let i=Az(n);!i||i.portKey!==e||t.set(i.index,r)}if(t.size===0)return;let n=[...t.keys()].sort((e,t)=>e-t),r=n[n.length-1]+1;if(n.length!==r)return;let i=[];for(let e=0;e<r;e+=1){let n=t.get(e);if(n===void 0)return;i.push(n)}return i}parseMediaReferenceValue(e,t,n){if(typeof e==`string`){if(n?.allowStringAssetUri===!0&&e.startsWith(`asset://`))return this.wrapMediaReferenceError(rB.fromCandidate({referenceType:`asset`,assetId:e.slice(8)}),t);if(n?.allowStringUri===!0)return this.wrapMediaReferenceError(rB.fromCandidate({referenceType:`uri`,uri:e}),t)}return typeof e!=`object`||!e||Array.isArray(e)?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be media reference object`,{nodeId:this.nodeId,key:t,expectedType:`media-reference`})}:this.wrapMediaReferenceError(rB.fromCandidate(e),t)}wrapMediaReferenceError(e,t){return e.ok?e:{ok:!1,error:X(e.error.code,e.error.message,{nodeId:this.nodeId,key:t,...e.error.context??{}})}}};function aB(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.kind==`string`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}function oB(e,t){if(e.isList)return Array.isArray(t)?t.every(t=>oB({...e,isList:!1},t)):!1;switch(e.type){case`string`:return typeof t==`string`;case`number`:return typeof t==`number`;case`boolean`:return typeof t==`boolean`;case`object`:return typeof t==`object`&&!!t&&!Array.isArray(t)&&!aB(t);case`array`:return Array.isArray(t);case`binary`:return!(!aB(t)||e.binaryKind&&t.kind!==e.binaryKind||e.mimeTypes&&e.mimeTypes.length>0&&!e.mimeTypes.includes(t.mimeType));default:return!1}}function sB(e,t,n,r){for(let i of t){let t=e[i.key];if(t===void 0){if(i.required)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_REQUIRED_INPUT_MISSING`:`DAG_VALIDATION_NODE_REQUIRED_OUTPUT_MISSING`,n===`input`?`Required input port "${i.key}" (${i.type}) is missing on node "${r}"`:`Required output port "${i.key}" (${i.type}) was not set by node "${r}"`,{nodeId:r,key:i.key,type:i.type},n===`input`?{action:`connect_port`,suggestion:`Connect a "${i.type}" output to the "${i.key}" input of node "${r}"`}:void 0)};continue}if(i.isList){if(!Array.isArray(t))return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`List input port must receive array payload`:`List output port must emit array payload`,{nodeId:r,key:i.key,type:i.type})};if(typeof i.minItems==`number`&&t.length<i.minItems)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`:`DAG_VALIDATION_NODE_OUTPUT_MIN_ITEMS_NOT_SATISFIED`,n===`input`?`List input port does not satisfy minItems`:`List output port does not satisfy minItems`,{nodeId:r,key:i.key,minItems:i.minItems,actualItems:t.length})};if(typeof i.maxItems==`number`&&t.length>i.maxItems)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`:`DAG_VALIDATION_NODE_OUTPUT_MAX_ITEMS_EXCEEDED`,n===`input`?`List input port exceeds maxItems`:`List output port exceeds maxItems`,{nodeId:r,key:i.key,maxItems:i.maxItems,actualItems:t.length})}}if(!oB(i,t))return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`Input port "${i.key}" on node "${r}" expects type "${i.type}" but received incompatible value`:`Output port "${i.key}" on node "${r}" emitted value incompatible with type "${i.type}"`,{nodeId:r,key:i.key,type:i.type},n===`input`?{action:`check_port_type`,suggestion:`Ensure the upstream output connected to "${i.key}" produces a "${i.type}" value`}:void 0)}}return{ok:!0,value:void 0}}var cB=class{handler;constructor(e){this.handler=e}async initialize(e){return this.handler.initialize?this.handler.initialize(e):{ok:!0,value:void 0}}async validateInput(e,t){let n=sB(e,t.nodeManifest.inputs,`input`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateInput?this.handler.validateInput(e,t):{ok:!0,value:void 0}:n}async estimateCost(e,t){return this.handler.estimateCost?this.handler.estimateCost(e,t):{ok:!0,value:{estimatedCredits:0}}}async execute(e,t){return this.handler.execute(e,t)}async validateOutput(e,t){let n=sB(e,t.nodeManifest.outputs,`output`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateOutput?this.handler.validateOutput(e,t):{ok:!0,value:void 0}:n}async dispose(e){return this.handler.dispose?this.handler.dispose(e):{ok:!0,value:void 0}}},lB=class{handlersByType;constructor(e){this.handlersByType=e}getHandler(e){return this.handlersByType[e]}listNodeTypes(){return Object.keys(this.handlersByType)}},uB=class{taskHandlerRegistry;constructor(e){this.taskHandlerRegistry=e}create(e){let t=this.taskHandlerRegistry.getHandler(e);return t?{ok:!0,value:new cB(t)}:{ok:!1,error:X(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},dB=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()]}};const fB=v.z.string().trim().min(1);v.z.enum([`asset`,`uri`]);const pB=v.z.object({referenceType:v.z.literal(`asset`),assetId:fB,mediaType:v.z.string().optional(),name:v.z.string().optional(),sizeBytes:v.z.number().int().nonnegative().optional()}),mB=v.z.object({referenceType:v.z.literal(`uri`),uri:fB,mediaType:v.z.string().optional(),name:v.z.string().optional(),sizeBytes:v.z.number().int().nonnegative().optional()}),hB=v.z.union([pB,mB]);function gB(){return v.z.object({asset:hB})}function _B(e){return typeof e!=`object`||!e?!1:e instanceof v.z.ZodType}function vB(e){return e==null?{ok:!0,value:{}}:_B(e)?{ok:!0,value:(0,se.zodToJsonSchema)(e,{target:`jsonSchema7`})}:{ok:!1,error:X(`DAG_VALIDATION_CONFIG_SCHEMA_INVALID`,`configSchemaDefinition must be a Zod schema instance.`)}}function yB(e){let t=[],n={};for(let r of e){let e=vB(r.configSchemaDefinition);if(!e.ok)return e;let i={nodeType:r.nodeType,displayName:r.displayName,category:r.category,inputs:r.inputs,outputs:r.outputs,configSchema:e.value,...r.defaultInputPort===void 0?{}:{defaultInputPort:r.defaultInputPort},...r.defaultOutputPort===void 0?{}:{defaultOutputPort:r.defaultOutputPort}};t.push(i),n[i.nodeType]=r.taskHandler}return{ok:!0,value:{manifests:t,handlersByType:n}}}const bB={IMAGE_PNG:{binaryKind:`image`,mimeTypes:[`image/png`]},IMAGE_COMMON:{binaryKind:`image`,mimeTypes:[`image/png`,`image/jpeg`,`image/webp`]},VIDEO_MP4:{binaryKind:`video`,mimeTypes:[`video/mp4`]},AUDIO_MPEG:{binaryKind:`audio`,mimeTypes:[`audio/mpeg`]},FILE_GENERIC:{binaryKind:`file`,mimeTypes:[]}};function xB(e){return{key:e.key,label:e.label,order:e.order,type:`binary`,required:e.required,description:e.description,binaryKind:e.preset.binaryKind,mimeTypes:[...e.preset.mimeTypes],isList:e.isList,minItems:e.minItems,maxItems:e.maxItems}}var SB=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 CB(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)?{ok:!1,error:X(`DAG_VALIDATION_PAYLOAD_INVALID`,`Payload must be a JSON object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:X(`DAG_VALIDATION_PAYLOAD_PARSE_FAILED`,`Failed to parse payload JSON`)}}}function wB(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)||!(`dagId`in t)||!(`version`in t)||!(`nodes`in t)||!(`edges`in t)||!(`status`in t)||typeof t.dagId!=`string`||typeof t.version!=`number`||!Array.isArray(t.nodes)||!Array.isArray(t.edges)||typeof t.status!=`string`?{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`Definition snapshot must be a valid DAG definition object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse definition snapshot JSON`)}}}async function TB(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:X(`DAG_VALIDATION_NO_ENTRY_NODE`,`DAG must include at least one entry node (dependsOn = [])`,{dagId:o.dagId,version:o.version})};let l=Iz.transition(`created`,`QUEUE`);if(!l.ok)return l;await t.updateDagRunStatus(a,l.value.nextStatus);let u=Iz.transition(`queued`,`START`);if(!u.ok)return u;await t.updateDagRunStatus(a,u.value.nextStatus),i?.publish({dagRunId:a,eventType:jz.STARTED,occurredAt:r.nowIso(),dagId:o.dagId,version:o.version});let d=[];for(let e of c){let c=`${a}:${e.nodeId}:attempt:1`;d.push(c),await t.createTaskRun({taskRunId:c,dagRunId:a,nodeId:e.nodeId,status:`queued`,attempt:1});let l={messageId:`${c}:message`,dagRunId:a,taskRunId:c,nodeId:e.nodeId,attempt:1,executionPath:[`dagId:${o.dagId}`,`dagRunId:${a}`,`nodeId:${e.nodeId}`,`taskRunId:${c}`,`attempt:1`],payload:s,createdAt:r.nowIso()};try{await n.enqueue(l)}catch(n){return EB(a,c,e.nodeId,d,n,t,r,i)}}return{ok:!0,value:{taskRunIds:d}}}async function EB(e,t,n,r,i,a,o,s){let c=Hz(`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`}),l=Bz.transition(`queued`,`CANCEL`);if(l.ok){await a.updateTaskRunStatus(t,l.value.nextStatus,c);for(let e of r)e!==t&&await a.updateTaskRunStatus(e,l.value.nextStatus,c)}let u=Iz.transition(`running`,`COMPLETE_FAILURE`);return u.ok&&(await a.updateDagRunStatus(e,u.value.nextStatus,o.nowIso()),s?.publish({dagRunId:e,eventType:jz.FAILED,occurredAt:o.nowIso(),error:c})),{ok:!1,error:c}}var DB=class{storage;queue;clock;runProgressEventReporter;timeSemanticsService;constructor(e,t,n,r){this.storage=e,this.queue=t,this.clock=n,this.runProgressEventReporter=r,this.timeSemanticsService=new Gz(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:X(`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:X(`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=e.rerunKey?`${t.dagId}:${n.value.logicalDate}:rerun:${e.rerunKey}`:`${t.dagId}:${n.value.logicalDate}`,i=await this.storage.getDagRunByRunKey(r);if(i)return{ok:!0,value:{dagRunId:i.dagRunId,dagId:i.dagId,version:i.version,logicalDate:i.logicalDate,status:i.status}};let a=this.generateDagRunId(t.dagId,n.value.logicalDate,e.rerunKey);try{await this.storage.createDagRun({dagRunId:a,dagId:t.dagId,version:t.version,status:`created`,definitionSnapshot:JSON.stringify(t),inputSnapshot:JSON.stringify(e.input),runKey:r,logicalDate:n.value.logicalDate,trigger:e.trigger,startedAt:this.clock.nowIso()})}catch(e){return{ok:!1,error:Hz(`DAG_DISPATCH_DAG_RUN_CREATE_FAILED`,`Failed to create DagRun`,{dagId:t.dagId,version:t.version,runKey:r,errorMessage:this.resolveErrorMessage(e instanceof Error?e:void 0)})}}return{ok:!0,value:{dagRunId:a,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:X(`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:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:e})};let n=wB(t.definitionSnapshot);if(!n.ok)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot is invalid`,{dagRunId:e})};let r=CB(t.inputSnapshot??`{}`);if(!r.ok)return{ok:!1,error:X(`DAG_VALIDATION_RUN_INPUT_SNAPSHOT_INVALID`,`DagRun input snapshot is invalid`,{dagRunId:e})};let i=await TB({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`}},OB=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:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})}}},kB=class{storage;clock;constructor(e,t){this.storage=e,this.clock=t}async cancelRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};let n=Iz.transition(t.status,`CANCEL`);return n.ok?(await this.storage.updateDagRunStatus(e,n.value.nextStatus,this.clock.nowIso()),{ok:!0,value:{dagRunId:e,status:`cancelled`}}):n}};function AB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function jB(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function MB(e,t,n){let r=e.nodes.find(e=>e.nodeId===n);if(!r)return{ok:!1,error:X(`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=NB(a,e,r,t);if(!n.ok)return n}return RB(a,r.inputs??[]),{ok:!0,value:a}}function NB(e,t,n,r){if(!t.bindings||t.bindings.length===0)return{ok:!1,error:X(`DAG_VALIDATION_BINDING_REQUIRED`,`Incoming edge must define at least one binding`,{from:t.from,to:t.to})};let i=PB(t.from,t.to,r);if(!i.ok)return i;let a=i.value;for(let r of t.bindings){let i=FB(e,r,a,t,n);if(!i.ok)return i}return{ok:!0,value:void 0}}function PB(e,t,n){let r=n.find(t=>t.nodeId===e&&t.status===`success`);if(!r||!r.outputSnapshot)return{ok:!1,error:X(`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 jB(n)?{ok:!0,value:n}:{ok:!1,error:X(`DAG_VALIDATION_UPSTREAM_OUTPUT_INVALID`,`Upstream output snapshot has invalid payload shape`,{from:e,to:t})}}catch(n){return{ok:!1,error:X(`DAG_VALIDATION_UPSTREAM_OUTPUT_PARSE_FAILED`,`Failed to parse upstream output snapshot`,{from:e,to:t,errorMessage:AB(n)})}}}function FB(e,t,n,r,i){let a=n[t.outputKey];if(a===void 0)return{ok:!1,error:X(`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 IB(e,t.inputKey,a,r.to);let o=Az(t.inputKey);return o?LB(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:X(`DAG_VALIDATION_BINDING_INPUT_KEY_CONFLICT`,`Multiple bindings target the same input key`,{to:r.to,inputKey:t.inputKey})}}function IB(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:X(`DAG_VALIDATION_BINDING_LIST_PAYLOAD_INVALID`,`List payload container is invalid`,{to:r,inputKey:t})}}function LB(e,t,n,r,i,a){if(!(a.inputs??[]).find(e=>e.key===t.portKey)?.isList)return{ok:!1,error:X(`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 RB(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 zB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function BB(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 VB(e,t,n,c,i,a,o);if(!r.ok)return r}return{ok:!0,value:void 0}}async function VB(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`;await i.createTaskRun({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1});let c=MB(t,r,n.nodeId);if(!c.ok)return c;let l=n.timeoutMs?{...c.value,timeoutMs:n.timeoutMs}:c.value,u={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:l,createdAt:o.nowIso()};try{await a.enqueue(u)}catch(t){let r=Bz.transition(`queued`,`CANCEL`);return r.ok&&await i.updateTaskRunStatus(s,r.value.nextStatus),{ok:!1,error:Hz(`DAG_DISPATCH_ENQUEUE_DOWNSTREAM_FAILED`,`Failed to enqueue downstream task`,{dagRunId:e.dagRunId,nodeId:n.nodeId,errorMessage:zB(t)})}}return r.push({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1}),{ok:!0,value:void 0}}const HB=new Set([`created`,`queued`,`running`]),UB=new Set([`failed`]);async function WB(e,t,n,r){let i=await t.getDagRun(e);if(!i)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found while finalizing run status`,{dagRunId:e})};if(i.status!==`running`)return{ok:!0,value:void 0};let a=await t.listTaskRunsByDagRunId(e);if(a.some(e=>HB.has(e.status)))return{ok:!0,value:void 0};let o=a.some(e=>UB.has(e.status)),s=Iz.transition(i.status,o?`COMPLETE_FAILURE`:`COMPLETE_SUCCESS`);return s.ok?(await t.updateDagRunStatus(e,s.value.nextStatus,n.nowIso()),o?GB(e,a,n,r):r?.publish({dagRunId:e,eventType:jz.COMPLETED,occurredAt:n.nowIso()}),{ok:!0,value:void 0}):s}function GB(e,t,n,r){let i=t.find(e=>UB.has(e.status)),a=typeof i?.errorCode==`string`&&typeof i.errorMessage==`string`?Uz(i.errorCode,i.errorMessage,!1,{dagRunId:e,taskRunId:i.taskRunId,nodeId:i.nodeId}):Uz(`DAG_TASK_EXECUTION_FAILED`,`Run completed with failure.`,!1,{dagRunId:e});r?.publish({dagRunId:e,eventType:jz.FAILED,occurredAt:n.nowIso(),error:a})}function KB(e,t){return Uz(`DAG_TASK_EXECUTION_TIMEOUT`,`Task execution timed out after ${t}ms`,!0,{taskRunId:e,timeoutMs:t})}function qB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function JB(e,t,n,r){return new Promise(i=>{let a=!1,o=setTimeout(()=>{a||(a=!0,i({ok:!1,error:KB(r,n)}))},n);e.execute(t).then(e=>{a||(a=!0,clearTimeout(o),i(e))}).catch(e=>{a||(a=!0,clearTimeout(o),i({ok:!1,error:Uz(`DAG_TASK_EXECUTION_EXCEPTION`,`Task executor threw an exception`,!0,{taskRunId:r,errorMessage:qB(e)})}))})})}function YB(e){let t=0;for(let n of e)typeof n.totalCredits==`number`&&n.totalCredits>t&&(t=n.totalCredits);return t}function XB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function ZB(e,t){if(typeof e.definitionSnapshot!=`string`||e.definitionSnapshot.trim().length===0)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:t})};try{let n=JSON.parse(e.definitionSnapshot);return QB(n)?{ok:!0,value:n}:{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:t})}}catch(e){return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse DagRun definition snapshot`,{dagRunId:t,errorMessage:XB(e)})}}}function QB(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&typeof e.dagId==`string`&&typeof e.version==`number`&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&typeof e.status==`string`}async function $B(e,t){let n=await e.getDagRun(t.dagRunId);if(!n)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found for dequeued message`,{dagRunId:t.dagRunId})};let r=ZB(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:X(`DAG_VALIDATION_NODE_NOT_FOUND`,`Node definition not found for task execution`,{nodeId:t.nodeId,dagId:n.dagId,version:n.version})}}function eV(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 tV(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function nV(e,t,n,r,i,a,o,s){if(r.deadLetterEnabled){let t=await iV(e,n,r,o);if(!t.ok)return aV(a,e.messageId,t.error)}let c=await WB(e.dagRunId,i,o,s);return c.ok?oV(a,e.messageId,t,!1):aV(a,e.messageId,c.error)}async function rV(e,t,n,r,i){let a=Bz.transition(`failed`,`RETRY`);if(!a.ok)return aV(r,e.messageId,a.error);await n.incrementTaskAttempt(t),await n.updateTaskRunStatus(t,a.value.nextStatus);let o=e.attempt+1,s={...e,messageId:`${e.taskRunId}:message:${o}`,attempt:o,executionPath:eV(e.executionPath,o),createdAt:i.nowIso()};try{await r.enqueue(s)}catch(n){return aV(r,e.messageId,Hz(`DAG_DISPATCH_ENQUEUE_RETRY_FAILED`,`Failed to enqueue retry message`,{taskRunId:t,attempt:o,errorMessage:tV(n)}))}return oV(r,e.messageId,t,!0)}async function iV(e,t,n,r){if(!n.deadLetterQueue)return{ok:!1,error:X(`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:Hz(`DAG_DISPATCH_DEAD_LETTER_ENQUEUE_FAILED`,`Failed to enqueue dead letter message`,{taskRunId:e.taskRunId,originalMessageId:e.messageId,errorMessage:tV(t)})}}}async function aV(e,t,n){return await e.ack(t),{ok:!1,error:n}}async function oV(e,t,n,r){return await e.ack(t),{ok:!0,value:{processed:!0,taskRunId:n,retried:r}}}var sV=class{storage;queue;lease;executor;clock;options;runProgressEventReporter;constructor(e,t,n,r,i,a,o){this.storage=e,this.queue=t,this.lease=n,this.executor=r,this.clock=i,this.options=a,this.runProgressEventReporter=o}async processOnce(){let e=await this.queue.dequeue(this.options.workerId,this.options.visibilityTimeoutMs,this.options.idleWaitMs);if(!e)return{ok:!0,value:{processed:!1}};let t=`taskRun:${e.taskRunId}`;if(!await this.lease.acquire(t,this.options.workerId,this.options.leaseDurationMs))return await this.queue.nack(e.messageId),{ok:!0,value:{processed:!1}};try{return this.processAcquiredMessage(e)}finally{await this.lease.release(t,this.options.workerId)}}async processAcquiredMessage(e){let t=await this.storage.getTaskRun(e.taskRunId);if(!t)return aV(this.queue,e.messageId,X(`DAG_VALIDATION_TASK_RUN_NOT_FOUND`,`TaskRun not found for dequeued message`,{taskRunId:e.taskRunId}));let n=await this.transitionToRunning(e,t);if(!n.ok)return aV(this.queue,e.messageId,n.error);let r=await $B(this.storage,e);if(!r.ok)return aV(this.queue,e.messageId,r.error);let{dagRun:i,definition:a,nodeDefinition:o}=r.value,s=await this.buildExecutionInput(e,i,a,o),c=this.resolveTimeoutMs(e),l=await JB(this.executor,s,c,e.taskRunId);return l.ok?this.handleSuccessPath(e,t.taskRunId,i,a,l.output,l.estimatedCredits,l.totalCredits):this.handleFailurePath(e,t.taskRunId,l.error)}async transitionToRunning(e,t){let n=Bz.transition(t.status,`START`);return n.ok?(await this.storage.updateTaskRunStatus(t.taskRunId,n.value.nextStatus),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.STARTED,occurredAt:this.clock.nowIso(),taskRunId:t.taskRunId,nodeId:e.nodeId,input:e.payload}),await this.storage.saveTaskRunSnapshots(t.taskRunId,JSON.stringify(e.payload)),{ok:!0,value:void 0}):n}async buildExecutionInput(e,t,n,r){let i=YB(await this.storage.listTaskRunsByDagRunId(e.dagRunId));return{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:i}}async handleSuccessPath(e,t,n,r,i,a,o){let s=Bz.transition(`running`,`COMPLETE_SUCCESS`);if(!s.ok)return aV(this.queue,e.messageId,s.error);await this.completeTaskRun(e,t,s.value.nextStatus,i,a,o);let c=await BB(n,r,e.nodeId,i,this.storage,this.queue,this.clock);if(!c.ok)return aV(this.queue,e.messageId,c.error);let l=await WB(e.dagRunId,this.storage,this.clock,this.runProgressEventReporter);return l.ok?oV(this.queue,e.messageId,t,!1):aV(this.queue,e.messageId,l.error)}async handleFailurePath(e,t,n){let r=Bz.transition(`running`,`COMPLETE_FAILURE`);return r.ok?(await this.storage.updateTaskRunStatus(t,r.value.nextStatus,n),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.FAILED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,error:n}),this.options.retryEnabled&&n.retryable&&e.attempt<this.options.maxAttempts?rV(e,t,this.storage,this.queue,this.clock):nV(e,t,n,this.options,this.storage,this.queue,this.clock,this.runProgressEventReporter)):aV(this.queue,e.messageId,r.error)}async completeTaskRun(e,t,n,r,i,a){await this.storage.updateTaskRunStatus(t,n),await this.storage.saveTaskRunSnapshots(t,void 0,JSON.stringify(r),i,a),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.COMPLETED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,output:r})}resolveTimeoutMs(e){let t=e.payload.timeoutMs;return typeof t==`number`&&t>0?t:this.options.defaultTimeoutMs}};function cV(e,t){let n={...t,retryEnabled:t.retryEnabled??!1,deadLetterEnabled:t.deadLetterEnabled??!1,deadLetterQueue:e.deadLetterQueue};return new sV(e.storage,e.queue,e.lease,e.executor,e.clock,n,e.runProgressEventReporter)}function lV(e){return(e.startsWith(`Robota`)?e.slice(6):e).replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`).replace(/^-/,``)}function uV(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:lV(e.type),dependsOn:[],config:e.properties?.robota_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=new Map;for(let t of e.links){let[,n,,r]=t,i=a.get(n),c=a.get(r);if(!i||!c)continue;let l=e.nodes.find(e=>e.id===n),u=e.nodes.find(e=>e.id===r),d=t[2],f=t[4],p=l?.outputs?.[d]?.name??`out${d}`,m=u?.inputs?.[f]?.name??`in${f}`,h=`${i.nodeId}:${c.nodeId}`;o.has(h)||o.set(h,[]),o.get(h).push({outputKey:p,inputKey:m}),s.has(c.nodeId)||s.set(c.nodeId,new Set),s.get(c.nodeId).add(i.nodeId)}for(let e of i){let t=s.get(e.nodeId);t&&(e.dependsOn=[...t])}let c=[];for(let[e,t]of o){let[n,r]=e.split(`:`);c.push({from:n,to:r,bindings:t})}return{dagId:t?.dagId??`unknown`,version:t?.version??1,status:t?.status??`active`,nodes:i,edges:c,...t?.costPolicy?{costPolicy:t.costPolicy}:{},...t?.inputSchema?{inputSchema:t.inputSchema}:{},...t?.outputSchema?{outputSchema:t.outputSchema}:{}}}function dV(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.links)&&typeof t.version==`number`&&!(`dagId`in t)}function fV(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.dagId==`string`&&Array.isArray(t.nodes)}const pV=v.z.object({text:v.z.string().default(``)});var mV=class extends Z{nodeType=`input`;displayName=`Input`;category=`Core`;defaultOutputPort=`text`;inputs=[];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=pV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`input`),i=typeof e.text==`string`?e.text:n.text;return r.setOutput(`text`,i),r.setOutput(`_agentSummary`,`Input: ${i.length} chars.`),{ok:!0,value:r.toOutput()}}};const hV=v.z.object({ports:v.z.array(v.z.string()).default([]),values:v.z.record(v.z.string()).default({})});var gV=class extends Z{nodeType=`multi-input`;displayName=`Multi-Input`;category=`Core`;inputs=[];outputs=[];configSchemaDefinition=hV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`multi-input`),i=n.ports.length>0?n.ports:Object.keys({...n.values,...e});for(let t of i){if(t===`_agentSummary`)continue;let i=typeof e[t]==`string`?e[t]:n.values[t]??``;r.setOutput(t,i)}return r.setOutput(`_agentSummary`,`Multi-input: emitted ${i.length} port(s): ${i.join(`, `)}.`),{ok:!0,value:r.toOutput()}}};const _V=v.z.object({prefix:v.z.string().default(``)});var vV=class extends Z{nodeType=`transform`;displayName=`Transform`;category=`Core`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!1},{key:`data`,label:`Data`,order:1,type:`object`,required:!1}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!1},{key:`data`,label:`Data`,order:1,type:`object`,required:!1}];configSchemaDefinition=_V;async validateInputWithConfig(e,t,n){return Object.keys(e).length===0?{ok:!1,error:X(`DAG_VALIDATION_TRANSFORM_INPUT_REQUIRED`,`Transform node requires at least one input value`,{nodeId:t.nodeDefinition.nodeId})}:{ok:!0,value:void 0}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:1e-4}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.getInput(`text`);if(typeof i==`string`){let e=`${n.prefix}${i}`;r.setOutput(`text`,e),r.setOutput(`_agentSummary`,`Transformed input. Output length: ${e.length} chars.`)}else{for(let[t,n]of Object.entries(e))r.setOutput(t,n);r.setOutput(`_agentSummary`,`Passed through ${Object.keys(e).length} port(s).`)}return{ok:!0,value:r.toOutput()}}};const yV=`__ROBOTA_TEXT_TEMPLATE_ESCAPED_PERCENT_S__`,bV=v.z.object({template:v.z.string().default(`%s`).describe(`Template string. Supports two syntaxes: {{text}} (Handlebars-style) or %s (printf-style). Both replace input text. Use %%s for a literal %s.`)});var xV=class extends Z{nodeType=`text-template`;displayName=`Text Template`;category=`Core`;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=bV;async validateInputWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId).requireInputString(`text`);return r.ok?{ok:!0,value:void 0}:r}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value,o=n.template.split(`%%s`).join(yV).replaceAll(`{{text}}`,a).split(`%s`).join(a).split(yV).join(`%s`);return r.setOutput(`text`,o),r.setOutput(`_agentSummary`,`Template rendered. Output length: ${o.length} chars.`),{ok:!0,value:r.toOutput()}}};const SV=v.z.object({});var CV=class extends Z{nodeType=`text-output`;displayName=`Text Output`;category=`Core`;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=SV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`text-output`),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,i.value),r.setOutput(`_agentSummary`,`Output: ${i.value.length} chars.`),{ok:!0,value:r.toOutput()}):i}};const wV=v.z.object({});var TV=class extends Z{nodeType=`image-loader`;displayName=`Image Loader`;category=`Media`;defaultInputPort=`asset`;defaultOutputPort=`image`;inputs=[{key:`asset`,label:`Media Reference`,order:0,type:`object`,required:!0}];outputs=[xB({key:`image`,label:`Image`,order:0,required:!0,preset:bB.IMAGE_COMMON})];configSchemaDefinition=wV;async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputMediaReference(`asset`);return i.ok?(r.setOutput(`image`,i.value.toBinary(`image`,`image/png`)),r.setOutput(`_agentSummary`,`Asset loaded as image binary.`),{ok:!0,value:r.toOutput()}):i}};const EV=gB().extend({mimeType:v.z.string().optional()});var DV=class extends Z{nodeType=`image-source`;displayName=`Image Source`;category=`Test`;defaultOutputPort=`image`;inputs=[];outputs=[xB({key:`image`,label:`Image`,order:0,required:!0,description:`Test image output`,preset:bB.IMAGE_COMMON})];configSchemaDefinition=EV;async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=rB.fromAssetReference(n.asset),i=typeof n.mimeType==`string`?n.mimeType:r.mediaType(),a=typeof i==`string`&&i.trim().length>0?i:`image/png`;return{ok:!0,value:{image:r.toBinary(`image`,a),_agentSummary:`Image source resolved. Type: ${a}.`}}}};function OV(e){let t=e.image;return typeof t!=`object`||!t||!(`kind`in t)||!(`mimeType`in t)||!(`uri`in t)?!1:t.kind===`image`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}const kV=v.z.object({});var AV=class extends Z{nodeType=`ok-emitter`;displayName=`OK Emitter`;category=`Test`;defaultInputPort=`image`;inputs=[xB({key:`image`,label:`Image Input`,order:0,required:!0,description:`Binary image from upstream`,preset:bB.IMAGE_COMMON})];outputs=[{key:`status`,label:`Status`,order:0,type:`string`,required:!0,description:`Execution status`}];configSchemaDefinition=kV;async validateInputWithConfig(e,t,n){return OV(e)?{ok:!0,value:void 0}:{ok:!1,error:X(`DAG_VALIDATION_OK_EMITTER_IMAGE_REQUIRED`,`OK emitter node requires an image binary input`,{nodeId:t.nodeDefinition.nodeId})}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`ok-emitter`),i=r.requireInput(`image`);return i.ok?OV({image:i.value})?(r.setOutput(`status`,`ok`),r.setOutput(`_agentSummary`,`Image validated. Status: ok.`),{ok:!0,value:r.toOutput()}):{ok:!1,error:Uz(`DAG_TASK_EXECUTION_OK_EMITTER_IMAGE_INVALID`,`OK emitter execution requires image binary input`,!1)}:i}};const jV={read:e=>fs(e),write:e=>ys(e),edit:e=>Ss(e),shell:e=>rs(e),bash:e=>is(e),glob:()=>Ts,grep:()=>Ms,"web-fetch":()=>zs,"web-search":()=>Hs},MV=Object.freeze(Object.keys(jV)),NV=v.z.object({toolName:v.z.string().min(1),params:v.z.record(v.z.unknown()).default({}),cwd:v.z.string().optional(),baseCredits:v.z.number().nonnegative().default(0)}),PV=[{key:`params`,label:`Tool Parameters (JSON string)`,order:0,type:`string`,required:!1}],FV=[{key:`output`,label:`Output`,order:0,type:`string`,required:!0},{key:`isError`,label:`Is Error`,order:1,type:`boolean`,required:!0}];function IV(e){let t=typeof e==`string`?e:JSON.stringify(e??``);try{let e=JSON.parse(t);if(typeof e==`object`&&e&&typeof e.success==`boolean`){let t=e.success?e.output:e.error??e.output;return{output:typeof t==`string`?t:String(t??``),isError:!e.success}}}catch{}return{output:t,isError:!1}}function LV(e,t,n){return X(`DAG_VALIDATION_TOOL_INVALID_PARAMS`,t,{toolName:e},{action:`set_input`,suggestion:n})}function RV(e,t){if(typeof e==`string`&&e.trim()!==``){let n;try{n=JSON.parse(e)}catch{return{ok:!1,error:LV(t,"The `params` input port must be a JSON object string.",`Provide a valid JSON object as the params input`)}}return typeof n!=`object`||!n||Array.isArray(n)?{ok:!1,error:LV(t,"The `params` input port must decode to a JSON object.",`Provide a JSON object (not an array or primitive)`)}:{ok:!0,value:n}}return typeof e==`object`&&e&&!Array.isArray(e)?{ok:!0,value:e}:{ok:!0,value:{}}}async function zV(e,t,n,r){try{let{output:i,isError:a}=IV((await e.execute(t)).data),o=new Q({},r);return o.setOutput(`output`,i),o.setOutput(`isError`,a),o.setOutput(`_agentSummary`,`Tool "${n}" ran. ${a?`Reported an error.`:`Output: ${i.length} chars.`}`),{ok:!0,value:o.toOutput()}}catch(e){return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_TOOL_CALL_FAILED`,`Tool "${n}" failed: ${e instanceof Error?e.message:String(e)}`,!0,{toolName:n})}}}var BV=class extends Z{nodeType=`tool`;displayName=`Tool`;category=`Integration`;inputs=PV;outputs=FV;configSchemaDefinition=NV;defaultInputPort=`params`;defaultOutputPort=`output`;constructor(){super()}async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:n.baseCredits}}}async executeWithConfig(e,t,n){let r=jV[n.toolName];if(!r)return{ok:!1,error:X(`DAG_VALIDATION_TOOL_UNKNOWN_TOOL`,`Unknown toolName "${n.toolName}". Choose one of the supported in-process builtins.`,{toolName:n.toolName},{action:`set_config`,suggestion:`Set toolName to a supported builtin`,options:[...MV]})};let i=RV(new Q(e,t.nodeDefinition.nodeId).getInput(`params`),n.toolName);if(!i.ok)return i;let a={...n.params,...i.value};return zV(r(n.cwd===void 0?{}:{cwd:n.cwd}),a,n.toolName,t.nodeDefinition.nodeId)}};const $={ok:!0,value:{estimatedCredits:0}},VV=v.z.object({});var HV=class extends Z{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=VV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Number(i.value);return isNaN(a)?{ok:!1,error:X(`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()})}},UV=class extends Z{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=VV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`number`);return i.ok?(r.setOutput(`text`,i.value),{ok:!0,value:r.toOutput()}):i}};const WV=v.z.object({separator:v.z.string().default(`, `)});var GV=class extends Z{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=WV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`items`);if(!i.ok)return i;let a=i.value.split(`
391
- `).filter(e=>e.trim()!==``);return r.setOutput(`text`,a.join(n.separator)),{ok:!0,value:r.toOutput()}}};const KV=v.z.object({separator:v.z.string().default(`
392
- `),trim:v.z.boolean().default(!0)});var qV=class extends Z{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=KV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value.split(n.separator),o=n.trim?a.map(e=>e.trim()).filter(e=>e!==``):a;return r.setOutput(`items`,o.join(`
393
- `)),{ok:!0,value:r.toOutput()}}};const JV=v.z.object({search:v.z.string().default(``),replacement:v.z.string().default(``),useRegex:v.z.boolean().default(!1),flags:v.z.string().default(`g`)});var YV=class extends Z{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=JV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a;if(n.useRegex)try{let e=new RegExp(n.search,n.flags);a=i.value.replace(e,n.replacement)}catch{return{ok:!1,error:X(`DAG_VALIDATION_TEXT_REPLACE_INVALID_REGEX`,`Invalid regex: "${n.search}"`,{nodeId:t.nodeDefinition.nodeId})}}else a=i.value.split(n.search).join(n.replacement);return r.setOutput(`text`,a),{ok:!0,value:r.toOutput()}}},XV=class extends Z{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=VV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,String(r.value.length)),{ok:!0,value:n.toOutput()}):r}},ZV=class extends Z{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=VV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,r.value.toUpperCase()),{ok:!0,value:n.toOutput()}):r}},QV=class extends Z{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=VV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,r.value.toLowerCase()),{ok:!0,value:n.toOutput()}):r}};const $V=v.z.object({mode:v.z.enum([`both`,`start`,`end`]).default(`both`)});var eH=class extends Z{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=$V;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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 tH=v.z.object({path:v.z.string().default(``),fallback:v.z.string().default(``)});var nH=class extends Z{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=tH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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:X(`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 rH=v.z.object({operator:v.z.enum([`non-empty`,`equals`,`contains`,`starts-with`,`ends-with`]).default(`non-empty`),operand:v.z.string().default(``)});var iH=class extends Z{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=rH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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);break}let u=l?a.value:typeof o==`string`?o:``;return r.setOutput(`text`,u),{ok:!0,value:r.toOutput()}}};const aH=v.z.object({skipEmpty:v.z.boolean().default(!1)});var oH=class extends Z{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=aH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value.split(`
394
- `),o=n.skipEmpty?a.filter(e=>e.trim()!==``).length:a.length;return r.setOutput(`text`,String(o)),{ok:!0,value:r.toOutput()}}};const sH=v.z.object({times:v.z.number().int().min(0).default(2),separator:v.z.string().default(``)});var cH=class extends Z{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=sH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Array.from({length:n.times},()=>i.value);return r.setOutput(`text`,a.join(n.separator)),{ok:!0,value:r.toOutput()}}};const lH=v.z.object({start:v.z.number().int().default(0),end:v.z.number().int().optional()});var uH=class extends Z{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=lH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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}};function dH(e,t){let n=new SB;return{runOrchestrator:new DB(e.storage,e.queue,e.clock,n),runQuery:new OB(e.storage),runCancel:new kB(e.storage,e.clock),workerLoop:cV({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}),runProgressEventBus:n}}function fH(){return[new mV,new gV,new vV,new xV,new CV,new TV,new DV,new AV,new BV,new HV,new UV,new GV,new qV,new YV,new XV,new ZV,new QV,new eH,new nH,new iH,new oH,new cH,new uH]}const pH=new Set([`success`,`failed`,`cancelled`]);function mH(e){return pH.has(e)}function hH(e){if(!e)return{};let t;try{t=JSON.parse(e)}catch{return{}}return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}function gH(e){let t={};for(let n of e){let e=hH(n.outputSnapshot);for(let[r,i]of Object.entries(e))t[`${n.nodeId}.${r}`]=i}return t}function _H(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.status!==`success`)continue;let r=hH(n.outputSnapshot);for(let e of Object.values(r))if(typeof e==`string`)return e}}function vH(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n&&n.status===`failed`&&n.errorMessage)return`${n.nodeId}: ${n.errorMessage}`}}const yH=1e4;function bH(e){return new Promise(t=>{setTimeout(t,e)})}var xH=class{options;providerId=`local`;displayName=`Local (in-process)`;constructor(e={}){this.options=e}async listNodes(){return this.buildNodeRegistry().map(CH)}async execute(e,t,n){let r=this.buildNodeRegistry(),i=uV(e,void 0),a=Date.now(),o=!1,s=()=>{o=!0};n?.signal?.addEventListener(`abort`,s);try{let e=await SH(i,r,t,n?.onProgress,()=>o),s=Date.now()-a,c=gH(e.taskRuns),l=e.dagRun.status===`success`,u=l?void 0:vH(e.taskRuns);return n?.onProgress?.({type:`dag_complete`,nodeId:``,durationMs:s,finalOutput:l?_H(e.taskRuns):void 0,error:l?void 0:u??`DAG run did not succeed`}),{ok:l,outputs:c,durationMs:s,...l?{}:{error:u??`DAG run did not succeed`}}}catch(e){let t=Date.now()-a,r=e instanceof Error?e.message:String(e);return n?.onProgress?.({type:`dag_complete`,nodeId:``,durationMs:t,error:r}),{ok:!1,outputs:{},durationMs:t,error:r}}finally{n?.signal?.removeEventListener(`abort`,s)}}buildNodeRegistry(){let e=this.options.nodeRegistry??fH(),t=this.options.instantNodes??[],n=this.options.extraNodes??[],r=new Set([...t.map(e=>e.nodeType),...n.map(e=>e.nodeType)]);return[...e.filter(e=>!r.has(e.nodeType)),...n,...t]}};async function SH(e,t,n,r,i){let a=yB(t);if(!a.ok)throw Error(`Node definition assembly failed: ${a.error.code}`);let o=a.value,s=new Yz(new dB(o.manifests),new uB(new lB(o.handlersByType))),c=new Zz,l=dH({storage:c,queue:new Qz,deadLetterQueue:new Qz,lease:new $z,executor:s,clock:new eB},{worker:{workerId:`local-dag-runtime-provider`,leaseDurationMs:6e4,visibilityTimeoutMs:6e4,maxAttempts:1,defaultTimeoutMs:3e5,retryEnabled:!1}}),u=new Map(e.nodes.map(e=>[e.nodeId,e.nodeType])),d=new Map,f=l.runProgressEventBus.subscribe(e=>{if(r){if(e.eventType===`task.started`)d.set(e.nodeId,Date.now()),r({type:`node_start`,nodeId:e.nodeId,nodeType:u.get(e.nodeId)});else if(e.eventType===`task.completed`){let t=d.get(e.nodeId);r({type:`node_complete`,nodeId:e.nodeId,nodeType:u.get(e.nodeId),durationMs:t===void 0?void 0:Date.now()-t})}else if(e.eventType===`task.failed`){let t=d.get(e.nodeId);r({type:`node_error`,nodeId:e.nodeId,nodeType:u.get(e.nodeId),durationMs:t===void 0?void 0:Date.now()-t,error:e.error.message??e.error.code})}}});try{let t={...e,status:`published`};await c.saveDefinition(t);let r=await l.runOrchestrator.startRun({dagId:e.dagId,version:e.version,trigger:`manual`,input:n});if(!r.ok)throw Error(`startRun failed: ${r.error.code}`);let{dagRunId:a}=r.value;for(let e=0;e<yH;e++){i()&&await l.runCancel.cancelRun(a);let e=await l.workerLoop.processOnce();if(!e.ok)throw Error(`Worker step failed: ${e.error.code}`);let t=await l.runQuery.getRun(a);if(!t.ok)throw Error(`Run query failed: ${t.error.code}`);let{dagRun:n,taskRuns:r}=t.value;if(mH(n.status))return{dagRun:n,taskRuns:r};e.value.processed||await bH(10)}throw Error(`Run ${a} did not reach terminal state after ${yH} iterations`)}finally{f()}}function CH(e){let t={},n={};for(let r of e.inputs??[]){let e=TH(r.type),i={},a=r;a.default!==void 0&&(i.default=a.default);let o=Object.keys(i).length>0?[e,i]:[e];r.required===!1?n[r.key]=o:t[r.key]=o}let r=e.outputs??[],i={nodeType:e.nodeType,input:{required:t},output:r.map(e=>TH(e.type)),output_name:r.map(e=>e.key),category:e.category??`robota`,source:`local`};return Object.keys(n).length>0&&(i.input.optional=n),i}const wH={string:`STRING`,object:`JSON`,binary:`IMAGE`,number:`FLOAT`,boolean:`BOOLEAN`,integer:`INT`};function TH(e){return wH[e]??e.toUpperCase()}async function EH(e,t=`.dag/workflows`){let n=(0,p.resolve)(e,t),r=await(0,g.readdir)(n).catch(()=>null);if(r===null)return{success:!0,message:`No workflow catalog at ${t} (build or save a workflow to populate it).`};let i=r.filter(e=>e.endsWith(`.dag.json`)).sort();if(i.length===0)return{success:!0,message:`No workflow files (*.dag.json) in ${t}.`};let a=[];for(let e of i){let t=await(0,g.readFile)((0,p.join)(n,e),`utf-8`).then(e=>JSON.parse(e)).then(e=>`${e.nodes?.length??0} node(s), ${e.links?.length??0} link(s)`).catch(()=>`unreadable`);a.push(` ${e} — ${t}`)}return{success:!0,message:`Workflows in ${t} (${i.length}):\n${a.join(`
395
- `)}`}}async function DH(){let e=await new xH().listNodes(),t=[...e].sort((e,t)=>e.nodeType.localeCompare(t.nodeType)).map(e=>` ${e.nodeType}${e.description?` — ${e.description}`:``}`);return{success:!0,message:`Available workflow nodes (${e.length}):\n${t.join(`
396
- `)}`}}async function OH(e){let t=await(0,g.readFile)(e,`utf-8`);return JSON.parse(t)}async function kH(e,t){if(!e)return{success:!1,message:`Usage: /workflows run <file.dag.json>`};let n=await OH((0,p.resolve)(t,e)).catch(t=>{let n=t instanceof Error?t.message:String(t);return Error(`Failed to read DAG file "${e}": ${n}`)});if(n instanceof Error)return{success:!1,message:n.message};let r=await new xH().execute(n,{});return r.ok?{success:!0,message:`Workflow completed in ${r.durationMs}ms.\nOutputs: ${JSON.stringify(r.outputs,null,2)}`}:{success:!1,message:`Workflow failed (${r.durationMs}ms): ${r.error??`unknown error`}`}}async function AH(e,t){if(!e)return{success:!1,message:`Usage: /workflows validate <file.dag.json>`};let n=await(0,g.readFile)((0,p.resolve)(t,e),`utf-8`).then(e=>JSON.parse(e)).catch(t=>{let n=t instanceof Error?t.message:String(t);return Error(`Failed to read DAG file "${e}": ${n}`)});if(n instanceof Error)return{success:!1,message:n.message};let r;if(dV(n))r=uV(n);else if(fV(n))r=n;else return{success:!1,message:`"${e}" is not a recognized DAG workflow file (expected a .dag.json node-graph or a DAG definition).`};let i=await new xH().listNodes(),a=new Set(i.map(e=>e.nodeType)),o=new Set(r.nodes.map(e=>e.nodeId)),s=[];r.nodes.length===0&&s.push(`workflow has no nodes`);for(let e of r.nodes)a.has(e.nodeType)||s.push(`node "${e.nodeId}": unknown node type "${e.nodeType}"`);for(let e of r.edges)o.has(e.from)||s.push(`edge references unknown source node "${e.from}"`),o.has(e.to)||s.push(`edge references unknown target node "${e.to}"`);if(s.length>0){let t=s.length===1?``:`s`;return{success:!1,message:`Invalid workflow "${e}" (${s.length} issue${t}):\n${s.map(e=>` - ${e}`).join(`
397
- `)}`}}return{success:!0,message:`Valid workflow "${e}": ${r.nodes.length} node(s), ${r.edges.length} edge(s).`}}const jH=[{name:`list`,description:`List available workflow nodes`,source:`workflows`,modelInvocable:!1},{name:`catalog`,description:`List workflow files in the local .dag/workflows catalog`,source:`workflows`,modelInvocable:!1},{name:`validate`,description:`Validate a .dag.json workflow file against the node catalog`,source:`workflows`,argumentHint:`<file.dag.json>`,modelInvocable:!1},{name:`run`,description:`Run a .dag.json workflow file`,source:`workflows`,argumentHint:`<file.dag.json>`,modelInvocable:!1}],MH=[`Usage: /workflows <list|catalog|validate|run>`,` list List available workflow nodes`,` catalog List workflow files in .dag/workflows`,` validate <file> Validate a .dag.json workflow file`,` run <file> Run a .dag.json workflow file`].join(`
398
- `);function NH(e){let t=e.trim();if(t===``)return{sub:``,rest:``};let n=t.indexOf(` `);return n===-1?{sub:t,rest:``}:{sub:t.slice(0,n),rest:t.slice(n+1).trim()}}async function PH(e,t){let{sub:n,rest:r}=NH(t);switch(n){case``:return{success:!0,message:MH};case`list`:return DH();case`catalog`:return EH(process.cwd());case`validate`:return AH(r,process.cwd());case`run`:return kH(r,process.cwd());default:return{success:!1,message:`Unknown subcommand "${n}".\n${MH}`}}}function FH(){return{name:`workflows`,displayName:`Workflows`,description:`List, validate, and run DAG workflows on the in-process runtime`,source:`workflows`,argumentHint:`<list|catalog|validate|run> [args]`,subcommands:jH,modelInvocable:!1}}function IH(){let e=FH();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,subcommands:e.subcommands,lifecycle:`inline`,execute:PH}}var LH=class{name=`workflows`;getCommands(){return[FH()]}};function RH(){return{name:`agent-command-workflows`,commandSources:[new LH],systemCommands:[IH()]}}function zH(){return RH()}function BH(e,t,n,r,i={}){let a={settings:{read:()=>Hp(Bp()),write:e=>Up(Bp(),e)},plugin:kN(e)},o=n.providerDefinitions??xD(),s={readMergedSettings:()=>Ng(e),readTargetSettings:()=>Hp(wg(e)),writeTargetSettings:t=>Up(wg(e),t)},c=zH();return{commandHostAdapters:a,providerDefinitions:o,commandModules:[...SN({cwd:e,providerDefinitions:o,providerSettingsAdapter:s,...i.enabledCommandModules===void 0?{}:{enabledCommandModules:i.enabledCommandModules},...i.disabledCommandModules===void 0?{}:{disabledCommandModules:i.disabledCommandModules}}),c,...n.commandModules??[]],startupUpdateNoticePromise:Jy(t)?qy({currentVersion:r}):void 0}}function VH(e,t){let n=(0,h.readFileSync)((0,p.resolve)(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function HH(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(VH(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
399
-
400
- `):void 0}async function UH(e,t,n,r,i,a,o,s,c={},l={}){let u=t.goal?.trim(),d=t.positional.join(` `).trim();if(!u&&!d&&!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);d=Buffer.concat(e).toString(`utf-8`).trim()}!u&&!d&&(process.stderr.write(`Print mode (-p) requires a prompt argument (or --goal <objective>).
401
- `),process.exit(1));let f=HH(e,t),p=new bb({cwd:e,provider:n,outputFormat:t.outputFormat??`text`,permissionMode:t.permissionMode??l.permissionMode??`bypassPermissions`,maxTurns:t.maxTurns,sessionStore:t.noSessionPersistence?void 0:r,resumeSessionId:c.resumeSessionId,forkSession:c.forkSession,sessionName:t.sessionName,bare:t.bare||void 0,allowedTools:wb(t.allowedTools),deniedTools:wb(t.deniedTools),appendSystemPrompt:f,...l.persona===void 0?{}:{persona:l.persona},...l.agentName===void 0?{}:{agentName:l.agentName},...l.activePresetId===void 0?{}:{activePresetId:l.activePresetId},...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification},...t.systemPrompt?{systemPrompt:t.systemPrompt}:{},backgroundTaskRunners:i,subagentRunnerFactory:a,commandModules:o,commandHostAdapters:s});u?await p.runGoal(u,t.goalMaxIterations?{maxIterations:t.goalMaxIterations}:{}):await p.run(d),process.exit(p.getExitCode())}function WH(e){let t;try{t=(0,l.createRequire)(require("url").pathToFileURL(__filename).href)(`@robota-sdk/agent-provider-replay`)}catch{throw Error(`--session-log replay requires @robota-sdk/agent-provider-replay, a dev-only package that is not bundled in the published CLI.`)}return t.createReplayProviderFromLogFile(e)}function GH(){let e=new BL(Bp());return e.register(new cR),e}async function KH(e={}){if(process.argv[2]===`session`&&process.argv[3]===`analyze`){await iz(process.argv.slice(4),process.cwd());return}let t;try{t=Ab()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let n=az();if(t.help){process.stdout.write(Cb());return}if(t.version){process.stdout.write(`robota ${n}\n`);return}if(t.checkUpdate){let e=await Wy({currentVersion:n,force:!0}),t=Xy(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}let r=process.cwd(),i=new ab;if(t.reset){process.exitCode=await sz(i,{yes:t.yes,isTTY:process.stdin.isTTY===!0});return}if(t.positional[0]===`diagnose`){let e=await vz({version:n,terminal:i,cwd:r});process.exitCode=+(e>0);return}if(t.positional[0]===`session`&&t.positional[1]===`analyze`){await iz(process.argv.slice(4),r);return}try{if(await PR(t,r,i))return}catch(e){i.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let a=Hp(Bp()),o=typeof a.preset==`string`?a.preset:void 0,s=sx();for(let{file:e,error:t}of s.errors)i.writeError(`Skipped external preset "${e}": ${t}`);let l;try{l=ux(t,o)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let u=cx(t,o),{commandHostAdapters:d,providerDefinitions:f,commandModules:p,startupUpdateNoticePromise:m}=BH(r,t,e,n,{...l.enabledCommandModules===void 0?{}:{enabledCommandModules:l.enabledCommandModules},...l.disabledCommandModules===void 0?{}:{disabledCommandModules:l.disabledCommandModules}});if(t.positional[0]===`init`){try{await wz(r,i,{yes:t.yes,onProviderSetup:async()=>{await IN(r,t,ob,i,f)}})}catch(e){i.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}return}if(t.configure){await IN(r,t,ob,i,f);return}if(PN(r,t,i,f))return;try{await FN(r,t,ob,i,f)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(e instanceof Mg&&t.printMode?3:1)}let h=t.provider?{providerOverride:t.provider,providerDefinitions:f}:{providerDefinitions:f},g=Fg(r,h),_=l.model??g.model;if(g.source===`env-default`&&g.sourceEnvVar!==void 0){let e=`Using ${g.name} (${_}) via ${g.sourceEnvVar} — run \`robota --configure\` to persist a profile.\n`;t.printMode?process.stderr.write(e):i.writeLine(e.trimEnd())}let v=t.sessionLog?WH(t.sessionLog):Ig(r,l.model,h),y=Xa(),b=sf(r),x=ER({workerPath:NR(),providerConfig:{...g,model:_},logsDir:b.logs}),S=Dv(r),C,w=!1;if(t.continueMode?C=Av(S,r):t.resumeId!==void 0&&(t.resumeId===``?w=!0:(C=jv(S,t.resumeId),C===void 0&&(process.stderr.write(`Session not found: ${t.resumeId}\n`),process.exit(1)))),t.printMode||t.goal){await UH(r,t,v,S,y,x,p,d,{resumeSessionId:C,forkSession:t.forkSession},{agentName:l.agentName??Ib,activePresetId:u,persona:l.persona,...l.permissionMode===void 0?{}:{permissionMode:l.permissionMode},...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification}});return}kz(i),zL(),Tz()&&(Oz(i),Ez()),await NL({onChannelReady:e=>LL(e),cwd:r,provider:v,providerOverride:t.provider,providerType:g.name,modelId:_,language:t.language,permissionMode:t.permissionMode??l.permissionMode,maxTurns:t.maxTurns,allowedTools:wb(t.allowedTools),deniedTools:wb(t.deniedTools),version:n,sessionStore:t.noSessionPersistence?void 0:S,resumeSessionId:C,showSessionPickerOnStart:w,forkSession:t.forkSession,sessionName:t.sessionName,backgroundTaskRunners:y,subagentRunnerFactory:x,commandModules:p,commandHostAdapters:d,shellExec:e=>(0,c.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:m?m.then(e=>e?Yy(e):void 0):void 0,transportRegistry:GH(),cliAdapter:PL({providerDefinitions:f,reloadPluginCommandSource:MN}),reloadPluginCommandSource:MN,agentName:l.agentName??Ib,activePresetId:u,persona:l.persona,...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification}}),process.exit(0)}exports.startCli=KH;
390
+ `)}function Az(e){let t=e.lastIndexOf(`[`);if(t<=0||!e.endsWith(`]`))return;let n=e.slice(0,t),r=e.slice(t+1,e.length-1);if(/^\d+$/.test(r))return{portKey:n,index:Number.parseInt(r,10)}}const J={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,CANCELLED:`cancelled`},Y={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,UPSTREAM_FAILED:`upstream_failed`,SKIPPED:`skipped`,CANCELLED:`cancelled`},jz={STARTED:`execution.started`,COMPLETED:`execution.completed`,FAILED:`execution.failed`},Mz={STARTED:`task.started`,COMPLETED:`task.completed`,FAILED:`task.failed`},Nz={[`${J.CREATED}:QUEUE`]:J.QUEUED,[`${J.CREATED}:CANCEL`]:J.CANCELLED,[`${J.QUEUED}:START`]:J.RUNNING,[`${J.QUEUED}:CANCEL`]:J.CANCELLED,[`${J.RUNNING}:COMPLETE_SUCCESS`]:J.SUCCESS,[`${J.RUNNING}:COMPLETE_FAILURE`]:J.FAILED,[`${J.RUNNING}:CANCEL`]:J.CANCELLED};function Pz(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`DagRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function Fz(e){return`run.${e}`}var Iz=class{static transition(e,t){let n=Nz[`${e}:${t}`];return n?{ok:!0,value:{nextStatus:n,domainEvents:[Fz(n)]}}:{ok:!1,error:Pz(e,t)}}};const Lz={[`${Y.CREATED}:QUEUE`]:Y.QUEUED,[`${Y.CREATED}:CANCEL`]:Y.CANCELLED,[`${Y.QUEUED}:START`]:Y.RUNNING,[`${Y.QUEUED}:UPSTREAM_FAIL`]:Y.UPSTREAM_FAILED,[`${Y.QUEUED}:SKIP`]:Y.SKIPPED,[`${Y.QUEUED}:CANCEL`]:Y.CANCELLED,[`${Y.RUNNING}:COMPLETE_SUCCESS`]:Y.SUCCESS,[`${Y.RUNNING}:COMPLETE_FAILURE`]:Y.FAILED,[`${Y.RUNNING}:CANCEL`]:Y.CANCELLED,[`${Y.FAILED}:RETRY`]:Y.QUEUED};function Rz(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`TaskRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function zz(e){return`task.${e}`}var Bz=class{static transition(e,t){let n=Lz[`${e}:${t}`];return n?{ok:!0,value:{nextStatus:n,domainEvents:[zz(n)]}}:{ok:!1,error:Rz(e,t)}}};function Vz(e,t,n,r,i,a,o){return{code:t,category:e,message:n,retryable:r,context:i,fix:a,agentHint:o}}function X(e,t,n,r,i){return Vz(`validation`,e,t,!1,n,r,i)}function Hz(e,t,n,r,i){return Vz(`dispatch`,e,t,!0,n,r,i)}function Uz(e,t,n,r,i,a){return Vz(`task_execution`,e,t,n,r,i,a)}function Wz(e){let t=Date.parse(e);return Number.isNaN(t)?{ok:!1,error:X(`DAG_VALIDATION_INVALID_LOGICAL_DATE`,`logicalDate must be a valid ISO-8601 datetime string`,{logicalDate:e})}:{ok:!0,value:new Date(t).toISOString()}}var Gz=class{clock;constructor(e){this.clock=e}resolve(e,t){let n=this.clock.nowIso();if(e===`scheduled`){if(!t)return{ok:!1,error:X(`DAG_VALIDATION_MISSING_LOGICAL_DATE`,`scheduled trigger requires logicalDate`,{trigger:e})};let r=Wz(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=Wz(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}},Kz=class{assertWithinBudget(e,t,n){if(t<0)return{ok:!1,error:X(`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:X(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:r,runCreditLimit:n})}:{ok:!0,value:r}}},qz=class{lifecycleFactory;costPolicyEvaluator;constructor(e,t){this.lifecycleFactory=e,this.costPolicyEvaluator=t}async runNode(e){let t=this.lifecycleFactory.create(e.context.nodeDefinition.nodeType);if(!t.ok)return t;let n=await t.value.initialize(e.context);if(!n.ok)return n;let r=await t.value.validateInput(e.input,e.context);if(!r.ok)return await t.value.dispose(e.context),r;let i=await t.value.estimateCost(e.input,e.context);if(!i.ok)return await t.value.dispose(e.context),i;let a=this.costPolicyEvaluator.assertWithinBudget(e.context.currentTotalCredits,i.value.estimatedCredits,e.context.runCreditLimit);if(!a.ok)return await t.value.dispose(e.context),a;let o=await t.value.execute(e.input,e.context);if(!o.ok)return await t.value.dispose(e.context),o;let s=await t.value.validateOutput(o.value,e.context);return s.ok?(await t.value.dispose(e.context)).ok?{ok:!0,value:{output:o.value,estimatedCredits:i.value.estimatedCredits,totalCredits:a.value}}:{ok:!1,error:Uz(`DAG_TASK_EXECUTION_DISPOSE_FAILED`,`Node dispose step failed after execution`,!1,{nodeType:e.context.nodeDefinition.nodeType,taskRunId:e.context.taskRunId})}:(await t.value.dispose(e.context),s)}},Jz=class{create(e){return{ok:!1,error:X(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},Yz=class{nodeManifestRegistry;lifecycleFactory;runner;constructor(e,t){this.nodeManifestRegistry=e,this.lifecycleFactory=t??new Jz,this.runner=new qz(this.lifecycleFactory,new Kz)}async execute(e){if(!e.nodeDefinition)return{ok:!1,error:X(`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:X(`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:{dagId:e.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeDefinition:e.nodeDefinition,nodeManifest:t,attempt:e.attempt,executionPath:e.executionPath,runCreditLimit:e.costPolicy?.runCreditLimit,currentTotalCredits:e.currentTotalCredits??0}});return n.ok?{ok:!0,output:n.value.output,estimatedCredits:n.value.estimatedCredits,totalCredits:n.value.totalCredits}:n}};const Xz={root:`.workflows`,workflowExt:`.json`};function Zz(e,t){return`${e}:${t}`}var Qz=class{definitions=new Map;latestPublishedVersionByDagId=new Map;dagRuns=new Map;taskRuns=new Map;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=Zz(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,errorCode:n?.code,errorMessage:n?.message};this.taskRuns.set(r,a);return}}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};this.taskRuns.set(t,r);return}}},$z=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)}},eB=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 renew(e,t,n){let r=this.records.get(e);if(!r||r.ownerId!==t)return;let i=Date.now(),a={leaseKey:e,ownerId:t,acquiredAt:r.acquiredAt,leaseUntil:new Date(i+n).toISOString()};return this.records.set(e,a),a}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)}},tB=class{nowIso(){return new Date().toISOString()}nowEpochMs(){return Date.now()}};function nB(e,t,n){let r=n.issues[0];return X(`DAG_VALIDATION_NODE_CONFIG_SCHEMA_INVALID`,`Node config does not satisfy schema: ${r?.path.join(`.`)??`config`} ${r?.message??`Invalid config`}`,{nodeId:t.nodeDefinition.nodeId,nodeType:e,issueCount:n.issues.length})}var Z=class{defaultInputPort;defaultOutputPort;taskHandler;constructor(){this.taskHandler={initialize:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.initializeWithConfig(e,t.value):t},validateInput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateInputWithConfig(e,t,n.value):n},estimateCost:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.estimateCostWithConfig(e,t,n.value):n},execute:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.executeWithConfig(e,t,n.value):n},validateOutput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateOutputWithConfig(e,t,n.value):n},dispose:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.disposeWithConfig(e,t.value):t}}}parseNodeConfig(e){let t=this.configSchemaDefinition.safeParse(e.nodeDefinition.config);return t.success?{ok:!0,value:t.data}:{ok:!1,error:nB(this.nodeType,e,t.error)}}async initializeWithConfig(e,t){return{ok:!0,value:void 0}}async validateInputWithConfig(e,t,n){return{ok:!0,value:void 0}}async validateOutputWithConfig(e,t,n){return{ok:!0,value:void 0}}async disposeWithConfig(e,t){return{ok:!0,value:void 0}}};const rB=`asset://`;var iB=class e{value;constructor(e){this.value=e}static fromAssetReference(t){return t.referenceType===`asset`?new e({referenceType:`asset`,assetId:t.assetId,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes}):new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}static fromBinary(t){if(typeof t.assetId==`string`&&t.assetId.trim().length>0)return{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mimeType,sizeBytes:t.sizeBytes})};if(t.uri.startsWith(rB)){let n=t.uri.slice(8).trim();return n.length===0?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`Binary asset URI must include non-empty assetId`)}:{ok:!0,value:new e({referenceType:`asset`,assetId:n,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}return{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}static fromCandidate(e,t){let n=typeof e.assetId==`string`&&(t?.allowEmptyAssetId===!0||e.assetId.trim().length>0),r=typeof e.uri==`string`&&(t?.allowEmptyUri===!0||e.uri.trim().length>0);return n===r?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_XOR_REQUIRED`,`Exactly one of assetId or uri must be provided`)}:e.referenceType===`asset`&&!n?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType asset requires assetId`)}:e.referenceType===`uri`&&!r?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType uri requires uri`)}:this.buildFromValidatedCandidate(e,n)}static buildFromValidatedCandidate(t,n){return n&&typeof t.assetId==`string`?{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:typeof t.uri==`string`?{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`uri must be a string when referenceType is uri`)}}isAsset(){return this.value.referenceType===`asset`}isUri(){return this.value.referenceType===`uri`}assetId(){return this.value.assetId}uri(){return this.value.uri}mediaType(){return this.value.mediaType}toAssetIdOrUri(){return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{referenceType:`asset`,assetId:this.value.assetId}:{referenceType:`uri`,uri:this.value.uri??``}}toAssetContentUrl(e){if(!(!this.isAsset()||typeof this.value.assetId!=`string`))return`${e.replace(/\/$/,``)}/view?filename=${encodeURIComponent(this.value.assetId)}`}toBinary(e,t){let n=typeof this.value.mediaType==`string`&&this.value.mediaType.trim().length>0?this.value.mediaType:t;return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{kind:e,mimeType:n,uri:`${rB}${this.value.assetId}`,referenceType:`asset`,assetId:this.value.assetId,sizeBytes:this.value.sizeBytes}:{kind:e,mimeType:n,uri:this.value.uri??``,referenceType:`uri`,sizeBytes:this.value.sizeBytes}}};function aB(e,t,n,r){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be binary payload object`,{nodeId:t,key:n,expectedType:`binary`})};let i=e;if(!(i.kind===`image`||i.kind===`video`||i.kind===`audio`||i.kind===`file`)||typeof i.mimeType!=`string`||typeof i.uri!=`string`)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be valid binary payload`,{nodeId:t,key:n,expectedType:`binary`})};let a=i.kind;return r&&a!==r?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input binary kind does not match expected kind`,{nodeId:t,key:n,expectedKind:r,actualKind:a})}:{ok:!0,value:{kind:a,mimeType:i.mimeType,uri:i.uri,referenceType:i.referenceType===`asset`||i.referenceType===`uri`?i.referenceType:void 0,assetId:typeof i.assetId==`string`?i.assetId:void 0,sizeBytes:typeof i.sizeBytes==`number`?i.sizeBytes:void 0}}}var Q=class{input;nodeId;output={};constructor(e,t){this.input=e,this.nodeId=t}getInput(e){return this.input[e]}requireInput(e){let t=this.getInput(e);return t===void 0?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!0,value:t}}requireInputString(e){let t=this.requireInput(e);return t.ok?typeof t.value==`string`?{ok:!0,value:t.value}:{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be string`,{nodeId:this.nodeId,key:e,expectedType:`string`})}:t}requireInputArray(e){let t=this.getInput(e);if(Array.isArray(t))return{ok:!0,value:t};let n=this.collectListHandleValues(e);return n?{ok:!0,value:n}:t===void 0?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be array`,{nodeId:this.nodeId,key:e,expectedType:`array`})}}requireInputBinary(e,t){let n=this.requireInput(e);return n.ok?aB(n.value,this.nodeId,e,t):n}requireInputBinaryList(e,t,n){let r=this.requireInputArray(e);if(!r.ok)return r;let i=r.value;if(typeof n?.minItems==`number`&&i.length<n.minItems)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`,`Node input list does not satisfy minItems`,{nodeId:this.nodeId,key:e,minItems:n.minItems,actualItems:i.length})};if(typeof n?.maxItems==`number`&&i.length>n.maxItems)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`,`Node input list exceeds maxItems`,{nodeId:this.nodeId,key:e,maxItems:n.maxItems,actualItems:i.length})};let a=[];for(let[n,r]of i.entries()){let i=aB(r,this.nodeId,`${e}[${n}]`,t);if(!i.ok)return i;a.push(i.value)}return{ok:!0,value:a}}requireInputMediaReference(e,t){let n=this.requireInput(e);return n.ok?this.parseMediaReferenceValue(n.value,e,t):n}requireInputBinaryReference(e,t){let n=this.requireInputBinary(e,t);if(!n.ok)return n;let r=iB.fromBinary(n.value);return r.ok?r:{ok:!1,error:X(r.error.code,r.error.message,{nodeId:this.nodeId,key:e,...r.error.context??{}})}}setOutput(e,t){this.output[e]=t}toOutput(){return{...this.output}}collectListHandleValues(e){let t=new Map;for(let[n,r]of Object.entries(this.input)){let i=Az(n);!i||i.portKey!==e||t.set(i.index,r)}if(t.size===0)return;let n=[...t.keys()].sort((e,t)=>e-t),r=n[n.length-1]+1;if(n.length!==r)return;let i=[];for(let e=0;e<r;e+=1){let n=t.get(e);if(n===void 0)return;i.push(n)}return i}parseMediaReferenceValue(e,t,n){if(typeof e==`string`){if(n?.allowStringAssetUri===!0&&e.startsWith(`asset://`))return this.wrapMediaReferenceError(iB.fromCandidate({referenceType:`asset`,assetId:e.slice(8)}),t);if(n?.allowStringUri===!0)return this.wrapMediaReferenceError(iB.fromCandidate({referenceType:`uri`,uri:e}),t)}return typeof e!=`object`||!e||Array.isArray(e)?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be media reference object`,{nodeId:this.nodeId,key:t,expectedType:`media-reference`})}:this.wrapMediaReferenceError(iB.fromCandidate(e),t)}wrapMediaReferenceError(e,t){return e.ok?e:{ok:!1,error:X(e.error.code,e.error.message,{nodeId:this.nodeId,key:t,...e.error.context??{}})}}};function oB(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.kind==`string`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}function sB(e,t){if(e.isList)return Array.isArray(t)?t.every(t=>sB({...e,isList:!1},t)):!1;switch(e.type){case`string`:return typeof t==`string`;case`number`:return typeof t==`number`;case`boolean`:return typeof t==`boolean`;case`object`:return typeof t==`object`&&!!t&&!Array.isArray(t)&&!oB(t);case`array`:return Array.isArray(t);case`binary`:return!(!oB(t)||e.binaryKind&&t.kind!==e.binaryKind||e.mimeTypes&&e.mimeTypes.length>0&&!e.mimeTypes.includes(t.mimeType));default:return!1}}function cB(e,t,n,r){for(let i of t){let t=e[i.key];if(t===void 0){if(i.required)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_REQUIRED_INPUT_MISSING`:`DAG_VALIDATION_NODE_REQUIRED_OUTPUT_MISSING`,n===`input`?`Required input port "${i.key}" (${i.type}) is missing on node "${r}"`:`Required output port "${i.key}" (${i.type}) was not set by node "${r}"`,{nodeId:r,key:i.key,type:i.type},n===`input`?{action:`connect_port`,suggestion:`Connect a "${i.type}" output to the "${i.key}" input of node "${r}"`}:void 0)};continue}if(i.isList){if(!Array.isArray(t))return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`List input port must receive array payload`:`List output port must emit array payload`,{nodeId:r,key:i.key,type:i.type})};if(typeof i.minItems==`number`&&t.length<i.minItems)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`:`DAG_VALIDATION_NODE_OUTPUT_MIN_ITEMS_NOT_SATISFIED`,n===`input`?`List input port does not satisfy minItems`:`List output port does not satisfy minItems`,{nodeId:r,key:i.key,minItems:i.minItems,actualItems:t.length})};if(typeof i.maxItems==`number`&&t.length>i.maxItems)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`:`DAG_VALIDATION_NODE_OUTPUT_MAX_ITEMS_EXCEEDED`,n===`input`?`List input port exceeds maxItems`:`List output port exceeds maxItems`,{nodeId:r,key:i.key,maxItems:i.maxItems,actualItems:t.length})}}if(!sB(i,t))return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`Input port "${i.key}" on node "${r}" expects type "${i.type}" but received incompatible value`:`Output port "${i.key}" on node "${r}" emitted value incompatible with type "${i.type}"`,{nodeId:r,key:i.key,type:i.type},n===`input`?{action:`check_port_type`,suggestion:`Ensure the upstream output connected to "${i.key}" produces a "${i.type}" value`}:void 0)}}return{ok:!0,value:void 0}}var lB=class{handler;constructor(e){this.handler=e}async initialize(e){return this.handler.initialize?this.handler.initialize(e):{ok:!0,value:void 0}}async validateInput(e,t){let n=cB(e,t.nodeManifest.inputs,`input`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateInput?this.handler.validateInput(e,t):{ok:!0,value:void 0}:n}async estimateCost(e,t){return this.handler.estimateCost?this.handler.estimateCost(e,t):{ok:!0,value:{estimatedCredits:0}}}async execute(e,t){return this.handler.execute(e,t)}async validateOutput(e,t){let n=cB(e,t.nodeManifest.outputs,`output`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateOutput?this.handler.validateOutput(e,t):{ok:!0,value:void 0}:n}async dispose(e){return this.handler.dispose?this.handler.dispose(e):{ok:!0,value:void 0}}},uB=class{handlersByType;constructor(e){this.handlersByType=e}getHandler(e){return this.handlersByType[e]}listNodeTypes(){return Object.keys(this.handlersByType)}},dB=class{taskHandlerRegistry;constructor(e){this.taskHandlerRegistry=e}create(e){let t=this.taskHandlerRegistry.getHandler(e);return t?{ok:!0,value:new lB(t)}:{ok:!1,error:X(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},fB=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()]}};const pB=v.z.string().trim().min(1);v.z.enum([`asset`,`uri`]);const mB=v.z.object({referenceType:v.z.literal(`asset`),assetId:pB,mediaType:v.z.string().optional(),name:v.z.string().optional(),sizeBytes:v.z.number().int().nonnegative().optional()}),hB=v.z.object({referenceType:v.z.literal(`uri`),uri:pB,mediaType:v.z.string().optional(),name:v.z.string().optional(),sizeBytes:v.z.number().int().nonnegative().optional()}),gB=v.z.union([mB,hB]);function _B(){return v.z.object({asset:gB})}function vB(e){return typeof e!=`object`||!e?!1:e instanceof v.z.ZodType}function yB(e){return e==null?{ok:!0,value:{}}:vB(e)?{ok:!0,value:(0,se.zodToJsonSchema)(e,{target:`jsonSchema7`})}:{ok:!1,error:X(`DAG_VALIDATION_CONFIG_SCHEMA_INVALID`,`configSchemaDefinition must be a Zod schema instance.`)}}function bB(e){let t=[],n={};for(let r of e){let e=yB(r.configSchemaDefinition);if(!e.ok)return e;let i={nodeType:r.nodeType,displayName:r.displayName,category:r.category,inputs:r.inputs,outputs:r.outputs,configSchema:e.value,...r.defaultInputPort===void 0?{}:{defaultInputPort:r.defaultInputPort},...r.defaultOutputPort===void 0?{}:{defaultOutputPort:r.defaultOutputPort}};t.push(i),n[i.nodeType]=r.taskHandler}return{ok:!0,value:{manifests:t,handlersByType:n}}}const xB={IMAGE_PNG:{binaryKind:`image`,mimeTypes:[`image/png`]},IMAGE_COMMON:{binaryKind:`image`,mimeTypes:[`image/png`,`image/jpeg`,`image/webp`]},VIDEO_MP4:{binaryKind:`video`,mimeTypes:[`video/mp4`]},AUDIO_MPEG:{binaryKind:`audio`,mimeTypes:[`audio/mpeg`]},FILE_GENERIC:{binaryKind:`file`,mimeTypes:[]}};function SB(e){return{key:e.key,label:e.label,order:e.order,type:`binary`,required:e.required,description:e.description,binaryKind:e.preset.binaryKind,mimeTypes:[...e.preset.mimeTypes],isList:e.isList,minItems:e.minItems,maxItems:e.maxItems}}var CB=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 wB(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)?{ok:!1,error:X(`DAG_VALIDATION_PAYLOAD_INVALID`,`Payload must be a JSON object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:X(`DAG_VALIDATION_PAYLOAD_PARSE_FAILED`,`Failed to parse payload JSON`)}}}function TB(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)||!(`dagId`in t)||!(`version`in t)||!(`nodes`in t)||!(`edges`in t)||!(`status`in t)||typeof t.dagId!=`string`||typeof t.version!=`number`||!Array.isArray(t.nodes)||!Array.isArray(t.edges)||typeof t.status!=`string`?{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`Definition snapshot must be a valid DAG definition object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse definition snapshot JSON`)}}}async function EB(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:X(`DAG_VALIDATION_NO_ENTRY_NODE`,`DAG must include at least one entry node (dependsOn = [])`,{dagId:o.dagId,version:o.version})};let l=Iz.transition(`created`,`QUEUE`);if(!l.ok)return l;await t.updateDagRunStatus(a,l.value.nextStatus);let u=Iz.transition(`queued`,`START`);if(!u.ok)return u;await t.updateDagRunStatus(a,u.value.nextStatus),i?.publish({dagRunId:a,eventType:jz.STARTED,occurredAt:r.nowIso(),dagId:o.dagId,version:o.version});let d=[];for(let e of c){let c=`${a}:${e.nodeId}:attempt:1`;d.push(c),await t.createTaskRun({taskRunId:c,dagRunId:a,nodeId:e.nodeId,status:`queued`,attempt:1});let l={messageId:`${c}:message`,dagRunId:a,taskRunId:c,nodeId:e.nodeId,attempt:1,executionPath:[`dagId:${o.dagId}`,`dagRunId:${a}`,`nodeId:${e.nodeId}`,`taskRunId:${c}`,`attempt:1`],payload:s,createdAt:r.nowIso()};try{await n.enqueue(l)}catch(n){return DB(a,c,e.nodeId,d,n,t,r,i)}}return{ok:!0,value:{taskRunIds:d}}}async function DB(e,t,n,r,i,a,o,s){let c=Hz(`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`}),l=Bz.transition(`queued`,`CANCEL`);if(l.ok){await a.updateTaskRunStatus(t,l.value.nextStatus,c);for(let e of r)e!==t&&await a.updateTaskRunStatus(e,l.value.nextStatus,c)}let u=Iz.transition(`running`,`COMPLETE_FAILURE`);return u.ok&&(await a.updateDagRunStatus(e,u.value.nextStatus,o.nowIso()),s?.publish({dagRunId:e,eventType:jz.FAILED,occurredAt:o.nowIso(),error:c})),{ok:!1,error:c}}var OB=class{storage;queue;clock;runProgressEventReporter;timeSemanticsService;constructor(e,t,n,r){this.storage=e,this.queue=t,this.clock=n,this.runProgressEventReporter=r,this.timeSemanticsService=new Gz(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:X(`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:X(`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=e.rerunKey?`${t.dagId}:${n.value.logicalDate}:rerun:${e.rerunKey}`:`${t.dagId}:${n.value.logicalDate}`,i=await this.storage.getDagRunByRunKey(r);if(i)return{ok:!0,value:{dagRunId:i.dagRunId,dagId:i.dagId,version:i.version,logicalDate:i.logicalDate,status:i.status}};let a=this.generateDagRunId(t.dagId,n.value.logicalDate,e.rerunKey);try{await this.storage.createDagRun({dagRunId:a,dagId:t.dagId,version:t.version,status:`created`,definitionSnapshot:JSON.stringify(t),inputSnapshot:JSON.stringify(e.input),runKey:r,logicalDate:n.value.logicalDate,trigger:e.trigger,startedAt:this.clock.nowIso()})}catch(e){return{ok:!1,error:Hz(`DAG_DISPATCH_DAG_RUN_CREATE_FAILED`,`Failed to create DagRun`,{dagId:t.dagId,version:t.version,runKey:r,errorMessage:this.resolveErrorMessage(e instanceof Error?e:void 0)})}}return{ok:!0,value:{dagRunId:a,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:X(`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:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:e})};let n=TB(t.definitionSnapshot);if(!n.ok)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot is invalid`,{dagRunId:e})};let r=wB(t.inputSnapshot??`{}`);if(!r.ok)return{ok:!1,error:X(`DAG_VALIDATION_RUN_INPUT_SNAPSHOT_INVALID`,`DagRun input snapshot is invalid`,{dagRunId:e})};let i=await EB({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`}},kB=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:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})}}},AB=class{storage;clock;constructor(e,t){this.storage=e,this.clock=t}async cancelRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};let n=Iz.transition(t.status,`CANCEL`);return n.ok?(await this.storage.updateDagRunStatus(e,n.value.nextStatus,this.clock.nowIso()),{ok:!0,value:{dagRunId:e,status:`cancelled`}}):n}};function jB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function MB(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function NB(e,t,n){let r=e.nodes.find(e=>e.nodeId===n);if(!r)return{ok:!1,error:X(`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=PB(a,e,r,t);if(!n.ok)return n}return zB(a,r.inputs??[]),{ok:!0,value:a}}function PB(e,t,n,r){if(!t.bindings||t.bindings.length===0)return{ok:!1,error:X(`DAG_VALIDATION_BINDING_REQUIRED`,`Incoming edge must define at least one binding`,{from:t.from,to:t.to})};let i=FB(t.from,t.to,r);if(!i.ok)return i;let a=i.value;for(let r of t.bindings){let i=IB(e,r,a,t,n);if(!i.ok)return i}return{ok:!0,value:void 0}}function FB(e,t,n){let r=n.find(t=>t.nodeId===e&&t.status===`success`);if(!r||!r.outputSnapshot)return{ok:!1,error:X(`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 MB(n)?{ok:!0,value:n}:{ok:!1,error:X(`DAG_VALIDATION_UPSTREAM_OUTPUT_INVALID`,`Upstream output snapshot has invalid payload shape`,{from:e,to:t})}}catch(n){return{ok:!1,error:X(`DAG_VALIDATION_UPSTREAM_OUTPUT_PARSE_FAILED`,`Failed to parse upstream output snapshot`,{from:e,to:t,errorMessage:jB(n)})}}}function IB(e,t,n,r,i){let a=n[t.outputKey];if(a===void 0)return{ok:!1,error:X(`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 LB(e,t.inputKey,a,r.to);let o=Az(t.inputKey);return o?RB(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:X(`DAG_VALIDATION_BINDING_INPUT_KEY_CONFLICT`,`Multiple bindings target the same input key`,{to:r.to,inputKey:t.inputKey})}}function LB(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:X(`DAG_VALIDATION_BINDING_LIST_PAYLOAD_INVALID`,`List payload container is invalid`,{to:r,inputKey:t})}}function RB(e,t,n,r,i,a){if(!(a.inputs??[]).find(e=>e.key===t.portKey)?.isList)return{ok:!1,error:X(`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 zB(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 BB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function VB(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 HB(e,t,n,c,i,a,o);if(!r.ok)return r}return{ok:!0,value:void 0}}async function HB(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`;await i.createTaskRun({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1});let c=NB(t,r,n.nodeId);if(!c.ok)return c;let l=n.timeoutMs?{...c.value,timeoutMs:n.timeoutMs}:c.value,u={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:l,createdAt:o.nowIso()};try{await a.enqueue(u)}catch(t){let r=Bz.transition(`queued`,`CANCEL`);return r.ok&&await i.updateTaskRunStatus(s,r.value.nextStatus),{ok:!1,error:Hz(`DAG_DISPATCH_ENQUEUE_DOWNSTREAM_FAILED`,`Failed to enqueue downstream task`,{dagRunId:e.dagRunId,nodeId:n.nodeId,errorMessage:BB(t)})}}return r.push({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1}),{ok:!0,value:void 0}}const UB=new Set([`created`,`queued`,`running`]),WB=new Set([`failed`]);async function GB(e,t,n,r){let i=await t.getDagRun(e);if(!i)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found while finalizing run status`,{dagRunId:e})};if(i.status!==`running`)return{ok:!0,value:void 0};let a=await t.listTaskRunsByDagRunId(e);if(a.some(e=>UB.has(e.status)))return{ok:!0,value:void 0};let o=a.some(e=>WB.has(e.status)),s=Iz.transition(i.status,o?`COMPLETE_FAILURE`:`COMPLETE_SUCCESS`);return s.ok?(await t.updateDagRunStatus(e,s.value.nextStatus,n.nowIso()),o?KB(e,a,n,r):r?.publish({dagRunId:e,eventType:jz.COMPLETED,occurredAt:n.nowIso()}),{ok:!0,value:void 0}):s}function KB(e,t,n,r){let i=t.find(e=>WB.has(e.status)),a=typeof i?.errorCode==`string`&&typeof i.errorMessage==`string`?Uz(i.errorCode,i.errorMessage,!1,{dagRunId:e,taskRunId:i.taskRunId,nodeId:i.nodeId}):Uz(`DAG_TASK_EXECUTION_FAILED`,`Run completed with failure.`,!1,{dagRunId:e});r?.publish({dagRunId:e,eventType:jz.FAILED,occurredAt:n.nowIso(),error:a})}function qB(e,t){return Uz(`DAG_TASK_EXECUTION_TIMEOUT`,`Task execution timed out after ${t}ms`,!0,{taskRunId:e,timeoutMs:t})}function JB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function YB(e,t,n,r){return new Promise(i=>{let a=!1,o=setTimeout(()=>{a||(a=!0,i({ok:!1,error:qB(r,n)}))},n);e.execute(t).then(e=>{a||(a=!0,clearTimeout(o),i(e))}).catch(e=>{a||(a=!0,clearTimeout(o),i({ok:!1,error:Uz(`DAG_TASK_EXECUTION_EXCEPTION`,`Task executor threw an exception`,!0,{taskRunId:r,errorMessage:JB(e)})}))})})}function XB(e){let t=0;for(let n of e)typeof n.totalCredits==`number`&&n.totalCredits>t&&(t=n.totalCredits);return t}function ZB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function QB(e,t){if(typeof e.definitionSnapshot!=`string`||e.definitionSnapshot.trim().length===0)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:t})};try{let n=JSON.parse(e.definitionSnapshot);return $B(n)?{ok:!0,value:n}:{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:t})}}catch(e){return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse DagRun definition snapshot`,{dagRunId:t,errorMessage:ZB(e)})}}}function $B(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&typeof e.dagId==`string`&&typeof e.version==`number`&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&typeof e.status==`string`}async function eV(e,t){let n=await e.getDagRun(t.dagRunId);if(!n)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found for dequeued message`,{dagRunId:t.dagRunId})};let r=QB(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:X(`DAG_VALIDATION_NODE_NOT_FOUND`,`Node definition not found for task execution`,{nodeId:t.nodeId,dagId:n.dagId,version:n.version})}}function tV(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 nV(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function rV(e,t,n,r,i,a,o,s){if(r.deadLetterEnabled){let t=await aV(e,n,r,o);if(!t.ok)return oV(a,e.messageId,t.error)}let c=await GB(e.dagRunId,i,o,s);return c.ok?sV(a,e.messageId,t,!1):oV(a,e.messageId,c.error)}async function iV(e,t,n,r,i){let a=Bz.transition(`failed`,`RETRY`);if(!a.ok)return oV(r,e.messageId,a.error);await n.incrementTaskAttempt(t),await n.updateTaskRunStatus(t,a.value.nextStatus);let o=e.attempt+1,s={...e,messageId:`${e.taskRunId}:message:${o}`,attempt:o,executionPath:tV(e.executionPath,o),createdAt:i.nowIso()};try{await r.enqueue(s)}catch(n){return oV(r,e.messageId,Hz(`DAG_DISPATCH_ENQUEUE_RETRY_FAILED`,`Failed to enqueue retry message`,{taskRunId:t,attempt:o,errorMessage:nV(n)}))}return sV(r,e.messageId,t,!0)}async function aV(e,t,n,r){if(!n.deadLetterQueue)return{ok:!1,error:X(`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:Hz(`DAG_DISPATCH_DEAD_LETTER_ENQUEUE_FAILED`,`Failed to enqueue dead letter message`,{taskRunId:e.taskRunId,originalMessageId:e.messageId,errorMessage:nV(t)})}}}async function oV(e,t,n){return await e.ack(t),{ok:!1,error:n}}async function sV(e,t,n,r){return await e.ack(t),{ok:!0,value:{processed:!0,taskRunId:n,retried:r}}}var cV=class{storage;queue;lease;executor;clock;options;runProgressEventReporter;constructor(e,t,n,r,i,a,o){this.storage=e,this.queue=t,this.lease=n,this.executor=r,this.clock=i,this.options=a,this.runProgressEventReporter=o}async processOnce(){let e=await this.queue.dequeue(this.options.workerId,this.options.visibilityTimeoutMs,this.options.idleWaitMs);if(!e)return{ok:!0,value:{processed:!1}};let t=`taskRun:${e.taskRunId}`;if(!await this.lease.acquire(t,this.options.workerId,this.options.leaseDurationMs))return await this.queue.nack(e.messageId),{ok:!0,value:{processed:!1}};try{return this.processAcquiredMessage(e)}finally{await this.lease.release(t,this.options.workerId)}}async processAcquiredMessage(e){let t=await this.storage.getTaskRun(e.taskRunId);if(!t)return oV(this.queue,e.messageId,X(`DAG_VALIDATION_TASK_RUN_NOT_FOUND`,`TaskRun not found for dequeued message`,{taskRunId:e.taskRunId}));let n=await this.transitionToRunning(e,t);if(!n.ok)return oV(this.queue,e.messageId,n.error);let r=await eV(this.storage,e);if(!r.ok)return oV(this.queue,e.messageId,r.error);let{dagRun:i,definition:a,nodeDefinition:o}=r.value,s=await this.buildExecutionInput(e,i,a,o),c=this.resolveTimeoutMs(e),l=await YB(this.executor,s,c,e.taskRunId);return l.ok?this.handleSuccessPath(e,t.taskRunId,i,a,l.output,l.estimatedCredits,l.totalCredits):this.handleFailurePath(e,t.taskRunId,l.error)}async transitionToRunning(e,t){let n=Bz.transition(t.status,`START`);return n.ok?(await this.storage.updateTaskRunStatus(t.taskRunId,n.value.nextStatus),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.STARTED,occurredAt:this.clock.nowIso(),taskRunId:t.taskRunId,nodeId:e.nodeId,input:e.payload}),await this.storage.saveTaskRunSnapshots(t.taskRunId,JSON.stringify(e.payload)),{ok:!0,value:void 0}):n}async buildExecutionInput(e,t,n,r){let i=XB(await this.storage.listTaskRunsByDagRunId(e.dagRunId));return{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:i}}async handleSuccessPath(e,t,n,r,i,a,o){let s=Bz.transition(`running`,`COMPLETE_SUCCESS`);if(!s.ok)return oV(this.queue,e.messageId,s.error);await this.completeTaskRun(e,t,s.value.nextStatus,i,a,o);let c=await VB(n,r,e.nodeId,i,this.storage,this.queue,this.clock);if(!c.ok)return oV(this.queue,e.messageId,c.error);let l=await GB(e.dagRunId,this.storage,this.clock,this.runProgressEventReporter);return l.ok?sV(this.queue,e.messageId,t,!1):oV(this.queue,e.messageId,l.error)}async handleFailurePath(e,t,n){let r=Bz.transition(`running`,`COMPLETE_FAILURE`);return r.ok?(await this.storage.updateTaskRunStatus(t,r.value.nextStatus,n),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.FAILED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,error:n}),this.options.retryEnabled&&n.retryable&&e.attempt<this.options.maxAttempts?iV(e,t,this.storage,this.queue,this.clock):rV(e,t,n,this.options,this.storage,this.queue,this.clock,this.runProgressEventReporter)):oV(this.queue,e.messageId,r.error)}async completeTaskRun(e,t,n,r,i,a){await this.storage.updateTaskRunStatus(t,n),await this.storage.saveTaskRunSnapshots(t,void 0,JSON.stringify(r),i,a),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.COMPLETED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,output:r})}resolveTimeoutMs(e){let t=e.payload.timeoutMs;return typeof t==`number`&&t>0?t:this.options.defaultTimeoutMs}};function lV(e,t){let n={...t,retryEnabled:t.retryEnabled??!1,deadLetterEnabled:t.deadLetterEnabled??!1,deadLetterQueue:e.deadLetterQueue};return new cV(e.storage,e.queue,e.lease,e.executor,e.clock,n,e.runProgressEventReporter)}function uV(e){return`parallel`in e}function dV(e,t){return e.id??`${e.nodeType}-${t}`}function fV(e,t){return e.find(e=>e.nodeType===t)}function pV(e,t){let n=t.map(e=>e.nodeType),r={action:`replace_node_type`,suggestion:n[0],options:n};return X(`UNKNOWN_NODE_TYPE`,`Node type "${e}" is not registered`,{requestedType:e},r)}function mV(e,t){let n=[],r=[],i=[],a=[],o=0;for(let s of e.pipeline)if(uV(s)){let e=[];for(let c of s.parallel){let l=dV(c,o);o+=1;let u=fV(t,c.nodeType);if(!u)return{ok:!1,error:pV(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=dV(s,o);o+=1;let c=fV(t,s.nodeType);if(!c)return{ok:!1,error:pV(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:X(`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}}const hV=`Robota`,gV=`robota_config`;function _V(e){return`${hV}${e.split(`-`).map(e=>e.length>0?e[0].toUpperCase()+e.slice(1):``).join(``)}`}function vV(e){return(e.startsWith(hV)?e.slice(6):e).replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`).replace(/^-/,``)}function yV(e){let t=new Map;e.nodes.forEach((e,n)=>{t.set(e.nodeId,n+1)});let n=new Map,r=new Map;for(let t of e.edges)for(let e of t.bindings??[]){n.has(t.from)||n.set(t.from,new Map);let i=n.get(t.from);i.has(e.outputKey)||i.set(e.outputKey,i.size),r.has(t.to)||r.set(t.to,new Map);let a=r.get(t.to);a.has(e.inputKey)||a.set(e.inputKey,a.size)}let i=[],a=1,o=new Map,s=new Map;for(let n of e.nodes){let e=t.get(n.nodeId);o.set(e,[]),s.set(e,[])}for(let c of e.edges){let e=t.get(c.from),l=t.get(c.to);if(!(e===void 0||l===void 0))for(let t of c.bindings??[]){let u=a++,d=n.get(c.from)?.get(t.outputKey)??0,f=r.get(c.to)?.get(t.inputKey)??0,p=`STRING`;i.push([u,e,d,l,f,p]);let m=s.get(e),h=m.find(e=>e.name===t.outputKey);h||(h={name:t.outputKey,type:p,links:[]},m.push(h)),h.links.push(u);let g=o.get(l);g.find(e=>e.name===t.inputKey)||g.push({name:t.inputKey,type:p,link:u})}}let c=e.nodes.map(e=>{let n=t.get(e.nodeId),r=o.get(n),i=s.get(n),a={id:n,type:_V(e.nodeType),pos:[e.position?.x??0,e.position?.y??0],properties:{[gV]:e.config},widgets_values:Object.values(e.config)};return r.length>0&&(a.inputs=r),i.length>0&&(a.outputs=i),a}),l={last_node_id:e.nodes.length,last_link_id:a-1,nodes:c,links:i,version:.4},u={};for(let n of e.nodes){let e=t.get(n.nodeId),r={nodeId:n.nodeId};n.retryPolicy&&(r.retryPolicy=n.retryPolicy),n.timeoutMs!==void 0&&(r.timeoutMs=n.timeoutMs),n.costPolicy&&(r.costPolicy=n.costPolicy),u[String(e)]=r}let d={dagId:e.dagId,version:e.version,status:e.status,nodes:u};return e.costPolicy&&(d.costPolicy=e.costPolicy),e.inputSchema&&(d.inputSchema=e.inputSchema),e.outputSchema&&(d.outputSchema=e.outputSchema),{workflowFile:l,companion:d}}function bV(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:vV(e.type),dependsOn:[],config:e.properties?.[gV]??{},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=new Map;for(let t of e.links){let[,n,,r]=t,i=a.get(n),c=a.get(r);if(!i||!c)continue;let l=e.nodes.find(e=>e.id===n),u=e.nodes.find(e=>e.id===r),d=t[2],f=t[4],p=l?.outputs?.[d]?.name??`out${d}`,m=u?.inputs?.[f]?.name??`in${f}`,h=`${i.nodeId}:${c.nodeId}`;o.has(h)||o.set(h,[]),o.get(h).push({outputKey:p,inputKey:m}),s.has(c.nodeId)||s.set(c.nodeId,new Set),s.get(c.nodeId).add(i.nodeId)}for(let e of i){let t=s.get(e.nodeId);t&&(e.dependsOn=[...t])}let c=[];for(let[e,t]of o){let[n,r]=e.split(`:`);c.push({from:n,to:r,bindings:t})}return{dagId:t?.dagId??`unknown`,version:t?.version??1,status:t?.status??`active`,nodes:i,edges:c,...t?.costPolicy?{costPolicy:t.costPolicy}:{},...t?.inputSchema?{inputSchema:t.inputSchema}:{},...t?.outputSchema?{outputSchema:t.outputSchema}:{}}}function xV(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.links)&&typeof t.version==`number`&&!(`dagId`in t)}function SV(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.dagId==`string`&&Array.isArray(t.nodes)}const CV=v.z.object({text:v.z.string().default(``)});var wV=class extends Z{nodeType=`input`;displayName=`Input`;category=`Core`;defaultOutputPort=`text`;inputs=[];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=CV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`input`),i=typeof e.text==`string`?e.text:n.text;return r.setOutput(`text`,i),r.setOutput(`_agentSummary`,`Input: ${i.length} chars.`),{ok:!0,value:r.toOutput()}}};const TV=v.z.object({ports:v.z.array(v.z.string()).default([]),values:v.z.record(v.z.string()).default({})});var EV=class extends Z{nodeType=`multi-input`;displayName=`Multi-Input`;category=`Core`;inputs=[];outputs=[];configSchemaDefinition=TV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`multi-input`),i=n.ports.length>0?n.ports:Object.keys({...n.values,...e});for(let t of i){if(t===`_agentSummary`)continue;let i=typeof e[t]==`string`?e[t]:n.values[t]??``;r.setOutput(t,i)}return r.setOutput(`_agentSummary`,`Multi-input: emitted ${i.length} port(s): ${i.join(`, `)}.`),{ok:!0,value:r.toOutput()}}};const DV=v.z.object({prefix:v.z.string().default(``)});var OV=class extends Z{nodeType=`transform`;displayName=`Transform`;category=`Core`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!1},{key:`data`,label:`Data`,order:1,type:`object`,required:!1}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!1},{key:`data`,label:`Data`,order:1,type:`object`,required:!1}];configSchemaDefinition=DV;async validateInputWithConfig(e,t,n){return Object.keys(e).length===0?{ok:!1,error:X(`DAG_VALIDATION_TRANSFORM_INPUT_REQUIRED`,`Transform node requires at least one input value`,{nodeId:t.nodeDefinition.nodeId})}:{ok:!0,value:void 0}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:1e-4}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.getInput(`text`);if(typeof i==`string`){let e=`${n.prefix}${i}`;r.setOutput(`text`,e),r.setOutput(`_agentSummary`,`Transformed input. Output length: ${e.length} chars.`)}else{for(let[t,n]of Object.entries(e))r.setOutput(t,n);r.setOutput(`_agentSummary`,`Passed through ${Object.keys(e).length} port(s).`)}return{ok:!0,value:r.toOutput()}}};const kV=`__ROBOTA_TEXT_TEMPLATE_ESCAPED_PERCENT_S__`,AV=v.z.object({template:v.z.string().default(`%s`).describe(`Template string. Supports two syntaxes: {{text}} (Handlebars-style) or %s (printf-style). Both replace input text. Use %%s for a literal %s.`)});var jV=class extends Z{nodeType=`text-template`;displayName=`Text Template`;category=`Core`;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=AV;async validateInputWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId).requireInputString(`text`);return r.ok?{ok:!0,value:void 0}:r}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value,o=n.template.split(`%%s`).join(kV).replaceAll(`{{text}}`,a).split(`%s`).join(a).split(kV).join(`%s`);return r.setOutput(`text`,o),r.setOutput(`_agentSummary`,`Template rendered. Output length: ${o.length} chars.`),{ok:!0,value:r.toOutput()}}};const MV=v.z.object({});var NV=class extends Z{nodeType=`text-output`;displayName=`Text Output`;category=`Core`;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=MV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`text-output`),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,i.value),r.setOutput(`_agentSummary`,`Output: ${i.value.length} chars.`),{ok:!0,value:r.toOutput()}):i}};const PV=v.z.object({});var FV=class extends Z{nodeType=`image-loader`;displayName=`Image Loader`;category=`Media`;defaultInputPort=`asset`;defaultOutputPort=`image`;inputs=[{key:`asset`,label:`Media Reference`,order:0,type:`object`,required:!0}];outputs=[SB({key:`image`,label:`Image`,order:0,required:!0,preset:xB.IMAGE_COMMON})];configSchemaDefinition=PV;async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputMediaReference(`asset`);return i.ok?(r.setOutput(`image`,i.value.toBinary(`image`,`image/png`)),r.setOutput(`_agentSummary`,`Asset loaded as image binary.`),{ok:!0,value:r.toOutput()}):i}};const IV=_B().extend({mimeType:v.z.string().optional()});var LV=class extends Z{nodeType=`image-source`;displayName=`Image Source`;category=`Test`;defaultOutputPort=`image`;inputs=[];outputs=[SB({key:`image`,label:`Image`,order:0,required:!0,description:`Test image output`,preset:xB.IMAGE_COMMON})];configSchemaDefinition=IV;async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=iB.fromAssetReference(n.asset),i=typeof n.mimeType==`string`?n.mimeType:r.mediaType(),a=typeof i==`string`&&i.trim().length>0?i:`image/png`;return{ok:!0,value:{image:r.toBinary(`image`,a),_agentSummary:`Image source resolved. Type: ${a}.`}}}};function RV(e){let t=e.image;return typeof t!=`object`||!t||!(`kind`in t)||!(`mimeType`in t)||!(`uri`in t)?!1:t.kind===`image`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}const zV=v.z.object({});var BV=class extends Z{nodeType=`ok-emitter`;displayName=`OK Emitter`;category=`Test`;defaultInputPort=`image`;inputs=[SB({key:`image`,label:`Image Input`,order:0,required:!0,description:`Binary image from upstream`,preset:xB.IMAGE_COMMON})];outputs=[{key:`status`,label:`Status`,order:0,type:`string`,required:!0,description:`Execution status`}];configSchemaDefinition=zV;async validateInputWithConfig(e,t,n){return RV(e)?{ok:!0,value:void 0}:{ok:!1,error:X(`DAG_VALIDATION_OK_EMITTER_IMAGE_REQUIRED`,`OK emitter node requires an image binary input`,{nodeId:t.nodeDefinition.nodeId})}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`ok-emitter`),i=r.requireInput(`image`);return i.ok?RV({image:i.value})?(r.setOutput(`status`,`ok`),r.setOutput(`_agentSummary`,`Image validated. Status: ok.`),{ok:!0,value:r.toOutput()}):{ok:!1,error:Uz(`DAG_TASK_EXECUTION_OK_EMITTER_IMAGE_INVALID`,`OK emitter execution requires image binary input`,!1)}:i}};const VV={read:e=>fs(e),write:e=>ys(e),edit:e=>Ss(e),shell:e=>rs(e),bash:e=>is(e),glob:()=>Ts,grep:()=>Ms,"web-fetch":()=>zs,"web-search":()=>Hs},HV=Object.freeze(Object.keys(VV)),UV=v.z.object({toolName:v.z.string().min(1),params:v.z.record(v.z.unknown()).default({}),cwd:v.z.string().optional(),baseCredits:v.z.number().nonnegative().default(0)}),WV=[{key:`params`,label:`Tool Parameters (JSON string)`,order:0,type:`string`,required:!1}],GV=[{key:`output`,label:`Output`,order:0,type:`string`,required:!0},{key:`isError`,label:`Is Error`,order:1,type:`boolean`,required:!0}];function KV(e){let t=typeof e==`string`?e:JSON.stringify(e??``);try{let e=JSON.parse(t);if(typeof e==`object`&&e&&typeof e.success==`boolean`){let t=e.success?e.output:e.error??e.output;return{output:typeof t==`string`?t:String(t??``),isError:!e.success}}}catch{}return{output:t,isError:!1}}function qV(e,t,n){return X(`DAG_VALIDATION_TOOL_INVALID_PARAMS`,t,{toolName:e},{action:`set_input`,suggestion:n})}function JV(e,t){if(typeof e==`string`&&e.trim()!==``){let n;try{n=JSON.parse(e)}catch{return{ok:!1,error:qV(t,"The `params` input port must be a JSON object string.",`Provide a valid JSON object as the params input`)}}return typeof n!=`object`||!n||Array.isArray(n)?{ok:!1,error:qV(t,"The `params` input port must decode to a JSON object.",`Provide a JSON object (not an array or primitive)`)}:{ok:!0,value:n}}return typeof e==`object`&&e&&!Array.isArray(e)?{ok:!0,value:e}:{ok:!0,value:{}}}async function YV(e,t,n,r){try{let{output:i,isError:a}=KV((await e.execute(t)).data),o=new Q({},r);return o.setOutput(`output`,i),o.setOutput(`isError`,a),o.setOutput(`_agentSummary`,`Tool "${n}" ran. ${a?`Reported an error.`:`Output: ${i.length} chars.`}`),{ok:!0,value:o.toOutput()}}catch(e){return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_TOOL_CALL_FAILED`,`Tool "${n}" failed: ${e instanceof Error?e.message:String(e)}`,!0,{toolName:n})}}}var XV=class extends Z{nodeType=`tool`;displayName=`Tool`;category=`Integration`;inputs=WV;outputs=GV;configSchemaDefinition=UV;defaultInputPort=`params`;defaultOutputPort=`output`;constructor(){super()}async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:n.baseCredits}}}async executeWithConfig(e,t,n){let r=VV[n.toolName];if(!r)return{ok:!1,error:X(`DAG_VALIDATION_TOOL_UNKNOWN_TOOL`,`Unknown toolName "${n.toolName}". Choose one of the supported in-process builtins.`,{toolName:n.toolName},{action:`set_config`,suggestion:`Set toolName to a supported builtin`,options:[...HV]})};let i=JV(new Q(e,t.nodeDefinition.nodeId).getInput(`params`),n.toolName);if(!i.ok)return i;let a={...n.params,...i.value};return YV(r(n.cwd===void 0?{}:{cwd:n.cwd}),a,n.toolName,t.nodeDefinition.nodeId)}};const $={ok:!0,value:{estimatedCredits:0}},ZV=v.z.object({});var QV=class extends Z{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=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Number(i.value);return isNaN(a)?{ok:!1,error:X(`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()})}},$V=class extends Z{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=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`number`);return i.ok?(r.setOutput(`text`,i.value),{ok:!0,value:r.toOutput()}):i}};const eH=v.z.object({separator:v.z.string().default(`, `)});var tH=class extends Z{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=eH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`items`);if(!i.ok)return i;let a=i.value.split(`
391
+ `).filter(e=>e.trim()!==``);return r.setOutput(`text`,a.join(n.separator)),{ok:!0,value:r.toOutput()}}};const nH=v.z.object({separator:v.z.string().default(`
392
+ `),trim:v.z.boolean().default(!0)});var rH=class extends Z{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=nH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value.split(n.separator),o=n.trim?a.map(e=>e.trim()).filter(e=>e!==``):a;return r.setOutput(`items`,o.join(`
393
+ `)),{ok:!0,value:r.toOutput()}}};const iH=v.z.object({search:v.z.string().default(``),replacement:v.z.string().default(``),useRegex:v.z.boolean().default(!1),flags:v.z.string().default(`g`)});var aH=class extends Z{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=iH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a;if(n.useRegex)try{let e=new RegExp(n.search,n.flags);a=i.value.replace(e,n.replacement)}catch{return{ok:!1,error:X(`DAG_VALIDATION_TEXT_REPLACE_INVALID_REGEX`,`Invalid regex: "${n.search}"`,{nodeId:t.nodeDefinition.nodeId})}}else a=i.value.split(n.search).join(n.replacement);return r.setOutput(`text`,a),{ok:!0,value:r.toOutput()}}},oH=class extends Z{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=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,String(r.value.length)),{ok:!0,value:n.toOutput()}):r}},sH=class extends Z{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=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,r.value.toUpperCase()),{ok:!0,value:n.toOutput()}):r}},cH=class extends Z{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=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,r.value.toLowerCase()),{ok:!0,value:n.toOutput()}):r}};const lH=v.z.object({mode:v.z.enum([`both`,`start`,`end`]).default(`both`)});var uH=class extends Z{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=lH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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 dH=v.z.object({path:v.z.string().default(``),fallback:v.z.string().default(``)});var fH=class extends Z{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=dH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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:X(`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 pH=v.z.object({operator:v.z.enum([`non-empty`,`equals`,`contains`,`starts-with`,`ends-with`]).default(`non-empty`),operand:v.z.string().default(``)});var mH=class extends Z{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=pH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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);break}let u=l?a.value:typeof o==`string`?o:``;return r.setOutput(`text`,u),{ok:!0,value:r.toOutput()}}};const hH=v.z.object({skipEmpty:v.z.boolean().default(!1)});var gH=class extends Z{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=hH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value.split(`
394
+ `),o=n.skipEmpty?a.filter(e=>e.trim()!==``).length:a.length;return r.setOutput(`text`,String(o)),{ok:!0,value:r.toOutput()}}};const _H=v.z.object({times:v.z.number().int().min(0).default(2),separator:v.z.string().default(``)});var vH=class extends Z{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=_H;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Array.from({length:n.times},()=>i.value);return r.setOutput(`text`,a.join(n.separator)),{ok:!0,value:r.toOutput()}}};const yH=v.z.object({start:v.z.number().int().default(0),end:v.z.number().int().optional()});var bH=class extends Z{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=yH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(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}};function xH(e,t){let n=new CB;return{runOrchestrator:new OB(e.storage,e.queue,e.clock,n),runQuery:new kB(e.storage),runCancel:new AB(e.storage,e.clock),workerLoop:lV({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}),runProgressEventBus:n}}function SH(){return[new wV,new EV,new OV,new jV,new NV,new FV,new LV,new BV,new XV,new QV,new $V,new tH,new rH,new aH,new oH,new sH,new cH,new uH,new fH,new mH,new gH,new vH,new bH]}const CH=new Set([`success`,`failed`,`cancelled`]);function wH(e){return CH.has(e)}function TH(e){if(!e)return{};let t;try{t=JSON.parse(e)}catch{return{}}return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}function EH(e){let t={};for(let n of e){let e=TH(n.outputSnapshot);for(let[r,i]of Object.entries(e))t[`${n.nodeId}.${r}`]=i}return t}function DH(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.status!==`success`)continue;let r=TH(n.outputSnapshot);for(let e of Object.values(r))if(typeof e==`string`)return e}}function OH(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n&&n.status===`failed`&&n.errorMessage)return`${n.nodeId}: ${n.errorMessage}`}}const kH=1e4;function AH(e){return new Promise(t=>{setTimeout(t,e)})}var jH=class{options;providerId=`local`;displayName=`Local (in-process)`;constructor(e={}){this.options=e}async listNodes(){return this.buildNodeRegistry().map(NH)}async execute(e,t,n){let r=this.buildNodeRegistry(),i=bV(e,void 0),a=Date.now(),o=!1,s=()=>{o=!0};n?.signal?.addEventListener(`abort`,s);try{let e=await MH(i,r,t,n?.onProgress,()=>o),s=Date.now()-a,c=EH(e.taskRuns),l=e.dagRun.status===`success`,u=l?void 0:OH(e.taskRuns);return n?.onProgress?.({type:`dag_complete`,nodeId:``,durationMs:s,finalOutput:l?DH(e.taskRuns):void 0,error:l?void 0:u??`DAG run did not succeed`}),{ok:l,outputs:c,durationMs:s,...l?{}:{error:u??`DAG run did not succeed`}}}catch(e){let t=Date.now()-a,r=e instanceof Error?e.message:String(e);return n?.onProgress?.({type:`dag_complete`,nodeId:``,durationMs:t,error:r}),{ok:!1,outputs:{},durationMs:t,error:r}}finally{n?.signal?.removeEventListener(`abort`,s)}}buildNodeRegistry(){let e=this.options.nodeRegistry??SH(),t=this.options.instantNodes??[],n=this.options.extraNodes??[],r=new Set([...t.map(e=>e.nodeType),...n.map(e=>e.nodeType)]);return[...e.filter(e=>!r.has(e.nodeType)),...n,...t]}};async function MH(e,t,n,r,i){let a=bB(t);if(!a.ok)throw Error(`Node definition assembly failed: ${a.error.code}`);let o=a.value,s=new Yz(new fB(o.manifests),new dB(new uB(o.handlersByType))),c=new Qz,l=xH({storage:c,queue:new $z,deadLetterQueue:new $z,lease:new eB,executor:s,clock:new tB},{worker:{workerId:`local-dag-runtime-provider`,leaseDurationMs:6e4,visibilityTimeoutMs:6e4,maxAttempts:1,defaultTimeoutMs:3e5,retryEnabled:!1}}),u=new Map(e.nodes.map(e=>[e.nodeId,e.nodeType])),d=new Map,f=l.runProgressEventBus.subscribe(e=>{if(r){if(e.eventType===`task.started`)d.set(e.nodeId,Date.now()),r({type:`node_start`,nodeId:e.nodeId,nodeType:u.get(e.nodeId)});else if(e.eventType===`task.completed`){let t=d.get(e.nodeId);r({type:`node_complete`,nodeId:e.nodeId,nodeType:u.get(e.nodeId),durationMs:t===void 0?void 0:Date.now()-t})}else if(e.eventType===`task.failed`){let t=d.get(e.nodeId);r({type:`node_error`,nodeId:e.nodeId,nodeType:u.get(e.nodeId),durationMs:t===void 0?void 0:Date.now()-t,error:e.error.message??e.error.code})}}});try{let t={...e,status:`published`};await c.saveDefinition(t);let r=await l.runOrchestrator.startRun({dagId:e.dagId,version:e.version,trigger:`manual`,input:n});if(!r.ok)throw Error(`startRun failed: ${r.error.code}`);let{dagRunId:a}=r.value;for(let e=0;e<kH;e++){i()&&await l.runCancel.cancelRun(a);let e=await l.workerLoop.processOnce();if(!e.ok)throw Error(`Worker step failed: ${e.error.code}`);let t=await l.runQuery.getRun(a);if(!t.ok)throw Error(`Run query failed: ${t.error.code}`);let{dagRun:n,taskRuns:r}=t.value;if(wH(n.status))return{dagRun:n,taskRuns:r};e.value.processed||await AH(10)}throw Error(`Run ${a} did not reach terminal state after ${kH} iterations`)}finally{f()}}function NH(e){let t={},n={};for(let r of e.inputs??[]){let e=FH(r.type),i={},a=r;a.default!==void 0&&(i.default=a.default);let o=Object.keys(i).length>0?[e,i]:[e];r.required===!1?n[r.key]=o:t[r.key]=o}let r=e.outputs??[],i={nodeType:e.nodeType,input:{required:t},output:r.map(e=>FH(e.type)),output_name:r.map(e=>e.key),category:e.category??`robota`,source:`local`};return Object.keys(n).length>0&&(i.input.optional=n),i}const PH={string:`STRING`,object:`JSON`,binary:`IMAGE`,number:`FLOAT`,boolean:`BOOLEAN`,integer:`INT`};function FH(e){return PH[e]??e.toUpperCase()}function IH(e){let t=e.meta;if(typeof t!=`object`||!t||Array.isArray(t))return{};let n=t;return{description:typeof n.description==`string`?n.description:void 0,displayName:typeof n.displayName==`string`?n.displayName:void 0,tags:Array.isArray(n.tags)?n.tags.filter(e=>typeof e==`string`):void 0}}function LH(e){return Array.isArray(e.nodes)||typeof e.dagId==`string`}async function RH(e,t=Xz){let n;try{n=await(0,g.readdir)(e)}catch{return[]}let r=t.workflowExt,i=[];for(let t of n){if(t.endsWith(`.node.json`)||!t.endsWith(r))continue;let n=(0,p.join)(e,t),a;try{let e=JSON.parse(await(0,g.readFile)(n,`utf8`));if(typeof e!=`object`||!e||Array.isArray(e))continue;a=e}catch{continue}LH(a)&&i.push({id:t.slice(0,-r.length),filePath:n,definition:a,meta:IH(a)})}return i.sort((e,t)=>e.id.localeCompare(t.id))}var zH=class extends Hw{name=`google`;constructor(e){super(e)}};const BH=[`anthropic`,`openai`,`gemini`,`deepseek`,`qwen`];function VH(e){return typeof e==`string`&&BH.includes(e)}const HH=v.z.object({model:v.z.string().optional()}),UH={anthropic:{model:`claude-sonnet-4-6`,envVar:`ANTHROPIC_API_KEY`},openai:{model:`gpt-4o-mini`,envVar:`OPENAI_API_KEY`},gemini:{model:`gemini-2.0-flash`,envVar:`GEMINI_API_KEY`},deepseek:{model:`deepseek-chat`,envVar:`DEEPSEEK_API_KEY`},qwen:{model:`qwen-turbo`,envVar:`DASHSCOPE_API_KEY`}};function WH(e,t){return Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{{${t}}}`,n),e)}function GH(e,t){let n=UH[e],r=process.env[n.envVar];if(typeof r!=`string`||r.trim().length===0){let t=Object.entries(UH).filter(([t])=>t!==e&&process.env[UH[t].envVar]).map(([e])=>e);return{error:X(`DAG_VALIDATION_INSTANT_NODE_API_KEY_REQUIRED`,`${n.envVar} is required for instant node provider "${e}" but is not set`,{provider:e,envVar:n.envVar},{action:`add_api_key`,suggestion:`Set ${n.envVar} in your environment or .env file`,options:t.length>0?t.map(e=>`Use provider "${e}" instead (API key already set)`):[`Set ${n.envVar}=<your-api-key> in your environment`]})}}let i=`InstantNode_${e}`,a;switch(e){case`anthropic`:a=new Ci({name:i,aiProviders:[new yx({apiKey:r.trim()})],defaultModel:{provider:`anthropic`,model:t}});break;case`openai`:a=new Ci({name:i,aiProviders:[new fC({apiKey:r.trim()})],defaultModel:{provider:`openai`,model:t}});break;case`gemini`:a=new Ci({name:i,aiProviders:[new zH({apiKey:r.trim()})],defaultModel:{provider:`google`,model:t}});break;case`deepseek`:a=new Ci({name:i,aiProviders:[new PC({apiKey:r.trim()})],defaultModel:{provider:`deepseek`,model:t}});break;case`qwen`:a=new Ci({name:i,aiProviders:[new oD({apiKey:r.trim()})],defaultModel:{provider:`qwen`,model:t}});break}return{agent:a}}var KH=class extends Z{nodeType;displayName;category=`Instant`;inputs;outputs;defaultInputPort;defaultOutputPort;configSchemaDefinition=HH;spec;constructor(e){super(),this.spec=e,this.nodeType=e.nodeType,this.displayName=e.displayName,this.inputs=e.inputPorts.map((e,t)=>({key:e.key,label:e.key,order:t,type:`string`,required:!0,description:e.description})),this.outputs=[{key:e.outputPort.key,label:e.outputPort.key,order:0,type:`string`,required:!0,description:e.outputPort.description}],this.defaultInputPort=e.inputPorts[0]?.key,this.defaultOutputPort=e.outputPort.key}toPersisted(){return{kind:`prompt`,nodeType:this.spec.nodeType,displayName:this.spec.displayName,systemPromptTemplate:this.spec.systemPromptTemplate,inputPorts:this.spec.inputPorts,outputPort:this.spec.outputPort,...this.spec.provider===void 0?{}:{provider:this.spec.provider},...this.spec.model===void 0?{}:{model:this.spec.model}}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i={};for(let e of this.spec.inputPorts){let t=r.requireInputString(e.key);if(!t.ok)return t;i[e.key]=t.value}let a=this.spec.provider??`anthropic`,o=UH[a],s=n.model??this.spec.model??o.model,c=GH(a,s);if(`error`in c)return{ok:!1,error:c.error};let l=WH(this.spec.systemPromptTemplate,i);try{let e=await c.agent.run(l);r.setOutput(this.spec.outputPort.key,e);let t=typeof e==`string`?e.split(` `).length:0;return r.setOutput(`_agentSummary`,`Generated ${t} words. Model: ${s}.`),{ok:!0,value:r.toOutput()}}catch(e){return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_LLM_GENERATION_FAILED`,e instanceof Error?e.message:`LLM generation failed`,!0,{provider:a,model:s,nodeType:this.nodeType})}}}};function qH(e){return new KH(e)}var JH=class extends Z{nodeType;displayName;category=`Instant`;inputs;outputs;defaultInputPort;defaultOutputPort;configSchemaDefinition=HH;spec;constructor(e){if(super(),(e.maxDepth??0)>=3)throw Error(`Composite node nesting limit (3) exceeded for "${e.nodeType}"`);this.spec=e,this.nodeType=e.nodeType,this.displayName=e.displayName,this.inputs=[{key:e.exposedInputPort.key,label:e.exposedInputPort.key,order:0,type:`string`,required:!0,description:e.exposedInputPort.description}],this.outputs=e.exposedOutputPorts.map((e,t)=>({key:e.key,label:e.key,order:t,type:`string`,required:!0,description:e.description})),this.defaultInputPort=e.exposedInputPort.key,this.defaultOutputPort=e.exposedOutputPorts[0]?.key??`output`}toPersisted(){return{kind:`composite`,nodeType:this.spec.nodeType,displayName:this.spec.displayName,innerDag:this.spec.innerDag,exposedInputPort:this.spec.exposedInputPort,exposedOutputPorts:this.spec.exposedOutputPorts,...this.spec.maxDepth===void 0?{}:{maxDepth:this.spec.maxDepth}}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(this.spec.exposedInputPort.key);if(!i.ok)return i;let a={[this.spec.exposedInputPort.mapsTo.nodeId]:{[this.spec.exposedInputPort.mapsTo.portKey]:i.value}};try{let e=await this.spec.runner.run(this.spec.innerDag,a);if(!e.ok)return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_COMPOSITE_FAILED`,e.error??`Composite sub-DAG execution failed`,!0,{nodeType:this.nodeType})};for(let t of this.spec.exposedOutputPorts){let n=e.outputs[t.mapsTo.nodeId]?.[t.mapsTo.portKey];n!==void 0&&r.setOutput(t.key,n)}return r.setOutput(`_agentSummary`,`Composite sub-DAG completed: ${this.spec.innerDag.nodes.length} nodes.`),{ok:!0,value:r.toOutput()}}catch(e){return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_COMPOSITE_FAILED`,e instanceof Error?e.message:`Composite sub-DAG execution failed`,!0,{nodeType:this.nodeType})}}}};function YH(e){return new JH(e)}function XH(e){return typeof e==`object`&&!!e&&typeof e.toPersisted==`function`}function ZH(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function QH(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=ZH(n);if(!e||typeof e.key!=`string`)return null;t.push(typeof e.description==`string`?{key:e.key,description:e.description}:{key:e.key})}return t.length>0?t:null}function $H(e){let t=ZH(e);if(!t||typeof t.nodeType!=`string`)return null;let n=t.nodeType,r=typeof t.displayName==`string`?t.displayName:n;if(t.kind===`composite`){let e=ZH(t.innerDag),i=ZH(t.exposedInputPort);return!e||!i||typeof i.key!=`string`||!Array.isArray(t.exposedOutputPorts)||t.exposedOutputPorts.length===0?null:{kind:`composite`,nodeType:n,displayName:r,innerDag:e,exposedInputPort:i,exposedOutputPorts:t.exposedOutputPorts,...typeof t.maxDepth==`number`?{maxDepth:t.maxDepth}:{}}}if(typeof t.systemPromptTemplate!=`string`)return null;let i=QH(t.inputPorts),a=ZH(t.outputPort);return!i||!a||typeof a.key!=`string`?null:{kind:`prompt`,nodeType:n,displayName:r,systemPromptTemplate:t.systemPromptTemplate,inputPorts:i,outputPort:typeof a.description==`string`?{key:a.key,description:a.description}:{key:a.key},...VH(t.provider)?{provider:t.provider}:{},...typeof t.model==`string`?{model:t.model}:{}}}function eU(e,t={}){if(e.kind===`composite`){if(!t.compositeRunner)throw Error(`rehydrateInstantNode: composite node "${e.nodeType}" requires a compositeRunner (its runner is not serialized).`);return YH({nodeType:e.nodeType,displayName:e.displayName,innerDag:e.innerDag,exposedInputPort:e.exposedInputPort,exposedOutputPorts:e.exposedOutputPorts,runner:t.compositeRunner,...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}})}return qH({nodeType:e.nodeType,displayName:e.displayName,systemPromptTemplate:e.systemPromptTemplate,inputPorts:e.inputPorts,outputPort:e.outputPort,...e.provider===void 0?{}:{provider:e.provider},...e.model===void 0?{}:{model:e.model}})}async function tU(e,t=Xz){let n=t.root,r=t.workflowExt,i=await RH((0,p.resolve)(e,n),t);if(i.length===0)return{success:!0,message:`No workflow files (*${r}) in ${n}.`};let a=i.map(e=>{let t=e.definition,n=t.nodes?.length??0,i=t.edges?.length??t.links?.length??0;return` ${e.id}${r} — ${n} node(s), ${i} link(s)`});return{success:!0,message:`Workflows in ${n} (${i.length}):\n${a.join(`
395
+ `)}`}}async function nU(){let e=await new jH().listNodes(),t=[...e].sort((e,t)=>e.nodeType.localeCompare(t.nodeType)).map(e=>` ${e.nodeType}${e.description?` — ${e.description}`:``}`);return{success:!0,message:`Available workflow nodes (${e.length}):\n${t.join(`
396
+ `)}`}}async function rU(e,t=Xz){let n=(0,p.resolve)(e,(0,p.join)(t.root,`nodes`)),r;try{r=await(0,g.readdir)(n)}catch{return[]}let i=[];for(let e of r.filter(e=>e.endsWith(`.node.json`))){let t;try{t=$H(JSON.parse(await(0,g.readFile)((0,p.join)(n,e),`utf-8`)))}catch{continue}if(t){if(t.kind===`composite`){process.stderr.write(`[instant-node-loader] skipping composite node "${t.nodeType}" — composite reload is not supported in this workspace\n`);continue}i.push(eU(t))}}return i}async function iU(e){let t=await(0,g.readFile)(e,`utf-8`),n=JSON.parse(t);return SV(n)?yV(n).workflowFile:n}async function aU(e,t,n=Xz){if(!e)return{success:!1,message:`Usage: /workflows run <file.json>`};let r=await iU((0,p.resolve)(t,e)).catch(t=>{let n=t instanceof Error?t.message:String(t);return Error(`Failed to read DAG file "${e}": ${n}`)});if(r instanceof Error)return{success:!1,message:r.message};let i=await rU(t,n),a=await new jH({workspace:n,projectDir:t,...i.length>0?{instantNodes:i}:{}}).execute(r,{});return a.ok?{success:!0,message:`Workflow completed in ${a.durationMs}ms.\nOutputs: ${JSON.stringify(a.outputs,null,2)}`}:{success:!1,message:`Workflow failed (${a.durationMs}ms): ${a.error??`unknown error`}`}}async function oU(e,t){if(!e)return{success:!1,message:`Usage: /workflows validate <file.dag.json>`};let n=await(0,g.readFile)((0,p.resolve)(t,e),`utf-8`).then(e=>JSON.parse(e)).catch(t=>{let n=t instanceof Error?t.message:String(t);return Error(`Failed to read DAG file "${e}": ${n}`)});if(n instanceof Error)return{success:!1,message:n.message};let r;if(xV(n))r=bV(n);else if(SV(n))r=n;else return{success:!1,message:`"${e}" is not a recognized DAG workflow file (expected a .dag.json node-graph or a DAG definition).`};let i=await new jH().listNodes(),a=new Set(i.map(e=>e.nodeType)),o=new Set(r.nodes.map(e=>e.nodeId)),s=[];r.nodes.length===0&&s.push(`workflow has no nodes`);for(let e of r.nodes)a.has(e.nodeType)||s.push(`node "${e.nodeId}": unknown node type "${e.nodeType}"`);for(let e of r.edges)o.has(e.from)||s.push(`edge references unknown source node "${e.from}"`),o.has(e.to)||s.push(`edge references unknown target node "${e.to}"`);if(s.length>0){let t=s.length===1?``:`s`;return{success:!1,message:`Invalid workflow "${e}" (${s.length} issue${t}):\n${s.map(e=>` - ${e}`).join(`
397
+ `)}`}}return{success:!0,message:`Valid workflow "${e}": ${r.nodes.length} node(s), ${r.edges.length} edge(s).`}}function sU(e){let t=bB(e);return t.ok?{ok:!0,manifests:t.value.manifests}:{ok:!1,error:`failed to build node registry: ${t.error.message}`}}function cU(e){return e.length===0?`—`:e.map(e=>e.key).join(`, `)}function lU(e){return[...e].sort((e,t)=>e.nodeType.localeCompare(t.nodeType)).map(e=>{let t=e.defaultInputPort??cU(e.inputs),n=e.defaultOutputPort??cU(e.outputs);return`- ${e.nodeType} (in: ${t}; out: ${n})`}).join(`
398
+ `)}function uU(e){return[`You are a workflow author. Given a natural-language request, design a linear DAG workflow and`,`return ONLY a JSON object (no prose, no code fences) matching this shape:`,`{`,` "name": "kebab-or-snake identifier (letters, digits, - and _ only)",`,` "description": "one short line",`,` "pipeline": [ { "nodeType": "<type>", "config": { ... optional } }, ... ],`,` "newNodes": [ { "nodeType", "displayName", "systemPromptTemplate", "inputPorts":[{"key"}], "outputPort":{"key"} } ],`,` "sampleInput": { "text": "an example input to run with" }`,`}`,``,`Rules:`,`- The pipeline is executed left-to-right; adjacent nodes are auto-wired by their default ports.`,`- Start from an "input" node and end with a "text-output" node unless the request says otherwise.`,`- Prefer the existing nodes below. Only define a "newNodes" prompt-backed node when NO existing`,` node fits; reference it by its nodeType in the pipeline. Omit "newNodes" entirely if unused.`,`- "systemPromptTemplate" may reference an input port with {{key}}.`,``,`Available nodes:`,e].join(`
399
+ `)}async function dU(e,t,n,r){let i;try{i=await e.chat([H(uU(n)),rr(t)],{maxTokens:2048,responseFormat:{type:`json_object`},...r?{model:r}:{}})}catch(e){return{ok:!1,error:`provider call failed: ${e instanceof Error?e.message:String(e)}`}}let a=typeof i.content==`string`?i.content.trim():``;return a===``?{ok:!1,error:`provider returned an empty response`}:{ok:!0,raw:a}}const fU=/^[a-zA-Z0-9_-]+$/;function pU(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function mU(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=pU(n);if(!e||typeof e.key!=`string`)return null;t.push(typeof e.description==`string`?{key:e.key,description:e.description}:{key:e.key})}return t}function hU(e){let t=pU(e);if(!t)return{error:`newNodes entry is not an object`};if(typeof t.nodeType!=`string`||!fU.test(t.nodeType))return{error:`newNodes entry has an invalid nodeType: ${JSON.stringify(t.nodeType)}`};if(typeof t.systemPromptTemplate!=`string`||t.systemPromptTemplate.trim()===``)return{error:`newNodes "${t.nodeType}" is missing systemPromptTemplate`};let n=mU(t.inputPorts);if(!n||n.length===0)return{error:`newNodes "${t.nodeType}" has no valid inputPorts`};let r=pU(t.outputPort);return!r||typeof r.key!=`string`?{error:`newNodes "${t.nodeType}" has no valid outputPort`}:{nodeType:t.nodeType,...typeof t.displayName==`string`?{displayName:t.displayName}:{},systemPromptTemplate:t.systemPromptTemplate,inputPorts:n,outputPort:typeof r.description==`string`?{key:r.key,description:r.description}:{key:r.key},...typeof t.provider==`string`?{provider:t.provider}:{},...typeof t.model==`string`?{model:t.model}:{}}}function gU(e){let t=pU(e);if(!t)return;let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&(n[e]=r);return Object.keys(n).length>0?n:void 0}function _U(e){let t=e.trim();return t.startsWith("```")?t.replace(/^```[a-zA-Z0-9]*\s*\n?/,``).replace(/\n?```\s*$/,``).trim():t}function vU(e){let t;try{t=JSON.parse(_U(e))}catch(e){return{ok:!1,error:`provider did not return valid JSON: ${e instanceof Error?e.message:String(e)}`}}let n=pU(t);if(!n)return{ok:!1,error:`authoring spec is not a JSON object`};if(typeof n.name!=`string`||!fU.test(n.name))return{ok:!1,error:`authoring spec "name" must match ${fU.source}; got ${JSON.stringify(n.name)}`};let r=n.name;if(!Array.isArray(n.pipeline)||n.pipeline.length===0)return{ok:!1,error:`authoring spec "pipeline" must be a non-empty array`};let i=[];for(let e of n.pipeline){let t=pU(e);if(!t||typeof t.nodeType!=`string`)return{ok:!1,error:`each pipeline stage must be an object with a string nodeType`};let n=pU(t.config);i.push(n?{nodeType:t.nodeType,config:n}:{nodeType:t.nodeType})}let a;if(n.newNodes!==void 0){if(!Array.isArray(n.newNodes))return{ok:!1,error:`authoring spec "newNodes" must be an array when present`};a=[];for(let e of n.newNodes){let t=hU(e);if(`error`in t)return{ok:!1,error:t.error};a.push(t)}}let o=gU(n.sampleInput);return{ok:!0,spec:{name:r,...typeof n.description==`string`?{description:n.description}:{},pipeline:i,...a&&a.length>0?{newNodes:a}:{},...o?{sampleInput:o}:{}}}}function yU(e,t){let n=e.pipeline.map(e=>e.config?{nodeType:e.nodeType,config:e.config}:{nodeType:e.nodeType}),r=mV({dagId:e.name,pipeline:n},t);return r.ok?{ok:!0,definition:r.definition}:{ok:!1,error:r.error.message}}async function bU(e,t,n,r,i){let a=new jH({workspace:n,projectDir:t,...r.length>0?{instantNodes:r}:{}}),{workflowFile:o}=yV(e),s=await a.execute(o,i);return{ok:s.ok,outputs:s.outputs,durationMs:s.durationMs,...s.ok?{}:{error:s.error??`unknown error`}}}async function xU(e,t,n,r=Xz){let i=(0,p.resolve)(e,r.root);await(0,g.mkdir)(i,{recursive:!0});let a=(0,p.join)(i,`${t}${r.workflowExt}`);return await(0,g.writeFile)(a,`${JSON.stringify(n,null,2)}\n`,`utf-8`),a}async function SU(e,t,n,r=Xz){if(!XH(t))return null;let i={...t.toPersisted(),createdAt:n};if(i.kind===`composite`)return null;let a=(0,p.resolve)(e,(0,p.join)(r.root,`nodes`));await(0,g.mkdir)(a,{recursive:!0});let o=(0,p.join)(a,`${t.nodeType}.node.json`);return await(0,g.writeFile)(o,`${JSON.stringify(i,null,2)}\n`,`utf-8`),o}function CU(e){let t=[],n=``,r=!1,i=null;for(let a of e)i===null?a===`"`||a===`'`?(i=a,r=!0):/\s/.test(a)?r&&=(t.push(n),n=``,!1):(n+=a,r=!0):a===i?i=null:n+=a;return r&&t.push(n),t}function wU(e){let t=CU(e.trim()),n=[],r={},i,a=0;for(;a<t.length&&!t[a].startsWith(`--`);)n.push(t[a]),a+=1;for(;a<t.length;){let e=t[a];if(e===`--input`){let e=t[a+1];if(e===void 0||e.startsWith(`--`))return{ok:!1,error:`--input requires a key=value argument.`};let n=e.indexOf(`=`);if(n<=0)return{ok:!1,error:`--input must be key=value, got "${e}".`};r[e.slice(0,n)]=e.slice(n+1),a+=2}else if(e===`--name`){let e=t[a+1];if(e===void 0||e.startsWith(`--`))return{ok:!1,error:`--name requires a value.`};i=e,a+=2}else return{ok:!1,error:`create received unexpected flag: ${e}`}}let o=n.join(` `).trim();return o===``?{ok:!1,error:`A natural-language description is required.`}:{ok:!0,value:{description:o,...i?{nameOverride:i}:{},inputs:r}}}function TU(e,t){let n=VH(e.provider)?e.provider:t;return qH({nodeType:e.nodeType,displayName:e.displayName??e.nodeType,systemPromptTemplate:e.systemPromptTemplate,inputPorts:e.inputPorts,outputPort:e.outputPort,...n?{provider:n}:{},...e.model?{model:e.model}:{}})}function EU(e){return JSON.stringify(e,null,2)}function DU(e,t){if(Object.keys(t).length===0)return e;let n=!1,r=e.nodes.map(e=>n||e.nodeType!==`input`?e:(n=!0,{...e,config:{...e.config,...t}}));return{...e,nodes:r}}async function OU(e,t,n={}){let r=n.workspace??Xz,i=n.now??(()=>new Date().toISOString()),a=wU(e);if(!a.ok)return{success:!1,message:`${a.error}\nUsage: /workflows create "<description>" [--input key=value] [--name <name>]`};let{description:o,nameOverride:s,inputs:c}=a.value,l=n.providerDefinitions??[],u,d=n.model,f;try{if(n.resolveProvider)u=n.resolveProvider(t);else{u=Ig(t,void 0,{providerDefinitions:l});let e=Fg(t,{providerDefinitions:l});d??=e.model,f=VH(e.name)?e.name:void 0}}catch(e){return{success:!1,message:`No active LLM provider is configured. Configure one (e.g. \`/provider\` or set the provider API key) and retry.\nDetail: ${e instanceof Mg||e instanceof Error?e.message:String(e)}`}}let p=await rU(t,r),m=[...SH(),...p],h=sU(m);if(!h.ok)return{success:!1,message:`Failed to build node catalog: ${h.error}`};let g=await dU(u,o,lU(h.manifests),d);if(!g.ok)return{success:!1,message:`Authoring failed: ${g.error}`};let _=vU(g.raw);if(!_.ok)return{success:!1,message:`Authoring produced an invalid spec: ${_.error}`};let v=_.spec,y=s??v.name,b=[],x=new Set(m.map(e=>e.nodeType));for(let e of v.newNodes??[])x.has(e.nodeType)||(b.push(TU(e,f)),x.add(e.nodeType));let S=sU([...m,...b]);if(!S.ok)return{success:!1,message:`Failed to build node catalog: ${S.error}`};let C=S.manifests,w=yU({...v,name:y},C);if(!w.ok)return{success:!1,message:`Could not assemble workflow: ${w.error}`};let T=Object.keys(c).length>0?c:v.sampleInput??{},E=DU(w.definition,T),D=i(),O=[];for(let e of b){let n=await SU(t,e,D,r);n&&O.push(n)}let k=await xU(t,y,E,r),A=await bU(E,t,r,[...p,...b],T),j=O.length>0?`\nNew nodes: ${O.join(`, `)}`:``;return A.ok?{success:!0,message:`Created and ran "${y}".\nSaved: ${k}${j}\nCompleted in ${A.durationMs}ms.\nOutputs: ${EU(A.outputs)}\nRe-run: /workflows run ${k}`}:{success:!1,message:`Saved ${k}${j}\nBut the run failed (${A.durationMs}ms): ${A.error}\nInspect or edit the saved artifact and re-run with: /workflows run ${k}`}}const kU=[{name:`create`,description:`Author a workflow from a natural-language description and run it immediately`,source:`workflows`,argumentHint:`"<description>" [--input key=value] [--name <name>]`,modelInvocable:!0},{name:`list`,description:`List available workflow nodes`,source:`workflows`,modelInvocable:!1},{name:`catalog`,description:`List workflow files in the local .workflows catalog`,source:`workflows`,modelInvocable:!1},{name:`validate`,description:`Validate a workflow file against the node catalog`,source:`workflows`,argumentHint:`<file.json>`,modelInvocable:!1},{name:`run`,description:`Run a workflow file`,source:`workflows`,argumentHint:`<file.json>`,modelInvocable:!1}],AU=[`Usage: /workflows <create|list|catalog|validate|run>`,` create "<desc>" Author a workflow from natural language and run it`,` list List available workflow nodes`,` catalog List workflow files in .workflows`,` validate <file> Validate a workflow file`,` run <file> Run a workflow file`].join(`
400
+ `);function jU(e){let t=e.trim();if(t===``)return{sub:``,rest:``};let n=t.indexOf(` `);return n===-1?{sub:t,rest:``}:{sub:t.slice(0,n),rest:t.slice(n+1).trim()}}async function MU(e,t,n,r){let{sub:i,rest:a}=jU(t),o=e.getCwd();switch(i){case``:return{success:!0,message:AU};case`create`:return OU(a,o,{workspace:n,providerDefinitions:r});case`list`:return nU();case`catalog`:return tU(o,n);case`validate`:return oU(a,o);case`run`:return aU(a,o,n);default:return{success:!1,message:`Unknown subcommand "${i}".\n${AU}`}}}function NU(){return{name:`workflows`,displayName:`Workflows`,description:`Author (from natural language), list, validate, and run DAG workflows on the in-process runtime`,source:`workflows`,argumentHint:`<create|list|catalog|validate|run> [args]`,subcommands:kU,modelInvocable:!0}}function PU(e,t){let n=NU();return{name:n.name,displayName:n.displayName,description:n.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!0,argumentHint:n.argumentHint,subcommands:n.subcommands,lifecycle:`inline`,execute:(n,r)=>MU(n,r,e,t)}}var FU=class{name=`workflows`;getCommands(){return[NU()]}};function IU(e={}){let t=e.workspace??Xz,n=e.providerDefinitions??[];return{name:`agent-command-workflows`,commandSources:[new FU],systemCommands:[PU(t,n)]}}function LU(e){return IU({providerDefinitions:e})}function RU(e,t,n,r,i={}){let a={settings:{read:()=>Hp(Bp()),write:e=>Up(Bp(),e)},plugin:kN(e)},o=n.providerDefinitions??xD(),s={readMergedSettings:()=>Ng(e),readTargetSettings:()=>Hp(wg(e)),writeTargetSettings:t=>Up(wg(e),t)},c=LU(o);return{commandHostAdapters:a,providerDefinitions:o,commandModules:[...SN({cwd:e,providerDefinitions:o,providerSettingsAdapter:s,...i.enabledCommandModules===void 0?{}:{enabledCommandModules:i.enabledCommandModules},...i.disabledCommandModules===void 0?{}:{disabledCommandModules:i.disabledCommandModules}}),c,...n.commandModules??[]],startupUpdateNoticePromise:Jy(t)?qy({currentVersion:r}):void 0}}function zU(e,t){let n=(0,h.readFileSync)((0,p.resolve)(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function BU(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(zU(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
401
+
402
+ `):void 0}async function VU(e,t,n,r,i,a,o,s,c={},l={}){let u=t.goal?.trim(),d=t.positional.join(` `).trim();if(!u&&!d&&!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);d=Buffer.concat(e).toString(`utf-8`).trim()}!u&&!d&&(process.stderr.write(`Print mode (-p) requires a prompt argument (or --goal <objective>).
403
+ `),process.exit(1));let f=BU(e,t),p=new bb({cwd:e,provider:n,outputFormat:t.outputFormat??`text`,permissionMode:t.permissionMode??l.permissionMode??`bypassPermissions`,maxTurns:t.maxTurns,sessionStore:t.noSessionPersistence?void 0:r,resumeSessionId:c.resumeSessionId,forkSession:c.forkSession,sessionName:t.sessionName,bare:t.bare||void 0,allowedTools:wb(t.allowedTools),deniedTools:wb(t.deniedTools),appendSystemPrompt:f,...l.persona===void 0?{}:{persona:l.persona},...l.agentName===void 0?{}:{agentName:l.agentName},...l.activePresetId===void 0?{}:{activePresetId:l.activePresetId},...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification},...t.systemPrompt?{systemPrompt:t.systemPrompt}:{},backgroundTaskRunners:i,subagentRunnerFactory:a,commandModules:o,commandHostAdapters:s});u?await p.runGoal(u,t.goalMaxIterations?{maxIterations:t.goalMaxIterations}:{}):await p.run(d),process.exit(p.getExitCode())}function HU(e){let t;try{t=(0,l.createRequire)(require("url").pathToFileURL(__filename).href)(`@robota-sdk/agent-provider-replay`)}catch{throw Error(`--session-log replay requires @robota-sdk/agent-provider-replay, a dev-only package that is not bundled in the published CLI.`)}return t.createReplayProviderFromLogFile(e)}function UU(){let e=new BL(Bp());return e.register(new cR),e}async function WU(e={}){if(process.argv[2]===`session`&&process.argv[3]===`analyze`){await iz(process.argv.slice(4),process.cwd());return}let t;try{t=Ab()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let n=az();if(t.help){process.stdout.write(Cb());return}if(t.version){process.stdout.write(`robota ${n}\n`);return}if(t.checkUpdate){let e=await Wy({currentVersion:n,force:!0}),t=Xy(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}let r=process.cwd(),i=new ab;if(t.reset){process.exitCode=await sz(i,{yes:t.yes,isTTY:process.stdin.isTTY===!0});return}if(t.positional[0]===`diagnose`){let e=await vz({version:n,terminal:i,cwd:r});process.exitCode=+(e>0);return}if(t.positional[0]===`session`&&t.positional[1]===`analyze`){await iz(process.argv.slice(4),r);return}try{if(await PR(t,r,i))return}catch(e){i.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let a=Hp(Bp()),o=typeof a.preset==`string`?a.preset:void 0,s=sx();for(let{file:e,error:t}of s.errors)i.writeError(`Skipped external preset "${e}": ${t}`);let l;try{l=ux(t,o)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let u=cx(t,o),{commandHostAdapters:d,providerDefinitions:f,commandModules:p,startupUpdateNoticePromise:m}=RU(r,t,e,n,{...l.enabledCommandModules===void 0?{}:{enabledCommandModules:l.enabledCommandModules},...l.disabledCommandModules===void 0?{}:{disabledCommandModules:l.disabledCommandModules}});if(t.positional[0]===`init`){try{await wz(r,i,{yes:t.yes,onProviderSetup:async()=>{await IN(r,t,ob,i,f)}})}catch(e){i.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}return}if(t.configure){await IN(r,t,ob,i,f);return}if(PN(r,t,i,f))return;try{await FN(r,t,ob,i,f)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(e instanceof Mg&&t.printMode?3:1)}let h=t.provider?{providerOverride:t.provider,providerDefinitions:f}:{providerDefinitions:f},g=Fg(r,h),_=l.model??g.model;if(g.source===`env-default`&&g.sourceEnvVar!==void 0){let e=`Using ${g.name} (${_}) via ${g.sourceEnvVar} — run \`robota --configure\` to persist a profile.\n`;t.printMode?process.stderr.write(e):i.writeLine(e.trimEnd())}let v=t.sessionLog?HU(t.sessionLog):Ig(r,l.model,h),y=Xa(),b=sf(r),x=ER({workerPath:NR(),providerConfig:{...g,model:_},logsDir:b.logs}),S=Dv(r),C,w=!1;if(t.continueMode?C=Av(S,r):t.resumeId!==void 0&&(t.resumeId===``?w=!0:(C=jv(S,t.resumeId),C===void 0&&(process.stderr.write(`Session not found: ${t.resumeId}\n`),process.exit(1)))),t.printMode||t.goal){await VU(r,t,v,S,y,x,p,d,{resumeSessionId:C,forkSession:t.forkSession},{agentName:l.agentName??Ib,activePresetId:u,persona:l.persona,...l.permissionMode===void 0?{}:{permissionMode:l.permissionMode},...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification}});return}kz(i),zL(),Tz()&&(Oz(i),Ez()),await NL({onChannelReady:e=>LL(e),cwd:r,provider:v,providerOverride:t.provider,providerType:g.name,modelId:_,language:t.language,permissionMode:t.permissionMode??l.permissionMode,maxTurns:t.maxTurns,allowedTools:wb(t.allowedTools),deniedTools:wb(t.deniedTools),version:n,sessionStore:t.noSessionPersistence?void 0:S,resumeSessionId:C,showSessionPickerOnStart:w,forkSession:t.forkSession,sessionName:t.sessionName,backgroundTaskRunners:y,subagentRunnerFactory:x,commandModules:p,commandHostAdapters:d,shellExec:e=>(0,c.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:m?m.then(e=>e?Yy(e):void 0):void 0,transportRegistry:UU(),cliAdapter:PL({providerDefinitions:f,reloadPluginCommandSource:MN}),reloadPluginCommandSource:MN,agentName:l.agentName??Ib,activePresetId:u,persona:l.persona,...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification}}),process.exit(0)}exports.startCli=WU;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/startup/command-setup.ts","../../src/cli.ts"],"mappings":";;;;UAkCiB,gBAAA;EACf,cAAA,YAA0B,cAAA;EAC1B,mBAAA,YAA+B,mBAAmB;AAAA;;;iBCsD9B,QAAA,CAAS,OAAA,GAAS,gBAAA,GAAwB,OAAO"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/startup/command-setup.ts","../../src/cli.ts"],"mappings":";;;;UAsCiB,gBAAA;EACf,cAAA,YAA0B,cAAA;EAC1B,mBAAA,YAA+B,mBAAmB;AAAA;;;iBCkD9B,QAAA,CAAS,OAAA,GAAS,gBAAA,GAAwB,OAAO"}