eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.63 kB
JavaScript
const SERIALIZED_INSTRUMENTATION_STATE_KEYS={activeChannelDeliveries:`eve.activeChannelDeliveries`,actionScopes:`eve.harness.instrumentationActionScopes`,inputScopes:`eve.harness.instrumentationInputScopes`,providerState:`eve.harness.instrumentationState`},SERIALIZED_AGENT_TRACE_STATE_KEY=`eve.harness.agentTrace`;function preserveSerializedInstrumentationState(e,t){let n=e;for(let e of Object.values(SERIALIZED_INSTRUMENTATION_STATE_KEYS)){let r=t[e];r!==void 0&&(n={...n,[e]:r})}return n}function preserveSerializedBackgroundTaskObservabilityState(e,t,n){let r=new Set(n.map(e=>e.taskId)),i=asRecord(t[SERIALIZED_INSTRUMENTATION_STATE_KEYS.actionScopes]),a=Object.fromEntries(Object.entries(i).filter(([,e])=>{let t=asRecord(e);return typeof t.taskId==`string`&&r.has(t.taskId)})),o=new Set(Object.keys(a));if(o.size===0)return e;let s=mergeSerializedRecord(e,SERIALIZED_INSTRUMENTATION_STATE_KEYS.actionScopes,a),c=Object.fromEntries(Object.entries(asRecord(t[SERIALIZED_INSTRUMENTATION_STATE_KEYS.providerState])).filter(([e])=>{let t=e.indexOf(`\0`);return t>=0&&o.has(e.slice(t+1))}));s=mergeSerializedRecord(s,SERIALIZED_INSTRUMENTATION_STATE_KEYS.providerState,c);let l=asRecord(t[SERIALIZED_AGENT_TRACE_STATE_KEY]),u=selectEntries(l.actionAnchors,o),d=Object.fromEntries(Object.entries(asRecord(l.actions)).filter(([e])=>o.has(e))),f=new Set;for(let e of[...Object.values(u),...Object.values(d)]){let t=asRecord(e).callId;typeof t==`string`&&f.add(t)}let p=selectOwnedInvocations(l.invocations,o,f);if(Object.keys(u).length===0&&Object.keys(d).length===0&&Object.keys(p).length===0)return s;let m=asRecord(e[SERIALIZED_AGENT_TRACE_STATE_KEY]);return{...s,[SERIALIZED_AGENT_TRACE_STATE_KEY]:{actionAnchors:{...asRecord(m.actionAnchors),...u},actions:{...asRecord(m.actions),...d},invocations:{...asRecord(m.invocations),...p},sessions:asRecord(m.sessions),turns:asRecord(m.turns)}}}function selectEntries(e,t){return Object.fromEntries(Object.entries(asRecord(e)).filter(([e])=>t.has(e)))}function selectOwnedInvocations(e,t,n){let r=Object.entries(asRecord(e)),i={},a=!0;for(;a;){a=!1;for(let e=r.length-1;e>=0;e--){let[o,s]=r[e],c=asRecord(s),l=c.parentActionCallId;if(!t.has(o)&&!(typeof l==`string`&&n.has(l)))continue;i[o]=s;let u=c.callId;typeof u==`string`&&n.add(u),r.splice(e,1),a=!0}}return i}function mergeSerializedRecord(e,t,n){return Object.keys(n).length===0?e:{...e,[t]:{...asRecord(e[t]),...n}}}function asRecord(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}export{SERIALIZED_INSTRUMENTATION_STATE_KEYS,preserveSerializedBackgroundTaskObservabilityState,preserveSerializedInstrumentationState};