UNPKG

eve

Version:

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

1 lines 4.27 kB
import{createInputRequestedEvent}from"#protocol/message.js";import{resolveTextToResponse}from"#channel/resolve-text.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),routable=(t,n)=>n!==void 0&&e.allowRoute?.(t,n)!==!1,n=resolveMessageAgainstQuestions({enabled:e.resolveMessage===!0,entries:t,payload:e.payload,routable}),r=[...e.payload.inputResponses??[],...n.responses],i=new Map,a=[],o,bucketFor=e=>{let t=[e.childContinuationToken,e.childSessionInbox?.sessionId??``,e.childResponseUrl??`local`,e.taskId??``].join(`\0`),n=i.get(t);if(n!==void 0)return n;let r={childContinuationToken:e.childContinuationToken,dismissedRequestIds:[],parentRequestIds:[],responses:[],routes:[],...e.childSessionInbox!==void 0&&{childSessionInbox:e.childSessionInbox},...e.answerHook!==void 0&&{answerHook:e.answerHook},...e.childResponseUrl!==void 0&&{childResponseUrl:e.childResponseUrl},...e.taskId!==void 0&&{taskId:e.taskId}};return i.set(t,r),r},s=new Set;for(let e of r){let n=t.get(e.requestId);if(n===void 0||!routable(e.requestId,n)){a.push(e);continue}if(s.has(e.requestId))continue;s.add(e.requestId),n.kind===`session-limit`&&e.optionId===SESSION_LIMIT_STOP_OPTION_ID&&(o={kind:`cancel-turn`});let r=bucketFor(n);r.parentRequestIds.push(e.requestId),r.responses.push(toChildInputResponse(e,n)),r.routes.push(n)}for(let e of n.dismissedRequestIds){let n=t.get(e);n!==void 0&&bucketFor(n).dismissedRequestIds.push(e)}let c=[...i.values()].map(({answerHook:e,childContinuationToken:n,childSessionInbox:r,childResponseUrl:i,dismissedRequestIds:a,parentRequestIds:o,responses:s,routes:c,taskId:l})=>{let u=new Set(o),d=new Set([...u,...a]);for(let e of c)if(e.batch!==void 0&&batchResolves({batch:e.batch,childContinuationToken:n,entries:t,responseIds:u}))for(let t of e.batch.requestIds)d.add(t);return{childContinuationToken:n,payload:{inputResponses:s},retireRequestIds:[...d],...a.length>0&&{dismissedRequestIds:a},...r!==void 0&&{childSessionInbox:r},...e!==void 0&&{answerHook:e},...i!==void 0&&{childResponseUrl:i},...l!==void 0&&{taskId:l}}}),l={};for(let[t,r]of Object.entries(e.payload))t!==`inputResponses`&&r!==void 0&&(t===`message`&&n.consumed||(l[t]=r));return a.length>0&&(l.inputResponses=a),{forChildren:c,forSelf:Object.keys(l).length>0?l:void 0,parentAction:o}}function resolveMessageAgainstQuestions(e){let t={consumed:!1,dismissedRequestIds:[],responses:[]};if(!e.enabled||(e.payload.inputResponses?.length??0)>0||e.payload.message===void 0)return t;let n=[...e.entries].filter(([t,n])=>n.kind===`question`&&e.routable(t,n)),r=n.flatMap(([e,t])=>{let n=t.answerHook?.question;return n===void 0?[]:[{requestId:e,...n}]});if(r.length===0)return t;let[i]=r,a=n.length===1&&i!==void 0&&typeof e.payload.message==`string`?resolveTextToResponse(e.payload.message,i):void 0;return a===void 0?{consumed:!1,dismissedRequestIds:r.filter(e=>e.dismissible===!0).map(e=>e.requestId),responses:[]}:{consumed:!0,dismissedRequestIds:[],responses:[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};