eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
3 lines (2 loc) • 3.1 kB
JavaScript
import{recordTaskInputRequestStep,recordTerminalTaskViewsStep}from"#execution/tasks/parent/hitl-proxy-steps.js";import{coalesceDeliverPayloads}from"#execution/deliver-payloads.js";import{emitSubagentEventStep}from"#execution/tools/subagent/emit-event-step.js";import{formatTaskNotification}from"#tasks/notification.js";import{routeProxiedDeliverStep}from"#execution/proxied-deliver-step.js";import{emitRecordedTaskInputRequestStep,runProxySubagentEventStep}from"#subagents/event-proxy-step.js";import{acceptTaskAuthorizationEventStep}from"#execution/tools/subagent/accept-event-step.js";import{applyTaskAgentRequest}from"#execution/tools/subagent/task-agent-requests.js";async function routeDeliverToChildren(e){let t=coalesceDeliverPayloads(e.delivery.payloads),n=e.serializedContext,r=e.sessionState,i=new Map,a=new Set((t.task?.views??[]).map(e=>e.taskId));for(let i of t.task?.inputRequests??[]){if(a.has(i.taskId))continue;let t=await recordTaskInputRequestStep({request:i,sessionState:r});if(r=t.sessionState,!t.accepted)continue;let o=await emitRecordedTaskInputRequestStep({sessionWritable:e.sessionWritable,request:t.request,serializedContext:n,sessionState:r});n=o.serializedContext,r=o.sessionState}for(let i of t.task?.agentRequests??[]){if(i.request.kind===`agent-invoke`&&a.has(i.taskId))continue;let t=await applyTaskAgentRequest({...i,ownerId:i.taskId},{sessionWritable:e.sessionWritable,serializedContext:n,sessionState:r});n=t.serializedContext,r=t.sessionState}for(let i of t.task?.authorizationEvents??[]){if(i.hookPayload.event.type===`authorization.required`&&a.has(i.taskId)||!await acceptTaskAuthorizationEventStep({delivery:i,sessionState:r}))continue;let t=await runProxySubagentEventStep({hookPayload:i.hookPayload,sessionWritable:e.sessionWritable,serializedContext:n,sessionState:r});n=t.serializedContext,r=t.sessionState}if((t.task?.views?.length??0)>0){let a=await recordTerminalTaskViewsStep({serializedContext:n,sessionState:r,views:t.task?.views??[]});n=a.serializedContext,r=a.sessionState;for(let e of a.views)i.set(e.taskId,e);for(let t of a.subagentCompletions)n=(await emitSubagentEventStep({event:t,sessionWritable:e.sessionWritable,serializedContext:n,sessionState:r})).serializedContext}let o=[],s=[];for(let[t,n]of e.delivery.payloads.entries()){let r={...n};if(delete r.task,r.message!==void 0&&n.task?.views!==void 0){let e=n.task.views.flatMap(({taskId:e})=>{let t=i.get(e);return t===void 0?[]:[formatTaskNotification(t)]});e.length===0?delete r.message:r.message=e.join(`
`)}if(Object.keys(r).length===0)continue;let a=o.length;o.push(r);for(let n of e.delivery.deliveryMetadata??[])n.payloadIndex===t&&s.push({...n,payloadIndex:a})}let c=o.length===0?void 0:{...e.delivery,deliveryMetadata:s.length===0?void 0:s,payloads:o};return c===void 0?{kind:`continue`,remainder:void 0,serializedContext:n,sessionState:r}:r.hasProxyInputRequests?await routeProxiedDeliverStep({delivery:c,sessionWritable:e.sessionWritable,serializedContext:n,sessionState:r}):{kind:`continue`,remainder:c,serializedContext:n,sessionState:r}}export{routeDeliverToChildren};