eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.31 kB
JavaScript
import{getWorkflowMetadata}from"#compiled/@workflow/core/index.js";import{isWorkflowMessage}from"#execution/session-inbox/inbox.js";import{runProxySubagentEventStep}from"#subagents/event-proxy-step.js";import{cancelAllIndexedSessionTasksStep}from"#execution/cancel-indexed-session-tasks-step.js";import{SessionInboxPayloadError,decodeSessionInboxPayload}from"#execution/session-inbox/protocol.js";import{reportDroppedWirePayloadStep}from"#execution/report-dropped-wire-payload-step.js";import{findRunningAgentHandle}from"#subagents/handles/query.js";async function admitSessionInboxPayload(e,t){if(e.kind===`runtime-action-result`)return{kind:`runtime-action-result`,payload:e};if(isWorkflowMessage(e))return{kind:`workflow`,message:e};if(e.kind===`authorization-callback`)return t.queue.enqueueAuthorization(e.payloads),{kind:`consumed`};if(e.kind===`subagent-input-request`||e.kind===`subagent-authorization-event`){let n=findRunningAgentHandle(t.cursor.sessionState.snapshot.session.state,{callId:e.callId});return n?.identity.name===e.subagentName&&n.address.sessionId===e.childSessionId&&await t.cursor.apply(await runProxySubagentEventStep({hookPayload:e,sessionWritable:t.cursor.sessionWritable,serializedContext:t.cursor.serializedContext,sessionState:t.cursor.sessionState})),{kind:`consumed`}}let n;try{n=decodeSessionInboxPayload(e)}catch(e){if(!(e instanceof SessionInboxPayloadError))throw e;return await reportDroppedWirePayloadStep({detail:e.message,family:`session-inbox`}),{kind:`consumed`}}switch(n.kind){case`deliver`:{let e=t.queue.enqueueDelivery(n);return e===void 0?{kind:`consumed`}:{admission:e,kind:`delivery`}}case`clear`:case`compact`:return t.queue.enqueueControl(n.kind),{kind:`consumed`};case`session-timeout`:return n.ownerRunId===getWorkflowMetadata().workflowRunId&&t.queue.enqueueControl(`expired`),{kind:`consumed`};case`reset`:return t.queue.enqueueControl(`reset`),{command:{kind:`cancel`},kind:`cancel`};case`cancel`:return{command:n,kind:`cancel`}}}async function applySessionCancellation(e,t){if(e.tasks===!0){let e=await cancelAllIndexedSessionTasksStep({serializedContext:t.cursor.serializedContext,sessionState:t.cursor.sessionState});await t.cursor.apply(e)}e.taskId!==void 0&&t.queue.cancelTask(e.taskId)}export{admitSessionInboxPayload,applySessionCancellation};