UNPKG

eve

Version:

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

1 lines 3.98 kB
import{createEveTaskInputRoutePath}from"#protocol/routes.js";import{createLogger}from"#internal/logging.js";import{isInputRequest}from"#shared/input.js";import{contextStorage}from"#context/container.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{deserializeContext,serializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{cacheTerminalTaskView,findSessionTaskEntry}from"#tasks/session-index.js";import{createTaskInputRequestId,upsertProxyInputRequestState}from"#harness/proxy-input-requests.js";import{readLatestTaskView}from"#execution/tasks/parent/run-parent.js";import{applyTaskAgentHandleCommand}from"#subagents/handles/transitions.js";import{bindSessionInstrumentation}from"#instrumentation/runtime.js";import{createTaskInputCapabilityToken}from"#execution/task-input-capability.js";import{createRemoteTaskInputCallbackUrl}from"#execution/workflow-callback-url.js";const log=createLogger(`execution.tasks.parent`);async function recordTaskInputRequestStep(e){"use step";let t=await readDurableSession(e.sessionState),n=findSessionTaskEntry(t.state,e.request.taskId),r=e.request.requests??[e.request.request];if(n===void 0||r.length===0||!r.every(isInputRequest))return{accepted:!1,sessionState:e.sessionState};let i=await readLatestTaskView({taskRunId:n.taskRunId}),a=r.map(e=>e.requestId);if(i?.status!==`input_required`||i.inputRequests.length!==a.length||!i.inputRequests.every((e,t)=>typeof e==`object`&&!!e&&!Array.isArray(e)&&Reflect.get(e,`requestId`)===a[t]))return{accepted:!1,sessionState:e.sessionState};let o=r.map(t=>({...t,requestId:createTaskInputRequestId(e.request.taskId,t.requestId)})),s=getAgentHandleStore(t.state)?.handles.find(t=>t.phase===`claimed`&&t.ownerId===e.request.taskId),c=s?.phase===`claimed`&&s.address.kind===`agent/remote`?createRemoteTaskInputCallbackUrl(s.address.url,createEveTaskInputRoutePath(createTaskInputCapabilityToken(e.request.replyTo))):void 0,l=r.map((t,n)=>{let r=o[n],i={childContinuationToken:e.request.replyTo,childRequestId:t.requestId,kind:t.kind,taskId:e.request.taskId};return c!==void 0&&(i.childResponseUrl=c),[r.requestId,i]}),u=upsertProxyInputRequestState({entries:l,forChildContinuationToken:e.request.replyTo,state:t.state});return{accepted:!0,request:e.request.requests===void 0?{...e.request,request:o[0]}:{...e.request,request:void 0,requests:o},sessionState:{...e.sessionState,hasProxyInputRequests:!0,snapshot:{session:{...t,state:u},version:e.sessionState.version}}}}async function recordTerminalTaskViewsStep(e){"use step";let t=await readDurableSession(e.sessionState),n=t,r=[];for(let t of e.views){if(findSessionTaskEntry(n.state,t.taskId)===void 0)continue;let e=cacheTerminalTaskView(n.state,t);e!==n.state&&(n={...n,state:e}),r.push(t),n=applyTaskAgentHandleCommand(n,{kind:`release-owner`,ownerId:t.taskId}).session}return{serializedContext:await settleBackgroundTaskActions({serializedContext:e.serializedContext,session:n,views:r}),sessionState:n===t?e.sessionState:{...e.sessionState,snapshot:{session:n,version:e.sessionState.version}}}}async function settleBackgroundTaskActions(e){if(e.views.length===0)return e.serializedContext;try{let t=await deserializeContext(e.serializedContext),n=t.get(BundleKey);if(n===void 0)return e.serializedContext;let r=bindSessionInstrumentation({agentName:n.turnAgent.id,ctx:t,rootSessionId:e.session.rootSessionId??e.session.sessionId,sessionId:e.session.sessionId});if(r===void 0)return e.serializedContext;try{await contextStorage.run(t,()=>r.publishBackgroundTaskSettlements({acceptedAtMs:Date.now(),views:e.views}))}finally{await r.flush()}return serializeContext(t)}catch(t){return log.warn(`failed to settle background task instrumentation`,{error:t,sessionId:e.session.sessionId,taskIds:e.views.map(e=>e.taskId)}),e.serializedContext}}export{recordTaskInputRequestStep,recordTerminalTaskViewsStep};