UNPKG

eve

Version:

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

1 lines 1.98 kB
import"#client/eve-agent-projection.js";import{createSubmissionId,summarizeUserContent}from"#client/eve-agent-store-helpers.js";var OptimisticMessageSubmissions=class{#e;#t;#n=[];constructor(e,t){this.#t=e,this.#e=t}reset(){this.#n=[]}submit(e,t){if(e.message===void 0)return;let n={createdAt:Date.now(),eventStartIndex:t,id:createSubmissionId(),message:summarizeUserContent(e.message),requiresDeliveryId:!0};return this.#n=[...this.#n,n],this.#e&&this.#t.append({data:{createdAt:n.createdAt,message:n.message,submissionId:n.id},type:`client.message.submitted`}),n.id}apply(e){if(e.type!==`message.received`){this.#t.append(e);return}if(e.data.kind===`execution.background_task`){this.#t.append(e);return}let t=this.#r(e);if(t.length===0){this.#t.append(e);return}return this.#i(t,e,!1)}correlate(e,t,n){if(e===void 0)return;this.#n=this.#n.map(n=>n.id===e?{...n,deliveryId:t,requiresDeliveryId:t!==void 0}:n);let r=this.#n.find(t=>t.id===e);if(r!==void 0)for(let t of n.slice(r.eventStartIndex)){if(t.type!==`message.received`||t.data.kind===`execution.background_task`)continue;let n=this.#r(t);if(n.some(t=>t.id===e))return this.#i(n,t,!0)}}fail(e,t){let n=t===void 0?this.#n[0]:this.#n.find(e=>e.id===t);n!==void 0&&(this.#n=this.#n.filter(e=>e.id!==n.id),this.#t.replace(e=>e.type===`client.message.submitted`&&e.data.submissionId===n.id,{data:{createdAt:n.createdAt,error:{message:e.message},message:n.message,submissionId:n.id},type:`client.message.failed`}))}failAll(e){for(let t of this.#n)this.fail(e,t.id)}#r(e){return this.#n.filter(t=>t.deliveryId===void 0?!t.requiresDeliveryId:e.meta.deliveryIds?.includes(t.deliveryId)===!0)}#i(e,t,n){let r=e.map(e=>e.id),i=new Set(r);return this.#n=this.#n.filter(e=>!i.has(e.id)),n||this.#t.replace(e=>e.type===`client.message.submitted`&&e.data.submissionId===r[0],t),this.#t.remove(e=>e.type===`client.message.submitted`&&i.has(e.data.submissionId)),{alreadyProjected:n,event:t,ids:r}}};export{OptimisticMessageSubmissions};