eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.66 kB
JavaScript
import{createHook,sleep}from"#compiled/@workflow/core/index.js";import{claimHookOwnership,isHookConflictError}from"#execution/hook-ownership.js";import{createActivitySnapshot,reduceActivityBatch}from"#execution/session-activity.js";import{disposeSessionActivityStep,renderSessionActivityStep}from"#execution/session-activity-renderer-step.js";async function activityCollectorWorkflow(e){"use workflow";let t=createHook({token:e.token}),n=t[Symbol.asyncIterator](),r,i=sleep(new Date(e.expiresAt)).then(()=>({kind:`expired`})),a=createActivitySnapshot(),o={};try{await claimHookOwnership(t)}catch(e){if(isHookConflictError(e))return;throw e}try{for(;;){r??=n.next();let t=await Promise.race([r.then(e=>({kind:`batch`,value:e})),i]);if(t.kind===`expired`||t.value.done===!0)break;r=void 0;let s=reduceCollectorActivity(a,t.value.value);if(a=s.snapshot,!s.presentationChanged)continue;let c=sleep(350).then(()=>({kind:`render`}));for(;;){r??=n.next();let e=await Promise.race([r.then(e=>({kind:`batch`,value:e})),c,i]);if(e.kind===`expired`)return;if(e.kind===`render`)break;if(e.value.done===!0)return;r=void 0,a=reduceActivityBatch(a,e.value.value)}o=(await renderSessionActivityStep({rendererStates:o,serializedContext:e.serializedContext,snapshot:a})).rendererStates}}finally{await disposeSessionActivityStep({rendererStates:o,serializedContext:e.serializedContext}).catch(()=>{})}}function reduceCollectorActivity(e,t){let n=e.revision,r=reduceActivityBatch(e,t);return{presentationChanged:r.revision!==n,snapshot:r}}activityCollectorWorkflow.workflowId=`workflow//eve//activityCollectorWorkflow`;export{activityCollectorWorkflow,reduceCollectorActivity};