eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.26 kB
JavaScript
import{createFrameworkUserMessage}from"#harness/messages.js";const ANNOUNCEMENT_KINDS={availableSkills:`context.state`,deliveryInstruction:`context.instruction`,taskState:`context.state`};function createCurrentMessages(e,t={}){let n=[...e],r={...t.historyState},i=[],a=[],o=new Set(t.currentTurnMessages),s;for(let n of t.projectedMessages??e)s===void 0&&o.has(n)&&(s=a.length),n.role===`system`?i.push(n):a.push(n);let c=s??a.length,l=e.findIndex(e=>o.has(e)),u=l===-1?e.length:l,d=s!==void 0||!hasTailApprovalResponse(a);function add(e,t,{cacheFriendly:r=!0}={}){if(r&&d){let r=createFrameworkUserMessage(t,e);return a.splice(c,0,r),n.splice(u,0,r),c+=1,u+=1,!0}return i.push({role:`system`,content:e}),!1}return{add,addAnnouncements(e){for(let t of[`availableSkills`,`taskState`,`deliveryInstruction`]){let n=e[t];n!==void 0&&n.length!==0&&r[t]!==n&&add(n,ANNOUNCEMENT_KINDS[t])&&(r[t]=n)}},addSystem(e){i.push(...Array.isArray(e)?e:[e])},get nonSystemMessages(){return[...a]},get history(){return[...n]},get historyState(){return{...r}},get systemMessages(){return[...i]}}}function hasTailApprovalResponse(e){let t=e.at(-1);return t?.role===`tool`&&t.content.some(e=>e.type===`tool-approval-response`)}export{createCurrentMessages,hasTailApprovalResponse};