eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.94 kB
JavaScript
import{ActivityObserverKey,ActivityPendingBlockersKey,ActivityRootTurnIdKey,TurnTaskDeliveryKey}from"#context/keys.js";import{deriveRootTurnActivityWorkId}from"#execution/activity-work-id.js";import{projectActivityEvents}from"#execution/activity-events.js";import{submitActivity}from"#execution/submit-activity.js";async function observeSessionActivity(e){let t=e.ctx.get(ActivityObserverKey);if(t===void 0)return;let n=e.ctx.get(TurnTaskDeliveryKey);(t.workIdentity!==void 0||e.ctx.get(ActivityRootTurnIdKey)!==void 0||n!==`pending`&&n!==`settled`)&&await submitActivity({events:projectSessionActivity({event:e.event,rootTurnId:e.ctx.get(ActivityRootTurnIdKey),sessionId:e.sessionId,suppressRootSettlement:n===`initiating`||n===`pending`||(e.ctx.get(ActivityPendingBlockersKey)?.length??0)>0,workIdentity:t.workIdentity}),sink:t.sink})}function projectSessionActivity(e){let t=workFor(e);if(t===void 0)return[];let n=[];return(t.kind===`root-turn`&&e.event.type===`turn.started`||t.kind!==`root-turn`&&(e.event.type===`session.started`||e.event.type===`turn.started`))&&n.push({eventId:`${t.id}:started`,kind:`work.started`,startedAt:e.event.meta.at,work:t}),e.suppressRootSettlement===!0&&t.kind===`root-turn`&&(e.event.type===`turn.completed`||e.event.type===`turn.failed`||e.event.type===`turn.cancelled`)||n.push(...projectActivityEvents({at:e.event.meta.at,event:e.event,eventId:e.event.meta.id,lineage:t})),n}function workFor(e){let t=eventTurnId(e.event);if(e.workIdentity!==void 0)return{...e.workIdentity,sessionId:e.sessionId,turnId:t??e.workIdentity.turnId};if(t===void 0)return;let n=e.rootTurnId??t;return{id:deriveRootTurnActivityWorkId({sessionId:e.sessionId,turnId:n}),kind:`root-turn`,rootSessionId:e.sessionId,rootTurnId:n,sessionId:e.sessionId,turnId:t}}function eventTurnId(e){if(`data`in e&&`turnId`in e.data&&typeof e.data.turnId==`string`)return e.data.turnId}export{observeSessionActivity,projectSessionActivity};