@makaio/framework 1.0.0-dev-1788963848381 → 1.0.0-dev-1788978977154

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.
Files changed (119) hide show
  1. package/dist/.makaio-build.json +2 -2
  2. package/dist/{attempt-record-codec-62Ifw7fv.mjs → attempt-record-codec-D2Gb_epJ.mjs} +1 -1
  3. package/dist/authority-state-bootstrap-B8jG1zI1.mjs +1 -0
  4. package/dist/contracts/adapter/index.d.mts +2 -2
  5. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  6. package/dist/contracts/artifact/index.d.mts +2 -2
  7. package/dist/contracts/automation-trigger/index.d.mts +1 -1
  8. package/dist/contracts/capabilities/index.d.mts +1 -1
  9. package/dist/contracts/client/index.d.mts +2 -2
  10. package/dist/contracts/extension/index.d.mts +5 -5
  11. package/dist/contracts/harness/index.d.mts +1 -1
  12. package/dist/contracts/index.d.mts +96 -230
  13. package/dist/contracts/materialization/index.d.mts +1 -1
  14. package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
  15. package/dist/contracts/reaction/index.d.mts +1 -1
  16. package/dist/contracts/session/index.d.mts +2 -2
  17. package/dist/contracts/shared/index.d.mts +1 -1
  18. package/dist/contracts/variant/index.d.mts +1 -1
  19. package/dist/contracts/worker/index.d.mts +1 -1
  20. package/dist/contracts/workflow/index.d.mts +3 -3
  21. package/dist/{contribution-BexrtFLC.d.mts → contribution-BfEEQ8YZ.d.mts} +1 -1
  22. package/dist/{execution-attempt-owner-recovery-CwTiTnnR.mjs → execution-attempt-owner-recovery-D4APLAvt.mjs} +1 -1
  23. package/dist/execution-attempt-repository-CWbgCTwA.mjs +1 -0
  24. package/dist/{execution-attempt-repository-CE7UXmEi.d.mts → execution-attempt-repository-DSpz2kyW.d.mts} +257 -191
  25. package/dist/{extension-context-DDfSMPat.d.mts → extension-context-Cpf_n5FH.d.mts} +3 -3
  26. package/dist/{hook-responses-CRQYe15-.d.mts → hook-responses-CpEfxEmG.d.mts} +1 -1
  27. package/dist/{index-dpaDWzUU.d.mts → index-2ww5IWeo.d.mts} +241 -241
  28. package/dist/{index-nJvYTAbD.d.mts → index-BfwHYuRf.d.mts} +1 -1
  29. package/dist/{index-CCYavCD92.d.mts → index-BfzuauBt2.d.mts} +1 -1
  30. package/dist/{index-DkviOBAT.d.mts → index-Bj2JCo9V.d.mts} +1 -1
  31. package/dist/{index-DTadNB7U.d.mts → index-Bzxs2nVR.d.mts} +8 -8
  32. package/dist/{index-ndFBIZvG2.d.mts → index-C75h1xHF2.d.mts} +1 -1
  33. package/dist/{index-E55FZQKt.d.mts → index-CQ8MVY5G.d.mts} +261 -73
  34. package/dist/{index-Bq8JJ77a2.d.mts → index-CVBlYxKV2.d.mts} +4 -4
  35. package/dist/{index-BdGOOFbD.d.mts → index-CVh7ZP2I.d.mts} +6 -6
  36. package/dist/{index-Bk8WkSa_.d.mts → index-CWq-9Mpk.d.mts} +9 -9
  37. package/dist/{index-CpGf9W_u.d.mts → index-CWuPfOzU.d.mts} +9 -9
  38. package/dist/{index-CR5OVrQJ.d.mts → index-CilWtThn.d.mts} +4 -4
  39. package/dist/{index-B_gyAIAo.d.mts → index-CjMMvZch.d.mts} +35 -25
  40. package/dist/{index-CX9F0vHE.d.mts → index-DY_0TRvM.d.mts} +7 -7
  41. package/dist/{index-D7IZQNhD.d.mts → index-D_oDoazF.d.mts} +1 -1
  42. package/dist/{index-CP96gudX2.d.mts → index-Dckvm0Ml2.d.mts} +16 -16
  43. package/dist/{index-DhhHzOUU.d.mts → index-Dzozmb5u.d.mts} +1 -1
  44. package/dist/{index-di-02yaB2.d.mts → index-OQeNNbiX2.d.mts} +6 -6
  45. package/dist/{index-DsEwuqKE.d.mts → index-VLZJ3Scz.d.mts} +28 -28
  46. package/dist/{index-BsZu6i8H2.d.mts → index-h7_ddTvG2.d.mts} +8 -8
  47. package/dist/kernel/extension/index.d.mts +1 -1
  48. package/dist/kernel/index.d.mts +2 -2
  49. package/dist/kernel/observability/index.d.mts +1 -1
  50. package/dist/{namespace-wuGMWlyz.d.mts → namespace-B0_Sg-1m.d.mts} +2 -2
  51. package/dist/{namespace-CfA0C0JR.d.mts → namespace-B1sjokHd.d.mts} +2 -2
  52. package/dist/{namespace-BFZ4HTH-.d.mts → namespace-CY-9Evdf.d.mts} +5 -5
  53. package/dist/{namespace-Dmbm2JzV.d.mts → namespace-Cy62a3YP.d.mts} +2 -2
  54. package/dist/{namespace-De6ORL69.d.mts → namespace-KTRWfIPy.d.mts} +2 -2
  55. package/dist/package-BDaNGoBY.mjs +7 -0
  56. package/dist/{package-DjI3DSDe.d.mts → package-DQgqWIcX.d.mts} +52 -41
  57. package/dist/package.json +1 -1
  58. package/dist/runtime-node/index.d.mts +1 -1
  59. package/dist/runtime-node/index.mjs +1 -1
  60. package/dist/runtime-node/workflow-worker/index.d.mts +1 -1
  61. package/dist/runtime-node/workflow-worker/index.mjs +1 -1
  62. package/dist/{schemas-D2HmGmCt.d.mts → schemas-CSeLgroC.d.mts} +1 -1
  63. package/dist/{schemas-a4aVR0WT.d.mts → schemas-C_kxk6gr.d.mts} +15 -15
  64. package/dist/{schemas-CQe4xCRn.d.mts → schemas-DGKWi7mk.d.mts} +2 -2
  65. package/dist/{schemas-CikbhFMx.d.mts → schemas-DwqibWUL.d.mts} +2 -2
  66. package/dist/{schemas-CvUe_yff.d.mts → schemas-uWyTgMWm.d.mts} +1 -1
  67. package/dist/services/adapter-runtime/index.d.mts +3 -3
  68. package/dist/services/adapter-runtime/namespace.d.mts +1 -1
  69. package/dist/services/adapter-runtime/schemas.d.mts +1 -1
  70. package/dist/services/agent-runtime/index.d.mts +2 -2
  71. package/dist/services/agent-runtime/namespace.d.mts +1 -1
  72. package/dist/services/agent-runtime/schemas.d.mts +1 -1
  73. package/dist/services/context-rules/index.d.mts +3 -3
  74. package/dist/services/execution-target/index.d.mts +3 -3
  75. package/dist/services/execution-target/namespace.d.mts +1 -1
  76. package/dist/services/execution-target/schemas.d.mts +1 -1
  77. package/dist/services/filesystem/namespace.d.mts +6 -6
  78. package/dist/services/filesystem/schemas.d.mts +3 -3
  79. package/dist/services/harness/index.d.mts +3 -3
  80. package/dist/services/index.d.mts +32 -32
  81. package/dist/services/log-import/browser.d.mts +2 -2
  82. package/dist/services/log-import/index.d.mts +2 -2
  83. package/dist/services/log-import/log-import.d.mts +1 -1
  84. package/dist/services/log-import/namespace.d.mts +2 -2
  85. package/dist/services/log-import/schemas.d.mts +1 -1
  86. package/dist/services/session/handlers/index.d.mts +1 -1
  87. package/dist/services/session/index.d.mts +3 -3
  88. package/dist/services/session/messages/namespace.d.mts +1 -1
  89. package/dist/services/settings/namespace.d.mts +12 -12
  90. package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
  91. package/dist/services/subagent-template/index.d.mts +2 -2
  92. package/dist/services/subagent-template/namespace.d.mts +1 -1
  93. package/dist/services/subagent-template/schemas.d.mts +1 -1
  94. package/dist/{session-lineage-CLOlB9l_.d.mts → session-lineage-CEyJWg_J.d.mts} +1 -1
  95. package/dist/{transition-CgsrmsfE.d.mts → transition-h6UZHLGq.d.mts} +1 -1
  96. package/dist/{types-DoxPKNUW.d.mts → types-Bcsp_FCp.d.mts} +4 -4
  97. package/dist/{types-Bs3Pm8rB2.d.mts → types-Bnc-pdB12.d.mts} +1 -1
  98. package/dist/{view-builder-BMpOHHlf.d.mts → view-builder-BMmmF-Mf.d.mts} +2 -2
  99. package/dist/workflow-engine/execution-attempt-repository.d.mts +2 -2
  100. package/dist/workflow-engine/execution-attempt-repository.mjs +1 -1
  101. package/dist/workflow-engine/index.d.mts +64 -64
  102. package/dist/workflow-engine/index.mjs +1 -1
  103. package/dist/workflow-engine/package.d.mts +1 -1
  104. package/dist/workflow-engine/package.mjs +1 -1
  105. package/dist/workflow-engine/provider-operation.d.mts +1 -1
  106. package/dist/workflow-engine/testing/conformance.d.mts +1 -1
  107. package/dist/workflow-engine/testing/conformance.mjs +2 -2
  108. package/dist/workflow-engine/testing/index.d.mts +16 -3
  109. package/dist/workflow-engine/testing/index.mjs +1 -1
  110. package/dist/workflow-engine/testing/sqlite.d.mts +1 -1
  111. package/dist/workflow-engine/testing/sqlite.mjs +66 -61
  112. package/dist/workflow-engine/workflow-orchestrator.mjs +1 -1
  113. package/dist/workflow-worker-BAO7pQpx.mjs +2 -0
  114. package/package.json +1 -1
  115. package/dist/authority-state-bootstrap-DgoHPc9J.mjs +0 -1
  116. package/dist/execution-attempt-repository-Z7oEBcgp.mjs +0 -1
  117. package/dist/package-BESXccyx.mjs +0 -7
  118. package/dist/workflow-worker-Drf-skvM.mjs +0 -2
  119. package/dist/{index-BU9HQ1vJ2.d.mts → index-BBkJsViX2.d.mts} +6 -6
@@ -0,0 +1,7 @@
1
+ import{$ as e,A as t,Ct as n,F as r,G as i,H as a,I as o,J as s,K as c,L as l,M as u,N as d,P as f,Q as p,R as m,St as ee,U as te,V as ne,W as h,X as re,Y as ie,Z as ae,_ as oe,_t as se,a as ce,at as le,bt as ue,c as de,ct as fe,dt as pe,et as me,f as he,ft as ge,g as _e,gt as ve,h as ye,ht as be,i as xe,it as Se,j as Ce,k as we,l as Te,lt as Ee,m as De,mt as Oe,n as ke,nt as Ae,o as je,ot as Me,p as Ne,pt as Pe,q as g,r as Fe,rt as Ie,st as Le,tt as Re,u as ze,ut as Be,vt as Ve,xt as He,y as Ue,yt as We,z as Ge}from"./authority-state-bootstrap-B8jG1zI1.mjs";import{d as Ke,f as qe,p as Je}from"./execution-attempt-repository-CWbgCTwA.mjs";import{assertWorkflowTriggerPayload as Ye,compileWorkflowTriggerBindingFilter as Xe}from"./workflow-engine/workflow-trigger-binding-consumer.mjs";import{a as Ze,r as Qe}from"./execution-attempt-owner-recovery-D4APLAvt.mjs";import{SerialLane as $e}from"@makaio/framework/utils";import{ArtifactSubjects as et,AutomationTriggerSubjects as tt,CRON_AUTOMATION_TRIGGER_KIND as nt,EXECUTION_LIST_DEFAULT_LIMIT as rt,EXECUTION_LIST_MAX_LIMIT as _,EXECUTION_LIST_MIN_LIMIT as v,EXTERNAL_EXECUTION_ID_PREFIX as y,ExecutionAttemptSchemas as b,ExecutionAttemptSubjects as x,ExecutionsByArtifactRefsQuerySchema as it,JsonPatchOperationSchema as at,JsonValueSchema as ot,SessionSubjects as st,WORKFLOW_CANCELLED_REASON as S,WorkLogFrameEntrySchema as ct,WorkerSubjects as lt,WorkflowAutomationTriggerBindingSchema as ut,WorkflowError as C,WorkflowErrorCode as dt,WorkflowNamespace as ft,WorkflowRunContextSchema as pt,WorkflowRunResultSchema as mt,WorkflowStepTypeSchema as ht,WorkflowSubjects as w,createWorkflowCancelSubject as gt,createWorkflowDelegateResultFinalizerNamespace as _t,createWorkflowFinalizerNamespace as vt,dep as yt,extensionToken as bt,serializeArtifactRef as xt,walkWorkflowDefinition as St}from"@makaio/framework/contracts";import{BaseService as Ct}from"@makaio/framework/service-base";import{defineDialectSchema as wt,executeTransaction as T,getDatabaseDialect as Tt,registerDrizzleHandlers as Et,resolveSchema as E,serializeDatabaseOperation as D}from"@makaio/framework/storage/drizzle";import{and as O,asc as k,count as A,desc as j,eq as M,getTableColumns as Dt,gte as Ot,isNotNull as kt,isNull as N,lt as At,lte as jt,notInArray as Mt,or as Nt,sql as P,sum as F}from"drizzle-orm";import{SessionToken as Pt}from"@makaio/framework/services";import{AutomationTriggerBindingRuntimeToken as Ft}from"@makaio/framework/services/automation-trigger";const It=ie.postgres,Lt=le.postgres,Rt=ae.postgres,zt=Le.postgres,Bt=pe.postgres,Vt=e.postgres,Ht=Ee.postgres,Ut=We.postgres,Wt=be.postgres,Gt=Pe.postgres,Kt=se.postgres,qt=Re.postgres,Jt=Ie.postgres,Yt=He.postgres,I=wt({workflowDefinitions:s,workflowExecutions:Se,workflowExecutionFrames:re,workflowGateInstances:Me,workflowStepSpans:Be,workflowExecutionLinks:p,workflowRunContexts:fe,worklogSummaries:Ve,worklogFrameEntries:Oe,worklogArtifactWrites:ge,worklogGateEvents:ve,workflowExecutionState:me,workflowExecutionStateEvents:Ae,workflowFinalizations:ue},{workflowDefinitions:It,workflowExecutions:Lt,workflowExecutionFrames:Rt,workflowGateInstances:zt,workflowStepSpans:Bt,workflowExecutionLinks:Vt,workflowRunContexts:Ht,worklogSummaries:Ut,worklogFrameEntries:Wt,worklogArtifactWrites:Gt,worklogGateEvents:Kt,workflowExecutionState:qt,workflowExecutionStateEvents:Jt,workflowFinalizations:Yt});function L(e){return e.type===`global`?{scopeType:`global`,scopeKind:``,scopeId:``}:e.type===`external`?{scopeType:`external`,scopeKind:e.kind,scopeId:e.id}:{scopeType:e.type,scopeKind:``,scopeId:e.id}}function R(e){switch(e.scopeType){case`global`:return{type:`global`};case`external`:if(!e.scopeKind||!e.scopeId)throw Error(`Invalid external workflow scope row: scopeKind and scopeId are required`);return{type:`external`,kind:e.scopeKind,id:e.scopeId};case`workspace`:case`session`:if(!e.scopeId)throw Error(`Invalid ${e.scopeType} workflow scope row: scopeId is required`);return{type:e.scopeType,id:e.scopeId};default:{let t=e.scopeType;throw Error(`Unknown scope type: ${String(t)}`)}}}function Xt(e,t){let{scopeType:n,scopeKind:r,scopeId:i}=L(t);return[M(e.scopeType,n),M(e.scopeKind,r),M(e.scopeId,i)]}function z(e){return{id:e.id,name:e.name,description:e.description??void 0,root:e.root,inputSchema:e.inputSchema??void 0,configSchema:e.configSchema??void 0,outputSchema:e.outputSchema??void 0,state:e.state??void 0,artifact:e.artifact??void 0,triggers:e.triggers??void 0,scope:R(e),canvasLayout:e.canvasLayout??void 0,source:e.source??void 0,executableSource:e.executableSource??void 0,requirements:e.requirements??void 0,successFinalizerId:e.successFinalizerId??void 0}}function Zt(e,t){let n=L(e.scope);return{id:e.id,name:e.name??e.id,root:e.root,description:e.description??null,inputSchema:e.inputSchema??null,configSchema:e.configSchema??null,outputSchema:e.outputSchema??null,state:e.state??null,artifact:e.artifact??null,triggers:e.triggers??null,canvasLayout:e.canvasLayout??null,source:e.source??null,executableSource:e.executableSource??null,requirements:e.requirements??null,successFinalizerId:e.successFinalizerId??null,createdAt:t,updatedAt:t,...n}}function Qt(e,t){let{workflowDefinitions:r}=E(t,I),i=Dt(r),a=e.on(g.get,async e=>{let n=await t.select().from(r).where(M(r.id,e.payload.id)).limit(1);e.setResult({workflow:n[0]?z(n[0]):null})}),o=e.on(g.set,async a=>{let o=a.payload.workflow,s=Date.now(),c=Zt(o,s),l=await D(t,async()=>{let e=await t.insert(r).values(c).onConflictDoNothing({target:r.id}).returning();if(e.length>0)return{kind:`created`,row:e[0]};let[n]=await t.update(r).set({name:c.name,root:c.root,updatedAt:s,createdAt:P`COALESCE(${i.createdAt}, ${s})`,description:c.description===null?P`${i.description}`:c.description,inputSchema:c.inputSchema===null?P`${i.inputSchema}`:c.inputSchema,configSchema:c.configSchema===null?P`${i.configSchema}`:c.configSchema,outputSchema:c.outputSchema===null?P`${i.outputSchema}`:c.outputSchema,state:c.state,artifact:c.artifact===null?P`${i.artifact}`:c.artifact,triggers:c.triggers===null?P`${i.triggers}`:c.triggers,canvasLayout:c.canvasLayout===null?P`${i.canvasLayout}`:c.canvasLayout,source:c.source===null?P`${i.source}`:c.source,executableSource:c.executableSource,requirements:c.requirements,successFinalizerId:c.successFinalizerId,...L(o.scope)}).where(M(r.id,o.id)).returning();return n?{kind:`updated`,row:n}:void 0});l&&await e.emit(l.kind===`created`?n.definition.created:n.definition.updated,z(l.row)),a.setResult({id:o.id})}),s=e.on(g.delete,async i=>{let a=(await D(t,()=>t.delete(r).where(M(r.id,i.payload.id)).returning())).length>0;a&&await e.emit(n.definition.deleted,{id:i.payload.id}),i.setResult({deleted:a})}),c=e.on(g.list,async e=>{let n=e.payload,i=n.scope?Xt(r,n.scope):[],a=i.length>0?await t.select().from(r).where(O(...i)):await t.select().from(r);e.setResult({workflows:a.map(z)})});return()=>{a(),o(),s(),c()}}function $t(e){return{frameId:e.frameId,nodeId:e.nodeId,nodeType:e.nodeType,path:e.path,parentFrameId:e.parentFrameId??void 0,status:e.status,attempt:e.attempt,iteration:e.iteration??void 0,branchKey:e.branchKey??void 0,...e.outputPresent?{output:e.output}:{},error:e.error??void 0,startedAt:e.startedAt??void 0,completedAt:e.completedAt??void 0}}function en(e,t){return{frameId:t.frameId,executionId:e,nodeId:t.nodeId,nodeType:t.nodeType,path:t.path,parentFrameId:t.parentFrameId??null,status:t.status,attempt:t.attempt,iteration:t.iteration??null,branchKey:t.branchKey??null,output:t.output===void 0?null:t.output,outputPresent:t.output!==void 0,error:t.error??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null}}function tn(e,t){let{workflowExecutionFrames:n}=E(t,I),r=e.on(g.setFrame,async e=>{let{executionId:r,frame:i}=e.payload;if(!h(e,r))throw Error(`Unauthorized: caller is not permitted to write frames for execution: ${r}`);let a=en(r,i);await D(t,()=>t.insert(n).values(a).onConflictDoUpdate({target:n.frameId,set:a})),e.setResult({frameId:i.frameId})}),i=e.on(g.getFrame,async e=>{let r=await t.select().from(n).where(M(n.frameId,e.payload.frameId)).limit(1);e.setResult({frame:r[0]?$t(r[0]):null})}),a=e.on(g.listFrames,async e=>{if(!h(e,e.payload.executionId))throw Error(`Unauthorized: caller is not permitted to list frames for execution: ${e.payload.executionId}`);let r=await t.select().from(n).where(M(n.executionId,e.payload.executionId)).orderBy(k(n.startedAt),k(n.frameId));e.setResult({frames:r.map($t)})});return()=>{r(),i(),a()}}function nn(e){return`${e.executionId}:${e.nodeId}:${e.frameId}`}function B(e){return{executionId:e.executionId,nodeId:e.nodeId,frameId:e.frameId,schema:e.schema,prompt:e.prompt??void 0,status:e.status,autoAction:e.autoAction,timeoutMs:e.timeoutMs??null,...e.resumeDataPresent?{resumeData:e.resumeData}:{},...e.reason===null?{}:{reason:e.reason},createdAt:e.createdAt,resolvedAt:e.resolvedAt??void 0}}function V(e){return{id:nn(e),executionId:e.executionId,nodeId:e.nodeId,frameId:e.frameId,schema:e.schema,prompt:e.prompt??null,status:e.status,autoAction:e.autoAction,timeoutMs:e.timeoutMs,resumeData:e.resumeData===void 0?null:e.resumeData,reason:e.reason??null,resumeDataPresent:e.resumeData!==void 0,createdAt:e.createdAt,resolvedAt:e.resolvedAt??null}}function rn(e,t,n,r){if(e===void 0&&t===void 0)throw Error(`Either executionId or status is required to list gate instances.`);let i=n??rt;if(!Number.isInteger(i)||i<v||i>_)throw Error(`Gate instance list limit must be an integer between ${v} and ${_}.`);return{resolvedLimit:i,predicates:[...e===void 0?[]:[M(r.executionId,e)],...t===void 0?[]:[M(r.status,t)]]}}function an(e,t){let{workflowExecutions:n,workflowGateInstances:r}=E(t,I),i=e.on(g.setGateInstance,async e=>{let n=e.payload.gate;if(!h(e,n.executionId))throw Error(`Unauthorized: caller is not permitted to write gates for execution: ${n.executionId}`);let i=V(n);await D(t,()=>t.insert(r).values(i).onConflictDoUpdate({target:r.id,set:i})),e.setResult({id:i.id})}),a=e.on(g.resolveWaitingGateInstance,async e=>{let n=e.payload.gate,i=V(n),a=await D(t,()=>t.update(r).set(i).where(O(M(r.id,i.id),M(r.status,`waiting`))).returning({id:r.id}));e.setResult({accepted:a.length===1})}),o=e.on(g.getGateInstance,async e=>{let{executionId:n,nodeId:i,frameId:a}=e.payload;if(!h(e,n))throw Error(`Unauthorized: caller is not permitted to read gates for execution: ${n}`);let o=[M(r.executionId,n),M(r.nodeId,i)];a!==void 0&&o.push(M(r.frameId,a));let s=await t.select().from(r).where(O(...o)).limit(1);e.setResult({gate:s[0]?B(s[0]):null})}),s=e.on(g.listGateInstances,async e=>{let{executionId:n,status:i,limit:a}=e.payload,{resolvedLimit:o,predicates:s}=rn(n,i,a,r),c=await t.select().from(r).where(O(...s)).orderBy(j(r.createdAt),j(r.id)).limit(o);e.setResult({gates:c.map(B)})}),c=e.on(g.listPausedGateTimeouts,async e=>{let i=await t.select({gate:r}).from(r).innerJoin(n,M(r.executionId,n.id)).where(O(M(r.status,`waiting`),M(n.status,`paused`),kt(r.timeoutMs)));e.setResult({gates:i.map(e=>B(e.gate))})});return()=>{i(),a(),o(),s(),c()}}function on(e){return{executionId:e.executionId,frameId:e.frameId,stepId:e.stepId,stepType:e.stepType,status:e.status,startedAt:e.startedAt??void 0,completedAt:e.completedAt??void 0,durationMs:e.durationMs??void 0,inputTokens:e.inputTokens??void 0,outputTokens:e.outputTokens??void 0,estimatedCost:e.estimatedCost??void 0,toolCallCount:e.toolCallCount??void 0,input:e.input??void 0,output:e.output??void 0}}function sn(e){return{sourceExecutionId:e.sourceExecutionId,targetExecutionId:e.targetExecutionId,linkType:e.linkType,metadata:e.metadata??void 0}}function cn(e,t){let{workflowStepSpans:n,workflowExecutionLinks:r}=E(t,I),i=e.on(g.setSpan,async e=>{let{span:r}=e.payload;if(!h(e,r.executionId))throw Error(`Unauthorized: caller is not permitted to write spans for execution: ${r.executionId}`);await D(t,()=>t.insert(n).values(r).onConflictDoUpdate({target:[n.executionId,n.frameId],set:r})),e.setResult({id:`${r.executionId}:${r.frameId}`})}),a=e.on(g.listSpans,async e=>{let r=await t.select().from(n).where(M(n.executionId,e.payload.executionId)).orderBy(k(n.startedAt),k(n.stepId),k(n.frameId));e.setResult({spans:r.map(on)})}),o=e.on(g.setExecutionLink,async e=>{let{link:n}=e.payload;await D(t,()=>t.insert(r).values(n).onConflictDoUpdate({target:[r.sourceExecutionId,r.targetExecutionId],set:n})),e.setResult({id:`${n.sourceExecutionId}:${n.targetExecutionId}`})}),s=e.on(g.listExecutionLinks,async e=>{let{sourceExecutionId:n,targetExecutionId:i}=e.payload;if(n===void 0&&i===void 0)throw Error(`Either sourceExecutionId or targetExecutionId is required to list execution links.`);let a=[...n===void 0?[]:[M(r.sourceExecutionId,n)],...i===void 0?[]:[M(r.targetExecutionId,i)]],o=t.select().from(r).where(O(...a));e.setResult({links:(await o).map(sn)})});return()=>{i(),a(),o(),s()}}function H(e,t){return t===null?Tt(e)===`postgres`?P`'null'::jsonb`:P`'null'`:t}function ln(e){switch(e.kind){case`path`:return{sourceKind:`path`,sourcePath:e.path,sourceFilename:null,sourceCode:null};case`source`:return{sourceKind:`source`,sourcePath:null,sourceFilename:e.filename,sourceCode:e.source};case`definition`:return{sourceKind:`definition`,sourcePath:null,sourceFilename:null,sourceCode:null}}}function un(e){switch(e.sourceKind){case`path`:if(!e.sourcePath)throw Error(`Invalid run context row: sourcePath required for kind=path`);return{kind:`path`,path:e.sourcePath};case`source`:if(!e.sourceFilename)throw Error(`Invalid run context row: sourceFilename required for kind=source`);return{kind:`source`,filename:e.sourceFilename,source:e.sourceCode??``};case`definition`:return{kind:`definition`,workflowId:e.workflowId};default:throw Error(`Unknown run context source kind: ${String(e.sourceKind)}`)}}function dn(e){return{executionId:e.executionId,workflowId:e.workflowId,coordinatorSessionId:e.coordinatorSessionId,source:un(e),definitionSnapshot:e.definitionSnapshot??void 0,workerManifest:e.workerManifest,inputs:e.inputs,config:e.config??{},triggerPayload:e.triggerPayload,triggerMode:e.triggerMode,...e.artifactRef===null?{}:{artifactRef:e.artifactRef},scope:R(e),...e.dispatchMetadata===null?{}:{dispatchMetadata:e.dispatchMetadata},cancelSubject:e.cancelSubject,env:e.env,createdAt:e.createdAt,suspensionStrategy:e.suspensionStrategy??`wait-in-process`,...e.terminalAuthority===null?{}:{terminalAuthority:e.terminalAuthority},...e.materializationSpec===null?{}:{materializationSpec:e.materializationSpec}}}function fn(e){let t=ln(e.source),n=L(e.scope);return{executionId:e.executionId,workflowId:e.workflowId,coordinatorSessionId:e.coordinatorSessionId,...t,definitionSnapshot:e.definitionSnapshot??null,workerManifest:e.workerManifest,inputs:e.inputs,config:e.config??{},triggerPayload:e.triggerPayload,triggerMode:e.triggerMode??`immediate`,artifactRef:e.artifactRef??null,dispatchMetadata:e.dispatchMetadata??null,...n,cancelSubject:e.cancelSubject,env:e.env,createdAt:e.createdAt,suspensionStrategy:e.suspensionStrategy,terminalAuthority:e.terminalAuthority??null,materializationSpec:e.materializationSpec??null}}async function pn(e,t,n){let r=fn(t);await e.insert(n).values(r).onConflictDoUpdate({target:n.executionId,set:r})}function mn(e,t){let{workflowRunContexts:n,workflowExecutionState:r,workflowExecutionStateEvents:i}=E(t,I),a=e.on(g.setRunContext,async e=>{let a=e.payload.runContext,o=e.payload.initialState;await T(t,async e=>{if(await pn(e,a,n),o===void 0)return;let s=Date.now(),c=H(t,o);await e.insert(r).values({executionId:a.executionId,sequence:0,value:c,updatedAt:s}).onConflictDoNothing(),await e.insert(i).values({executionId:a.executionId,sequence:0,patch:[],value:c,createdAt:s}).onConflictDoNothing()}),e.setResult({executionId:a.executionId})}),o=e.on(g.getRunContext,async e=>{let{executionId:r}=e.payload,i=await t.select().from(n).where(M(n.executionId,r)),a=i[0]?dn(i[0]):null;e.setResult({runContext:a})});return()=>{a(),o()}}async function hn(e,t,n){let{workflowExecutionState:r,workflowExecutionStateEvents:i}=E(e,I),a=Date.now(),o=H(e,n);await T(e,async e=>{await e.insert(r).values({executionId:t,sequence:0,value:o,updatedAt:a}).onConflictDoNothing(),await e.insert(i).values({executionId:t,sequence:0,patch:[],value:o,createdAt:a}).onConflictDoNothing()})}async function gn(e,t){let{workflowExecutionState:n}=E(e,I),r=(await e.select().from(n).where(M(n.executionId,t)).limit(1))[0];return r?{executionId:r.executionId,sequence:r.sequence,value:r.value}:null}async function _n(e,t){let{workflowExecutionState:n,workflowExecutionStateEvents:r}=E(e,I),i=Date.now(),a=H(e,t.nextValue);return T(e,async e=>{let o=(await e.select().from(n).where(M(n.executionId,t.executionId)).limit(1))[0];if(!o)throw Error(`no workflow state for execution ${t.executionId}`);if(t.expectedSequence===void 0)throw Error(`expectedSequence is required to patch workflow state`);let s=o.sequence+1,c=te(o.value,t.nextValue);if((await e.update(n).set({sequence:s,value:a,updatedAt:i}).where(O(M(n.executionId,t.executionId),M(n.sequence,t.expectedSequence))).returning()).length===0)throw Error(`state sequence conflict: expected ${String(t.expectedSequence)}, got ${String(o.sequence)}`);return await e.insert(r).values({executionId:t.executionId,sequence:s,patch:c,value:a,createdAt:i}),{executionId:t.executionId,sequence:s,patch:c,value:t.nextValue}})}function vn(e,t){let n=e.on(g.initializeState,async e=>{let{executionId:n,initialValue:r}=e.payload;await hn(t,n,r),e.setResult({})}),r=e.on(g.getState,async e=>{let{executionId:n}=e.payload,r=await gn(t,n);e.setResult({state:r})}),i=e.on(g.patchState,async e=>{let{executionId:n,expectedSequence:r,nextValue:i}=e.payload,a=await _n(t,{executionId:n,expectedSequence:r,nextValue:i});e.setResult(a)});return()=>{n(),r(),i()}}function yn(e){return{executionId:e.executionId,workflowId:e.workflowId,workflowName:e.workflowName??void 0,status:e.status,startedAt:e.startedAt,completedAt:e.completedAt??void 0,durationMs:e.durationMs??void 0,totalInputTokens:e.totalInputTokens??void 0,totalOutputTokens:e.totalOutputTokens??void 0,totalEstimatedCost:e.totalEstimatedCost??void 0,error:e.error??void 0,failedNodeId:e.failedNodeId??void 0}}async function bn(e,t){let{worklogSummaries:n}=E(e,I);await e.insert(n).values(t).onConflictDoNothing()}async function xn(e,t){let{worklogSummaries:n}=E(e,I);await e.insert(n).values(t).onConflictDoUpdate({target:n.executionId,set:Sn(t),setWhere:Mt(n.status,[`completed`,`failed`,`cancelled`])})}function Sn(e){return{workflowId:e.workflowId,workflowName:e.workflowName,status:e.status,startedAt:e.startedAt,completedAt:e.completedAt,durationMs:e.durationMs,error:e.error,failedNodeId:e.failedNodeId}}async function U(e,t){let{worklogSummaries:n}=E(e,I),r=await e.select().from(n).where(M(n.executionId,t)).limit(1);return r[0]?yn(r[0]):null}async function Cn(e,t={}){let{worklogSummaries:n}=E(e,I),{workflowId:r,status:i,limit:a=50,offset:o=0}=t,s=[...r===void 0?[]:[M(n.workflowId,r)],...i===void 0?[]:[M(n.status,i)]],c=s.length>0?O(...s):void 0,[l,u]=await Promise.all([e.select().from(n).where(c).orderBy(j(n.startedAt)).limit(a).offset(o),e.select({count:A()}).from(n).where(c)]);return{items:l.map(yn),total:u[0]?.count??0}}async function wn(e,t){let{worklogFrameEntries:n}=E(e,I);await e.insert(n).values(t).onConflictDoNothing()}async function Tn(e,t){let{worklogFrameEntries:n}=E(e,I);await e.insert(n).values(t).onConflictDoUpdate({target:n.frameId,set:t,setWhere:Mt(n.status,[`completed`,`failed`,`skipped`,`cancelled`])})}async function W(e,t){let{worklogFrameEntries:n}=E(e,I);return(await e.select().from(n).where(M(n.frameId,t)).limit(1))[0]??null}async function En(e,t){let n=await W(e,t);return n===null?null:ct.parse({executionId:n.executionId,frameId:n.frameId,nodeId:n.nodeId,nodeType:n.nodeType,path:n.path,status:n.status,attempt:n.attempt,iteration:n.iteration??void 0,branchKey:n.branchKey??void 0,startedAt:n.startedAt??void 0,completedAt:n.completedAt??void 0,durationMs:n.durationMs??void 0,inputTokens:n.inputTokens??void 0,outputTokens:n.outputTokens??void 0,estimatedCost:n.estimatedCost??void 0,error:n.error??void 0})}async function Dn(e,t){let{worklogArtifactWrites:n}=E(e,I);await e.insert(n).values(t).onConflictDoUpdate({target:n.id,set:t})}function On(e,t,n,r,i){return`${e}:${t}:${n}:${r}:${i}`}async function G(e,t){let{worklogGateEvents:n}=E(e,I);await e.insert(n).values(t).onConflictDoUpdate({target:n.id,set:t})}async function kn(e,t){let{worklogGateEvents:n}=E(e,I);return(await e.select().from(n).where(M(n.id,t)).limit(1))[0]??null}function K(e,t,n){return`${e}:${t}:${n}`}async function An(e,t,n){let[r]=await e.update(t).set({totalInputTokens:t.totalInputTokens}).where(M(t.executionId,n)).returning();return r}async function jn(e,t,n){let[r]=await e.select({totalInputTokens:F(t.inputTokens),totalOutputTokens:F(t.outputTokens),totalEstimatedCost:F(t.estimatedCost),measuredInputTokens:A(t.inputTokens),measuredOutputTokens:A(t.outputTokens),measuredCosts:A(t.estimatedCost)}).from(t).where(M(t.executionId,n));return{totalInputTokens:Number(r?.totalInputTokens??0),totalOutputTokens:Number(r?.totalOutputTokens??0),totalEstimatedCost:Number(r?.totalEstimatedCost??0),hasMeasurements:Number(r?.measuredInputTokens??0)>0||Number(r?.measuredOutputTokens??0)>0||Number(r?.measuredCosts??0)>0}}function Mn(e){return e.hasMeasurements}async function Nn(e,t,n,r){await e.update(t).set({totalInputTokens:r.totalInputTokens,totalOutputTokens:r.totalOutputTokens,totalEstimatedCost:r.totalEstimatedCost}).where(M(t.executionId,n))}async function Pn(e,t,n,r){let i=P`coalesce((select sum(${n.inputTokens}) from ${n} where ${n.executionId} = ${r}), 0)`,a=P`coalesce((select sum(${n.outputTokens}) from ${n} where ${n.executionId} = ${r}), 0)`,o=P`coalesce((select sum(${n.estimatedCost}) from ${n} where ${n.executionId} = ${r}), 0)`,s=P`exists(
2
+ select 1 from ${n}
3
+ where ${n.executionId} = ${r}
4
+ and (${n.inputTokens} is not null
5
+ or ${n.outputTokens} is not null
6
+ or ${n.estimatedCost} is not null)
7
+ )`;await e.update(t).set({totalInputTokens:i,totalOutputTokens:a,totalEstimatedCost:o}).where(O(M(t.executionId,r),s))}async function Fn(e,t){let{worklogSummaries:n,worklogFrameEntries:r}=E(e,I);if(Tt(e)===`sqlite`){await Pn(e,n,r,t);return}await T(e,async e=>{if(await An(e,n,t)===void 0)return;let i=await jn(e,r,t);Mn(i)&&await Nn(e,n,t,i)})}async function In(e,t={}){let{worklogSummaries:n}=E(e,I),{workflowId:r,since:i,until:a}=t,o=[...r===void 0?[]:[M(n.workflowId,r)],...i===void 0?[]:[Ot(n.startedAt,i)],...a===void 0?[]:[jt(n.startedAt,a)]],s=o.length>0?O(...o):void 0,[c,l]=await Promise.all([e.select({status:n.status,count:A()}).from(n).where(s).groupBy(n.status),e.select({totalDurationMs:F(n.durationMs),totalInputTokens:F(n.totalInputTokens),totalOutputTokens:F(n.totalOutputTokens),totalEstimatedCost:F(n.totalEstimatedCost)}).from(n).where(s)]),u={pending:0,running:0,paused:0,finalizing:0,completed:0,failed:0,cancelled:0},d=0;for(let e of c)u[e.status]=e.count,d+=e.count;let f=l[0];return{total:d,byStatus:u,totalDurationMs:Number(f?.totalDurationMs??0),totalInputTokens:Number(f?.totalInputTokens??0),totalOutputTokens:Number(f?.totalOutputTokens??0),totalEstimatedCost:Number(f?.totalEstimatedCost??0)}}async function Ln(e,t,n,r,i){let a=await W(t,n);if(a===null||i===void 0)return null;let o=await e.requestOptional(et.resolve,{ref:{refClass:`artifact`,kind:r.kind,id:r.id,revision:i}}).catch(()=>void 0);if(o===void 0||!o.handled||o.data.artifact===null)return null;let{kind:s,schemaVersion:c,scope:l}=o.data.artifact;return{nodeId:a.nodeId,artifact:{kind:s,schemaVersion:c,scope:l}}}async function q(e,t){try{await t()}catch(t){console.error(`[WorklogProjection] Write failed (${e}):`,t)}}async function J(e,t){try{await e.emit(n.worklog.changed,{executionId:t})}catch(e){console.error(`[WorklogProjection] worklog.changed emit failed for ${t}:`,e)}}const Rn=new Set([`completed`,`failed`,`cancelled`]);function zn(e){return Rn.has(e)}async function Bn(e,t){return await bn(e,{executionId:t.executionId,workflowId:t.workflowId,workflowName:null,status:`running`,startedAt:t.startedAt??Date.now(),completedAt:null,durationMs:null,totalInputTokens:null,totalOutputTokens:null,totalEstimatedCost:null,error:null,failedNodeId:null}),!0}async function Vn(e,t){let n=t.completedAt??Date.now(),r=await U(e,t.executionId);return r!==null&&zn(r.status)?!1:(await xn(e,{executionId:t.executionId,workflowId:r?.workflowId??t.executionId,workflowName:r?.workflowName??null,status:`completed`,startedAt:r?.startedAt??n-t.totalDuration,completedAt:n,durationMs:t.totalDuration,totalInputTokens:r?.totalInputTokens??null,totalOutputTokens:r?.totalOutputTokens??null,totalEstimatedCost:r?.totalEstimatedCost??null,error:null,failedNodeId:null}),!0)}async function Hn(e,t,n,r,i,a){let o=await U(e,t);if(o!==null&&zn(o.status))return!1;let s=o?.startedAt??a;return await xn(e,{executionId:t,workflowId:o?.workflowId??t,workflowName:o?.workflowName??null,status:n,startedAt:s,completedAt:a,durationMs:a-s,totalInputTokens:o?.totalInputTokens??null,totalOutputTokens:o?.totalOutputTokens??null,totalEstimatedCost:o?.totalEstimatedCost??null,error:r,failedNodeId:i}),!0}function Un(e,t){return[e.on(n.execution.started,async n=>{let{executionId:r}=n.payload;await q(`execution.started[${r}]`,async()=>{await D(t,()=>Bn(t,n.payload))&&await J(e,r)})}),e.on(n.execution.completed,async n=>{let{executionId:r}=n.payload;await q(`execution.completed[${r}]`,async()=>{await D(t,()=>Vn(t,n.payload))&&await J(e,r)})}),e.on(n.execution.failed,async n=>{let{executionId:r,error:i,failedStepId:a}=n.payload,o=n.payload.completedAt??Date.now();await q(`execution.failed[${r}]`,async()=>{await D(t,()=>Hn(t,r,`failed`,i,a??null,o))&&await J(e,r)})}),e.on(n.execution.cancelled,async n=>{let{executionId:r}=n.payload,i=n.payload.completedAt??Date.now();await q(`execution.cancelled[${r}]`,async()=>{await D(t,()=>Hn(t,r,`cancelled`,null,null,i))&&await J(e,r)})})]}const Wn=new Set([`completed`,`failed`,`skipped`,`cancelled`]);function Gn(e){return Wn.has(e)}function Kn(e,t,n){return e===null?{nodeId:t,nodeType:`station`,path:[],attempt:0,iteration:null,branchKey:null,startedAt:n,inputTokens:null,outputTokens:null,estimatedCost:null}:{nodeId:e.nodeId,nodeType:e.nodeType,path:e.path,attempt:e.attempt,iteration:e.iteration,branchKey:e.branchKey,startedAt:e.startedAt,inputTokens:e.inputTokens,outputTokens:e.outputTokens,estimatedCost:e.estimatedCost}}async function qn(e,t,n,r,i,a,o){let s=o??Date.now(),c=await W(t,r);c!==null&&Gn(c.status)||(await Tn(t,{frameId:r,executionId:n,...Kn(c,i,a===void 0?null:s-a),status:`completed`,completedAt:s,durationMs:a??null,error:null}),await Fn(t,n),await J(e,n))}async function Jn(e,t,n,r,i,a,o,s){let c=s??Date.now(),l=await W(t,r);l!==null&&Gn(l.status)||(await Tn(t,{frameId:r,executionId:n,...Kn(l,i,o===void 0?null:c-o),status:`failed`,completedAt:c,durationMs:o??null,error:a}),await J(e,n))}function Yn(e,t){return[e.on(n.frame.started,async n=>{let{executionId:r,frameId:i,nodeId:a,nodeType:o,path:s,startedAt:c}=n.payload;await q(`frame.started[${i}]`,async()=>{await wn(t,{frameId:i,executionId:r,nodeId:a,nodeType:o,path:s,status:`running`,attempt:0,iteration:null,branchKey:null,startedAt:c??Date.now(),completedAt:null,durationMs:null,inputTokens:null,outputTokens:null,estimatedCost:null,error:null}),await J(e,r)})}),e.on(n.frame.completed,async n=>{let{executionId:r,frameId:i,nodeId:a,duration:o,completedAt:s}=n.payload;await q(`frame.completed[${i}]`,()=>qn(e,t,r,i,a,o,s))}),e.on(n.frame.failed,async n=>{let{executionId:r,frameId:i,nodeId:a,error:o,duration:s,completedAt:c}=n.payload;await q(`frame.failed[${i}]`,()=>Jn(e,t,r,i,a,o,s,c))})]}const Xn={user:`rejected`,timeout:`timed-out`,cancelled:`cancelled`};function Zn(e,t){return[e.on(n.gate.suspended,async n=>{let{executionId:r,frameId:i,nodeId:a,prompt:o}=n.payload;await q(`gate.suspended[${i}]`,async()=>{await G(t,{id:K(r,a,i),executionId:r,nodeId:a,frameId:i,status:`waiting`,prompt:o??null,openedAt:Date.now(),resolvedAt:null,resumeData:null}),await J(e,r)})}),e.on(n.gate.resumed,async n=>{let{executionId:r,frameId:i,nodeId:a,resumeData:o}=n.payload;await q(`gate.resumed[${i}]`,async()=>{let n=K(r,a,i),s=await kn(t,n),c=Date.now();await G(t,{id:n,executionId:r,nodeId:a,frameId:i,status:`resumed`,prompt:s?.prompt??null,openedAt:s?.openedAt??c,resolvedAt:c,resumeData:o}),await J(e,r)})}),e.on(n.gate.resolved,async n=>Qn(n.payload,e,t)),e.on(n.artifact.updated,async n=>{let{executionId:r,frameId:i,artifactRef:a,revision:o}=n.payload;await q(`artifact.updated[${r}:${i}]`,async()=>{let n=await Ln(e,t,i,a,o);if(n===null)return;let s=Date.now();await Dn(t,{id:On(r,i,a.kind,a.id,s),executionId:r,frameId:i,nodeId:n.nodeId,artifact:n.artifact,revision:o??null,writtenAt:s}),await J(e,r)})})]}async function Qn(e,t,n){let{executionId:r,frameId:i,stepId:a,source:o}=e;o===`user`&&e.action===`approve`||await q(`gate.resolved[${i}]`,async()=>{let s=K(r,a,i),c=await kn(n,s),l=Date.now();await G(n,{id:s,executionId:r,nodeId:a,frameId:i,status:o!==`cancelled`&&e.action===`approve`?`resumed`:Xn[o],prompt:c?.prompt??null,openedAt:c?.openedAt??l,resolvedAt:l,resumeData:c?.resumeData??null}),await J(t,r)})}function $n(e,t){let r=[...Un(e,t),...Yn(e,t),...Zn(e,t),e.on(n.worklog.get,async e=>{let{executionId:n}=e.payload,r=await U(t,n);e.setResult({summary:r})}),e.on(n.worklog.frame.get,async e=>{let{frameId:n}=e.payload,r=await En(t,n);e.setResult({frame:r})}),e.on(n.worklog.list,async e=>{let{workflowId:n,status:r,limit:i,offset:a}=e.payload,o=await Cn(t,{workflowId:n,status:r,limit:i,offset:a});e.setResult(o)}),e.on(n.worklog.stats,async e=>{let{workflowId:n,since:r,until:i}=e.payload,a=await In(t,{workflowId:n,since:r,until:i});e.setResult({stats:a})})];return()=>{for(let e of r)e()}}function Y(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>Y(e,t[n]));if(e===null||t===null||typeof e!=`object`||typeof t!=`object`)return!1;let n=e,r=t,i=Object.keys(n).sort(),a=Object.keys(r).sort();return i.length===a.length&&i.every((e,t)=>e===a[t]&&Y(n[e],r[e]))}function er(e){return{executionId:e.executionId,frameId:e.frameId,nodeId:e.nodeId,nodeType:e.nodeType,path:e.path,status:e.status,attempt:e.attempt,iteration:e.iteration??null,branchKey:e.branchKey??null,startedAt:e.startedAt??null,completedAt:e.completedAt??null,durationMs:e.durationMs??null,inputTokens:e.inputTokens??null,outputTokens:e.outputTokens??null,estimatedCost:e.estimatedCost??null,error:e.error??null}}function tr(e,t){let n=e.frame;if(n!==void 0){let r=e.status===`failed`?e.error??null:null;if(n.executionId!==e.executionId)throw Error(`settleExternalExecution requires frame.executionId to match executionId`);if(n.status!==e.status)throw Error(`settleExternalExecution requires frame.status to match status`);if(n.completedAt!==t)throw Error(`settleExternalExecution requires frame.completedAt to match completedAt`);if(n.durationMs!==t-n.startedAt)throw Error(`settleExternalExecution requires frame.durationMs to match its timestamps`);if((n.error??null)!==r)throw Error(`settleExternalExecution requires frame.error to match terminal error metadata`)}return JSON.stringify({version:1,status:e.status,completedAt:t,error:e.status===`failed`?e.error??null:null,reason:e.status===`cancelled`?e.reason??null:null,frame:n===void 0?null:{executionId:n.executionId,frameId:n.frameId,nodeId:n.nodeId,nodeType:n.nodeType,path:n.path,status:n.status,attempt:n.attempt,iteration:n.iteration??null,branchKey:n.branchKey??null,startedAt:n.startedAt,completedAt:n.completedAt,durationMs:n.durationMs,error:n.status===`failed`?n.error??null:null}})}function nr(e,t,n){if(e!==t)throw Error(`settleExternalExecution: execution "${n}" conflicts with an existing terminal settlement fingerprint`)}async function rr(e,t,n,r,i){let a=tr(r,i);if(n.externalSettlementFingerprint!==null){nr(n.externalSettlementFingerprint,a,r.executionId);return}if(r.frame!==void 0)throw Error(`settleExternalExecution: frame presence conflicts with the legacy frame-less settlement for execution "${r.executionId}"`);let o=r.status===`failed`?r.error??null:null,s=r.status===`cancelled`?r.reason??null:null;if((await e.update(t).set({externalSettlementFingerprint:a}).where(O(M(t.id,r.executionId),N(t.externalSettlementFingerprint),M(t.status,r.status),M(t.completedAt,i),o===null?N(t.error):M(t.error,o),s===null?N(t.reason):M(t.reason,s))).returning({fingerprint:t.externalSettlementFingerprint})).length>0)return;let[c]=await e.select().from(t).where(M(t.id,r.executionId)).limit(1);if(c===void 0)throw Error(`settleExternalExecution: execution "${r.executionId}" disappeared`);if(ar(c,r,i),c.externalSettlementFingerprint===null)throw Error(`settleExternalExecution: failed to adopt terminal settlement fingerprint for execution "${r.executionId}"`);nr(c.externalSettlementFingerprint,a,r.executionId)}function ir(e,t){if(e.executionId!==t.executionId||e.nodeId!==t.nodeId||e.nodeType!==t.nodeType||!Y(e.path,t.path)||e.attempt!==t.attempt||e.iteration!==(t.iteration??null)||e.branchKey!==(t.branchKey??null)||e.startedAt!==t.startedAt)throw Error(`settleExternalExecution: frame "${t.frameId}" conflicts with its registered metadata`)}function ar(e,t,n){let r=t.status===`failed`?t.error??null:null,i=t.status===`cancelled`?t.reason??null:null;if(e.status!==t.status||e.completedAt!==n||e.error!==r||e.reason!==i)throw e.status===t.status?Error(`settleExternalExecution: execution "${t.executionId}" conflicts with an existing terminal settlement`):Error(`settleExternalExecution: execution "${t.executionId}" cannot transition from status "${e.status}"`)}async function or(e,t,n){let r=await e.select().from(t).where(M(t.executionId,n.executionId)),i=r.find(e=>e.frameId===n.frame.frameId);if(i!==void 0)return i;if(r.length>0)throw Error(`settleExternalExecution: frame "${n.frame.frameId}" conflicts with the registered frame identity`);let[a]=await e.select().from(t).where(M(t.frameId,n.frame.frameId)).limit(1);if(a!==void 0)throw Error(`settleExternalExecution: frame "${n.frame.frameId}" belongs to another execution`)}function sr(e,t,n,r){let i=Math.min(e.startedAt,r);return{executionId:e.id,workflowId:e.workflowId,workflowName:t?.workflowName??null,status:n.status,startedAt:i,completedAt:r,durationMs:r-i,totalInputTokens:t?.totalInputTokens??null,totalOutputTokens:t?.totalOutputTokens??null,totalEstimatedCost:t?.totalEstimatedCost??null,error:n.status===`failed`?n.error??null:null,failedNodeId:n.status===`failed`?n.frame?.nodeId??t?.failedNodeId??null:null}}function cr(e,t){return er({...e,inputTokens:e.inputTokens??t?.inputTokens??void 0,outputTokens:e.outputTokens??t?.outputTokens??void 0,estimatedCost:e.estimatedCost??t?.estimatedCost??void 0})}function lr(e,t){if(e.externalRegistrationFrameId!==(t.externalRegistrationFrameId??null))throw Error(`setExternalExecutionStart: frame metadata conflicts for execution "${t.id}"`);if(!(e.id===t.id&&e.workflowId===t.workflowId&&e.coordinatorSessionId===t.coordinatorSessionId&&e.startedAt===t.startedAt&&e.scopeType===t.scopeType&&e.scopeKind===t.scopeKind&&e.scopeId===t.scopeId&&e.artifactKind===t.artifactKind&&e.artifactId===t.artifactId&&Y(e.inputs,t.inputs)&&Y(e.triggerPayload,t.triggerPayload)))throw Error(`setExternalExecutionStart: registration conflicts for execution "${t.id}"`)}function ur(e,t){if(e.workflowId!==t.workflowId||e.startedAt!==t.startedAt||e.executionId!==t.executionId)throw Error(`setExternalExecutionStart: WorkLog summary conflicts for execution "${t.executionId}"`)}function dr(e,t){if(e.executionId!==t.executionId||e.frameId!==t.frameId||e.nodeId!==t.nodeId||e.nodeType!==t.nodeType||!Y(e.path,t.path)||e.attempt!==t.attempt||e.iteration!==(t.iteration??null)||e.branchKey!==(t.branchKey??null)||e.startedAt!==t.startedAt)throw Error(`setExternalExecutionStart: WorkLog frame conflicts for frame "${t.frameId}"`)}async function fr(e,t,n,r){if(!t.id.startsWith(y))throw Error(`setExternalExecutionStart: execution "${t.id}" is not an external execution ID`);if(n!==void 0&&n.executionId!==t.id)throw Error(`setExternalExecutionStart requires frame.executionId to match execution.id`);let{workflowExecutions:i,worklogSummaries:a,worklogFrameEntries:o}=E(e,I),s={...r(t),externalRegistrationFrameId:n?.frameId??null},c={executionId:t.id,workflowId:t.workflowId,workflowName:null,status:`running`,startedAt:t.startedAt,completedAt:null,durationMs:null,totalInputTokens:null,totalOutputTokens:null,totalEstimatedCost:null,error:null,failedNodeId:null};await T(e,async e=>{let r=(await e.insert(i).values(s).onConflictDoNothing().returning({id:i.id})).length===0;if(r){let[n]=await e.select().from(i).where(M(i.id,t.id)).limit(1);if(n===void 0)throw Error(`setExternalExecutionStart: execution "${t.id}" disappeared`);lr(n,s)}let[l]=await e.select().from(a).where(M(a.executionId,t.id)).limit(1);if(l===void 0?await e.insert(a).values(c):ur(l,c),n!==void 0){let[i]=await e.select().from(o).where(M(o.frameId,n.frameId)).limit(1);if(i===void 0){if(r)throw Error(`setExternalExecutionStart: frame metadata conflicts for execution "${t.id}"`);await e.insert(o).values(er(n))}else dr(i,n)}})}async function pr(e,t,n,r,i){if(r.frame!==void 0){let n=await or(e,t,r);return n!==void 0&&ir(n,r.frame),{frame:r.frame,existing:n}}if(n.externalRegistrationFrameId===null)return;let[a]=await e.select().from(t).where(M(t.frameId,n.externalRegistrationFrameId)).limit(1);if(a===void 0||a.executionId!==n.id)throw Error(`settleExternalExecution: registered frame "${n.externalRegistrationFrameId}" is unavailable for execution "${n.id}"`);if(a.startedAt===null)throw Error(`settleExternalExecution: registered frame "${a.frameId}" has no start timestamp`);if(i<a.startedAt)throw Error(`settleExternalExecution: completedAt must not precede the registered frame start timestamp`);let o=ht.parse(a.nodeType);return{frame:{executionId:a.executionId,frameId:a.frameId,nodeId:a.nodeId,nodeType:o,path:a.path,status:r.status,attempt:a.attempt,...a.iteration===null?{}:{iteration:a.iteration},...a.branchKey===null?{}:{branchKey:a.branchKey},startedAt:a.startedAt,completedAt:i,durationMs:i-a.startedAt,...r.status===`failed`&&r.error!==void 0?{error:r.error}:{}},existing:a}}async function mr(e,t,n,r,i){let{worklogSummaries:a,worklogFrameEntries:o}=t,s=await An(e,a,n.id),c=await pr(e,o,n,r,i),l=c===void 0?r:{...r,frame:c.frame};if(c!==void 0){let t=cr(c.frame,c.existing);await e.insert(o).values(t).onConflictDoUpdate({target:o.frameId,set:t})}let u=await jn(e,o,n.id),d=Mn(u),f={totalInputTokens:u.totalInputTokens,totalOutputTokens:u.totalOutputTokens,totalEstimatedCost:u.totalEstimatedCost},p={...sr(n,s,l,i),...d?f:{}};await e.insert(a).values(p).onConflictDoUpdate({target:a.executionId,set:Sn(p)}),d&&await Nn(e,a,n.id,u)}async function hr(e,t){if(!t.executionId.startsWith(y))throw Error(`settleExternalExecution: execution "${t.executionId}" is engine-owned and must use the engine finalizer`);if(t.frame!==void 0&&t.frame.executionId!==t.executionId)throw Error(`settleExternalExecution requires frame.executionId to match executionId`);let{workflowExecutions:n,worklogSummaries:r,worklogFrameEntries:i}=E(e,I);return T(e,async e=>{let[a]=await e.select().from(n).where(M(n.id,t.executionId)).limit(1);if(a===void 0)throw Error(`settleExternalExecution: execution "${t.executionId}" was not registered`);let o=t.completedAt??a.completedAt??Date.now();if(a.status===`running`){let r=tr(t,o);if((await e.update(n).set({status:t.status,completedAt:o,error:t.status===`failed`?t.error??null:null,reason:t.status===`cancelled`?t.reason??null:null,externalSettlementFingerprint:r}).where(O(M(n.id,t.executionId),M(n.status,`running`),N(n.externalSettlementFingerprint))).returning({id:n.id})).length===0){let[r]=await e.select().from(n).where(M(n.id,t.executionId)).limit(1);if(r===void 0)throw Error(`settleExternalExecution: execution "${t.executionId}" disappeared`);t.completedAt===void 0&&r.completedAt!==null&&(o=r.completedAt),ar(r,t,o),await rr(e,n,r,t,o)}}else ar(a,t,o),await rr(e,n,a,t,o);return await mr(e,{worklogSummaries:r,worklogFrameEntries:i},a,t,o),!0})}function gr(e,t,n){let r=e.on(g.setExternalExecutionStart,async r=>{let i=r.payload.execution,a=r.payload.frame;await fr(t,i,a,n),await J(e,i.id),r.setResult({executionId:i.id,...a===void 0?{}:{frameId:a.frameId}})}),i=e.on(g.settleExternalExecution,async n=>{let r=await hr(t,n.payload);await J(e,n.payload.executionId),n.setResult({success:r})});return()=>{r(),i()}}function X(e){return{executionId:e.executionId,workflowId:e.workflowId,finalizerId:e.finalizerId,transitionKey:e.transitionKey,claimToken:e.claimToken,intent:e.intent,claimedAt:e.claimedAt}}function _r(e,t){return e.state===`claimed`&&e.executionId===t.executionId&&e.workflowId===t.workflowId&&e.finalizerId===t.finalizerId&&e.transitionKey===t.transitionKey&&e.claimToken===t.claimToken&&e.intent.status===t.intent.status&&e.intent.completedAt===t.intent.completedAt&&e.intent.error===t.intent.error&&e.intent.reason===t.intent.reason}function vr(e,t){if(e.executionId!==t.executionId||e.workflowId!==t.workflowId||e.finalizerId!==t.finalizerId||e.transitionKey!==t.transitionKey||e.claimToken!==t.claimToken)throw Error(`workflow finalization publication claim does not match durable transition ${t.executionId}`)}async function yr(e,t){let{workflowExecutions:n,workflowFinalizations:r}=E(e,I);return T(e,async e=>{let i=await e.select().from(r).where(M(r.executionId,t.executionId)).limit(1);return i[0]?_r(i[0],t):(await e.update(n).set({status:`finalizing`}).where(O(M(n.id,t.executionId),M(n.workflowId,t.workflowId),M(n.status,`running`))).returning({id:n.id})).length===0?!1:(await e.insert(r).values({...t,state:`claimed`}),!0)})}function br(e){return{status:e.status,completedAt:e.completedAt,error:e.status===`failed`?e.error??`Workflow finalization failed`:null,reason:e.status===`cancelled`?e.reason??null:null}}async function xr(e,t,n,r){let{workflowExecutions:i,workflowFinalizations:a}=E(e,I);return T(e,async e=>{let o=(await e.select().from(a).where(M(a.executionId,t)).limit(1))[0];return!o||o.claimToken!==n||o.state===`failed`?!1:o.state===`acknowledged`?!0:(await e.update(i).set(br(o.intent)).where(O(M(i.id,t),M(i.status,`finalizing`))).returning({id:i.id})).length===0?!1:(await e.update(a).set({state:`acknowledged`,settledAt:r}).where(O(M(a.executionId,t),M(a.claimToken,n),M(a.state,`claimed`))),!0)})}async function Sr(e,t,n,r,i){let{workflowExecutions:a,workflowFinalizations:o}=E(e,I);return T(e,async e=>{let s=(await e.select().from(o).where(M(o.executionId,t)).limit(1))[0];return!s||s.claimToken!==n||s.state===`acknowledged`?!1:s.state===`failed`?!0:(await e.update(a).set({status:`failed`,error:r,reason:null,completedAt:i}).where(O(M(a.id,t),M(a.status,`finalizing`))).returning({id:a.id})).length===0?!1:(await e.update(o).set({state:`failed`,failure:r,settledAt:i}).where(O(M(o.executionId,t),M(o.claimToken,n),M(o.state,`claimed`))),!0)})}async function Cr(e,t,r){let{workflowExecutions:i,workflowFinalizations:a}=E(t,I),o=(await t.select().from(a).where(M(a.executionId,r.executionId)).limit(1))[0];if(!o||(vr(o,r),o.state===`claimed`||o.publishedAt!==null))return;let s=(await t.select({startedAt:i.startedAt,status:i.status,error:i.error,reason:i.reason,completedAt:i.completedAt}).from(i).where(M(i.id,o.executionId)).limit(1))[0];if(!(!s||s.completedAt==null)){if(s.status===`completed`)await e.emit(n.execution.completed,{executionId:o.executionId,workflowId:o.workflowId,totalDuration:s.completedAt-s.startedAt,completedAt:s.completedAt,transitionKey:o.transitionKey});else if(s.status===`failed`)await e.emit(n.execution.failed,{executionId:o.executionId,workflowId:o.workflowId,error:s.error??`Workflow finalization failed`,completedAt:s.completedAt,transitionKey:o.transitionKey});else if(s.status===`cancelled`)await e.emit(n.execution.cancelled,{executionId:o.executionId,workflowId:o.workflowId,reason:s.reason??void 0,completedAt:s.completedAt,transitionKey:o.transitionKey});else return;await D(t,()=>t.update(a).set({publishedAt:Date.now()}).where(O(M(a.executionId,o.executionId),N(a.publishedAt))))}}function wr(e,t){let n=new Map;return async r=>{let i=(n.get(r.executionId)??Promise.resolve()).catch(()=>void 0).then(()=>Cr(e,t,r));n.set(r.executionId,i);try{await i}finally{n.get(r.executionId)===i&&n.delete(r.executionId)}}}function Tr(e,t){let n=wr(e,t),r=e.on(g.claimFinalization,async e=>{e.setResult({claimed:await yr(t,e.payload.claim)})}),i=e.on(g.listClaimedFinalizations,async e=>{let{workflowFinalizations:n}=E(t,I),r=await t.select().from(n).where(O(M(n.finalizerId,e.payload.finalizerId),M(n.state,`claimed`)));e.setResult({claims:r.map(X)})}),a=e.on(g.listUnpublishedFinalizations,async e=>{let{workflowFinalizations:n}=E(t,I),r=await t.select().from(n).where(O(Nt(M(n.state,`acknowledged`),M(n.state,`failed`)),M(n.finalizerId,e.payload.finalizerId),N(n.publishedAt)));e.setResult({claims:r.map(X)})}),o=e.on(g.publishFinalization,async e=>{await n(e.payload.claim),e.setResult({})}),s=e.on(g.acknowledgeFinalization,async e=>{let{executionId:r,claimToken:i,settledAt:a}=e.payload,o=await xr(t,r,i,a);if(e.setResult({acknowledged:o}),!o)return;let{workflowFinalizations:s}=E(t,I),c=await t.select().from(s).where(M(s.executionId,r)).limit(1);c[0]&&await n(X(c[0]))}),c=e.on(g.failFinalization,async e=>{let{executionId:r,claimToken:i,error:a,settledAt:o}=e.payload,s=await Sr(t,r,i,a,o);if(e.setResult({failed:s}),!s)return;let{workflowFinalizations:c}=E(t,I),l=await t.select().from(c).where(M(c.executionId,r)).limit(1);l[0]&&await n(X(l[0]))});return()=>{r(),i(),a(),o(),s(),c()}}function Er(e){return{id:e.id,workflowId:e.workflowId,coordinatorSessionId:e.coordinatorSessionId??void 0,status:e.status,inputs:e.inputs,config:{},error:e.error??void 0,reason:e.reason??void 0,startedAt:e.startedAt,completedAt:e.completedAt??void 0,triggerPayload:e.triggerPayload??void 0,...e.artifactKind!==null&&e.artifactId!==null?{artifactRef:{kind:e.artifactKind,id:e.artifactId}}:{},scope:R(e)}}function Z(e){let t=L(e.scope);return{id:e.id,workflowId:e.workflowId,coordinatorSessionId:e.coordinatorSessionId??null,status:e.status,inputs:e.inputs,error:e.error??null,reason:e.reason??null,startedAt:e.startedAt,completedAt:e.completedAt??null,triggerPayload:e.triggerPayload??null,artifactKind:e.artifactRef?.kind??null,artifactId:e.artifactRef?.id??null,...t}}function Dr(e,t,n,r,i,a){let o=[...e?[M(a.workflowId,e)]:[],...n?[M(a.status,n)]:[],...i===void 0?[]:[M(a.artifactKind,i.kind),M(a.artifactId,i.id)]];if(t&&o.push(...Xt(a,t)),r){let e=Nt(At(a.startedAt,r.startedAt),O(M(a.startedAt,r.startedAt),At(a.id,r.id)));e&&o.push(e)}return o}async function Or(e,t,n,r,i){if(n.executionId!==t.id)throw Error(`setExecutionStart requires execution.id to match runContext.executionId`);for(let e of i??[])if(e.targetExecutionId!==t.id)throw Error(`setExecutionStart requires executionLinks.targetExecutionId to match execution.id`);let{workflowExecutions:a,workflowRunContexts:o,workflowExecutionState:s,workflowExecutionStateEvents:c,workflowExecutionLinks:l}=E(e,I),u=Z(t);await T(e,async d=>{await d.insert(a).values(u).onConflictDoUpdate({target:a.id,set:u});let f=(n.dispatchMetadata===void 0?await d.select({dispatchMetadata:o.dispatchMetadata}).from(o).where(M(o.executionId,n.executionId)).limit(1):[])[0]?.dispatchMetadata;if(await pn(d,n.dispatchMetadata===void 0&&f!=null?{...n,dispatchMetadata:f}:n,o),r!==void 0){let n=Date.now(),i=H(e,r);await d.insert(s).values({executionId:t.id,sequence:0,value:i,updatedAt:n}).onConflictDoNothing(),await d.insert(c).values({executionId:t.id,sequence:0,patch:[],value:i,createdAt:n}).onConflictDoNothing()}for(let e of i??[])await d.insert(l).values(e).onConflictDoUpdate({target:[l.sourceExecutionId,l.targetExecutionId],set:e})})}async function kr(e,t,n){if(n.executionId!==t.id)throw Error(`restorePausedGateResumeState requires execution.id to match gate.executionId`);if(t.status!==`paused`||n.status!==`waiting`)throw Error(`restorePausedGateResumeState requires a paused execution and waiting gate`);let{workflowExecutions:r,workflowGateInstances:i}=E(e,I),a=Z(t),o=V(n);await T(e,async e=>{await e.insert(r).values(a).onConflictDoUpdate({target:r.id,set:a}),await e.insert(i).values(o).onConflictDoUpdate({target:i.id,set:o})})}async function Ar(e,t,n,r){let{workflowExecutions:i,workflowGateInstances:a}=E(e,I);return T(e,async e=>{if((await e.select().from(i).where(M(i.id,t)).limit(1))[0]?.status!==`paused`)return{cancelled:!1,gates:[]};let o=(await e.select().from(a).where(O(M(a.executionId,t),M(a.status,`waiting`)))).map(e=>({...B(e),status:`cancelled`,resolvedAt:n}));await e.update(i).set({status:`cancelled`,completedAt:n,reason:r??null}).where(M(i.id,t));for(let t of o){let n=V(t);await e.update(a).set(n).where(M(a.id,n.id))}return{cancelled:!0,gates:o}})}async function jr(e,t,n,r,i,a){let{workflowExecutions:o}=E(e,I);return T(e,async e=>{if((await e.select({id:o.id}).from(o).where(M(o.id,t)).limit(1))[0]===void 0)return!1;let s={};return n!==void 0&&(s.status=n),r!==void 0&&(s.error=r),i!==void 0&&(s.reason=i),a!==void 0&&(s.completedAt=a),Object.keys(s).length>0&&await e.update(o).set(s).where(M(o.id,t)),!0})}function Mr(e,t){let{workflowExecutions:n}=E(t,I),r=e.on(g.getExecution,async e=>{let{executionId:r}=e.payload;if(!h(e,r))throw Error(`Unauthorized execution read: ${r}`);let i=await t.select().from(n).where(M(n.id,r));e.setResult({execution:i[0]?Er(i[0]):null})}),i=e.on(g.setExecution,async e=>{let r=e.payload.execution,i=Z(r);await D(t,()=>t.insert(n).values(i).onConflictDoUpdate({target:n.id,set:i})),e.setResult({id:r.id})}),a=e.on(g.setExecutionStart,async e=>{let n=e.payload.execution,r=e.payload.runContext;await Or(t,n,r,e.payload.initialState,e.payload.executionLinks),e.setResult({id:n.id,executionId:n.id})}),o=e.on(g.restorePausedGateResumeState,async e=>{let n=e.payload.execution,r=e.payload.gate;await kr(t,n,r),e.setResult({executionId:n.id,gateId:r.nodeId})}),s=e.on(g.updateExecution,async e=>{let{executionId:n,status:r,error:i,reason:a,completedAt:o}=e.payload,s=await jr(t,n,r,i,a,o);e.setResult({success:s})}),c=e.on(g.pauseRunningExecution,async e=>{let{workflowExecutions:n}=E(t,I),r=await D(t,()=>t.update(n).set({status:`paused`}).where(O(M(n.id,e.payload.executionId),M(n.status,`running`))).returning({id:n.id}));e.setResult({paused:r.length===1})}),l=e.on(g.cancelPausedExecution,async e=>{let{executionId:n,completedAt:r,reason:i}=e.payload;e.setResult(await Ar(t,n,r,i))});return()=>{r(),i(),a(),o(),s(),c(),l()}}function Nr(e,t){let{workflowExecutions:n}=E(t,I),r=e.on(g.listExecutions,async e=>{let{workflowId:r,scope:i,status:a,limit:o,cursor:s,artifactRef:c}=e.payload;if(r===void 0&&i===void 0&&c===void 0)throw Error(`Either workflowId, scope, or artifactRef is required to list executions.`);let l=Dr(r,i,a,s,c,n),u=o??rt;if(!Number.isInteger(u)||u<v||u>_)throw Error(`Execution list limit must be an integer between ${v} and ${_}.`);let d=await t.select().from(n).where(O(...l)).orderBy(j(n.startedAt),j(n.id)).limit(u);e.setResult({executions:d.map(Er)})}),i=e.on(g.listExecutionsByArtifactRefs,async e=>{let r=it.safeParse(e.payload);if(!r.success)throw Error(`Invalid listExecutionsByArtifactRefs query: ${r.error.message}`);let{refs:i,limitPerRef:a}=r.data,o={};for(let e of i){let r=await t.select().from(n).where(O(M(n.artifactKind,e.kind),M(n.artifactId,e.id))).orderBy(j(n.startedAt),j(n.id)).limit(a);r.length>0&&(o[xt(e)]=r.map(Er))}e.setResult({executionsByRef:o})});return()=>{r(),i()}}function Pr(e,t){let n=Qt(e,t),r=Mr(e,t),i=Nr(e,t),a=tn(e,t),o=an(e,t),s=cn(e,t),c=mn(e,t),l=vn(e,t),u=$n(e,t),d=gr(e,t,Z),f=Tr(e,t);return()=>{n(),r(),i(),a(),o(),s(),c(),l(),u(),d(),f()}}function Fr(e){return e.startsWith(y)}function Ir(e){let t={};return e.artifactRef!==void 0&&(t.artifactRef=e.artifactRef),e.triggerPayload!==void 0&&(t.triggerPayload=e.triggerPayload),t}function Lr(e){if(e.status===`failed`){if(e.error===void 0)throw Error(`status 'failed' requires a non-empty 'error' message`);return{error:e.error}}if(e.status===`cancelled`){if(e.reason===void 0)throw Error(`status 'cancelled' requires a non-empty 'reason' string`);return{reason:e.reason}}return{}}async function Rr(e,t){let{runContext:n}=await e.request(g.getRunContext,{executionId:t});if(n===null)throw Error(`Run context not found for execution: ${t}`);if(n.definitionSnapshot!==void 0)return n.definitionSnapshot;let{workflow:r}=await e.request(g.get,{id:n.workflowId});return r??void 0}function zr(e){return[e.on(n.getDefinition,async t=>{let n=await e.request(g.get,{id:t.payload.id});t.setResult(n)}),e.on(n.setDefinition,async t=>{let n=await e.request(g.set,{workflow:t.payload.workflow});t.setResult(n)}),e.on(n.deleteDefinition,async t=>{let n=await e.request(g.delete,{id:t.payload.id});t.setResult(n)}),e.on(n.listDefinitions,async t=>{let n=await e.request(g.list,t.payload);t.setResult(n)}),e.on(n.getExecution,async t=>{let n=await e.request(g.getExecution,{executionId:t.payload.executionId});t.setResult(n)}),e.on(n.listExecutions,async t=>{let n=await e.request(g.listExecutions,t.payload);t.setResult(n)}),e.on(n.listExecutionsByArtifactRefs,async t=>{let n=await e.request(g.listExecutionsByArtifactRefs,t.payload);t.setResult(n)}),e.on(n.listSpans,async t=>{let n=await e.request(g.listSpans,{executionId:t.payload.executionId});t.setResult(n)}),e.on(n.listFrames,async t=>{let n=await e.request(g.listFrames,{executionId:t.payload.executionId});t.setResult(n)}),e.on(n.listGateInstances,async t=>{let n=await e.request(g.listGateInstances,t.payload);t.setResult(n)}),e.on(n.setExecutionLink,async t=>{let n=await e.request(g.setExecutionLink,{link:t.payload.link});t.setResult(n)}),e.on(n.listExecutionLinks,async t=>{let n=await e.request(g.listExecutionLinks,t.payload);t.setResult(n)}),e.on(n.getRunContext,async t=>{let{executionId:n}=t.payload;if(!h(t,n))throw Error(`Unauthorized: caller is not permitted to read run context for execution: ${n}`);let{runContext:r}=await e.request(g.getRunContext,{executionId:n});if(!r)throw Error(`Run context not found for execution: ${n}`);t.setResult(r)}),...Br(e)]}function Br(e){return[e.on(n.registerExternalExecution,async t=>{let n=ee.registerExternalExecution.request.parse(t.payload),{name:r,scope:i,input:a}=n;if(n.executionId!==void 0&&!t.origin.local)throw Error(`registerExternalExecution: caller-supplied executionId is restricted to local callers`);let o=n.executionId??Ge(`wfx-ext`);if(!Fr(o))throw Error(`registerExternalExecution: executionId must use the wfx-ext- prefix`);let s=n.startedAt??Date.now(),c={id:o,workflowId:r,status:`running`,inputs:a===void 0?{}:a,startedAt:s,scope:i??{type:`global`},...Ir(n)},l=Vr(o,s,n.frame),u=await e.request(g.setExternalExecutionStart,{execution:c,...l===void 0?{}:{frame:l}});t.setResult(u)}),e.on(n.completeExternalExecution,async t=>{let n=ee.completeExternalExecution.request.parse(t.payload),{executionId:r,status:i}=n;if(!h(t,r))throw Error(`Unauthorized: caller is not permitted to settle execution: ${r}`);if(!Fr(r))throw Error(`completeExternalExecution: execution "${r}" is engine-owned and must be completed through the engine finalizer, not this API`);let a=Hr(n),o=await e.request(g.settleExternalExecution,{executionId:r,status:i,...Lr(n),...n.completedAt===void 0?{}:{completedAt:n.completedAt},...a===void 0?{}:{frame:a}});t.setResult({success:o.success})})]}function Vr(e,t,n){if(n===void 0)return;let r=n.frameId??`${e}:${n.nodeId}`;return{executionId:e,frameId:r,nodeId:n.nodeId,nodeType:n.nodeType,path:n.path??[r],status:`running`,attempt:n.attempt,...n.iteration===void 0?{}:{iteration:n.iteration},...n.branchKey===void 0?{}:{branchKey:n.branchKey},startedAt:n.startedAt??t}}function Hr(e){if(e.frame===void 0)return;if(e.completedAt===void 0)throw Error(`completedAt is required when frame metadata is supplied`);let t=e.completedAt-e.frame.startedAt;if(t<0)throw Error(`completedAt must not precede frame.startedAt`);if(e.frame.durationMs!==void 0&&e.frame.durationMs!==t)throw Error(`frame.durationMs must equal completedAt - frame.startedAt`);return{executionId:e.executionId,frameId:e.frame.frameId,nodeId:e.frame.nodeId,nodeType:e.frame.nodeType,path:e.frame.path,status:e.status,attempt:e.frame.attempt,...e.frame.iteration===void 0?{}:{iteration:e.frame.iteration},...e.frame.branchKey===void 0?{}:{branchKey:e.frame.branchKey},startedAt:e.frame.startedAt,completedAt:e.completedAt,durationMs:t,...e.status===`failed`&&e.error!==void 0?{error:e.error}:{}}}function Ur(e){return[e.on(n.state.get,async t=>{let{executionId:n}=t.payload;if(!h(t,n))throw Error(`Unauthorized: caller is not permitted to read state for execution: ${n}`);let{state:r}=await e.request(g.getState,{executionId:n});if(r===null)throw Error(`no workflow state for execution ${n}`);t.setResult(r)}),e.on(n.state.patch,async t=>{let{executionId:r,expectedSequence:i,patch:a,nextValue:o}=t.payload;if(!h(t,r))throw Error(`Unauthorized: caller is not permitted to patch state for execution: ${r}`);if(i===void 0)throw Error(`expectedSequence is required to patch workflow state`);let s=await Rr(e,r);s!==void 0&&ne(s,o,`next`),at.array().parse(a);let c=await e.request(g.patchState,{executionId:r,expectedSequence:i,nextValue:o});e.emit(n.state.updated,{executionId:c.executionId,sequence:c.sequence,patch:c.patch,value:c.value,updatedAt:Date.now()}).catch(()=>{}),t.setResult({executionId:c.executionId,sequence:c.sequence,value:c.value})})]}async function Wr(e,t){let{runContext:n}=await e.bus.request(g.getRunContext,{executionId:t});if(n===null)throw new C(dt.RUN_CONTEXT_NOT_FOUND,`Run context not found for workflow execution '${t}'.`);return n}function Gr(e,t){return t===void 0?{mode:e}:{mode:e,reason:t}}async function Kr(e,t){let n=await Wr(e,t.executionId),r=t.input===void 0?n.inputs:t.input,i=t.config??n.config??{},a=t.triggerPayload??n.triggerPayload,o=t.artifactRef??n.artifactRef,s=t.scopeOverride??n.scope,c={input:r,config:i,parentSessionId:t.parentSessionId,triggerPayload:a,artifactRef:o,scopeOverride:s,executionLinks:e=>[{sourceExecutionId:t.executionId,targetExecutionId:e,linkType:`rerun-of`,metadata:Gr(t.mode,t.reason)}]};return t.mode===`snapshot`?await Xr(e,n,c):Jr(n)?await Zr(e,n,c):await he(e,n.workflowId,c)}function qr(e,t){return Jr(e)?t.id:e.workflowId}function Jr(e){return e.source.kind!==`definition`&&e.workflowId===e.executionId}function Yr(e){let t=e.definitionSnapshot;if(t===void 0)throw new C(dt.SNAPSHOT_UNAVAILABLE,`Workflow execution '${e.executionId}' does not have a definition snapshot.`);return t}async function Xr(e,t,n){let r=Yr(t);return De(e,qr(t,r),{workflow:r,executionSource:t.source,definitionSnapshot:r,input:n.input,config:n.config,parentSessionId:n.parentSessionId,triggerPayload:n.triggerPayload,artifactRef:n.artifactRef,scopeOverride:n.scopeOverride,executionLinks:n.executionLinks,...t.materializationSpec===void 0?{}:{materializationSpec:t.materializationSpec}})}async function Zr(e,t,n){if(t.definitionSnapshot===void 0&&t.source.kind===`path`){let{materializationSpec:r}=t;if(r===void 0)throw Error(`Invalid persisted path-backed run context: materializationSpec is required`);return Ne(e,t.source.path,{...n,materializationSpec:r})}let r=Yr(t);return De(e,r.id,{workflow:r,executionSource:t.source,input:n.input,config:n.config,parentSessionId:n.parentSessionId,triggerPayload:n.triggerPayload,artifactRef:n.artifactRef,scopeOverride:n.scopeOverride,executionLinks:n.executionLinks,...t.materializationSpec===void 0?{}:{materializationSpec:t.materializationSpec}})}var Qr=class{bus;resumePausedExecution;handles=new Map;constructor(e,t){this.bus=e,this.resumePausedExecution=t}dispose(){for(let e of this.handles.values())clearTimeout(e);this.handles.clear()}clear(e,t,n){let r=this.makeKey(e,t,n),i=this.handles.get(r);i!==void 0&&(clearTimeout(i),this.handles.delete(r))}schedule(e){e.timeoutMs!==null&&(this.clear(e.executionId,e.nodeId,e.frameId),this.scheduleNextWakeup({...e,timeoutMs:e.timeoutMs}))}scheduleNextWakeup(e){let t=this.makeKey(e.executionId,e.nodeId,e.frameId),n=Math.max(0,e.openedAt+e.timeoutMs-Date.now()),r=setTimeout(()=>{if(this.handles.delete(t),Date.now()<e.openedAt+e.timeoutMs){this.scheduleNextWakeup(e);return}this.handleExpiredWakeup(e)},Math.min(n,2147483647));this.handles.set(t,r)}scheduleNextWakeupAfterDelay(e,t){let n=this.makeKey(e.executionId,e.nodeId,e.frameId),r=setTimeout(()=>{this.handles.delete(n),this.handleExpiredWakeup(e)},t);this.handles.set(n,r)}async handleExpiredWakeup(e){try{await this.resumeTimedOutPausedGate(e)===`retry`&&this.scheduleNextWakeupAfterDelay(e,25)}catch(t){this.scheduleFailedWakeupRetry(e,t)}}scheduleFailedWakeupRetry(e,t){let n=(e.failedWakeupAttempts??0)+1;if(n>4){console.error(`[WorkflowExecutor] Giving up on timed-out gate '${e.nodeId}' after 4 failed wakeup retries:`,t);return}let r=Math.min(250*2**(n-1),2e3);console.error(`[WorkflowExecutor] Failed to resume timed-out gate '${e.nodeId}', retrying in ${r} ms:`,t),this.scheduleNextWakeupAfterDelay({...e,failedWakeupAttempts:n},r)}makeKey(e,t,n){return`${e}:${t}:${n}`}async resumeTimedOutPausedGate(e){this.clear(e.executionId,e.nodeId,e.frameId);let{gate:t}=await this.bus.request(g.getGateInstance,{executionId:e.executionId,nodeId:e.nodeId,frameId:e.frameId});if(t===null||t.status!==`waiting`)return`settled`;let{execution:n}=await this.bus.request(g.getExecution,{executionId:e.executionId});return n?.status===`running`?`retry`:n?.status===`paused`?(await this.resumePausedExecution(e.executionId),`resumed`):`settled`}};function $r(e){if(e!==void 0)return ei(e)?e:{}}function ei(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ti(e){if(e!==void 0)return ot.parse(e)}function ni(e,t){return pt.parse({executionId:e.executionId,workflowId:e.workflowId,source:e.source,...e.definitionSnapshot===void 0?{}:{definitionSnapshot:e.definitionSnapshot},workerManifest:{contributionRefs:[]},inputs:e.inputs,config:e.config,scope:e.scope,triggerPayload:e.triggerPayload,triggerMode:e.triggerMode??`immediate`,...e.artifactRef===void 0?{}:{artifactRef:e.artifactRef},coordinatorSessionId:e.coordinatorSessionId,cancelSubject:`workflow.${e.executionId}.cancel`,env:t.platformDefaults.env??{},createdAt:Date.now(),suspensionStrategy:e.suspensionStrategy??`wait-in-process`,...e.terminalAuthority===void 0?{}:{terminalAuthority:e.terminalAuthority},...e.materializationSpec===void 0?{}:{materializationSpec:e.materializationSpec}})}function ri(e){return e?.status===`paused`}function ii(e){return e?.status===`waiting`}async function ai(e,t,n,r,i,a,o){try{await m(e,i.id,async()=>{let o=await e.bus.request(g.getExecution,{executionId:i.id});o.execution?.status!==`paused`&&o.execution?.status!==`running`||(t.delete(i.id),n.delete(i.id),r.delete(i.id),await e.bus.request(g.restorePausedGateResumeState,{execution:i,gate:a}))})}catch(e){console.error(`[WorkflowExecutor] Failed to restore paused gate '${o}' after resume launch failure:`,e)}}async function oi(e,t){if(t.suspensionStrategy===`wait-in-process`)return;let{frames:n}=await e.request(g.listFrames,{executionId:t.executionId});if(n.length===0)throw Error(`[WorkflowExecutor] Missing resume frames for paused execution: ${t.executionId}`)}function si(e){return{executionId:e.executionId,nodeId:e.nodeId,frameId:e.frameId,timeoutMs:e.timeoutMs,openedAt:e.createdAt}}async function ci(e,t){if(t.frameId!==void 0){let{gate:n}=await e.request(g.getGateInstance,t);return ii(n)?n:null}let{gates:n}=await e.request(g.listGateInstances,{executionId:t.executionId}),r=n.filter(e=>e.nodeId===t.nodeId&&e.status===`waiting`);return r.length===1?r[0]:null}async function li(e,t){let n=e.authority.canonicalizeOutcome(t.outcome),r=t.runtimeFence===void 0?void 0:{...t.runtimeFence};await e.validation?.validate(t.executionId,n.outcome);let i=await e.authority.commitOutcome(t.executionAttemptId,t.executionId,n,r);if(i.kind===`accepted`||i.kind===`duplicate`){let n=await e.convergence.converge({executionId:t.executionId,executionAttemptId:t.executionAttemptId,outcome:i.outcome,decision:i.kind,controlObservation:structuredClone(i.controlObservation)});e.authority.settleOutcome(t.executionAttemptId,{kind:i.kind,outcome:e.authority.decodeOutcome(i.text),text:i.text,controlObservation:i.controlObservation,acceptance:n})}return i.kind}function ui(e,t){let n=i(e);if(n===null)throw Error(`Attempt requests require an authenticated workflow-execution-attempt peer`);if(n.executionAttemptId!==t)throw Error(`Request executionAttemptId does not match authenticated peer identity`);return n}function di(e,t){if(e===null||e.runtimeGeneration!==t.runtimeGeneration)return!1;if(t.outcome.kind===`cancelled`&&t.operationId===void 0)return e.activeOperationId===null;let n=t.outcome.kind===`technical-failure`?t.outcome.stage:t.outcome.kind===`cancelled`?e.activeOperationKind:`workload-invocation`;return n===`startup`?t.operationId===void 0&&e.activeOperationId===null:!(e.activeOperationId!==t.operationId||e.activeOperationGeneration!==t.runtimeGeneration||e.activeOperationKind!==n||n!==`workspace-preparation`&&n!==`workload-invocation`)}function fi(e,t){return e.on(x.instruction.get,async e=>{let n=b[`instruction.get`].request.parse(e.payload),r=ui(e,n.executionAttemptId),i=await t.getInstruction(r);if(i===null){e.setResult({decision:`refused`,refusalReason:`not-found`});return}if((await t.getAttemptControlState(r.executionAttemptId))?.runtimeGeneration!==n.runtimeGeneration){e.setResult({decision:`refused`,refusalReason:`stale-generation`});return}e.setResult({decision:`found`,instruction:i})})}function pi(e,t){let n=[fi(e,t.authority),e.on(x.operation.report,async e=>{let n=b[`operation.report`].request.parse(e.payload),r=ui(e,n.executionAttemptId),i=await t.authority.reportOperation({...n,executionId:r.executionId});i.kind===`accepted`||i.kind===`duplicate`?e.setResult({decision:i.kind,binding:i.binding}):e.setResult({decision:`refused`,refusalReason:i.kind})}),e.on(x.outcome.submit,async e=>{let n=b[`outcome.submit`].request.parse(e.payload),r=ui(e,n.executionAttemptId),i=await t.authority.getInstruction(r);if(i===null)throw Error(`No instruction belongs to this authenticated Attempt`);if(!di(await t.authority.getAttemptControlState(r.executionAttemptId),n)){e.setResult({decision:`fenced`});return}let a={runtimeGeneration:n.runtimeGeneration,operationId:n.operationId??null},o=await t.decodeOutcome({instruction:i,outcome:n.outcome});try{let n=await li(t,{...r,outcome:o,runtimeFence:a});e.setResult({decision:n})}catch(t){if(!(t instanceof Je))throw t;e.setResult({decision:`fenced`})}})];return()=>{for(let e of n)e()}}function mi(e,t){return e.origin.local?{executionAttemptId:t.executionAttemptId,executionId:t.executionId}:i(e)}var hi=class{acceptOutcome;constructor(e){this.acceptOutcome=e}converge(e){return this.acceptOutcome(e)}};function gi(e){return{authority:e.authority,decodeOutcome:Ue,convergence:new hi(e.acceptOutcome)}}function _i(e,t){let n=gi(t),r=pi(e,n),i=e.on(lt.control.outcome.submit,async e=>{let r=mi(e,e.payload);if(r===null)throw Error(`Outcome submission requires an authenticated workflow-execution-attempt peer`);let{result:i}=e.payload;if(!e.origin.local){if(e.payload.executionId!==r.executionId)throw Error(`Outcome payload executionId '${e.payload.executionId}' does not match authenticated peer claim '${r.executionId}'`);if(e.payload.executionAttemptId!==r.executionAttemptId)throw Error(`Outcome payload executionAttemptId '${e.payload.executionAttemptId}' does not match authenticated peer identity '${r.executionAttemptId}'`)}if(i.executionId!==r.executionId)throw Error(`Nested result.executionId '${i.executionId}' does not match trusted identity '${r.executionId}'`);let a=mt.parse(i),o=await t.authority.getInstruction(r);if(o===null)throw Error(`No instruction belongs to this workflow Attempt`);let s=await n.decodeOutcome({instruction:o,outcome:{kind:`workload-result`,result:a}}),c=await li(n,{executionId:r.executionId,executionAttemptId:r.executionAttemptId,outcome:s});e.setResult({decision:vi(c)})});return()=>{i(),r()}}function vi(e){return e}function yi(e,t){return e.on(x.operation.admit,async e=>{let n=i(e);if(n===null)throw Error(`Operation admission requires an authenticated workflow-execution-attempt peer`);let{executionAttemptId:r,operationKind:a,admissionKey:o,runtimeGeneration:s}=b[`operation.admit`].request.parse(e.payload);if(r!==n.executionAttemptId)throw Error(`Admission payload executionAttemptId '${r}' does not match authenticated peer identity '${n.executionAttemptId}'`);if(a===`runtime-probe`)throw Error(`Operation admission does not accept 'runtime-probe' (executionAttemptId='${r}'): the bounded probe is admitted only by runtime registration`);let c=await t.authority.admitOperation({executionAttemptId:r,executionId:n.executionId,operationKind:a,admissionKey:o,runtimeGeneration:s});if(c.kind===`admitted`||c.kind===`duplicate`){await t.bus.emit(x.operation.admitted,{executionAttemptId:r,operationId:c.operationId,operationKind:a,runtimeGeneration:c.runtimeGeneration,admittedAt:c.admittedAt}),e.setResult({decision:c.kind,operationId:c.operationId});return}e.setResult({decision:`refused`,refusalReason:c.kind})})}const bi=1e4;function xi(e,t){let n=t.probeDeliveryTimeoutMs??1e4;return e.on(x.runtime.register,async e=>{let r=i(e);if(r===null)throw Error(`Runtime registration requires an authenticated workflow-execution-attempt peer`);let{executionAttemptId:a,runtimeIncarnationId:o}=b[`runtime.register`].request.parse(e.payload);if(a!==r.executionAttemptId)throw Error(`Registration payload executionAttemptId '${a}' does not match authenticated peer identity '${r.executionAttemptId}'`);let s=await t.authority.registerRuntime({executionAttemptId:a,executionId:r.executionId,runtimeIncarnationId:o});if(s.kind===`duplicate`&&s.runtimeReadyAt!==null){await Si(t,a,s.runtimeGeneration),e.setResult({decision:`duplicate`,runtimeGeneration:s.runtimeGeneration});return}if(s.kind!==`registered`&&s.kind!==`duplicate`){e.setResult(Ti(s.kind));return}let c=s.runtimeGeneration;if(await Ci(t,n,{executionAttemptId:a,executionId:r.executionId,runtimeIncarnationId:o,runtimeGeneration:c})===null){e.setResult(Ti(`probe-failed`));return}await Si(t,a,c),e.setResult({decision:`ready`,runtimeGeneration:c})})}async function Si(e,t,n){let r=await e.authority.getAttemptControlState(t);r===null||r.runtimeGeneration!==n||r.runtimeReadyAt===null||await e.bus.emit(x.runtime.ready,{executionAttemptId:t,runtimeGeneration:n,acceptedAt:r.runtimeReadyAt})}async function Ci(e,t,n){let{executionAttemptId:r,executionId:i,runtimeIncarnationId:a,runtimeGeneration:o}=n,s=await e.authority.admitOperation({executionAttemptId:r,executionId:i,operationKind:`runtime-probe`,admissionKey:`probe:${a}`,runtimeGeneration:o});if(s.kind!==`admitted`&&s.kind!==`duplicate`)return null;let c=s.operationId,l=()=>wi(e,{executionAttemptId:r,operationId:c,runtimeGeneration:o}),u;try{u=(await e.bus.request(x.operation.deliver,{executionAttemptId:r,runtimeIncarnationId:a,operationId:c,operationKind:`runtime-probe`,runtimeGeneration:o},{timeout:t})).receipt}catch{return await l(),null}if(u!==`completed`&&u!==`duplicate`)return await l(),null;let d=await e.authority.completeOperation({executionAttemptId:r,operationId:c,runtimeGeneration:o});if(d.kind!==`completed`&&d.kind!==`duplicate`)return null;let f=await e.authority.markRuntimeReady({executionAttemptId:r,executionId:i,runtimeGeneration:o,readyAt:new Date().toISOString()});return f.kind!==`ready`&&f.kind!==`duplicate`?null:{kind:f.kind,acceptedAt:f.acceptedAt}}async function wi(e,t){try{await e.authority.completeOperation(t)}catch{}}function Ti(e){return{decision:`refused`,runtimeGeneration:0,refusalReason:e}}function Ei(e,t,n){n(xi(e,{bus:e,authority:t})),n(yi(e,{bus:e,authority:t}))}function Di(e,t){let n=new AbortController,r=e.on(x.bootstrap.awaitStart,async e=>{let r=i(e);if(r===null)throw Error(`Bootstrap start requires an authenticated workflow-execution-attempt peer`);let{executionAttemptId:a}=b[`bootstrap.awaitStart`].request.parse(e.payload);if(a!==r.executionAttemptId)throw Error(`Bootstrap start executionAttemptId does not match authenticated peer identity`);let o=e.signal?AbortSignal.any([e.signal,n.signal]):n.signal;e.setResult(await t.awaitBootstrapStart({executionAttemptId:a,executionId:r.executionId},{signal:o,deadline:e.deadline??Date.now()+31e3}))});return()=>{n.signal.aborted||(n.abort(Error(`Bootstrap start handler shut down`)),r())}}function Oi(e){return e.on(n.finalizeDelegateResult,async t=>{let n=t.payload;ki(t,n.executionId);let{execution:r}=await e.request(g.getExecution,{executionId:n.executionId});if(r===null||r.workflowId!==n.workflowId)throw Error(`delegate result finalization execution does not own the requested workflow`);let{runContext:i}=await e.request(g.getRunContext,{executionId:n.executionId});if(i===null||i.executionId!==n.executionId||i.workflowId!==n.workflowId)throw Error(`delegate result finalization run context does not own the requested workflow execution`);if(i.definitionSnapshot===void 0)throw Error(`delegate result finalization requires an Authority-owned definition snapshot`);Ai(i.definitionSnapshot,n.nodeId,n.nodeType,n.finalizerId);let{subjects:a}=_t(n.finalizerId),o=await e.request(a.finalize,{executionId:n.executionId,workflowId:n.workflowId,frameId:n.frameId,nodeId:n.nodeId,nodeType:n.nodeType,rawResult:n.rawResult,toolObservations:n.toolObservations,...n.economics===void 0?{}:{economics:n.economics}});t.setResult(o)})}function ki(e,t){if(!h(e,t))throw Error(`delegate result finalization requires its authenticated workflow-execution-attempt peer`)}function Ai(e,t,n,r){let i=!1;if(St(e.root,{enter(e){if(!(e.type!==`delegate-agent`&&e.type!==`delegate-role`||e.id!==t||e.type!==n))return e.resultFinalizerId===r&&(i=!0),!1}}),!i)throw Error(`delegate result finalizer is not selected by the requested durable delegate node`)}async function ji(e,t,n){let[{execution:r},{runContext:i}]=await Promise.all([e.bus.request(g.getExecution,{executionId:t}),e.bus.request(g.getRunContext,{executionId:t})]);if(!r)throw Error(`Authority execution not found: ${t}`);if(i?.executionId!==t||i.workflowId!==r.workflowId)throw Error(`authority technical failure run context identity mismatch`);if(i.terminalAuthority!==`authority`)throw Error(`authority technical failure requires terminalAuthority=authority`);if(r.status===`failed`||r.status===`cancelled`)return{accepted:!0,status:r.status};if(r.status!==`running`)throw Error(`Authority technical failure conflicts with execution status: ${r.status}`);await d(e,r,t,`${n.stage}: ${n.message}`);let a=await e.bus.request(g.getExecution,{executionId:t});if(a.execution?.status!==`failed`&&a.execution?.status!==`cancelled`)throw Error(`Authority technical failure did not settle as failed or cancelled`);return{accepted:!0,status:a.execution.status}}async function Mi(e,t,n){let[{execution:r},{runContext:i}]=await Promise.all([e.bus.request(g.getExecution,{executionId:t}),e.bus.request(g.getRunContext,{executionId:t})]);if(!r)throw Error(`Authority execution not found: ${t}`);if(i?.executionId!==t||i.workflowId!==r.workflowId)throw Error(`authority cancellation run context identity mismatch`);if(i.terminalAuthority!==`authority`)throw Error(`authority cancellation requires terminalAuthority=authority`);if(r.status===`cancelled`)return{accepted:!0,status:`cancelled`};if(r.status!==`running`)throw Error(`Authority cancellation conflicts with execution status: ${r.status}`);if(await u(e,t,n.reason),(await e.bus.request(g.getExecution,{executionId:t})).execution?.status!==`cancelled`)throw Error(`Authority cancellation did not settle as cancelled`);return{accepted:!0,status:`cancelled`}}async function Ni(e,t,n){if(t.status===`finalizing`){if(n.status!==`completed`)throw Error(`authority runner result conflicts with terminal execution`);await o(e);let i=await e.bus.request(g.getExecution,{executionId:t.id});if(!i.execution)throw Error(`Authority runner success finalization execution is missing`);if(!r(i.execution.status,n.status))throw Error(`authority runner result conflicts with terminal execution`);return i.execution.status}if(!(t.status!==`completed`&&t.status!==`failed`&&t.status!==`cancelled`)){if(!r(t.status,n.status))throw Error(`authority runner result conflicts with terminal execution`);return t.status}}async function Pi(e,t){return m(e,t.executionId,async()=>{let{execution:n}=await e.bus.request(g.getExecution,{executionId:t.executionId});if(!n)throw Error(`Authority execution not found: ${t.executionId}`);if(!(`kind`in t.outcome)&&(t.outcome.executionId!==n.id||t.outcome.workflowId!==n.workflowId))throw Error(`authority outcome execution or workflow identity mismatch`);return n})}async function Fi(e,t){let n=await Pi(e.lifecycle,t),r=`kind`in t.outcome?t.outcome.kind===`cancelled`:t.outcome.status===`cancelled`;if(n.status===`cancelled`&&!r)return`recorded-only`;if(!r&&t.controlObservation!==null&&t.controlObservation.controlRevision>0&&(n.status===`running`||n.status===`paused`))throw Error(`Workflow owner cancellation is not durably settled for '${t.executionId}'`);let i=await Ii(e,t);if((await Pi(e.lifecycle,t)).status===`cancelled`&&!r)return`recorded-only`;if(!i)throw Error(`Workflow outcome did not converge execution '${t.executionId}'`);return`projected`}async function Ii(e,t){if(`kind`in t.outcome){let n=t.outcome.kind===`cancelled`?await e.acceptCancellation(t.executionId,t.outcome):await e.acceptTechnicalFailure(t.executionId,t.outcome);return n.accepted&&(t.outcome.kind===`cancelled`?n.status===`cancelled`:n.status===`failed`||n.status===`cancelled`)}if(t.outcome.status===`paused`)return Ce(e.lifecycle,t.outcome);let n=await e.acceptTerminalResult(t.executionId,t.outcome);return n.accepted&&r(n.status,t.outcome.status)}var Li=class extends Ct{workflowRunner;executionAttemptAuthority;static storage={drizzle:Pr};config;stopBootstrapWaits;activeExecutions=new Map;executionTasks=new Map;shellAbortControllers=new Map;activeRunnerSteps=new Map;gateTimeoutScheduler;workflowAbortControllers=new Map;successFinalizers=new Map;durableLifecycleTransitions=new Map;lifecyclePublications=new Map;publishingLifecycleExecutions=new Set;materializationSpecResolvers=new Set;constructor(e,t,n,r){super(e),this.workflowRunner=n,this.executionAttemptAuthority=r,this.config={...a,...t},this.gateTimeoutScheduler=new Qr(e,e=>this.resumePausedExecution(e))}registerWorkflowMaterializationSpecResolver(e){return this.materializationSpecResolvers.add(e),()=>this.materializationSpecResolvers.delete(e)}async registerSuccessFinalizer(e){if(!this.initialized)throw Error(`[WorkflowExecutor] Initialize the executor before registering success finalizers`);if(this.successFinalizers.has(e))throw Error(`[WorkflowExecutor] Success finalizer already registered: ${e}`);let{namespace:t,subjects:n}=vt(e);this.bus.registerNamespace(t);let r={finalizerId:e,finalizeSubject:n.finalize};this.successFinalizers.set(e,r);try{await o(this.buildFinalizerDeps())}catch(t){throw this.successFinalizers.get(e)===r&&this.successFinalizers.delete(e),t}let i=!1;return()=>{i||(i=!0,this.successFinalizers.get(e)===r&&this.successFinalizers.delete(e))}}async acceptAuthorityRunnerResult(e,n){if(n.status===`paused`)throw Error(`authority runner result must be terminal`);if(n.executionId!==e)throw Error(`authority runner result execution identity mismatch`);let{execution:i}=await this.bus.request(g.getExecution,{executionId:e});if(!i)throw Error(`Authority runner execution not found: ${e}`);if(i.workflowId!==n.workflowId)throw Error(`authority runner result workflow identity mismatch`);if(i.status===`cancelled`&&n.status!==`cancelled`)return{accepted:!1,status:i.status};let a;if(i.status===`finalizing`){let{workflow:t}=await this.loadAuthorityRunnerContext(e,n.workflowId);a=await this.registerAuthorityResultFinalizer(t)}let o=await Ni(this.buildFinalizerDeps(),i,n).finally(()=>a?.());if(o!==void 0)return{accepted:!0,status:o};if(i.status!==`running`)throw Error(`Authority runner execution is ${i.status}`);let{runContext:s,workflow:c}=await this.loadAuthorityRunnerContext(e,n.workflowId),l=await this.registerAuthorityResultFinalizer(c),u=this.activeExecutions.get(e),d=!1;if(!u)this.activeExecutions.set(e,{execution:i,workflow:c,runContext:s,runtimeHandlers:new Map,runtimeLoopGates:new Map}),d=!0;else if(u.execution.workflowId!==n.workflowId)throw Error(`authority runner active execution identity mismatch`);try{await t({activeExecutions:this.activeExecutions,buildFinalizerDeps:()=>this.buildFinalizerDeps()},n)}finally{d&&this.activeExecutions.delete(e),l?.()}let f=await this.bus.request(g.getExecution,{executionId:e});if(f.execution?.status===`cancelled`&&n.status!==`cancelled`)return{accepted:!1,status:f.execution.status};if(!f.execution||!r(f.execution.status,n.status))throw Error(`Authority runner result did not settle compatibly with ${n.status}`);return{accepted:!0,status:f.execution.status}}acceptAuthorityTechnicalFailure=(e,t)=>ji(this.buildFinalizerDeps(),e,t);acceptAuthorityCancellation=(e,t)=>Mi(this.buildFinalizerDeps(),e,t);acceptAuthorityOutcome=e=>Fi({lifecycle:this.buildFinalizerDeps(),acceptTerminalResult:(e,t)=>this.acceptAuthorityRunnerResult(e,t),acceptTechnicalFailure:this.acceptAuthorityTechnicalFailure,acceptCancellation:this.acceptAuthorityCancellation},e);async loadAuthorityRunnerContext(e,t){let{runContext:n}=await this.bus.request(g.getRunContext,{executionId:e});if(!n)throw Error(`Authority runner run context not found: ${e}`);if(n.executionId!==e||n.workflowId!==t)throw Error(`authority runner run context identity mismatch`);if(n.terminalAuthority!==`authority`)throw Error(`authority runner result requires terminalAuthority=authority`);let r=n.definitionSnapshot??(await this.bus.request(g.get,{id:n.workflowId})).workflow;if(!r||r.id!==t)throw Error(`authority runner workflow definition is unavailable or mismatched`);return{runContext:n,workflow:r}}registerAuthorityResultFinalizer(e){return!e.successFinalizerId||this.successFinalizers.has(e.successFinalizerId)?Promise.resolve(void 0):this.registerSuccessFinalizer(e.successFinalizerId)}async onInit(){this.registerExecutionHandlers(),this.addCleanup(ke(this.bus,(e,t)=>{let n=this.activeExecutions.get(e);n!==void 0&&(n.workflow=t)})),this.addCleanup(Oi(this.bus)),this.executionAttemptAuthority!==void 0&&(this.stopBootstrapWaits=Di(this.bus,this.executionAttemptAuthority),this.addCleanup(this.stopBootstrapWaits),this.addCleanup(_i(this.bus,{bus:this.bus,authority:this.executionAttemptAuthority,acceptOutcome:this.acceptAuthorityOutcome})),Ei(this.bus,this.executionAttemptAuthority,e=>this.addCleanup(e))),zr(this.bus).forEach(e=>this.addCleanup(e)),Ur(this.bus).forEach(e=>this.addCleanup(e)),await this.rehydratePausedGateTimeouts()}async onDestroy(){this.stopBootstrapWaits?.();let e=this.buildFinalizerDeps();await Promise.allSettled([...this.activeExecutions.keys()].map(async t=>{await l(e,t,`Workflow engine shutdown`)&&(this.workflowAbortControllers.get(t)?.abort(),this.workflowAbortControllers.delete(t))}));for(let e of this.workflowAbortControllers.values())e.abort();this.workflowAbortControllers.clear(),await Promise.allSettled(this.executionTasks.values()),await Promise.allSettled(this.durableLifecycleTransitions.values()),await Promise.allSettled(this.lifecyclePublications.values());for(let e of this.shellAbortControllers.values())e.abort();this.shellAbortControllers.clear();for(let e of this.activeRunnerSteps.values())e.hardKillTimer&&clearTimeout(e.hardKillTimer);this.activeRunnerSteps.clear(),this.gateTimeoutScheduler.dispose(),await this.workflowRunner?.dispose?.(),this.activeExecutions.clear()}buildFinalizerDeps(){let e=this.executionAttemptAuthority;return{bus:this.bus,activeExecutions:this.activeExecutions,shellAbortControllers:this.shellAbortControllers,activeRunnerSteps:this.activeRunnerSteps,cancelTimeoutMs:this.config.cancelTimeoutMs,requestAttemptCancellation:e===void 0?void 0:(t,n)=>e.requestCancellation({executionId:t,reason:n}),notifyAttemptCancellation:(e,t)=>this.notifyAttemptCancellation(e,t),successFinalizers:this.successFinalizers,resolveSuccessFinalizerId:e=>this.activeExecutions.get(e)?.workflow.successFinalizerId,durableLifecycleTransitions:this.durableLifecycleTransitions,lifecyclePublications:this.lifecyclePublications,publishingLifecycleExecutions:this.publishingLifecycleExecutions}}async notifyAttemptCancellation(e,t){this.workflowAbortControllers.get(e)?.abort(t??S),await this.bus.emit(gt(`workflow.${e}.cancel`),{executionId:e,reason:t}).catch(t=>{console.error(`[WorkflowExecutor] Failed to emit workflow cancel for ${e}:`,t)})}buildRunnerTaskDeps(e){return{workflowRunner:e,workflowAbortControllers:this.workflowAbortControllers,executionTasks:this.executionTasks,activeExecutions:this.activeExecutions,buildFinalizerDeps:()=>this.buildFinalizerDeps(),config:this.config}}async resolveExecutionWorkspaceRoot(e){if(!e)return this.config.platformDefaults.cwd;let{session:t}=await this.bus.request(st.get,{sessionId:e});if(t===null)throw Error(`[WorkflowExecutor] Parent session not found: ${e}`);return t.targetWorkingDirectory??this.config.platformDefaults.cwd}resolveEphemeralPlatformFields(){return ze(this.config.platformDefaults.cwd,this.config.makaioHome)}buildStartDeps(){return{bus:this.bus,config:this.config,activeExecutions:this.activeExecutions,executionTasks:this.executionTasks,workflowRunner:this.workflowRunner,buildRunContext:e=>ni(e,this.config),buildRunnerTaskDeps:e=>this.buildRunnerTaskDeps(e),buildFinalizerDeps:()=>this.buildFinalizerDeps(),resolveExecutionWorkspaceRoot:e=>this.resolveExecutionWorkspaceRoot(e),runExecution:e=>this.runExecution(e),executionAttemptAuthority:this.executionAttemptAuthority,materializationSpecResolvers:this.materializationSpecResolvers}}registerExecutionHandlers(){this.registerHandler(n.acceptAuthorityRunnerResult,async e=>{if(!e.origin.local)throw Error(`authority runner result acceptance is local-authority only`);let{executionId:t,result:n}=e.payload;e.setResult(await this.acceptAuthorityRunnerResult(t,n))}),this.registerHandler(n.start,async e=>{let{workflowId:t,input:n,config:r,parentSessionId:i,triggerPayload:a,artifactRef:o,scope:s}=e.payload;try{let c=await he(this.buildStartDeps(),t,{input:ti(n),config:$r(r)??{},parentSessionId:i,triggerPayload:a,artifactRef:o,scopeOverride:s});e.setResult({executionId:c})}catch(e){if(e instanceof C)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Failed to start workflow: ${t}`)}}),this.registerHandler(n.rerun,async e=>{let{executionId:t,mode:n,input:r,config:i,parentSessionId:a,triggerPayload:o,artifactRef:s,scope:c,reason:l}=e.payload;try{let u=await Kr(this.buildStartDeps(),{executionId:t,mode:n,input:ti(r),config:$r(i),parentSessionId:a,triggerPayload:o,artifactRef:s,scopeOverride:c,reason:l});e.setResult({executionId:u})}catch(e){if(e instanceof C)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Failed to rerun workflow: ${t}`)}}),this.registerHandler(n.runFile,async e=>{if(this.workflowRunner===void 0)throw Error(`workflow.runFile requires a workflow runner — configure a ThinWorkflowPiscinaRunner or equivalent.`);let{filePath:t,materializationSpec:n,triggerPayload:r,triggerMode:i,scope:a}=e.payload;try{let o=await Ne(this.buildStartDeps(),t,{...n===void 0?{}:{materializationSpec:n},triggerPayload:r,triggerMode:i,scopeOverride:a});e.setResult({executionId:o})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to start workflow file: ${t}`)}}),this.registerHandler(n.cancel,async e=>{let{executionId:t,reason:n}=e.payload,r=await l(this.buildFinalizerDeps(),t,n);e.setResult({cancelled:r})}),this.registerGateTimeoutHandlers(),this.addCleanup(this.bus.on(n.gate.respond,async e=>{let{executionId:t,gateId:n,frameId:r,action:i,resumeData:a,reason:o}=e.payload,s=await this.respondToPausedGate({executionId:t,gateId:n,frameId:r,action:i,resumeData:a,reason:o});e.setResult({accepted:s})},{priority:-100}))}registerGateTimeoutHandlers(){this.addCleanup(this.bus.on(n.gate.suspended,e=>{this.gateTimeoutScheduler.schedule(e.payload)})),this.addCleanup(this.bus.on(n.gate.resolved,e=>{this.gateTimeoutScheduler.clear(e.payload.executionId,e.payload.stepId,e.payload.frameId)}))}async rehydratePausedGateTimeouts(){let{gates:e}=await this.bus.request(g.listPausedGateTimeouts,{});for(let t of e)this.gateTimeoutScheduler.schedule(si(t))}async runExecution(e){let t=this.activeExecutions.get(e);if(!t)return;let n=new AbortController;this.workflowAbortControllers.set(e,n);try{let r;try{let i=await de({definition:t.workflow,execution:t.execution,runContext:t.runContext,bus:this.bus}),a=new Te(e,t.workflow.id,t.workflow,t.execution,t.runtimeHandlers,this.bus,n.signal,void 0,i,{context:this.resolveEphemeralPlatformFields(),env:t.runContext.env},{runtimeLoopGates:t.runtimeLoopGates});Fe(t.workflow,t.runtimeLoopGates);let o=a.buildExpressionContext();r=await xe(t.workflow.root,a,o)}catch(r){if(n.signal.aborted||t.execution.status===`cancelled`){await u(this.buildFinalizerDeps(),e,S);return}let i=r instanceof Error?r.message:String(r);await d(this.buildFinalizerDeps(),t.execution,e,i);return}let i=this.buildFinalizerDeps();r.status===`cancelled`||n.signal.aborted||t.execution.status===`cancelled`?await u(i,e,S):r.status===`failed`?await d(i,t.execution,e,r.error):r.status===`paused`?(t.execution.status=`paused`,await this.bus.request(g.setExecution,{execution:t.execution}),this.activeExecutions.delete(e)):await f(i,t.execution,e,t.execution.startedAt)}finally{this.workflowAbortControllers.delete(e)}}async respondToPausedGate(e){let{executionId:t,gateId:n,frameId:r,resumeData:i,reason:a}=e,{execution:o}=await this.bus.request(g.getExecution,{executionId:t});if(!ri(o))return!1;let s=await ci(this.bus,{executionId:t,nodeId:n,frameId:r});if(s===null||!je(n,s.schema,i).valid)return!1;let{runContext:c}=await this.bus.request(g.getRunContext,{executionId:t});if(c===null)throw Error(`[WorkflowExecutor] Run context not found for paused execution: ${t}`);await oi(this.bus,c);let{accepted:l}=await this.bus.request(g.resolveWaitingGateInstance,{gate:{...s,status:e.action===`reject`?`rejected`:`resumed`,resumeData:i,...a===void 0?{}:{reason:a},resolvedAt:Date.now()}});if(!l)return!1;try{await this.resumePausedExecution(o.id)}catch(e){throw await ai(this.buildFinalizerDeps(),this.activeExecutions,this.executionTasks,this.workflowAbortControllers,o,s,n),e}return this.gateTimeoutScheduler.clear(t,n,s.frameId),!0}async resumePausedExecution(e){let{runContext:t}=await this.bus.request(g.getRunContext,{executionId:e});if(t===null)throw Error(`[WorkflowExecutor] Run context not found for paused execution: ${e}`);let n=t.definitionSnapshot??(await this.bus.request(g.get,{id:t.workflowId})).workflow??(()=>{throw Error(`[WorkflowExecutor] Workflow definition not found for paused execution: ${e}`)})();await oi(this.bus,t);let r=we(t,n,{resume:!0}),i=oe(this.buildStartDeps(),r);await m(this.buildFinalizerDeps(),e,async()=>{let{execution:a}=await this.bus.request(g.getExecution,{executionId:e});if(a===null)throw Error(`[WorkflowExecutor] Execution not found for paused execution: ${e}`);if(a.status!==`paused`)return;await this.bus.request(g.setExecution,{execution:{...a,status:`running`}}),this.activeExecutions.set(e,{execution:{...a,status:`running`},workflow:n,runContext:t,runtimeHandlers:new Map,runtimeLoopGates:new Map});let o=_e(this.buildStartDeps(),r,i);ye(this.executionTasks,e,o)})}};const Q=`[WorkflowTriggerReconciler]`;function Ri(e){return e.map(zi)}function zi(e){let t=ut.parse(e);return{binding:t,matches:Xe(t),subscription:void 0}}function Bi(e,t,n){let r=e.triggers??[];try{return n===void 0?Ri(r):r.map(e=>n.has(e.kind)?zi(e):void 0)}catch(i){if(t){console.error(`${Q} keeping last-good triggers for workflow "${e.id}": its trigger bindings are invalid`,i);return}return r.map((t,r)=>{if(!(n!==void 0&&!n.has(t.kind)))try{return zi(t)}catch(t){console.error(`${Q} leaving invalid trigger ${r} of workflow "${e.id}" inactive`,t);return}})}}function Vi(e,t){return e.scope.type!==`global`||t.kind!==nt}async function Hi(e,t,n,r){if(r!==void 0)for(let[i,a]of Array.from(r)){let o=e.triggers?.[i];if(o!==void 0&&n!==void 0&&!n.has(o.kind))continue;let s=t[i];s!==void 0&&Vi(e,s.binding)||(r.delete(i),await $(a.subscription))}}async function $(e){if(e!==void 0)try{await e.detach()}catch(t){console.error(`${Q} detach failed for '${e.bindingKey}':`,t)}}var Ui=class{bus;resolveRuntime;consumers=new Map;cleanupFns=[];initialized=!1;initialization;lane=new $e;pendingChanges=[];constructor(e,t){this.bus=e,this.resolveRuntime=t}async init(){if(this.initialized)return;if(this.initialization!==void 0)return this.initialization;let e=this.initialize();return this.initialization=e,e.then(()=>this.clearInitialization(e),()=>this.clearInitialization(e)),e}clearInitialization(e){this.initialization===e&&(this.initialization=void 0)}async initialize(){try{let e=({payload:e})=>{this.onSignal(`refresh of workflow "${e.id}"`,()=>this.refreshDefinition(e.id))};this.cleanupFns.push(this.bus.on(w.definition.created,e),this.bus.on(w.definition.updated,e),this.bus.on(w.definition.deleted,e),this.bus.on(tt.changed,e=>{this.scheduleRegistryReconcile(e.payload)})),await this.reconcileStored(`keep-last-good`),this.initialized=!0}catch(e){throw await this.teardown(),e}}async destroy(){await this.teardown(),this.initialized=!1}activeConsumerCount(){let e=0;for(let t of this.consumers.values())e+=t.size;return e}onSignal(e,t){t().catch(t=>{console.error(`${Q} ${e} failed:`,t)})}scheduleRegistryReconcile(e){let t=this.pendingChanges.length>0;this.pendingChanges.push(e),!t&&queueMicrotask(()=>{if(this.pendingChanges.length===0)return;let e=this.pendingChanges.splice(0),t=new Set(e.flatMap(({kinds:e})=>e)),n=e.map(({owner:e,revision:t})=>`${e}@${t}`).join(`, `);this.onSignal(`reconciliation after trigger registry changes (${n})`,()=>this.reconcileStored(`drop-unavailable`,t))})}async reconcileStored(e,t){await this.lane.run(async()=>{let{workflows:n}=await this.bus.request(g.list,{}),r=new Set(n.map(e=>e.id));for(let r of n){let n=r.triggers??[];t!==void 0&&!n.some(e=>t.has(e.kind))||await this.applyDefinitionWithinLane(r,e,t)}for(let e of Array.from(this.consumers.keys()))r.has(e)||await this.forgetWorkflowWithinLane(e)})}async refreshDefinition(e){await this.lane.run(async()=>{let{workflow:t}=await this.bus.request(g.get,{id:e});if(t===null){await this.forgetWorkflowWithinLane(e);return}await this.applyDefinitionWithinLane(t,`keep-last-good`)})}async applyDefinitionWithinLane(e,t,n){let r=Bi(e,(this.consumers.get(e.id)?.size??0)>0,n);if(r===void 0)return;let i=this.consumers.get(e.id);if(await Hi(e,r,n,i),i?.size===0&&this.consumers.delete(e.id),!r.some(t=>t!==void 0&&Vi(e,t.binding)&&(n===void 0||n.has(t.binding.kind))))return;let a=this.resolveRuntime();if(a===void 0){r.length>0&&console.warn(`${Q} no automation trigger binding runtime is available; declarative triggers of workflow "${e.id}" stay inactive`);return}let o=this.consumers.get(e.id);o===void 0&&(o=new Map,this.consumers.set(e.id,o));for(let[i,s]of r.entries())s!==void 0&&Vi(e,s.binding)&&(n!==void 0&&!n.has(s.binding.kind)||await this.refreshConsumerWithinLane(a,e.id,i,s,o,t));o.size===0&&this.consumers.delete(e.id)}async refreshConsumerWithinLane(e,t,n,r,i,a){let o=i.get(n),s=this.createListener(t,n,r);try{let t=o?.subscription?.bindingKey,a=e.prepareBinding(r.binding);if(a===void 0)throw Error(`Automation trigger kind '${r.binding.kind}' is not registered`);if(!a.workflowCompatible)throw Error(`Automation trigger kind '${r.binding.kind}' does not emit an object-root payload`);(t===void 0||t!==a.bindingKey)&&i.set(n,r),r.subscription=await a.subscribe(s),i.set(n,r),await $(o?.subscription);return}catch(e){if(o===void 0?i.delete(n):i.set(n,o),a===`keep-last-good`){console.error(`${Q} keeping last-good trigger ${n} of workflow "${t}": binding '${r.binding.kind}' could not be activated`,e);return}console.warn(`${Q} dropping trigger ${n} of workflow "${t}": binding '${r.binding.kind}' is no longer available`,e),i.delete(n),await $(o?.subscription)}}async forgetWorkflowWithinLane(e){let t=this.consumers.get(e);if(t!==void 0){this.consumers.delete(e);for(let e of t.values())await $(e.subscription)}}createListener(e,t,n){let r=`trigger ${t} ('${n.binding.kind}') of workflow "${e}"`;return async i=>{if(this.consumers.get(e)?.get(t)!==n)return;let a;try{a=n.matches(i.payload)}catch(e){console.error(`${Q} filter evaluation failed for ${r}:`,e);return}if(a)try{await this.bus.request(w.start,{workflowId:e,triggerPayload:Ye(i.payload)})}catch(t){console.error(`${Q} failed to start workflow "${e}" from ${r}:`,t)}}}async teardown(){this.cleanupFns.forEach(e=>e()),this.cleanupFns.length=0,this.pendingChanges.length=0,await this.lane.run(async()=>{for(let e of Array.from(this.consumers.keys()))await this.forgetWorkflowWithinLane(e)})}};const Wi=1e3;function Gi(e){if(e===null)return{status:`refused`,reason:`not-found`};if(e.settled)return{status:`refused`,reason:`resolved`};if(!e.active)return{status:`refused`,reason:`fenced`};if(e.allocationTerminated)return{status:`refused`,reason:`allocation-terminated`};if(e.operationStartGate===`closed`)return{status:`refused`,reason:`gate-closed`};let t=e.bootstrapDeadlineAt===null?NaN:Date.parse(e.bootstrapDeadlineAt);return!Number.isFinite(t)||t<=Date.now()?{status:`refused`,reason:`bootstrap-expired`}:{status:e.allocated?`permitted`:`pending`}}function Ki(e,t){return new Promise((n,r)=>{let i=()=>{t.removeEventListener(`abort`,i),r(t.reason)};t.addEventListener(`abort`,i,{once:!0}),t.aborted&&i(),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))})}function qi(e,t){return new Promise((n,r)=>{let i=()=>{clearTimeout(o),t.removeEventListener(`abort`,a),n()},a=()=>{clearTimeout(o),t.removeEventListener(`abort`,a),r(t.reason)},o=setTimeout(i,e);t.addEventListener(`abort`,a,{once:!0}),t.aborted&&a()})}function Ji(e,t){return setTimeout(()=>e.abort(Error(`Bootstrap start observation timed out`)),Math.max(0,t-Date.now()))}async function Yi(e,t,n){if(n.signal.throwIfAborted(),!Number.isFinite(n.deadline))throw Error(`Bootstrap start request requires a finite deadline`);let r=Math.min(Date.now()+3e4,n.deadline-Wi),i=new AbortController,a=AbortSignal.any([n.signal,i.signal]),o=Math.min(n.deadline,r+Wi),s=Ji(i,o);try{for(;;){a.throwIfAborted();let n=await Ki(e.readBootstrapStartState(t),a);a.throwIfAborted();let c=Gi(n);if(c.status!==`pending`)return c;let l=Date.parse(n?.bootstrapDeadlineAt??``);clearTimeout(s),s=Ji(i,Math.min(o,l+Wi));let u=Math.min(r,l)-Date.now();if(u<=0)return c;await qi(Math.min(100,u),a)}}finally{clearTimeout(s)}}var Xi=class{repository;bootstrapTimeoutMs;waiters=new Map;constructor(e,t){if(!Number.isSafeInteger(t?.bootstrapTimeoutMs)||t.bootstrapTimeoutMs<=0)throw Error(`ExecutionAttemptAuthority requires an explicit positive safe-integer bootstrapTimeoutMs`);this.repository=e,this.bootstrapTimeoutMs=t.bootstrapTimeoutMs}awaitBootstrapStart(e,t){return Yi(this.repository,e,t)}async createAttempt(e,t){let n=crypto.randomUUID(),r=await this.repository.createAttempt({executionAttemptId:n,executionId:e,instruction:t,bootstrapTimeoutMs:this.bootstrapTimeoutMs});return this.installWaiter(n),r}async ensureAttempt(e){let t=Qe(e);return this.repository.ensureAttempt({...t,executionAttemptId:crypto.randomUUID(),bootstrapTimeoutMs:this.bootstrapTimeoutMs})}async readAttemptSettlement(e){return this.repository.readAttemptSettlement(Ze(e))}async getInstruction(e){return this.repository.getInstruction(e)}async requestAttemptCancellation(e){return this.repository.requestAttemptCancellation(Ke(e))}async requestCancellation(e){return this.repository.requestCancellation(qe(e))}async readCancellation(e){return this.repository.readCancellation(e)}async reportOperation(e){return this.repository.reportOperation(e)}async beginProvisioning(e){return this.repository.beginProvisioning(e)}async getProviderOperation(e){return this.repository.getProviderOperation(e)}async renewProviderOperationClaim(e){return this.repository.renewProviderOperationClaim(e)}async takeOverProviderOperation(e){return this.repository.takeOverProviderOperation(e)}async handoffProviderOperation(e){return this.repository.handoffProviderOperation(e)}async recordProviderOperationUncertainty(e){return this.repository.recordProviderOperationUncertainty(e)}async completeProviderOperation(e){return this.repository.completeProviderOperation(e)}async recordAllocation(e){return this.repository.recordAllocation(e)}async recordProvisioningAbsent(e){let t=await this.repository.recordProvisioningAbsent(e);return t.kind===`recorded`&&this.rejectWaiterWith(e.claim.executionAttemptId,()=>Error(`Attempt '${e.claim.executionAttemptId}' provisioning produced no allocation: ${e.evidence.source} reported '${e.evidence.summary}'`)),t}async recordProvisionerIncarnationLost(e){let t=await this.repository.recordProvisionerIncarnationLost(e);if(t.kind===`recorded`){let{evidence:t,provisionerIncarnationId:n}=e.proof;this.rejectWaiterWith(e.claim.executionAttemptId,()=>Error(`Attempt '${e.claim.executionAttemptId}' lost the provisioner incarnation '${n}' its allocation was bound to: ${t.source} reported '${t.summary}'`))}return t}async recordAllocationTerminated(e){return this.repository.recordAllocationTerminated(e)}async registerRuntime(e){return this.repository.registerRuntime(e)}async admitOperation(e){return this.repository.admitOperation(e)}async completeOperation(e){return this.repository.completeOperation(e)}async markRuntimeReady(e){return this.repository.markRuntimeReady(e)}async getAttemptControlState(e){return this.repository.getAttemptControlState(e)}async getActiveAttempt(e,t){return this.repository.getActiveAttempt(e,t)}canonicalizeOutcome(e){return this.repository.canonicalizeOutcome(e)}decodeOutcome(e){return this.repository.decodeOutcome(e)}async commitOutcome(e,t,n,r){let i=await this.repository.commitOutcome({executionAttemptId:e,executionId:t,result:n,...r===void 0?{}:{runtimeFence:r}});return(i.kind===`conflict`||i.kind===`fenced`)&&this.settleWaiterInternal(e,i),i}waitForOutcome(e){return this.waiters.get(e)?.promise}settleOutcome(e,t){this.settleWaiterInternal(e,t)}discardWaiter(e){this.waiters.delete(e)}rejectAndDiscardWaiter(e,t){this.rejectWaiterWith(e,()=>t)}rejectWaiterWith(e,t){let n=this.waiters.get(e);n!==void 0&&(n.promise.catch(()=>void 0),n.reject(t()),this.waiters.delete(e))}get supportsRecovery(){return this.repository.recovery!==void 0}async getAttemptWithAllocation(e){return this.requireRecovery(`getAttemptWithAllocation`).getAttemptWithAllocation(e)}async recordDiscoveredAllocation(e){return this.requireRecovery(`recordDiscoveredAllocation`).recordDiscoveredAllocation(e)}async evolveAllocationRef(e){let t=this.requireRecovery(`evolveAllocationRef`);if(e.currentRef.providerId!==e.nextRef.providerId)throw Error(`Provider identity mismatch in allocation ref evolution: currentRef.providerId '${e.currentRef.providerId}' !== nextRef.providerId '${e.nextRef.providerId}'. Provider identity must not change during correlation.`);return t.evolveAllocationRef(e)}async getRecoverableAttempts(e){return this.requireRecovery(`getRecoverableAttempts`).getRecoverableAttempts(e)}async listOpenProviderOperations(e){return this.requireRecovery(`listOpenProviderOperations`).listOpenProviderOperations(e)}async recordInfrastructureFailure(e){let t=await this.repository.recordInfrastructureFailure(e);return t.kind===`recorded`&&this.rejectWaiterWith(e.claim.executionAttemptId,()=>Error(`Attempt '${e.claim.executionAttemptId}' suffered infrastructure failure: the provider allocation terminated without an acknowledged outcome`)),t}async abandonPendingAttempt(e,t){let n=await this.repository.abandonPendingAttempt(e,t);return(n.kind===`abandoned`||n.kind===`already-abandoned`)&&this.waiters.delete(e),n}requireRecovery(e){let{recovery:t}=this.repository;if(t===void 0)throw Error(`Recovery operation '${e}' requires a repository that exposes recovery operations. The injected repository does not support recovery.`);return t}installWaiter(e){this.waiters.set(e,ce())}settleWaiterInternal(e,t){let n=this.waiters.get(e);if(n){switch(t.kind){case`accepted`:case`duplicate`:n.resolve({outcome:t.outcome,controlObservation:t.controlObservation,acceptance:t.acceptance});break;case`conflict`:n.reject(Error(`Outcome conflict for attempt '${e}': a different outcome was already committed`));break;case`fenced`:n.reject(Error(`Attempt '${e}' has been fenced: it is no longer the active attempt for this execution`));break}this.waiters.delete(e)}}},Zi=class extends Ct{workflowExecutor;triggerReconcilerInstance;attemptAuthority;workspaceRootResolvers=new Set;constructor(e,t){super(e);let n=t?.executionAttemptAuthority;if(!n&&t?.executionAttemptRepository){let e=t.executionAttemptBootstrapTimeoutMs;if(e===void 0)throw Error(`An ExecutionAttemptRepository requires executionAttemptBootstrapTimeoutMs`);n=new Xi(t.executionAttemptRepository,{bootstrapTimeoutMs:e})}this.attemptAuthority=n,this.workflowExecutor=new Li(e,t?.executorConfig,t?.workflowRunner,this.attemptAuthority);for(let e of t?.workflowMaterializationSpecResolvers??[])this.workflowExecutor.registerWorkflowMaterializationSpecResolver(e);let r=t?.automationTriggerBindingRuntime;this.triggerReconcilerInstance=new Ui(e,()=>r?.())}get executor(){return this.workflowExecutor}get executionAttemptAuthority(){return this.attemptAuthority}registerSuccessFinalizer(e){return this.workflowExecutor.registerSuccessFinalizer(e)}acceptAuthorityRunnerResult(e,t){return this.workflowExecutor.acceptAuthorityRunnerResult(e,t)}get triggerReconciler(){return this.triggerReconcilerInstance}registerWorkflowMaterializationSpecResolver(e){return this.workflowExecutor.registerWorkflowMaterializationSpecResolver(e)}registerWorkspaceRootResolver(e){return this.workspaceRootResolvers.add(e),()=>{this.workspaceRootResolvers.delete(e)}}async resolveWorkspaceRoot(e){for(let t of this.workspaceRootResolvers){let n=await t(e);if(n!==void 0)return n}}async onInit(){this.addCleanup(()=>this.destroyOwnedServices()),await this.workflowExecutor.init(),await this.triggerReconcilerInstance.init()}async destroyOwnedServices(){let e=[];for(let t of[()=>this.triggerReconcilerInstance.destroy(),()=>this.workflowExecutor.destroy()])try{await t()}catch(t){e.push(t)}if(e.length===1)throw e[0];if(e.length>1)throw AggregateError(e,`Workflow engine service teardown failed`)}};const Qi=bt(`makaio.workflow-engine`);function $i(e){return{name:Qi.name,displayName:`Workflow Engine`,version:`0.1.0`,dependencies:[yt(Pt.name),yt(Ft.name,void 0,!0)],critical:!0,namespaces:[ft,c],storage:{registerHandlers:Et(Pr)},create:t=>new Zi(t.bus,{...e,automationTriggerBindingRuntime:()=>t.getService(Ft)})}}const ea=$i();export{_n as _,Xi as a,Di as c,yi as d,pi as f,hn as g,gn as h,Zi as i,bi as l,Pr as m,$i as n,Ui as o,li as p,ea as r,Li as s,Qi as t,xi as u};
@@ -1,7 +1,7 @@
1
- import { A as MarkRuntimeReadyInput, At as RecordProviderOperationUncertaintyInput, B as RecordAllocationTerminatedInput, D as ExecutionOwnerId, Dt as ProviderOperationOwnershipRecord, F as PendingAttemptAbandonmentDecision, G as RegisterRuntimeInput, H as RecordProvisionerIncarnationLostInput, It as EnsureExecutionAttemptDecision, J as RuntimeOutcomeFence, K as ReportOperationInput, L as ProvisioningClaimDecision, Lt as EnsureExecutionAttemptInput, M as OperationCompletionDecision, Mt as TakeOverProviderOperationInput, N as OperationReportDecision, O as GetInstructionInput, Ot as ProvisionerIncarnationLossDecision, P as OutcomeCodec, Pt as AttemptSettlementRead, R as ReadBootstrapStartStateInput, S as ExecutionAttemptRecord, St as ProviderOperationCompletionDecision, Tt as ProviderOperationMutationDecision, U as RecordProvisioningAbsentInput, V as RecordInfrastructureFailureInput, W as RecoverableAttemptRecord, X as RuntimeReadinessDecision, Z as RuntimeRegistrationDecision, _t as OpenProviderOperationRecord, a as AllocationRefEvolutionDecision, f as CompleteOperationInput, ft as CompleteProviderOperationInput, gt as ListOpenProviderOperationsInput, h as DurableOutcome, i as AllocationRefEvolution, j as OperationAdmissionDecision, jt as RenewProviderOperationClaimInput, k as InfrastructureFailureDecision, kt as ProvisioningAbsenceDecision, n as AdmitOperationInput, o as AllocationTerminationDecision, p as DiscoveredAllocationDecision, pt as HandoffProviderOperationInput, q as RequestExecutionCancellationInput, r as AllocationRecordingDecision, s as AttemptControlState, u as BeginProvisioningInput, v as ExecutionAttemptCancellationIntent, w as ExecutionAttemptRepository, x as ExecutionAttemptOutcomeDecision, xt as ProviderOperationClaimDecision, z as RecordAllocationInput, zt as ReadAttemptSettlementInput } from "./execution-attempt-repository-CE7UXmEi.mjs";
1
+ import { A as OperationReportDecision, B as RecordProvisioningAbsentInput, D as MarkRuntimeReadyInput, E as InfrastructureFailureDecision, F as ReadBootstrapStartStateInput, Ft as RequestAttemptCancellationInput, G as RuntimeRegistrationDecision, H as RegisterRuntimeInput, I as RecordAllocationInput, It as RequestExecutionCancellationInput, Kt as ReadAttemptSettlementInput, L as RecordAllocationTerminatedInput, M as PendingAttemptAbandonmentDecision, Nt as ExecutionAttemptCancellationDecision, O as OperationAdmissionDecision, P as ProvisioningClaimDecision, Pt as ExecutionAttemptCancellationIntent$1, R as RecordInfrastructureFailureInput, St as RuntimeOutcomeFence, T as GetInstructionInput, U as ReportOperationInput, Ut as EnsureExecutionAttemptDecision, V as RecoverableAttemptRecord, Vt as AttemptSettlementRead, W as RuntimeReadinessDecision, Wt as EnsureExecutionAttemptInput, X as CompleteProviderOperationInput, Z as HandoffProviderOperationInput, a as AllocationRefEvolutionDecision, at as ProviderOperationClaimDecision, dt as ProviderOperationOwnershipRecord, et as ListOpenProviderOperationsInput, f as CompleteOperationInput, ft as ProvisionerIncarnationLossDecision, gt as TakeOverProviderOperationInput, h as DurableOutcome, ht as RenewProviderOperationClaimInput, i as AllocationRefEvolution, j as OutcomeCodec, k as OperationCompletionDecision, lt as ProviderOperationMutationDecision, mt as RecordProviderOperationUncertaintyInput, n as AdmitOperationInput, o as AllocationTerminationDecision, ot as ProviderOperationCompletionDecision, p as DiscoveredAllocationDecision, pt as ProvisioningAbsenceDecision, r as AllocationRecordingDecision, s as AttemptControlState, tt as OpenProviderOperationRecord, u as BeginProvisioningInput, w as ExecutionOwnerId, x as ExecutionAttemptRepository, y as ExecutionAttemptRecord, yt as ExecutionAttemptOutcomeDecision, z as RecordProvisionerIncarnationLostInput } from "./execution-attempt-repository-DSpz2kyW.mjs";
2
2
  import { z } from "zod";
3
3
  import * as _$_makaio_contracts0 from "@makaio/framework/contracts";
4
- import { ExecutionAttemptBootstrapAwaitStartResponse, ExecutionAttemptInstruction, ExecutionAttemptOutcome, IWorkflowRunner, LoopGateHandler, MakaioNodeExtension, StationHandler, StepRunnerBusAuth, StepRunnerPlatformDefaults, WorkerMaterializationSpec, WorkflowDefinition, WorkflowExecution, WorkflowRunContext, WorkflowRunResult } from "@makaio/framework/contracts";
4
+ import { AcceptedAttemptOutcome, AcceptedAttemptOutcome as AcceptedAttemptOutcome$1, AttemptOutcomeControlObservation, ExecutionAttemptBootstrapAwaitStartResponse, ExecutionAttemptInstruction, ExecutionAttemptOutcome, IWorkflowRunner, LoopGateHandler, MakaioNodeExtension, OutcomeAcceptance, OutcomeAcceptance as OutcomeAcceptance$1, StationHandler, StepRunnerBusAuth, StepRunnerPlatformDefaults, WorkerMaterializationSpec, WorkflowAttemptCancellation, WorkflowAttemptOutcome, WorkflowAttemptOutcome as WorkflowAttemptOutcome$1, WorkflowAttemptTechnicalFailure, WorkflowDefinition, WorkflowExecution, WorkflowRunContext, WorkflowRunResult, WorkflowRunnerCompletion } from "@makaio/framework/contracts";
5
5
  import { IMakaioBus } from "@makaio/framework/bus";
6
6
  import { BaseService } from "@makaio/framework/service-base";
7
7
  import { MakaioDatabase } from "@makaio/framework/storage/drizzle";
@@ -102,6 +102,14 @@ interface BootstrapStartAuthority {
102
102
  }
103
103
  //#endregion
104
104
  //#region subsystems/workflow-engine/src/execution-attempt-authority.d.ts
105
+ /** A committed outcome may settle only with an explicit owner interpretation. */
106
+ type OutcomeSettlementDecision<TOutcome> = (Extract<ExecutionAttemptOutcomeDecision<TOutcome>, {
107
+ kind: 'accepted' | 'duplicate';
108
+ }> & {
109
+ readonly acceptance: OutcomeAcceptance;
110
+ }) | Extract<ExecutionAttemptOutcomeDecision<TOutcome>, {
111
+ kind: 'conflict' | 'fenced';
112
+ }>;
105
113
  /**
106
114
  * Execution attempt Authority service.
107
115
  *
@@ -186,6 +194,13 @@ declare class ExecutionAttemptAuthority<TOutcome> implements BootstrapStartAutho
186
194
  * @returns The stored assignment, or null for an owner mismatch or missing attempt.
187
195
  */
188
196
  getInstruction(input: GetInstructionInput): Promise<ExecutionAttemptInstruction | null>;
197
+ /**
198
+ * Commit one owner-authorized Cancel before any best-effort control notification.
199
+ * Historical cleanup does not restore outcome or owner mutation authority.
200
+ * @param input - Trusted owner, exact attempt and stable cancellation request key.
201
+ * @returns Winning durable receipt, replay or refusal without waiter settlement.
202
+ */
203
+ requestAttemptCancellation(input: RequestAttemptCancellationInput): Promise<ExecutionAttemptCancellationDecision>;
189
204
  /**
190
205
  * Commit cancellation intent before any best-effort control notification.
191
206
  * @param input - Owner of existing attempts and optional cancellation reason.
@@ -197,7 +212,7 @@ declare class ExecutionAttemptAuthority<TOutcome> implements BootstrapStartAutho
197
212
  * @param executionAttemptId - Exact attempt whose control is held.
198
213
  * @returns Durable request, which is not confirmation that cancellation completed.
199
214
  */
200
- readCancellation(executionAttemptId: string): Promise<ExecutionAttemptCancellationIntent | null>;
215
+ readCancellation(executionAttemptId: string): Promise<ExecutionAttemptCancellationIntent$1 | null>;
201
216
  /**
202
217
  * Accept successful Preparation without settling the attempt's outcome waiter.
203
218
  * @param input - Preparation result, operation correlation and trusted owner identity.
@@ -407,19 +422,18 @@ declare class ExecutionAttemptAuthority<TOutcome> implements BootstrapStartAutho
407
422
  * Returns `undefined` when no waiter exists for the given attempt
408
423
  * (e.g. after a process restart or for attempts created by other hosts).
409
424
  * @param executionAttemptId - The attempt to wait for.
410
- * @returns Promise that resolves with the canonical outcome, or `undefined`.
425
+ * @returns Promise of canonical outcome, frozen control facts and owner acceptance, or `undefined`.
411
426
  */
412
- waitForOutcome(executionAttemptId: string): Promise<TOutcome> | undefined;
427
+ waitForOutcome(executionAttemptId: string): Promise<AcceptedAttemptOutcome<TOutcome>> | undefined;
413
428
  /**
414
429
  * Settle the in-process waiter after owner-state convergence succeeds.
415
430
  *
416
- * Called by the outcome-submission handler only after the durable owner
417
- * transition has completed. This ensures runners observe the committed
418
- * outcome only when canonical owner state is consistent.
431
+ * Called only after the owner accepts the canonical fact, either through
432
+ * its normal result path or without projecting a new lifecycle transition.
419
433
  * @param executionAttemptId - The attempt whose waiter to settle.
420
434
  * @param decision - The durable outcome decision (must be accepted or duplicate).
421
435
  */
422
- settleOutcome(executionAttemptId: string, decision: ExecutionAttemptOutcomeDecision<TOutcome>): void;
436
+ settleOutcome(executionAttemptId: string, decision: OutcomeSettlementDecision<TOutcome>): void;
423
437
  /**
424
438
  * Remove an in-process waiter without settling it.
425
439
  *
@@ -540,7 +554,7 @@ declare class ExecutionAttemptAuthority<TOutcome> implements BootstrapStartAutho
540
554
  /**
541
555
  * Settle the in-process waiter based on a repository decision.
542
556
  *
543
- * For accepted/duplicate, resolves with the canonical outcome.
557
+ * For accepted/duplicate, resolves with canonical facts and explicit owner acceptance.
544
558
  * For conflict/fenced, rejects with a descriptive error.
545
559
  * @param executionAttemptId - Attempt whose waiter to settle.
546
560
  * @param decision - The durable outcome decision from the repository.
@@ -565,6 +579,8 @@ interface OutcomeConvergenceInput<TOutcome> {
565
579
  readonly outcome: TOutcome;
566
580
  /** The durable decision that produced the committed outcome. */
567
581
  readonly decision: 'accepted' | 'duplicate';
582
+ /** Frozen first-commit control facts; null means unknown, never revision zero. */
583
+ readonly controlObservation: AttemptOutcomeControlObservation | null;
568
584
  }
569
585
  /**
570
586
  * Owner-side convergence of a committed attempt outcome.
@@ -580,8 +596,9 @@ interface OutcomeConvergence<TOutcome> {
580
596
  * Converge owner state with the committed outcome.
581
597
  * @param input - Attempt identity, the canonical committed outcome, and the
582
598
  * durable decision that produced it.
599
+ * @returns Explicit owner acceptance; recorded-only does not project lifecycle state.
583
600
  */
584
- converge(input: OutcomeConvergenceInput<TOutcome>): Promise<void>;
601
+ converge(input: OutcomeConvergenceInput<TOutcome>): Promise<OutcomeAcceptance>;
585
602
  }
586
603
  /**
587
604
  * Owner-side validation that runs before the durable commit.
@@ -674,8 +691,8 @@ interface AttemptOutcomeSubmission<TOutcome> {
674
691
  * Order: one canonicalization of the submitted outcome, optional pre-commit
675
692
  * validation of that canonical value, durable commit of that same rendering
676
693
  * through the authority, owner convergence for `accepted` and `duplicate`,
677
- * then waiter settlement on a fresh decode of the text the decision reports
678
- * as committed. The decision kind is returned for the caller's
694
+ * then waiter settlement with that classification, the original control
695
+ * observation, and a fresh decode of the committed text. The decision kind is returned for the caller's
679
696
  * acknowledgement.
680
697
  *
681
698
  * Invariants this function keeps:
@@ -736,16 +753,6 @@ interface ExecutionAttemptHandlersDeps<TOutcome> extends AttemptOutcomeSubmissio
736
753
  declare function registerExecutionAttemptHandlers<TOutcome>(bus: IMakaioBus, deps: ExecutionAttemptHandlersDeps<TOutcome>): () => void;
737
754
  //#endregion
738
755
  //#region subsystems/workflow-engine/src/workflow-attempt-outcome.d.ts
739
- /** Technical failure retained as such rather than fabricated into a workflow-produced result. */
740
- type WorkflowAttemptTechnicalFailure = Extract<ExecutionAttemptOutcome, {
741
- kind: 'technical-failure';
742
- }>;
743
- /** Confirmed cooperative stop retained independently of a workflow-produced result. */
744
- type WorkflowAttemptCancellation = Extract<ExecutionAttemptOutcome, {
745
- kind: 'cancelled';
746
- }>;
747
- /** Canonical owner outcome: a workflow result, infrastructure failure, or confirmed cancellation. */
748
- type WorkflowAttemptOutcome = WorkflowRunResult | WorkflowAttemptTechnicalFailure | WorkflowAttemptCancellation;
749
756
  /** Production codec schema for workflow-owned Attempt outcomes. */
750
757
  declare const WorkflowAttemptOutcomeSchema: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
751
758
  executionId: z.ZodString;
@@ -912,9 +919,9 @@ declare const WorkflowAttemptOutcomeSchema: z.ZodUnion<readonly [z.ZodDiscrimina
912
919
  }, z.core.$strict>], "status">, z.ZodPipe<z.ZodDiscriminatedUnion<[z.ZodObject<{
913
920
  kind: z.ZodLiteral<"technical-failure">;
914
921
  stage: z.ZodEnum<{
915
- startup: "startup";
916
922
  "workspace-preparation": "workspace-preparation";
917
923
  "workload-invocation": "workload-invocation";
924
+ startup: "startup";
918
925
  }>;
919
926
  message: z.ZodString;
920
927
  }, z.core.$strict>, z.ZodObject<{
@@ -925,14 +932,14 @@ declare const WorkflowAttemptOutcomeSchema: z.ZodUnion<readonly [z.ZodDiscrimina
925
932
  reason: z.ZodOptional<z.ZodString>;
926
933
  }, z.core.$strict>], "kind">, z.ZodTransform<{
927
934
  kind: "technical-failure";
928
- stage: "startup" | "workspace-preparation" | "workload-invocation";
935
+ stage: "workspace-preparation" | "workload-invocation" | "startup";
929
936
  message: string;
930
937
  } | {
931
938
  kind: "cancelled";
932
939
  reason?: string | undefined;
933
940
  }, {
934
941
  kind: "technical-failure";
935
- stage: "startup" | "workspace-preparation" | "workload-invocation";
942
+ stage: "workspace-preparation" | "workload-invocation" | "startup";
936
943
  message: string;
937
944
  } | {
938
945
  kind: "workload-result";
@@ -956,6 +963,13 @@ interface CommittedWorkflowOutcomeIdentity {
956
963
  /** Workflow definition that owns that execution. */
957
964
  readonly workflowId: string;
958
965
  }
966
+ /**
967
+ * Preserve owner acceptance when returning a canonical fact to a workflow runner.
968
+ * @param acceptedOutcome - Committed fact and explicit owner interpretation.
969
+ * @param identity - Immutable workflow identity bound to the attempt.
970
+ * @returns A no-projection completion or an already-projected lifecycle result.
971
+ */
972
+ declare function toCommittedWorkflowRunnerCompletion(acceptedOutcome: AcceptedAttemptOutcome<WorkflowAttemptOutcome>, identity: CommittedWorkflowOutcomeIdentity): WorkflowRunnerCompletion;
959
973
  /**
960
974
  * Project an already committed and converged outcome for the workflow runner API.
961
975
  *
@@ -993,7 +1007,6 @@ declare class WorkflowExecutor extends BaseService {
993
1007
  private readonly shellAbortControllers;
994
1008
  private readonly activeRunnerSteps;
995
1009
  private readonly gateTimeoutScheduler;
996
- private readonly resumeDispatches;
997
1010
  /**
998
1011
  * Per-execution abort controllers used to cancel workflow-level runners.
999
1012
  * Keyed by execution ID; only populated when a {@link IWorkflowRunner} is used.
@@ -1011,7 +1024,7 @@ declare class WorkflowExecutor extends BaseService {
1011
1024
  * @param workflowRunner - Optional workflow-level runner for isolated execution
1012
1025
  * @param executionAttemptAuthority - Optional Authority for Worker dispatch runners
1013
1026
  */
1014
- constructor(bus: IMakaioBus, config?: Partial<ExecutorConfig>, workflowRunner?: IWorkflowRunner | undefined, executionAttemptAuthority?: ExecutionAttemptAuthority<WorkflowAttemptOutcome> | undefined);
1027
+ constructor(bus: IMakaioBus, config?: Partial<ExecutorConfig>, workflowRunner?: IWorkflowRunner | undefined, executionAttemptAuthority?: ExecutionAttemptAuthority<WorkflowAttemptOutcome$1> | undefined);
1015
1028
  /**
1016
1029
  * Register a host resolver used to freeze workspace materialization before a
1017
1030
  * path-backed execution is persisted.
@@ -1068,7 +1081,12 @@ declare class WorkflowExecutor extends BaseService {
1068
1081
  accepted: boolean;
1069
1082
  status: WorkflowExecution["status"];
1070
1083
  }>;
1071
- private resolveAuthorityRunnerReplay;
1084
+ /**
1085
+ * Interpret a canonical Attempt outcome under durable owner lifecycle ordering.
1086
+ * @param input - Committed outcome and its frozen control observation.
1087
+ * @returns Explicit lifecycle projection or technical-fact-only acceptance.
1088
+ */
1089
+ readonly acceptAuthorityOutcome: (input: OutcomeConvergenceInput<WorkflowAttemptOutcome$1>) => Promise<_$_makaio_contracts0.OutcomeAcceptance>;
1072
1090
  private loadAuthorityRunnerContext;
1073
1091
  private registerAuthorityResultFinalizer;
1074
1092
  /**
@@ -1171,18 +1189,11 @@ declare class WorkflowExecutor extends BaseService {
1171
1189
  * @returns `true` when the gate was accepted and resume dispatched; `false` otherwise.
1172
1190
  */
1173
1191
  private respondToPausedGate;
1174
- /**
1175
- * Transition a paused execution back to running and re-dispatch it through
1176
- * the configured runner infrastructure.
1177
- * @param executionId - Execution to resume.
1178
- */
1179
- private resumePausedExecution;
1180
1192
  /**
1181
1193
  * Dispatch a paused execution once durable resume state is available.
1182
1194
  * @param executionId - Execution to resume.
1183
- * @returns True when a runner task was launched.
1184
1195
  */
1185
- private dispatchPausedExecutionResume;
1196
+ private resumePausedExecution;
1186
1197
  }
1187
1198
  //#endregion
1188
1199
  //#region subsystems/workflow-engine/src/workflow-trigger-reconciler.d.ts
@@ -1451,7 +1462,7 @@ interface WorkflowEngineServiceOptions {
1451
1462
  * When omitted, the workflow engine operates without attempt tracking
1452
1463
  * (framework-only, in-process, and Piscina modes).
1453
1464
  */
1454
- executionAttemptRepository?: ExecutionAttemptRepository<WorkflowAttemptOutcome>;
1465
+ executionAttemptRepository?: ExecutionAttemptRepository<WorkflowAttemptOutcome$1>;
1455
1466
  /** Explicit creation-time bootstrap budget, required only when constructing an Authority. */
1456
1467
  executionAttemptBootstrapTimeoutMs?: number;
1457
1468
  /**
@@ -1465,7 +1476,7 @@ interface WorkflowEngineServiceOptions {
1465
1476
  * construction. When both are provided, the pre-built Authority is used
1466
1477
  * and the repository is ignored.
1467
1478
  */
1468
- executionAttemptAuthority?: ExecutionAttemptAuthority<WorkflowAttemptOutcome>;
1479
+ executionAttemptAuthority?: ExecutionAttemptAuthority<WorkflowAttemptOutcome$1>;
1469
1480
  /** Host-owned resolvers that create portable specs for path-backed starts. */
1470
1481
  workflowMaterializationSpecResolvers?: readonly WorkflowMaterializationSpecResolver[];
1471
1482
  /**
@@ -1510,7 +1521,7 @@ declare class WorkflowEngineService extends BaseService {
1510
1521
  * an explicit bootstrap budget, independently of runner mode.
1511
1522
  * @returns Authority instance, or `undefined` when no repository is injected.
1512
1523
  */
1513
- get executionAttemptAuthority(): ExecutionAttemptAuthority<WorkflowAttemptOutcome> | undefined;
1524
+ get executionAttemptAuthority(): ExecutionAttemptAuthority<WorkflowAttemptOutcome$1> | undefined;
1514
1525
  /**
1515
1526
  * Register a named workflow success finalizer with the owned executor.
1516
1527
  *
@@ -1593,4 +1604,4 @@ declare function createWorkflowEnginePackage(options?: WorkflowEngineServiceOpti
1593
1604
  */
1594
1605
  declare const workflowEnginePackage: MakaioNodeExtension<IMakaioBus>;
1595
1606
  //#endregion
1596
- export { WorkflowWorkspaceRootResolver as A, OutcomePreCommitValidation as C, BootstrapStartOptions as D, BootstrapStartAuthority as E, WorkflowMaterializationSpecResolution as O, OutcomeConvergenceInput as S, ExecutionAttemptAuthority as T, ExecutionAttemptHandlersDeps as _, WorkflowEngineServiceOptions as a, AttemptOutcomeSubmissionDeps as b, CommittedWorkflowOutcomeIdentity as c, WorkflowAttemptOutcomeSchema as d, WorkflowAttemptTechnicalFailure as f, AttemptOutcomeDecodingInput as g, workflowAttemptOutcomeCodec as h, WorkflowEngineService as i, registerDrizzleWorkflowStorage as j, WorkflowMaterializationSpecResolver as k, WorkflowAttemptCancellation as l, toCommittedWorkflowRunnerResult as m, createWorkflowEnginePackage as n, WorkflowTriggerReconciler as o, decodeWorkflowAttemptOutcome as p, workflowEnginePackage as r, WorkflowExecutor as s, WorkflowEngineToken as t, WorkflowAttemptOutcome as u, registerExecutionAttemptHandlers as v, submitAttemptOutcome as w, OutcomeConvergence as x, AttemptOutcomeSubmission as y };
1607
+ export { BootstrapStartOptions as A, OutcomeAcceptance$1 as C, submitAttemptOutcome as D, OutcomePreCommitValidation as E, WorkflowMaterializationSpecResolver as M, WorkflowWorkspaceRootResolver as N, ExecutionAttemptAuthority as O, registerDrizzleWorkflowStorage as P, AttemptOutcomeSubmissionDeps as S, OutcomeConvergenceInput as T, AttemptOutcomeDecodingInput as _, WorkflowEngineServiceOptions as a, AcceptedAttemptOutcome$1 as b, CommittedWorkflowOutcomeIdentity as c, WorkflowAttemptOutcomeSchema as d, WorkflowAttemptTechnicalFailure as f, workflowAttemptOutcomeCodec as g, toCommittedWorkflowRunnerResult as h, WorkflowEngineService as i, WorkflowMaterializationSpecResolution as j, BootstrapStartAuthority as k, WorkflowAttemptCancellation as l, toCommittedWorkflowRunnerCompletion as m, createWorkflowEnginePackage as n, WorkflowTriggerReconciler as o, decodeWorkflowAttemptOutcome as p, workflowEnginePackage as r, WorkflowExecutor as s, WorkflowEngineToken as t, WorkflowAttemptOutcome$1 as u, ExecutionAttemptHandlersDeps as v, OutcomeConvergence as w, AttemptOutcomeSubmission as x, registerExecutionAttemptHandlers as y };
package/dist/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@makaio/framework",
3
- "version": "1.0.0-dev-1788963848381",
3
+ "version": "1.0.0-dev-1788978977154",
4
4
  "type": "module"
5
5
  }
@@ -4,7 +4,7 @@ import { a as CODE_EXECUTION_DEFAULT_MAX_PROGRAM_FILES, c as CODE_EXECUTION_DEFA
4
4
  import { t as PiscinaCodeExecutionProvider } from "../index-6kg8YFYt.mjs";
5
5
  import { a as FilesystemDescriptorDiscovery, n as ExplicitDescriptorDiscovery, o as FilesystemDescriptorDiscoveryOptions, r as ExtensionDiscovery, s as MergedDescriptorDiscovery, t as DiscoveredExtension } from "../extension-discovery-B0ZL076T.mjs";
6
6
  import { a as isMakaioExtensionLike, c as resolveConventionEntrypoint, i as isCliContributionLike, n as LoadExtensionsOptions, o as isWithinDirectory, r as entrypointStem, s as loadExtensions, t as DescriptorSourcePackageGroup } from "../load-extensions-Bu10B5B1.mjs";
7
- import { $t as InitializeNodeDatabaseOptions, A as HeadlessWorkerExecutor, At as BootMakaioRuntimeOptions, B as WorkloadInvocationPreparation, Cn as prepareAdapterRuntime, D as HeadlessWorkerBootstrapCredentials, Dt as ThinWorkflowPiscinaRunnerOptions, E as HeadlessWorkerBootstrap, Ft as UpstreamTelemetryBootOptions, G as IsolatedWorkflowRuntimeContext, H as runWorkloadInvocation, I as runHeadlessWorkflowWorker, It as WorkflowRunnerBootOptions, J as createIsolatedWorkflowRuntime, K as WorkflowRuntimeAuthorityConnector, L as InstalledWorkloadAdapter, M as HeadlessWorkerPostCommitObserver, Mt as MakaioRuntime, N as HeadlessWorkflowWorkerDeps, Nt as ServerTransportProvider, O as HeadlessWorkerBusConnector, Ot as WorkflowRunResult, P as HeadlessWorkflowWorkerResult, Pt as TransportReadyInfo, Qt as DatabaseBootOptions, R as RunWorkloadInvocationOptions, Sn as activateAdapterRuntimeIdentity, T as LocalGitSourceOptions, Tt as IWorkflowRunner, U as CreateIsolatedWorkflowRuntimeOptions, V as WorkloadInvocationResult, W as IsolatedWorkflowRuntime, X as InProcessWorkflowRunnerOptions, Xt as WorkflowWorkerEntryResolverOptions, Y as InProcessWorkflowRunner, Yt as WorkflowWorkerEntryMode, Zt as resolveWorkflowWorkerEntry, _ as admitWorkflowRunOperation, _n as createHonoRouteGraph, a as bootstrapWorkerRuntime, an as ShutdownStep, b as registerWorkerRuntime, bn as PrepareAdapterRuntimeInput, c as DeliverableOperationKind, cn as NodeFrameworkModuleResolver, d as OperationDeliveryEndpointIdentity, dn as HttpRouteGraphBuilder, en as InitializeNodeDatabaseResult, f as OperationDeliveryHandler, fn as createHttpRouteGraphBuilder, g as RuntimeRegistrationRefusedError, gn as HonoRouteGraphOptions, h as RegisterWorkerRuntimeOptions, hn as HonoRouteGraph, i as StartedWorkerRuntime, in as selectFrameworkCorePackages, it as AuthorityRequestDeliveryError, j as HeadlessWorkerMaterializer, jt as CoreBootOptions, k as HeadlessWorkerContributionLoader, kt as BootCoordinatorSetupContext, l as OperationAdmissionRefusedError, ln as NoopFrameworkModuleResolver, m as RegisterAndAdmitWorkflowRunOptions, mn as HttpRouteContribution, n as BootstrapStartRefusedError, nn as HostCapabilityDeclaration, nt as AttemptOutcomeDeliveryError, o as AdmitWorkflowRunOperationOptions, on as BridgeBrowserOptions, ot as OutcomeDeliveryError, p as OperationDeliveryHandlers, pn as HttpContributionPhase, q as WorkflowRuntimeContributionLoader, r as BootstrapWorkerRuntimeOptions, rn as normalizeNodeHostCapabilities, s as AdmittedWorkflowRun, sn as FrameworkModuleResolver, t as BootstrapRuntimeConnection, tn as initializeNodeDatabase, u as OperationDeliveryEndpoint, un as resolveFrameworkSpecifier, ut as submitAttemptOutcomeWithAck, v as installOperationDeliveryEndpoint, vn as ActivateAdapterRuntimeIdentityInput, w as createLocalGitWorkspacePreparation, wt as ThinWorkflowPiscinaRunner, xn as PreparedAdapterRuntime, y as registerAndAdmitWorkflowRun, yn as ActivatedAdapterRuntimeIdentity, z as WorkloadControlBinding } from "../index-B_gyAIAo.mjs";
7
+ import { $t as InitializeNodeDatabaseOptions, A as HeadlessWorkerExecutor, At as BootMakaioRuntimeOptions, B as WorkloadInvocationPreparation, Cn as prepareAdapterRuntime, D as HeadlessWorkerBootstrapCredentials, Dt as ThinWorkflowPiscinaRunnerOptions, E as HeadlessWorkerBootstrap, Ft as UpstreamTelemetryBootOptions, G as IsolatedWorkflowRuntimeContext, H as runWorkloadInvocation, I as runHeadlessWorkflowWorker, It as WorkflowRunnerBootOptions, J as createIsolatedWorkflowRuntime, K as WorkflowRuntimeAuthorityConnector, L as InstalledWorkloadAdapter, M as HeadlessWorkerPostCommitObserver, Mt as MakaioRuntime, N as HeadlessWorkflowWorkerDeps, Nt as ServerTransportProvider, O as HeadlessWorkerBusConnector, Ot as WorkflowRunResult, P as HeadlessWorkflowWorkerResult, Pt as TransportReadyInfo, Qt as DatabaseBootOptions, R as RunWorkloadInvocationOptions, Sn as activateAdapterRuntimeIdentity, T as LocalGitSourceOptions, Tt as IWorkflowRunner, U as CreateIsolatedWorkflowRuntimeOptions, V as WorkloadInvocationResult, W as IsolatedWorkflowRuntime, X as InProcessWorkflowRunnerOptions, Xt as WorkflowWorkerEntryResolverOptions, Y as InProcessWorkflowRunner, Yt as WorkflowWorkerEntryMode, Zt as resolveWorkflowWorkerEntry, _ as admitWorkflowRunOperation, _n as createHonoRouteGraph, a as bootstrapWorkerRuntime, an as ShutdownStep, b as registerWorkerRuntime, bn as PrepareAdapterRuntimeInput, c as DeliverableOperationKind, cn as NodeFrameworkModuleResolver, d as OperationDeliveryEndpointIdentity, dn as HttpRouteGraphBuilder, en as InitializeNodeDatabaseResult, f as OperationDeliveryHandler, fn as createHttpRouteGraphBuilder, g as RuntimeRegistrationRefusedError, gn as HonoRouteGraphOptions, h as RegisterWorkerRuntimeOptions, hn as HonoRouteGraph, i as StartedWorkerRuntime, in as selectFrameworkCorePackages, it as AuthorityRequestDeliveryError, j as HeadlessWorkerMaterializer, jt as CoreBootOptions, k as HeadlessWorkerContributionLoader, kt as BootCoordinatorSetupContext, l as OperationAdmissionRefusedError, ln as NoopFrameworkModuleResolver, m as RegisterAndAdmitWorkflowRunOptions, mn as HttpRouteContribution, n as BootstrapStartRefusedError, nn as HostCapabilityDeclaration, nt as AttemptOutcomeDeliveryError, o as AdmitWorkflowRunOperationOptions, on as BridgeBrowserOptions, ot as OutcomeDeliveryError, p as OperationDeliveryHandlers, pn as HttpContributionPhase, q as WorkflowRuntimeContributionLoader, r as BootstrapWorkerRuntimeOptions, rn as normalizeNodeHostCapabilities, s as AdmittedWorkflowRun, sn as FrameworkModuleResolver, t as BootstrapRuntimeConnection, tn as initializeNodeDatabase, u as OperationDeliveryEndpoint, un as resolveFrameworkSpecifier, ut as submitAttemptOutcomeWithAck, v as installOperationDeliveryEndpoint, vn as ActivateAdapterRuntimeIdentityInput, w as createLocalGitWorkspacePreparation, wt as ThinWorkflowPiscinaRunner, xn as PreparedAdapterRuntime, y as registerAndAdmitWorkflowRun, yn as ActivatedAdapterRuntimeIdentity, z as WorkloadControlBinding } from "../index-CjMMvZch.mjs";
8
8
  import { ConfiguredRuntimeOptions, LoadMakaioConfigOptions, LoadedMakaioConfig, MAKAIO_CONFIG_FILE_ENV, MAKAIO_HOME_ENV, MakaioConfig, ParseMakaioConfigOptions, ParsedMakaioConfig, WorkflowRunnerConfig, buildConfiguredRuntimeOptions, createMakaioConfigDiscovery, defineMakaioConfig, loadMakaioConfig, parseMakaioConfig, resolveMakaioConfigPath, resolveMakaioHome, shouldIncludeExtension } from "./makaio-config.mjs";
9
9
  import { RotateWorkflowExecutionBusSecretParams, captureWorkflowExecutionBusSecretCleanup } from "./workflow-execution-bus-access.mjs";
10
10
  import { z } from "zod";