eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 3.47 kB
JavaScript
import{callAdapterEventHandler}from"#channel/adapter.js";import{ScheduleIdKey,TurnDeliveryIdsKey,TurnTaskDeliveryKey}from"#context/keys.js";import{encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{dispatchDynamicSubagentEvent}from"#context/dynamic-subagent-lifecycle.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{dispatchDynamicModelEvent}from"#context/dynamic-model-lifecycle.js";import{dispatchDynamicToolEvent}from"#context/dynamic-tool-lifecycle.js";import{setChannelContext}from"#execution/channel-context.js";import{dispatchDynamicInstructionEvent}from"#context/dynamic-instruction-lifecycle.js";import{dispatchDynamicSkillEvent}from"#context/dynamic-skill-lifecycle.js";import{dispatchStreamEventHooks}from"#context/hook-lifecycle.js";import{dispatchMemoryLifecycleEvent}from"#context/memory-event-lifecycle.js";import*as activityCohort from"#execution/activity-cohort.js";import{bindDynamicConnections}from"#execution/dynamic-connections.js";import{observeSessionActivity}from"#execution/session-activity-projection.js";import{scheduledLaunchDeliveryEvent}from"#execution/scheduled-launch-delivery.js";import{forwardTaskEventToSessionCallback}from"#execution/task-event-callback.js";function createSessionEventSink(e){let{adapter:t,bundle:n,ctx:r,effectiveAgent:i,instrumentation:a}=e,o=buildAdapterContext(t,r),s=bindDynamicConnections(r,n.resolvedAgent),c={...n.graph.root,turnAgent:i.turnAgent},l=e.sessionWritable.getWriter(),emit=async n=>{let i=scheduledLaunchDeliveryEvent(n,{isFirstTurn:e.isFirstTurn,isScheduled:r.get(ScheduleIdKey)!==void 0,taskPhase:r.get(TurnTaskDeliveryKey)});if(i===void 0)return{event:stampMessageStreamEvent(n,r.get(TurnDeliveryIdsKey)),suppressed:!0};let a=await callAdapterEventHandler(t,i,o);setChannelContext(r,{...t,state:{...o.state}});let s=stampMessageStreamEvent(a,r.get(TurnDeliveryIdsKey));return await l.write(encodeMessageStreamEvent(s)),{event:s,suppressed:!1}},handleEvent=async(t,o)=>{activityCohort.updateActivityBlockers(r,t);let l=await forwardTaskEventToSessionCallback(r,t)?{event:stampMessageStreamEvent(t,r.get(TurnDeliveryIdsKey)),suppressed:!1}:await emit(t),u=await dispatchMemoryLifecycleEvent({abortSignal:e.abortSignal,appRoot:c.agent?.metadata?.appRoot??``,ctx:r,event:t,instrumentation:a?.memory,memories:c.agent?.memories??[],messages:o,nodeId:n.nodeId??`__root__`});observeSessionActivity({ctx:r,event:l.event,sessionId:e.sessionId}),l.suppressed||await dispatchStreamEventHooks({ctx:r,registry:n.hookRegistry,event:l.event}),l.event.type!==`step.started`&&await dispatchDynamicModelEvent({abortSignal:e.abortSignal,ctx:r,dynamicModel:i.turnAgent.dynamicModel,event:l.event,messages:u,scope:{moduleMap:n.moduleMap,nodeId:n.nodeId}}),await s.dispatch(l.event),await dispatchDynamicSubagentEvent({ctx:r,resolvers:n.subagentRegistry.dynamicResolvers??[],event:l.event,messages:u}),await dispatchDynamicToolEvent({ctx:r,resolvers:n.resolvedAgent.dynamicToolResolvers??[],event:l.event,messages:u}),await dispatchDynamicSkillEvent({ctx:r,resolvers:n.resolvedAgent.dynamicSkillResolvers??[],event:l.event,messages:u}),await dispatchDynamicInstructionEvent({ctx:r,resolvers:n.resolvedAgent.dynamicInstructionsResolvers??[],event:l.event,messages:u})},u=!1,release=()=>{u||(u=!0,l.releaseLock())};return{adapterCtx:o,close:async()=>{await l.close(),release()},dynamicConnections:s,effectiveNode:c,handleEvent,release}}export{createSessionEventSink};