eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.63 kB
JavaScript
import{TASK_DELIVERY_POLICY_CONTEXT_KEY_NAME}from"#context/key-names.js";import{routeDeliverToChildren}from"#execution/route-child-delivery.js";import{routeSelectedDelivery}from"#execution/session/route-selected-delivery.js";import{admitSessionInboxPayload,applySessionCancellation}from"#execution/session/admission.js";import{getSessionTaskCohorts}from"#tasks/session-task-cohorts.js";async function nextTurnDelivery(e){let{inbox:t,cursor:n,queue:r}=e,i;for(;;){for(let{delivery:e,sequence:t}of r.taskDeliveries()){let i=await routeDeliverToChildren({delivery:e,sessionWritable:n.sessionWritable,serializedContext:n.serializedContext,sessionState:n.sessionState});if(await n.apply(i),r.replaceDelivery(t,i.kind===`cancel-turn`?void 0:i.remainder),i.kind===`cancel-turn`)return i}let a=r.takeNext(getSessionTaskCohorts(n.sessionState.snapshot.session.state),{deferDeliveries:e.deferDeliveries,taskDeliveryPolicy:n.serializedContext[TASK_DELIVERY_POLICY_CONTEXT_KEY_NAME]===`auto`?`auto`:`cohort`,expectedAttemptIds:e.expectedAttemptIds,freshSequence:t.hasPending()?void 0:i});if(a?.kind===`control`)return{kind:a.control};if(a?.kind===`authorization-resume`)return a;if(a?.kind===`turn`){let e=await routeSelectedDelivery(a,n);if(e.kind===`cancel-turn`)return e;if(e.kind===`consumed`)continue;return e}let o=r.pendingCount===0,s=await t.next();if(s===void 0)return{kind:`closed`};let c=await admitSessionInboxPayload(s,e);switch(i=o&&c.kind===`delivery`?c.admission.sequence:void 0,c.kind){case`workflow`:return{kind:`workflow`,message:c.message};case`cancel`:await applySessionCancellation(c.command,e)}}}export{nextTurnDelivery};