UNPKG

eve

Version:

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

1 lines 2.55 kB
import{getHarnessEmissionState}from"#harness/emission.js";import{getRun}from"#internal/workflow/runtime.js";import{projectToDurableSession}from"#execution/session.js";import{hasProxyInputRequests}from"#harness/proxy-input-requests.js";import{migrateDurableSessionSnapshot}from"#execution/durable-session-migrations/snapshot.js";const EVE_SESSION_STREAM_NAMESPACE=`eve.session`,DURABLE_SESSION_VERSION=1,DURABLE_SESSION_READ_TIMEOUT_MS=1e4;function projectSessionState(e){return{continuationToken:e.session.continuationToken,emissionState:getHarnessEmissionState(e.session.state),hasProxyInputRequests:hasProxyInputRequests(e.session.state),sessionId:e.session.sessionId,version:1}}async function readDurableSession(e){if(e.snapshot!==void 0)return migrateDurableSessionSnapshot(e.snapshot).session;let t=getRun(e.sessionId).getReadable({namespace:EVE_SESSION_STREAM_NAMESPACE,startIndex:-1}).getReader(),n=`eve durable session tail read failed`,r;try{let i=await Promise.race([t.read().then(e=>({kind:`read`,read:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timeout`}),DURABLE_SESSION_READ_TIMEOUT_MS)})]);if(i.kind===`timeout`)throw n=`eve durable session tail read timed out after ${DURABLE_SESSION_READ_TIMEOUT_MS}ms`,new DurableSessionReadTimeoutError(e);if(i.read.done||i.read.value===void 0)throw n=`eve durable session tail read returned no snapshot`,Error(`No durable session snapshot found in stream "${EVE_SESSION_STREAM_NAMESPACE}" for run ${e.sessionId}.`);return n=`eve durable session tail read complete`,migrateDurableSessionSnapshot(i.read.value).session}finally{r!==void 0&&clearTimeout(r),await t.cancel(n).catch(()=>{}),t.releaseLock()}}var DurableSessionReadTimeoutError=class extends Error{constructor(e){super(`Timed out reading durable session snapshot from stream "${EVE_SESSION_STREAM_NAMESPACE}" for run ${e.sessionId} after ${DURABLE_SESSION_READ_TIMEOUT_MS}ms.`),this.name=`DurableSessionReadTimeoutError`}};function createDurableSessionState(e){let t={session:projectToDurableSession(e.session),version:1};return{...projectSessionState({session:e.session}),snapshot:t}}function replaceDurableSessionSnapshot(e){return{...e.state,continuationToken:e.session.continuationToken,emissionState:getHarnessEmissionState(e.session.state),hasProxyInputRequests:hasProxyInputRequests(e.session.state),sessionId:e.session.sessionId,version:1,snapshot:{...e.state.snapshot,session:e.session,version:1}}}export{DURABLE_SESSION_VERSION,createDurableSessionState,projectSessionState,readDurableSession,replaceDurableSessionSnapshot};