UNPKG

eve

Version:

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

1 lines 3.06 kB
import{createInputRequestedEvent}from"#protocol/message.js";import{emitTurnEpilogue,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{getProxyInputRequests,toProxyInputRequestEntries}from"#harness/proxy-input-requests.js";import{SESSION_LIMIT_STOP_OPTION_ID}from"#harness/session-limit-continuation.js";async function emitProxiedInputRequest(e){await e.emit(createInputRequestedEvent({requests:e.hookPayload.event.requests,sequence:e.hookPayload.event.sequence,stepIndex:e.hookPayload.event.stepIndex,turnId:e.hookPayload.event.turnId}));let t=e.session;if(e.mode===`conversation`){let n=getHarnessEmissionState(e.session.state),r=await emitTurnEpilogue(e.emit,n,e.mode);t=setHarnessEmissionState(e.session,r)}return{entries:toProxyInputRequestEntries(e.hookPayload),session:t}}function routeDeliverPayload(e){let t=getProxyInputRequests(e.state),n=e.payload.inputResponses??[],r=new Map,i=[],a;for(let o of n){let n=t.get(o.requestId);if(n===void 0||e.allowRoute?.(o.requestId,n)===!1){i.push(o);continue}n.kind===`session-limit`&&o.optionId===SESSION_LIMIT_STOP_OPTION_ID&&(a={kind:`cancel-turn`});let s=[n.childContinuationToken,n.childSessionInbox?.sessionId??``,n.childResponseUrl??`local`,n.taskId??``].join(`\0`),c=r.get(s);c===void 0?r.set(s,{childContinuationToken:n.childContinuationToken,parentRequestIds:[o.requestId],responses:[toChildInputResponse(o,n)],routes:[n],...n.childSessionInbox!==void 0&&{childSessionInbox:n.childSessionInbox},...n.answerHook!==void 0&&{answerHook:n.answerHook},...n.childResponseUrl!==void 0&&{childResponseUrl:n.childResponseUrl},...n.taskId!==void 0&&{taskId:n.taskId}}):(c.parentRequestIds.push(o.requestId),c.responses.push(toChildInputResponse(o,n)),c.routes.push(n))}let o=[...r.values()].map(({answerHook:e,childContinuationToken:n,childSessionInbox:r,childResponseUrl:i,parentRequestIds:a,responses:o,routes:s,taskId:c})=>{let l=new Set(a),u=new Set(l);for(let e of s)if(e.batch!==void 0&&batchResolves({batch:e.batch,childContinuationToken:n,entries:t,responseIds:l}))for(let t of e.batch.requestIds)u.add(t);return{childContinuationToken:n,payload:{inputResponses:o},retireRequestIds:[...u],...r!==void 0&&{childSessionInbox:r},...e!==void 0&&{answerHook:e},...i!==void 0&&{childResponseUrl:i},...c!==void 0&&{taskId:c}}}),s={};for(let[t,n]of Object.entries(e.payload))t!==`inputResponses`&&n!==void 0&&(s[t]=n);return i.length>0&&(s.inputResponses=i),{forChildren:o,forSelf:Object.keys(s).length>0?s:void 0,parentAction:a}}function batchResolves(e){return e.batch.approvalRequestIds.length===0||e.batch.approvalRequestIds.every(t=>{let n=e.entries.get(t);return n===void 0||!sameBatch(n,e)||e.responseIds.has(t)})}function sameBatch(e,t){return e.childContinuationToken===t.childContinuationToken&&e.batch?.requestIds.length===t.batch.requestIds.length&&e.batch.requestIds.every((e,n)=>e===t.batch.requestIds[n])}function toChildInputResponse(e,t){return t.childRequestId===void 0?e:{...e,requestId:t.childRequestId}}export{emitProxiedInputRequest,routeDeliverPayload};