UNPKG

eve

Version:

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

1 lines 1.2 kB
import{createHook}from"#compiled/@workflow/core/index.js";import{claimHookOwnership,disposeHook,isHookConflictError}from"#execution/hook-ownership.js";import{TurnCancelledError}from"#harness/turn-cancellation.js";import{turnCancellationHookToken}from"#execution/turn-cancellation-token.js";async function createTurnCancellationControl(e){let t=createHook({token:turnCancellationHookToken(e.controlToken)}),n=t[Symbol.asyncIterator]();try{await claimHookOwnership(t)}catch(e){if(isHookConflictError(e))return;throw e}let r=new AbortController,abort=()=>r.abort(new TurnCancelledError),i=e.initialPayload!==void 0&&matchesActiveTurn(e.initialPayload,e.expectedTurnId);i&&abort();let a=i?Promise.resolve(e.initialPayload):consumeMatchingCancel(n,e.expectedTurnId,abort),o=!1;return{payload:a,signal:r.signal,requested:a.then(()=>`cancel`),async dispose(){o||(o=!0,await disposeHook(t))}}}async function consumeMatchingCancel(e,t,n){for(;;){let r=await e.next();if(r.done)return await new Promise(()=>{});if(matchesActiveTurn(r.value,t))return n(),r.value}}function matchesActiveTurn(e,t){if(typeof e!=`object`||!e)return!0;let n=e.turnId;return n===void 0||n===t}export{createTurnCancellationControl};