UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 1.84 kB
import{activeTurnId}from"#harness/active-turn-id.js";import{createTurnWorkflowInput}from"#execution/durable-session-migrations/turn-workflow.js";import{SessionStateCursor}from"#execution/session-state-cursor.js";import{dispatchTurnStep}from"#execution/dispatch-turn-step.js";import{TurnControlReceiver}from"#execution/turn-control-receiver.js";import{runInlineTurn}from"#execution/inline-turn.js";import{runTurnOwnedWorkflow}from"#execution/turn-workflow.js";async function dispatchAndAwaitTurn(e){let t=e.stateCursor??new SessionStateCursor({serializedContext:e.serializedContext,sessionState:e.sessionState}),n=await runInlineTurn({...e,stateCursor:t});return n.kind===`result`?{action:n.action,async dispose(){}}:await runAndAwaitTurn({...e,inline:n.kind===`continue`,initialCancellation:n.initialCancellation,stateCursor:t,initialStep:n.initialStep})}async function runAndAwaitTurn(e){let t=new TurnControlReceiver({bufferedDeliveries:e.bufferedDeliveries,bufferedSessionControls:e.bufferedSessionControls,cancelledTaskIds:e.cancelledTaskIds,commandInbox:e.commandInbox,expectedTurnId:activeTurnId(e.sessionState.emissionState),seenTaskDeliveries:e.seenTaskDeliveries??new Set,stateCursor:e.stateCursor,token:e.controlToken});try{let n={capabilities:e.capabilities,completionToken:t.token,delivery:e.delivery,initialCancellation:e.initialCancellation,initialStep:e.initialStep,mode:e.mode,parentWritable:e.parentWritable,retention:e.retention,serializedContext:e.serializedContext,sessionState:e.sessionState},r;if(e.inline){let e=Promise.withResolvers();[r]=await Promise.all([e.promise.then(()=>t.waitForAction()),runTurnOwnedWorkflow(createTurnWorkflowInput(n),e.resolve)])}else await dispatchTurnStep(n),r=await t.waitForAction();return{action:r,dispose:()=>t.dispose()}}catch(e){throw await t.dispose(),e}}export{dispatchAndAwaitTurn};