UNPKG

eve

Version:

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

1 lines 1.32 kB
import{contextStorage}from"#context/container.js";import{connectionProvider}from"#context/providers/connection.js";import{sandboxProvider}from"#context/providers/sandbox.js";import{sessionProvider}from"#context/providers/session.js";const frameworkProviders=[sessionProvider,connectionProvider,sandboxProvider];async function withContextScope(e,t,n,r=[]){let i=t,a=[...frameworkProviders,...r],o=[];e.clearVirtualContext();try{for(let t of a){let n=await t.create(e,i);n!==void 0&&(e.setVirtualContext(t.key,n.value),o.push(t),n.session!==void 0&&(i=n.session))}let t=await contextStorage.run(e,()=>n(i)),r=t.session;for(let t of o)t.commit!==void 0&&(r=await t.commit(e.require(t.key),r));return r===t.session?t:{result:t.result,session:r}}catch(t){let n=[];for(let r of o.toReversed())if(r.rollback!==void 0)try{await r.rollback(e.require(r.key),t)}catch(e){n.push(e)}throw n.length>0?AggregateError([t,...n],`Framework context rollback did not complete.`,{cause:t}):t}}async function runStep(e,t,n,r=[]){let i=await withContextScope(e,t,async e=>{let t=await n(e);return{result:t,session:t.session}},r),a={...i.result,session:i.session};for(let t of[...frameworkProviders,...r])t.decorateStepResult!==void 0&&e.has(t.key)&&(a=await t.decorateStepResult(e.require(t.key),a));return a}export{runStep,withContextScope};