eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.95 kB
JavaScript
import{AGENT_HANDLES_STATE_KEY}from"#subagents/handles/state-key.js";function readAgentHandles(e){let t=e?.[AGENT_HANDLES_STATE_KEY];if(t===void 0)return[];let n=t.handles;return Array.isArray(n)?n:[]}function mergeTaskOwnedAgentHandlesIntoTurnState(e){let t=new Map(readAgentHandles(e.baseState).map(e=>[e.identity.id,e])),n=new Map(readAgentHandles(e.driverState).map(e=>[e.identity.id,e])),r=new Set([...t.keys(),...n.keys()]);for(let e of r)handlesEqual(t.get(e),n.get(e))&&r.delete(e);if(r.size===0)return e.turnState;let i=[];for(let a of readAgentHandles(e.turnState)){if(!r.has(a.identity.id)){i.push(a);continue}let e=n.get(a.identity.id);if(!handlesEqual(a,t.get(a.identity.id))&&!handlesEqual(a,e))throw Error(`Agent handle "${a.identity.id}" changed ownership while its turn was running.`);e!==void 0&&i.push(e),r.delete(a.identity.id)}for(let e of r){let t=n.get(e);t!==void 0&&i.push(t)}return{...e.turnState,[AGENT_HANDLES_STATE_KEY]:{handles:i}}}function handlesEqual(e,t){if(e===t)return!0;if(e===void 0||t===void 0)return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>valuesEqual(Reflect.get(e,n),Reflect.get(t,n)))}function valuesEqual(e,t){if(e===t)return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>valuesEqual(Reflect.get(e,n),Reflect.get(t,n)))}function findRunningAgentHandle(e,t){return readAgentHandles(e).find(e=>e.phase===`running`&&e.operation.callId===t.callId)}function isResultBoundToRunningHandle(e,t){return t.kind!==`subagent-result`||t.origin===`dispatch`||t.backgroundTask!==void 0||findRunningAgentHandle(e,{callId:t.callId})!==void 0}function isInboxSubagentResultFromRunningHandle(e,t){return findRunningAgentHandle(e,{callId:t.callId})!==void 0}export{findRunningAgentHandle,isInboxSubagentResultFromRunningHandle,isResultBoundToRunningHandle,mergeTaskOwnedAgentHandlesIntoTurnState};