@roll-agent/runtime 0.25.1 → 0.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash as e}from"node:crypto";import{z as n}from"zod";import{TOOL_OUTCOME_KINDS as t}from"../tool-bridge/normalize-result.js";export const COMPACTION_SEMANTIC_STATE_VERSION=1;export const COMPACTION_PROVENANCE_KINDS=["message","tool_execution","resource","running_session","legacy_snapshot"];export const COMPACTION_SEMANTIC_ITEM_KINDS=["goal","constraint","decision","completed_work","pending_work","resource","running_session","uncertainty"];const o=["goal","constraint","pending_work","uncertainty","decision","resource","completed_work"],r=/^semantic_(?:goal|constraint|decision|completed_work|pending_work|resource|running_session|uncertainty)_[0-9a-f]{24}$/u,s=1024,i=1024,a=8,c=8,u=512,d=64,m=128,p=128,l=128,g=256,I=128,v=128,S=131072,h=12e3,f=512,y=16,_=16e3,x=512,k=32;export const legacyCompactionTranscriptFragmentsSchema=n.array(n.string().trim().min(1).max(u)).max(v).readonly();export const compactionSemanticItemIdSchema=n.string().regex(r).brand();export const compactionProvenanceRefSchema=n.object({kind:n.enum(COMPACTION_PROVENANCE_KINDS),messageSequence:n.number().int().nonnegative().nullable(),toolExecutionId:n.string().uuid().nullable(),resourceKey:n.string().trim().min(1).nullable(),managerInstanceId:n.string().uuid().nullable(),sessionId:n.number().int().nonnegative().nullable(),checkpointId:n.string().uuid().nullable().default(null),snapshotIndex:n.number().int().nonnegative().nullable().default(null)}).strict().superRefine((e,t)=>{const o=["messageSequence","toolExecutionId","resourceKey","managerInstanceId","sessionId","checkpointId","snapshotIndex"],r=new Set({message:["messageSequence"],tool_execution:["toolExecutionId"],resource:["resourceKey"],running_session:["managerInstanceId","sessionId"],legacy_snapshot:["checkpointId","snapshotIndex"]}[e.kind]);for(const s of o){const o=e[s];(r.has(s)?null===o:null!==o)&&t.addIssue({code:n.ZodIssueCode.custom,message:`${s} must be ${r.has(s)?"non-null":"null"} for ${e.kind}`,path:[s]})}}).readonly();const C={priorItemId:n.string().trim().min(1).max(128).nullable(),text:n.string().trim().min(1).max(s),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8),sourceQuotes:n.array(n.string().trim().min(1).max(u)).min(1).max(8)},w=n.object(C).strict().readonly(),b={priorItemId:n.string().trim().min(1).max(128).nullable(),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8)},E=n.object(b).strict().readonly(),$={priorItemId:n.string().trim().min(1).max(128).nullable(),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8)},N=n.object($).strict().readonly(),M=n.object({targetItemId:n.string().trim().min(1).max(128),targetCategory:n.enum(["constraint","decision","pending_work","uncertainty"]),action:n.enum(["cancel","supersede","clarify","revoke"]),reason:n.string().trim().min(1).max(i),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8),sourceQuotes:n.array(n.string().trim().min(1).max(u)).min(1).max(8)}).strict().readonly(),K=n.object({evidenceId:n.string().trim().min(1).max(128),disposition:n.enum(["irrelevant","uncertain"]),reason:n.string().trim().min(1).max(i)}).strict().readonly();export const compactionModelDraftSchema=n.object({startsNewGoalScope:n.boolean(),goal:w.nullable(),constraints:n.array(w).max(m),decisions:n.array(w).max(d),completedWork:n.array(w).max(p),pendingWork:n.array(w).max(l),resources:n.array(E).max(g),runningSessions:n.array(N).max(I),uncertainties:n.array(w).max(v),resolutions:n.array(M).max(256),evidenceReviews:n.array(K).max(512)}).strict().readonly();export function createEmptyCompactionModelDraft(){return compactionModelDraftSchema.parse({startsNewGoalScope:!1,goal:null,constraints:[],decisions:[],completedWork:[],pendingWork:[],resources:[],runningSessions:[],uncertainties:[],resolutions:[],evidenceReviews:[]})}const Q={id:compactionSemanticItemIdSchema,text:n.string().trim().min(1).max(s),provenance:n.array(compactionProvenanceRefSchema).min(1).max(8),sourceQuotes:n.array(n.string().trim().min(1).max(u)).max(8).default([])},q=n.object(Q).strict().readonly(),R={id:compactionSemanticItemIdSchema,resourceKey:n.string().trim().min(1).max(s),provenance:n.array(compactionProvenanceRefSchema).min(1).max(8)},W=n.object(R).strict().readonly(),j={id:compactionSemanticItemIdSchema,managerInstanceId:n.string().uuid(),sessionId:n.number().int().nonnegative(),provenance:n.array(compactionProvenanceRefSchema).min(1).max(8)},O=n.object(j).strict().readonly(),P=n.object({constraint:n.number().int().nonnegative().default(0),decision:n.number().int().nonnegative(),completed_work:n.number().int().nonnegative(),pending_work:n.number().int().nonnegative(),resource:n.number().int().nonnegative(),running_session:n.number().int().nonnegative(),uncertainty:n.number().int().nonnegative()}).strict().readonly(),T=Object.freeze({constraint:0,decision:0,completed_work:0,pending_work:0,resource:0,running_session:0,uncertainty:0});export const compactionSemanticStateSchema=n.object({version:n.literal(1),goal:q.nullable(),constraints:n.array(q).max(m).default([]),decisions:n.array(q).max(d),completedWork:n.array(q).max(p),pendingWork:n.array(q).max(l),resources:n.array(W).max(g),runningSessions:n.array(O).max(I),uncertainties:n.array(q).max(v),prunedItemCounts:P.default(T)}).strict().superRefine((e,t)=>{const o=new Set,r=[...null===e.goal?[]:[["goal",e.goal.id]],...e.constraints.map(e=>["constraint",e.id]),...e.decisions.map(e=>["decision",e.id]),...e.completedWork.map(e=>["completed_work",e.id]),...e.pendingWork.map(e=>["pending_work",e.id]),...e.resources.map(e=>["resource",e.id]),...e.runningSessions.map(e=>["running_session",e.id]),...e.uncertainties.map(e=>["uncertainty",e.id])];for(const[e,s]of r)s.startsWith(`semantic_${e}_`)||t.addIssue({code:n.ZodIssueCode.custom,message:`semantic item ID does not match category ${e}`}),o.has(s)&&t.addIssue({code:n.ZodIssueCode.custom,message:`duplicate semantic item ID: ${s}`}),o.add(s)}).readonly();const A=n.object({itemId:compactionSemanticItemIdSchema,category:n.enum(COMPACTION_SEMANTIC_ITEM_KINDS),text:n.string().trim().min(1).max(x),sourceQuotes:n.array(n.string().trim().min(1).max(u)).max(8)}).strict().readonly(),D=n.object({goal:n.number().int().nonnegative(),constraint:n.number().int().nonnegative(),decision:n.number().int().nonnegative(),completed_work:n.number().int().nonnegative(),pending_work:n.number().int().nonnegative(),resource:n.number().int().nonnegative(),running_session:n.number().int().nonnegative(),uncertainty:n.number().int().nonnegative()}).strict().readonly();export const compactionSemanticReminderProjectionSchema=n.object({version:n.literal(1),items:n.array(A),omittedCounts:D}).strict().readonly();export const COMPACTION_SEMANTIC_REJECTION_REASONS=["unknown_provenance","missing_required_provenance","completed_work_without_success_evidence","resource_not_observed","running_session_not_observed","unknown_resolution_target","resolution_target_category_mismatch","invalid_resolution_action","unsupported_source_quote","unknown_evidence_review"];function z(e){return e.trim().replace(/\s+/gu," ")}function G(e){switch(e.kind){case"message":return`message:${String(e.messageSequence)}`;case"tool_execution":return`tool_execution:${String(e.toolExecutionId)}`;case"resource":return`resource:${String(e.resourceKey)}`;case"running_session":return`running_session:${String(e.managerInstanceId)}:${String(e.sessionId)}`;case"legacy_snapshot":return`legacy_snapshot:${String(e.checkpointId)}:${String(e.snapshotIndex)}`}}function J(n,t,o){const r=[n,z(t),...o.map(G).sort((e,n)=>e.localeCompare(n))].join("\n"),s=e("sha256").update(r).digest("hex").slice(0,24);return compactionSemanticItemIdSchema.parse(`semantic_${n}_${s}`)}function U(n,t){return`evidence_${e("sha256").update(`${n}\n${t}`).digest("hex").slice(0,24)}`}function F(e){return compactionProvenanceRefSchema.parse({kind:e.kind,messageSequence:"message"===e.kind?e.sequence:null,toolExecutionId:"tool_execution"===e.kind?e.executionId:null,resourceKey:"resource"===e.kind?e.resourceKey:null,managerInstanceId:"running_session"===e.kind?e.managerInstanceId:null,sessionId:"running_session"===e.kind?e.sessionId:null,checkpointId:"legacy_snapshot"===e.kind?e.checkpointId:null,snapshotIndex:"legacy_snapshot"===e.kind?e.snapshotIndex:null})}export function buildCompactionSemanticEvidenceRegistry(e){const n=[];for(const t of e.messages){const e=F({kind:"message",sequence:t.sequence});n.push({evidenceId:U("message",String(t.sequence)),summary:pe(t.summary,512),provenance:e,...void 0===t.role?{}:{messageRole:t.role}})}for(const t of e.toolExecutions){const e=F({kind:"tool_execution",executionId:t.id});n.push({evidenceId:U("tool_execution",t.id),summary:pe([`${t.agentName??"agent"}/${t.toolName??"tool"}: ${t.outcome.kind}`,...void 0===t.outcome.executionState?[]:[`executionState=${t.outcome.executionState}`],...void 0===t.inputSummary?[]:[`input=${pe(t.inputSummary,160)}`],...void 0===t.resultSummary?[]:[`result=${pe(t.resultSummary,256)}`]].join("; "),512),provenance:e,toolOutcomeKind:t.outcome.kind,...void 0===t.outcome.executionState?{}:{toolCancellationExecutionState:t.outcome.executionState}})}for(const t of e.resources){const e=F({kind:"resource",resourceKey:t.key});n.push({evidenceId:U("resource",t.key),summary:pe(`${void 0===t.mode?"resource":t.mode}: ${t.key}`,512),provenance:e})}for(const t of e.runningSessions){const e=`${t.managerInstanceId}:${String(t.sessionId)}`,o=F({kind:"running_session",managerInstanceId:t.managerInstanceId,sessionId:t.sessionId});n.push({evidenceId:U("running_session",e),summary:pe(`session ${t.state??"observed"}`,512),provenance:o})}const t=new Map;for(const e of n)t.has(e.evidenceId)||t.set(e.evidenceId,e);return[...t.values()]}function V(e){return e.map(e=>({evidenceId:e.evidenceId,kind:e.provenance.kind,summary:Z(e),...void 0===e.messageRole?{}:{role:e.messageRole},...void 0===e.toolOutcomeKind?{}:{outcome:e.toolOutcomeKind},...void 0===e.toolCancellationExecutionState?{}:{executionState:e.toolCancellationExecutionState}}))}function Z(e){return pe(e.summary,256)}function L(e){if(void 0===e)return[];const n=compactionSemanticStateSchema.parse(e),t=(e,n)=>n.slice(-16).map(n=>({itemId:n.id,category:e,text:pe(n.text,256),sourceQuotes:n.sourceQuotes.map(e=>pe(e,256))}));return[...null===n.goal?[]:[{itemId:n.goal.id,category:"goal",text:pe(n.goal.text,256),sourceQuotes:n.goal.sourceQuotes.map(e=>pe(e,256))}],...t("constraint",n.constraints),...t("pending_work",n.pendingWork),...t("uncertainty",n.uncertainties),...t("decision",n.decisions),...t("completed_work",n.completedWork),...n.resources.slice(-16).map(e=>({itemId:e.id,category:"resource",text:pe(e.resourceKey,256),sourceQuotes:[pe(e.resourceKey,256)]}))]}function B(e,n,t){const o=[],r=[],s=()=>JSON.stringify({previousSemanticItems:o,evidence:r,omittedPreviousItemCount:n.length-o.length,omittedEvidenceCount:e.length-r.length}),i=(e,n)=>(e.push(n),[...s()].length<=t||(e.pop(),!1));let a=0,c=0;void 0!==n[0]&&i(o,n[0])&&(a=1),void 0!==e[0]&&i(r,e[0])&&(c=1);for(const n of e.slice(c)){if(r.length>=k)break;if(!i(r,n))break}for(const e of n.slice(a))if(!i(o,e))break;return{prompt:s(),includedEvidenceIds:r.map(e=>e.evidenceId)}}export function renderCompactionSemanticEvidenceRegistry(e,n=24e3){if(!Number.isInteger(n)||n<1024||n>64e3)throw new Error("maxChars must be an integer between 1024 and 64000");return B(V(e),[],n).prompt}export function buildCompactionSemanticModelContext(e,n,t=24e3){if(!Number.isInteger(t)||t<1024||t>64e3)throw new Error("maxChars must be an integer between 1024 and 64000");return B(V(e),L(n),t)}export function renderCompactionSemanticModelContext(e,n,t=24e3){if(!Number.isInteger(t)||t<1024||t>64e3)throw new Error("maxChars must be an integer between 1024 and 64000");return buildCompactionSemanticModelContext(e,n,t).prompt}function H(e){const n=e=>new Map(e?.map(e=>[e.id,e.text])??[]);return{goal:new Map(null==e?.goal?[]:[[e.goal.id,e.goal.text]]),constraint:n(e?.constraints),decision:n(e?.decisions),completed_work:n(e?.completedWork),pending_work:n(e?.pendingWork),resource:new Map(e?.resources.map(e=>[e.id,e.resourceKey])??[]),running_session:new Map(e?.runningSessions.map(e=>[e.id,`${e.managerInstanceId}:${String(e.sessionId)}`])??[]),uncertainty:n(e?.uncertainties)}}function X(e,n,t,o,r){const s=null===e?void 0:r.get(e);return void 0!==s&&z(s)===z(t)?compactionSemanticItemIdSchema.parse(e):J(n,t,o)}function Y(e){return 1===e.length&&"tool_execution"===e[0]?.provenance.kind&&e[0].toolOutcomeKind===t.success}function ee(e){return 1===e.length&&e.every(e=>"message"===e.provenance.kind&&"user"===e.messageRole)}function ne(e,n){return!!Y(e)&&ie(e,n)}function te(e,n){const t=e.map(e=>e.replace(/^message \d+ (?:user|assistant|system|tool): /u,"")).map(z).join("; ");return pe(void 0===n?t:`${n}: ${t}`,s)}function oe(e){return"tool_execution"===e.provenance.kind&&e.toolOutcomeKind===t.success}function re(e){return[...new Map(e.map(e=>[G(e.provenance),e.provenance])).values()]}export class CompactionSemanticCandidateError extends Error{constructor(e,n){super(e,n),this.name="CompactionSemanticCandidateError"}}function se(e){return"text"in e?JSON.stringify(["text",z(e.text)]):"resourceKey"in e?JSON.stringify(["resource",e.resourceKey]):JSON.stringify(["running_session",e.managerInstanceId,e.sessionId])}export function normalizeCompactionSemanticItems(e){const n=new Map;for(const t of e){const e=n.get(t.id);if(void 0===e){n.set(t.id,t);continue}if(se(e)!==se(t))throw new CompactionSemanticCandidateError(`conflicting semantic item ID: ${t.id}`);const o=[...new Map([...e.provenance,...t.provenance].map(e=>[G(e),e])).values()],r="sourceQuotes"in e&&"sourceQuotes"in t?[...new Set([...e.sourceQuotes,...t.sourceQuotes])]:void 0;if(o.length>8||(r?.length??0)>8)throw new CompactionSemanticCandidateError(`semantic item evidence limit exceeded: ${t.id}`);n.set(t.id,{...e,provenance:o,...void 0===r?{}:{sourceQuotes:r}})}return[...n.values()]}function ie(e,n){const t=e.map(Z);return t.length===n.length&&t.every((e,t)=>e===n[t])}export function validateCompactionModelDraft(e){const n=compactionModelDraftSchema.parse(e.draft),t=void 0===e.previousState?void 0:compactionSemanticStateSchema.parse(e.previousState),o=H(t),r=new Map([...t?.constraints.map(e=>[e.id,"constraint"])??[],...t?.decisions.map(e=>[e.id,"decision"])??[],...t?.pendingWork.map(e=>[e.id,"pending_work"])??[],...t?.uncertainties.map(e=>[e.id,"uncertainty"])??[]]),i=new Map((t?.completedWork??[]).map(e=>[e.id,e])),a=new Map;for(const n of e.evidenceRegistry){const e={...n,provenance:compactionProvenanceRefSchema.parse(n.provenance)};if(a.has(e.evidenceId))throw new Error(`Duplicate compaction evidence ID: ${e.evidenceId}`);a.set(e.evidenceId,e)}const c=void 0===e.presentedEvidenceIds?void 0:new Set(e.presentedEvidenceIds),S=e=>{if(new Set(e).size!==e.length)return;const n=[];for(const t of e){if(void 0!==c&&!c.has(t))return;const e=a.get(t);if(void 0===e)return;n.push(e)}return n},h=[],f=new Set,y=e=>{for(const n of e)f.add(n)},_=(e,n,t,r,s=!1)=>{const a=[];return t.forEach((t,c)=>{const u=r&&null!==t.priorItemId?i.get(t.priorItemId):void 0;if(void 0!==u&&z(t.text)===u.text)return void a.push(u);const d=S(t.sourceEvidenceIds);if(void 0===d)return void h.push({category:e,index:c,reason:"unknown_provenance"});if(!ie(d,t.sourceQuotes))return void h.push({category:e,index:c,reason:"unsupported_source_quote"});if(s&&!ee(d))return void h.push({category:e,index:c,reason:"missing_required_provenance"});if(r&&!ne(d,t.sourceQuotes))return void h.push({category:e,index:c,reason:"completed_work_without_success_evidence"});const m=r?te(t.sourceQuotes,"Successful Tool evidence"):te(t.sourceQuotes);y(t.sourceEvidenceIds),a.push(q.parse({text:m,provenance:re(d),sourceQuotes:[...t.sourceQuotes],id:X(t.priorItemId,n,m,re(d),o[n])}))}),a};let x=null;if(null!==n.goal){const e=S(n.goal.sourceEvidenceIds);if(void 0===e)h.push({category:"goal",index:0,reason:"unknown_provenance"});else if(ee(e))if(ie(e,n.goal.sourceQuotes)){const t=re(e);y(n.goal.sourceEvidenceIds);const r=te(n.goal.sourceQuotes);x=q.parse({text:r,provenance:t,sourceQuotes:[...n.goal.sourceQuotes],id:X(n.goal.priorItemId,"goal",r,t,o.goal)})}else h.push({category:"goal",index:0,reason:"unsupported_source_quote"});else h.push({category:"goal",index:0,reason:"missing_required_provenance"})}const k=e.harnessGoal,C=void 0===k?void 0:F({kind:"message",sequence:k.sourceSequence}),w=void 0===k?void 0:pe(k.verbatimRequest,s),b=void 0===k||void 0===C||void 0===w?null:q.parse({text:w,provenance:[C],sourceQuotes:[pe(k.verbatimRequest,u)],id:X(null,"goal",w,[C],o.goal)});if(void 0!==k&&null==t?.goal)for(const e of a.values())"message"===e.provenance.kind&&e.provenance.messageSequence===k.sourceSequence&&f.add(e.evidenceId);const E=null!=t?.goal&&n.startsNewGoalScope&&null!==x,$=E?x:t?.goal??b??x,N=[];n.resources.forEach((e,n)=>{const t=S(e.sourceEvidenceIds);if(void 0===t)return void h.push({category:"resource",index:n,reason:"unknown_provenance"});const r=t.filter(e=>"resource"===e.provenance.kind),i=r[0]?.provenance.resourceKey;if(1!==r.length||null==i)return void h.push({category:"resource",index:n,reason:"resource_not_observed"});const a=re(t);y(e.sourceEvidenceIds);const c=pe(i,s);N.push(W.parse({resourceKey:c,provenance:a,id:X(e.priorItemId,"resource",c,a,o.resource)}))});const M=new Set(N.map(e=>e.resourceKey));for(const e of a.values()){const n=e.provenance.resourceKey;"resource"!==e.provenance.kind||null===n||M.has(n)||(N.push(W.parse({resourceKey:pe(n,s),provenance:[e.provenance],id:J("resource",pe(n,s),[e.provenance])})),M.add(n))}const K=[];n.runningSessions.forEach((e,n)=>{const t=S(e.sourceEvidenceIds);if(void 0===t)return void h.push({category:"running_session",index:n,reason:"unknown_provenance"});const r=t.filter(e=>"running_session"===e.provenance.kind),s=r[0]?.provenance;if(1!==r.length||null==s?.managerInstanceId||null===s.sessionId)return void h.push({category:"running_session",index:n,reason:"running_session_not_observed"});const i=`${s.managerInstanceId}:${String(s.sessionId)}`,a=re(t);y(e.sourceEvidenceIds),K.push(O.parse({managerInstanceId:s.managerInstanceId,sessionId:s.sessionId,provenance:a,id:X(e.priorItemId,"running_session",i,a,o.running_session)}))});const Q=new Set(K.map(e=>`${e.managerInstanceId}:${String(e.sessionId)}`));for(const e of a.values()){const n=e.provenance;if("running_session"!==n.kind||null===n.managerInstanceId||null===n.sessionId)continue;const t=`${n.managerInstanceId}:${String(n.sessionId)}`;Q.has(t)||(K.push(O.parse({managerInstanceId:n.managerInstanceId,sessionId:n.sessionId,provenance:[n],id:J("running_session",t,[n])})),Q.add(t))}const R=[];n.resolutions.forEach((e,n)=>{const t=r.get(e.targetItemId);if(void 0===t)return void h.push({category:"resolution",index:n,reason:"unknown_resolution_target"});if(t!==e.targetCategory)return void h.push({category:"resolution",index:n,reason:"resolution_target_category_mismatch"});if(!("constraint"===t&&"revoke"===e.action||"decision"===t&&"supersede"===e.action||"pending_work"===t&&"cancel"===e.action||"uncertainty"===t&&"clarify"===e.action))return void h.push({category:"resolution",index:n,reason:"invalid_resolution_action"});const o=S(e.sourceEvidenceIds);if(void 0===o)return void h.push({category:"resolution",index:n,reason:"unknown_provenance"});if(!ie(o,e.sourceQuotes))return void h.push({category:"resolution",index:n,reason:"unsupported_source_quote"});if(!ee(o))return void h.push({category:"resolution",index:n,reason:"missing_required_provenance"});y(e.sourceEvidenceIds);const s=re(o);R.push({targetItemId:compactionSemanticItemIdSchema.parse(e.targetItemId),targetCategory:e.targetCategory,action:e.action,reason:z(e.reason),provenance:s})});const j=_("decision","decision",n.decisions,!1),P=_("constraint","constraint",n.constraints,!1,!0),T=_("completed_work","completed_work",n.completedWork,!0),A=_("pending_work","pending_work",n.pendingWork,!1),D=_("uncertainty","uncertainty",n.uncertainties,!1),G=[],U=(e,n)=>{if(oe(e))return;const t=pe(`${n}: ${e.summary}`,s);G.push(q.parse({id:J("uncertainty",t,[e.provenance]),text:t,provenance:[e.provenance],sourceQuotes:[pe(e.summary,u)]}))};n.evidenceReviews.forEach((e,n)=>{const t=a.get(e.evidenceId);void 0!==t?(f.add(e.evidenceId),"message"!==t.provenance.kind&&"tool_execution"!==t.provenance.kind||"irrelevant"===e.disposition&&"assistant"===t.messageRole||U(t,"uncertain"===e.disposition?"Unresolved evidence":"User or Tool evidence classified as irrelevant")):h.push({category:"evidence_review",index:n,reason:"unknown_evidence_review"})});for(const n of e.presentedEvidenceIds??[]){if(f.has(n))continue;const e=a.get(n);void 0===e||"message"!==e.provenance.kind&&"tool_execution"!==e.provenance.kind||(U(e,"Unclassified evidence"),f.add(n))}const V=ue(normalizeCompactionSemanticItems(P),m),Z=ue(normalizeCompactionSemanticItems(j),d),L=ue(normalizeCompactionSemanticItems(T),p),B=ue(normalizeCompactionSemanticItems(A),l),Y=ue(normalizeCompactionSemanticItems(N),g),se=ue(normalizeCompactionSemanticItems(K),I),ae=ue(normalizeCompactionSemanticItems([...D,...G]),v),ce=compactionSemanticStateSchema.safeParse({version:1,goal:$,constraints:V.items,decisions:Z.items,completedWork:L.items,pendingWork:B.items,resources:Y.items,runningSessions:se.items,uncertainties:ae.items,prunedItemCounts:{constraint:V.prunedCount,decision:Z.prunedCount,completed_work:L.prunedCount,pending_work:B.prunedCount,resource:Y.prunedCount,running_session:se.prunedCount,uncertainty:ae.prunedCount}});if(!ce.success)throw new CompactionSemanticCandidateError("invalid semantic candidate state",{cause:ce.error});return{state:ce.data,resolutions:R,rejections:h,coveredEvidenceIds:[...f],startsNewGoalScope:E}}export function createEmptyCompactionSemanticState(){return compactionSemanticStateSchema.parse({version:1,goal:null,constraints:[],decisions:[],completedWork:[],pendingWork:[],resources:[],runningSessions:[],uncertainties:[],prunedItemCounts:T})}export function seedCompactionSemanticConstraints(e,n){const t=void 0===e?createEmptyCompactionSemanticState():compactionSemanticStateSchema.parse(e),o=ce(n),r=de(t.constraints,o,new Set,m);return me(compactionSemanticStateSchema.parse({...t,constraints:r.items,prunedItemCounts:{...t.prunedItemCounts,constraint:t.prunedItemCounts.constraint+r.prunedCount}}))}function ae(e,n){const t=[];let o="";for(const r of e){if(o.length>0&&o.length+r.length>n){const e=o.trim();e.length>0&&t.push(e),o=r;continue}o+=r}const r=o.trim();return r.length>0&&t.push(r),t}export function seedLegacyCompactionSnapshotUncertainties(e,n){const t=compactionSemanticStateSchema.parse(e),o=n.fragments.flatMap(e=>ae(e,u));if(0===o.length)return{state:t,requiredItemIds:[],transcriptFragments:[],complete:!0};const r=o.map((e,t)=>{const o=F({kind:"legacy_snapshot",checkpointId:n.checkpointId,snapshotIndex:t}),r=pe(`Unverified legacy V1 active snapshot; confirm before acting: ${e}`,s);return q.parse({id:J("uncertainty",r,[o]),text:r,provenance:[o],sourceQuotes:[e]})}),i=de(t.uncertainties,r,new Set,v),a=me(compactionSemanticStateSchema.parse({...t,uncertainties:i.items,prunedItemCounts:{...t.prunedItemCounts,uncertainty:t.prunedItemCounts.uncertainty+i.prunedCount}})),c=new Set(a.uncertainties.map(e=>e.id)),d=r.every(e=>c.has(e.id));return{state:a,requiredItemIds:r.map(e=>e.id),transcriptFragments:d?legacyCompactionTranscriptFragmentsSchema.parse(o):legacyCompactionTranscriptFragmentsSchema.parse([]),complete:d}}function ce(e){return e.map(e=>{const n=F({kind:"message",sequence:e.sourceSequence}),t=pe(e.quote,u);return q.parse({id:J("constraint",t,[n]),text:t,provenance:[n],sourceQuotes:[t]})})}export function replaceCompactionSemanticConstraints(e,n){const t=compactionSemanticStateSchema.parse(e),o=ue(ce(n),m);return me(compactionSemanticStateSchema.parse({...t,constraints:o.items,prunedItemCounts:{...t.prunedItemCounts,constraint:t.prunedItemCounts.constraint+o.prunedCount}}))}export function replaceCompactionSemanticGoal(e,n){const t=compactionSemanticStateSchema.parse(e);if(void 0===n)return me(compactionSemanticStateSchema.parse({...t,goal:null}));const o=F({kind:"message",sequence:n.sourceSequence}),r=pe(n.verbatimRequest,s),i=pe(n.verbatimRequest,u);return me(compactionSemanticStateSchema.parse({...t,goal:q.parse({id:J("goal",r,[o]),text:r,provenance:[o],sourceQuotes:[i]})}))}function ue(e,n){const t=Math.max(0,e.length-n);return{items:0===t?[...e]:e.slice(-n),prunedCount:t}}function de(e,n,t,o){const r=new Map;for(const n of e)t.has(n.id)||r.set(n.id,n);for(const e of n)t.has(e.id)||r.set(e.id,e);return ue([...r.values()],o)}function me(e){const n=compactionSemanticStateSchema.parse(e),t=[...n.constraints],o=[...n.decisions],r=[...n.completedWork],s=[...n.pendingWork],i=[...n.resources],a=[...n.runningSessions],c=[...n.uncertainties],u={...n.prunedItemCounts},d=()=>compactionSemanticStateSchema.parse({...n,constraints:t,decisions:o,completedWork:r,pendingWork:s,resources:i,runningSessions:a,uncertainties:c,prunedItemCounts:u}),m=[{countKey:"completed_work",items:r},{countKey:"resource",items:i},{countKey:"decision",items:o},{countKey:"running_session",items:a},{countKey:"uncertainty",items:c},{countKey:"constraint",items:t},{countKey:"pending_work",items:s}];let p=!0;for(;Buffer.byteLength(JSON.stringify(d()),"utf8")>S;){const e=m.find(({items:e})=>p?e.length>1:e.length>0);if(void 0===e){if(p){p=!1;continue}throw new Error("Compaction semantic state exceeds its aggregate storage budget")}e.items.shift(),u[e.countKey]+=1}return d()}export function mergeCompactionSemanticState(e,n,t){const o=void 0===e?createEmptyCompactionSemanticState():compactionSemanticStateSchema.parse(e),r=compactionSemanticStateSchema.parse(n.state),s=new Set(n.resolutions.filter(e=>"constraint"===e.targetCategory).map(e=>e.targetItemId)),i=new Set(n.resolutions.filter(e=>"decision"===e.targetCategory).map(e=>e.targetItemId)),a=new Set(n.resolutions.filter(e=>"pending_work"===e.targetCategory).map(e=>e.targetItemId)),c=new Set(n.resolutions.filter(e=>"uncertainty"===e.targetCategory).map(e=>e.targetItemId)),u=t.startsNewGoalScope&&n.startsNewGoalScope,I=de(o.constraints,r.constraints,s,m),S=de(o.decisions,r.decisions,i,d),h=de(o.completedWork,r.completedWork,new Set,p),f=de(o.pendingWork,r.pendingWork,a,l),y=de(o.resources,r.resources,new Set,g),_=de(o.uncertainties,r.uncertainties,c,v);return me(compactionSemanticStateSchema.parse({version:1,goal:u||null!==r.goal?r.goal:o.goal,constraints:I.items,decisions:S.items,completedWork:h.items,pendingWork:f.items,resources:y.items,runningSessions:r.runningSessions.slice(-128),uncertainties:_.items,prunedItemCounts:{constraint:o.prunedItemCounts.constraint+r.prunedItemCounts.constraint+I.prunedCount,decision:o.prunedItemCounts.decision+r.prunedItemCounts.decision+S.prunedCount,completed_work:o.prunedItemCounts.completed_work+r.prunedItemCounts.completed_work+h.prunedCount,pending_work:o.prunedItemCounts.pending_work+r.prunedItemCounts.pending_work+f.prunedCount,resource:o.prunedItemCounts.resource+r.prunedItemCounts.resource+y.prunedCount,running_session:o.prunedItemCounts.running_session+r.prunedItemCounts.running_session,uncertainty:o.prunedItemCounts.uncertainty+r.prunedItemCounts.uncertainty+_.prunedCount}}))}function pe(e,n){const t=z(e),o=[...t];return o.length<=n?t:`${o.slice(0,Math.max(0,n-1)).join("")}…`}function le(e){const n=(e,n)=>n.map(n=>({itemId:n.id,category:e,text:pe(n.text,x),sourceQuotes:n.sourceQuotes.map(e=>pe(e,u))}));return[...null===e.goal?[]:[{itemId:e.goal.id,category:"goal",text:pe(e.goal.text,x),sourceQuotes:e.goal.sourceQuotes.map(e=>pe(e,u))}],...n("constraint",e.constraints),...n("pending_work",e.pendingWork),...n("uncertainty",e.uncertainties),...n("decision",e.decisions),...e.resources.map(e=>({itemId:e.id,category:"resource",text:pe(e.resourceKey,x),sourceQuotes:[pe(e.resourceKey,u)]})),...n("completed_work",e.completedWork)]}export function createCompactionSemanticReminderProjection(e,n=16e3){if(!Number.isInteger(n)||n<1024||n>32e3)throw new Error("maxChars must be an integer between 1024 and 32000");const t=compactionSemanticStateSchema.parse(e),r=o,s=le(t),i=new Map(r.map(e=>[e,s.filter(n=>n.category===e)])),a=[],c=()=>{const e=new Map(r.map(e=>[e,a.filter(n=>n.category===e).length]));return compactionSemanticReminderProjectionSchema.parse({version:1,items:a,omittedCounts:{goal:(i.get("goal")?.length??0)-(e.get("goal")??0),constraint:t.prunedItemCounts.constraint+(i.get("constraint")?.length??0)-(e.get("constraint")??0),decision:t.prunedItemCounts.decision+(i.get("decision")?.length??0)-(e.get("decision")??0),completed_work:t.prunedItemCounts.completed_work+(i.get("completed_work")?.length??0)-(e.get("completed_work")??0),pending_work:t.prunedItemCounts.pending_work+(i.get("pending_work")?.length??0)-(e.get("pending_work")??0),resource:t.prunedItemCounts.resource+(i.get("resource")?.length??0)-(e.get("resource")??0),running_session:t.prunedItemCounts.running_session+t.runningSessions.length,uncertainty:t.prunedItemCounts.uncertainty+(i.get("uncertainty")?.length??0)-(e.get("uncertainty")??0)}})},u=Math.max(0,...[...i.values()].map(e=>e.length));for(let e=0;e<u;e+=1)for(const t of r){const o=(i.get(t)??[]).at(-(e+1));void 0!==o&&(a.push(o),JSON.stringify(c()).length>n&&a.pop())}const d=c();if(JSON.stringify(d).length>n)throw new Error("Unable to create bounded semantic reminder projection");return d}export function renderCompactionSemanticSummary(e,n=12e3){if(!Number.isInteger(n)||n<1024||n>32e3)throw new Error("maxChars must be an integer between 1024 and 32000");const t=createCompactionSemanticReminderProjection(compactionSemanticStateSchema.parse(e),n),r={goal:"Goal",constraint:"Active constraints",pending_work:"Pending work",uncertainty:"Uncertainties",decision:"Decisions",resource:"Resources",completed_work:"Completed work"},s=t.omittedCounts,i=["Evidence-grounded structured compaction state:","Each semantic item is a classification; its source quote is the authoritative wording."];for(const e of o){i.push(`${r[e]}:`);const n=t.items.filter(n=>n.category===e);0===n.length?i.push("- (none retained in prompt projection)"):i.push(...n.map(e=>{const n=e.sourceQuotes.map(e=>pe(e,f)).join(" | ");return`- [${e.itemId}] interpretation=${pe(e.text,f)}; source=${n}`})),s[e]>0&&i.push(`- … ${String(s[e])} item(s) omitted; use transcript evidence`)}const a="\n… summary truncated",c=n-[...a].length,u=[];for(const e of i){if([...[...u,e].join("\n")].length>c)break;u.push(e)}const d=u.join("\n");return u.length===i.length?d:`${d}${a}`}
|
|
1
|
+
import{createHash as e}from"node:crypto";import{z as n}from"zod";import{TOOL_OUTCOME_KINDS as t}from"../tool-bridge/normalize-result.js";export const COMPACTION_SEMANTIC_STATE_VERSION=1;export const COMPACTION_PROVENANCE_KINDS=["message","tool_execution","resource","running_session","legacy_snapshot"];export const COMPACTION_SEMANTIC_ITEM_KINDS=["goal","constraint","decision","completed_work","pending_work","resource","running_session","uncertainty"];const o=["goal","constraint","pending_work","uncertainty","decision","resource","completed_work"],r=/^semantic_(?:goal|constraint|decision|completed_work|pending_work|resource|running_session|uncertainty)_[0-9a-f]{24}$/u,s=1024,i=1024,a=8,c=8,u=512,d=64,m=128,p=128,l=128,g=256,I=128,v=128,S=131072,f=12e3,h=512,y=16,_=16e3,x=512,k=32;export const legacyCompactionTranscriptFragmentsSchema=n.array(n.string().trim().min(1).max(u)).max(v).readonly();export const compactionSemanticItemIdSchema=n.string().regex(r).brand();export const compactionProvenanceRefSchema=n.object({kind:n.enum(COMPACTION_PROVENANCE_KINDS),messageSequence:n.number().int().nonnegative().nullable(),toolExecutionId:n.string().uuid().nullable(),resourceKey:n.string().trim().min(1).nullable(),managerInstanceId:n.string().uuid().nullable(),sessionId:n.number().int().nonnegative().nullable(),checkpointId:n.string().uuid().nullable().default(null),snapshotIndex:n.number().int().nonnegative().nullable().default(null)}).strict().superRefine((e,t)=>{const o=["messageSequence","toolExecutionId","resourceKey","managerInstanceId","sessionId","checkpointId","snapshotIndex"],r=new Set({message:["messageSequence"],tool_execution:["toolExecutionId"],resource:["resourceKey"],running_session:["managerInstanceId","sessionId"],legacy_snapshot:["checkpointId","snapshotIndex"]}[e.kind]);for(const s of o){const o=e[s];(r.has(s)?null===o:null!==o)&&t.addIssue({code:n.ZodIssueCode.custom,message:`${s} must be ${r.has(s)?"non-null":"null"} for ${e.kind}`,path:[s]})}}).readonly();const C={priorItemId:n.string().trim().min(1).max(128).nullable(),text:n.string().trim().min(1).max(s),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8),sourceQuotes:n.array(n.string().trim().min(1).max(u)).min(1).max(8)},w=n.object(C).strict().readonly(),b={priorItemId:n.string().trim().min(1).max(128).nullable(),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8)},E=n.object(b).strict().readonly(),$={priorItemId:n.string().trim().min(1).max(128).nullable(),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8)},N=n.object($).strict().readonly(),K=n.object({targetItemId:n.string().trim().min(1).max(128),targetCategory:n.enum(["constraint","decision","pending_work","uncertainty"]),action:n.enum(["cancel","supersede","clarify","revoke"]),reason:n.string().trim().min(1).max(i),sourceEvidenceIds:n.array(n.string().trim().min(1).max(128)).min(1).max(8),sourceQuotes:n.array(n.string().trim().min(1).max(u)).min(1).max(8)}).strict().readonly(),M=n.object({evidenceId:n.string().trim().min(1).max(128),disposition:n.enum(["irrelevant","uncertain"]),reason:n.string().trim().min(1).max(i)}).strict().readonly();export const compactionModelDraftSchema=n.object({startsNewGoalScope:n.boolean(),goal:w.nullable(),constraints:n.array(w).max(m),decisions:n.array(w).max(d),completedWork:n.array(w).max(p),pendingWork:n.array(w).max(l),resources:n.array(E).max(g),runningSessions:n.array(N).max(I),uncertainties:n.array(w).max(v),resolutions:n.array(K).max(256),evidenceReviews:n.array(M).max(512)}).strict().readonly();export function createEmptyCompactionModelDraft(){return compactionModelDraftSchema.parse({startsNewGoalScope:!1,goal:null,constraints:[],decisions:[],completedWork:[],pendingWork:[],resources:[],runningSessions:[],uncertainties:[],resolutions:[],evidenceReviews:[]})}const Q={id:compactionSemanticItemIdSchema,text:n.string().trim().min(1).max(s),provenance:n.array(compactionProvenanceRefSchema).min(1).max(8),sourceQuotes:n.array(n.string().trim().min(1).max(u)).max(8).default([])},q=n.object(Q).strict().readonly(),R={id:compactionSemanticItemIdSchema,resourceKey:n.string().trim().min(1).max(s),provenance:n.array(compactionProvenanceRefSchema).min(1).max(8)},W=n.object(R).strict().readonly(),j={id:compactionSemanticItemIdSchema,managerInstanceId:n.string().uuid(),sessionId:n.number().int().nonnegative(),provenance:n.array(compactionProvenanceRefSchema).min(1).max(8)},O=n.object(j).strict().readonly(),P=n.object({constraint:n.number().int().nonnegative().default(0),decision:n.number().int().nonnegative(),completed_work:n.number().int().nonnegative(),pending_work:n.number().int().nonnegative(),resource:n.number().int().nonnegative(),running_session:n.number().int().nonnegative(),uncertainty:n.number().int().nonnegative()}).strict().readonly(),T=Object.freeze({constraint:0,decision:0,completed_work:0,pending_work:0,resource:0,running_session:0,uncertainty:0});export const compactionSemanticStateSchema=n.object({version:n.literal(1),goal:q.nullable(),constraints:n.array(q).max(m).default([]),decisions:n.array(q).max(d),completedWork:n.array(q).max(p),pendingWork:n.array(q).max(l),resources:n.array(W).max(g),runningSessions:n.array(O).max(I),uncertainties:n.array(q).max(v),prunedItemCounts:P.default(T)}).strict().superRefine((e,t)=>{const o=new Set,r=[...null===e.goal?[]:[["goal",e.goal.id]],...e.constraints.map(e=>["constraint",e.id]),...e.decisions.map(e=>["decision",e.id]),...e.completedWork.map(e=>["completed_work",e.id]),...e.pendingWork.map(e=>["pending_work",e.id]),...e.resources.map(e=>["resource",e.id]),...e.runningSessions.map(e=>["running_session",e.id]),...e.uncertainties.map(e=>["uncertainty",e.id])];for(const[e,s]of r)s.startsWith(`semantic_${e}_`)||t.addIssue({code:n.ZodIssueCode.custom,message:`semantic item ID does not match category ${e}`}),o.has(s)&&t.addIssue({code:n.ZodIssueCode.custom,message:`duplicate semantic item ID: ${s}`}),o.add(s)}).readonly();const A=n.object({itemId:compactionSemanticItemIdSchema,category:n.enum(COMPACTION_SEMANTIC_ITEM_KINDS),text:n.string().trim().min(1).max(x),sourceQuotes:n.array(n.string().trim().min(1).max(u)).max(8)}).strict().readonly(),D=n.object({goal:n.number().int().nonnegative(),constraint:n.number().int().nonnegative(),decision:n.number().int().nonnegative(),completed_work:n.number().int().nonnegative(),pending_work:n.number().int().nonnegative(),resource:n.number().int().nonnegative(),running_session:n.number().int().nonnegative(),uncertainty:n.number().int().nonnegative()}).strict().readonly();export const compactionSemanticReminderProjectionSchema=n.object({version:n.literal(1),items:n.array(A),omittedCounts:D}).strict().readonly();export const COMPACTION_SEMANTIC_REJECTION_REASONS=["unknown_provenance","missing_required_provenance","completed_work_without_success_evidence","resource_not_observed","running_session_not_observed","unknown_resolution_target","resolution_target_category_mismatch","invalid_resolution_action","unsupported_source_quote","unknown_evidence_review"];function z(e){return e.trim().replace(/\s+/gu," ")}function G(e){switch(e.kind){case"message":return`message:${String(e.messageSequence)}`;case"tool_execution":return`tool_execution:${String(e.toolExecutionId)}`;case"resource":return`resource:${String(e.resourceKey)}`;case"running_session":return`running_session:${String(e.managerInstanceId)}:${String(e.sessionId)}`;case"legacy_snapshot":return`legacy_snapshot:${String(e.checkpointId)}:${String(e.snapshotIndex)}`}}function J(n,t,o){const r=[n,z(t),...o.map(G).sort((e,n)=>e.localeCompare(n))].join("\n"),s=e("sha256").update(r).digest("hex").slice(0,24);return compactionSemanticItemIdSchema.parse(`semantic_${n}_${s}`)}function U(n,t){return`evidence_${e("sha256").update(`${n}\n${t}`).digest("hex").slice(0,24)}`}function F(e){return compactionProvenanceRefSchema.parse({kind:e.kind,messageSequence:"message"===e.kind?e.sequence:null,toolExecutionId:"tool_execution"===e.kind?e.executionId:null,resourceKey:"resource"===e.kind?e.resourceKey:null,managerInstanceId:"running_session"===e.kind?e.managerInstanceId:null,sessionId:"running_session"===e.kind?e.sessionId:null,checkpointId:"legacy_snapshot"===e.kind?e.checkpointId:null,snapshotIndex:"legacy_snapshot"===e.kind?e.snapshotIndex:null})}export function buildCompactionSemanticEvidenceRegistry(e){const n=[];for(const t of e.messages){const e=F({kind:"message",sequence:t.sequence});n.push({evidenceId:U("message",String(t.sequence)),summary:pe(t.summary,512),provenance:e,...void 0===t.role?{}:{messageRole:t.role}})}for(const t of e.toolExecutions){const e=F({kind:"tool_execution",executionId:t.id});n.push({evidenceId:U("tool_execution",t.id),summary:pe([`${t.agentName??"agent"}/${t.toolName??"tool"}: ${t.outcome.kind}`,...void 0===t.outcome.executionState?[]:[`executionState=${t.outcome.executionState}`],...void 0===t.inputSummary?[]:[`input=${pe(t.inputSummary,160)}`],...void 0===t.resultSummary?[]:[`result=${pe(t.resultSummary,256)}`]].join("; "),512),provenance:e,toolOutcomeKind:t.outcome.kind,...void 0===t.outcome.executionState?{}:{toolCancellationExecutionState:t.outcome.executionState}})}for(const t of e.resources){const e=F({kind:"resource",resourceKey:t.key});n.push({evidenceId:U("resource",t.key),summary:pe(`${void 0===t.mode?"resource":t.mode}: ${t.key}`,512),provenance:e})}for(const t of e.runningSessions){const e=`${t.managerInstanceId}:${String(t.sessionId)}`,o=F({kind:"running_session",managerInstanceId:t.managerInstanceId,sessionId:t.sessionId});n.push({evidenceId:U("running_session",e),summary:pe(`session ${t.state??"observed"}`,512),provenance:o})}const t=new Map;for(const e of n)t.has(e.evidenceId)||t.set(e.evidenceId,e);return[...t.values()]}function V(e){return e.map(e=>({evidenceId:e.evidenceId,kind:e.provenance.kind,summary:Z(e),...void 0===e.messageRole?{}:{role:e.messageRole},...void 0===e.toolOutcomeKind?{}:{outcome:e.toolOutcomeKind},...void 0===e.toolCancellationExecutionState?{}:{executionState:e.toolCancellationExecutionState}}))}function Z(e){return pe(e.summary,256)}function L(e){if(void 0===e)return[];const n=compactionSemanticStateSchema.parse(e),t=(e,n)=>n.slice(-16).map(n=>({itemId:n.id,category:e,text:pe(n.text,256),sourceQuotes:n.sourceQuotes.map(e=>pe(e,256))}));return[...null===n.goal?[]:[{itemId:n.goal.id,category:"goal",text:pe(n.goal.text,256),sourceQuotes:n.goal.sourceQuotes.map(e=>pe(e,256))}],...t("constraint",n.constraints),...t("pending_work",n.pendingWork),...t("uncertainty",n.uncertainties),...t("decision",n.decisions),...t("completed_work",n.completedWork),...n.resources.slice(-16).map(e=>({itemId:e.id,category:"resource",text:pe(e.resourceKey,256),sourceQuotes:[pe(e.resourceKey,256)]}))]}function B(e,n,t){const o=[],r=[],s=()=>JSON.stringify({previousSemanticItems:o,evidence:r,omittedPreviousItemCount:n.length-o.length,omittedEvidenceCount:e.length-r.length}),i=(e,n)=>(e.push(n),[...s()].length<=t||(e.pop(),!1));let a=0,c=0;void 0!==n[0]&&i(o,n[0])&&(a=1),void 0!==e[0]&&i(r,e[0])&&(c=1);for(const n of e.slice(c)){if(r.length>=k)break;if(!i(r,n))break}for(const e of n.slice(a))if(!i(o,e))break;return{prompt:s(),includedEvidenceIds:r.map(e=>e.evidenceId)}}export function renderCompactionSemanticEvidenceRegistry(e,n=24e3){if(!Number.isInteger(n)||n<1024||n>64e3)throw new Error("maxChars must be an integer between 1024 and 64000");return B(V(e),[],n).prompt}export function buildCompactionSemanticModelContext(e,n,t=24e3){if(!Number.isInteger(t)||t<1024||t>64e3)throw new Error("maxChars must be an integer between 1024 and 64000");return B(V(e),L(n),t)}export function renderCompactionSemanticModelContext(e,n,t=24e3){if(!Number.isInteger(t)||t<1024||t>64e3)throw new Error("maxChars must be an integer between 1024 and 64000");return buildCompactionSemanticModelContext(e,n,t).prompt}function H(e){const n=e=>new Map(e?.map(e=>[e.id,e.text])??[]);return{goal:new Map(null==e?.goal?[]:[[e.goal.id,e.goal.text]]),constraint:n(e?.constraints),decision:n(e?.decisions),completed_work:n(e?.completedWork),pending_work:n(e?.pendingWork),resource:new Map(e?.resources.map(e=>[e.id,e.resourceKey])??[]),running_session:new Map(e?.runningSessions.map(e=>[e.id,`${e.managerInstanceId}:${String(e.sessionId)}`])??[]),uncertainty:n(e?.uncertainties)}}function X(e,n,t,o,r){const s=null===e?void 0:r.get(e);return void 0!==s&&z(s)===z(t)?compactionSemanticItemIdSchema.parse(e):J(n,t,o)}function Y(e){return 1===e.length&&"tool_execution"===e[0]?.provenance.kind&&e[0].toolOutcomeKind===t.success}function ee(e){return 1===e.length&&e.every(e=>"message"===e.provenance.kind&&"user"===e.messageRole)}function ne(e,n){return!!Y(e)&&ie(e,n)}function te(e,n){const t=e.map(e=>e.replace(/^message \d+ (?:user|assistant|system|tool): /u,"")).map(z).join("; ");return pe(void 0===n?t:`${n}: ${t}`,s)}function oe(e){return"tool_execution"===e.provenance.kind&&e.toolOutcomeKind===t.success}function re(e){return[...new Map(e.map(e=>[G(e.provenance),e.provenance])).values()]}export class CompactionSemanticCandidateError extends Error{constructor(e,n){super(e,n),this.name="CompactionSemanticCandidateError"}}function se(e){return"text"in e?JSON.stringify(["text",z(e.text)]):"resourceKey"in e?JSON.stringify(["resource",e.resourceKey]):JSON.stringify(["running_session",e.managerInstanceId,e.sessionId])}export function normalizeCompactionSemanticItems(e){const n=new Map;for(const t of e){const e=n.get(t.id);if(void 0===e){n.set(t.id,t);continue}if(se(e)!==se(t))throw new CompactionSemanticCandidateError(`conflicting semantic item ID: ${t.id}`);const o=[...new Map([...e.provenance,...t.provenance].map(e=>[G(e),e])).values()],r="sourceQuotes"in e&&"sourceQuotes"in t?[...new Set([...e.sourceQuotes,...t.sourceQuotes])]:void 0;if(o.length>8||(r?.length??0)>8)throw new CompactionSemanticCandidateError(`semantic item evidence limit exceeded: ${t.id}`);n.set(t.id,{...e,provenance:o,...void 0===r?{}:{sourceQuotes:r}})}return[...n.values()]}function ie(e,n){const t=e.map(Z);return t.length===n.length&&t.every((e,t)=>e===n[t])}export function validateCompactionModelDraft(e){const n=compactionModelDraftSchema.parse(e.draft),t=void 0===e.previousState?void 0:compactionSemanticStateSchema.parse(e.previousState),o=H(t),r=new Map([...t?.constraints.map(e=>[e.id,"constraint"])??[],...t?.decisions.map(e=>[e.id,"decision"])??[],...t?.pendingWork.map(e=>[e.id,"pending_work"])??[],...t?.uncertainties.map(e=>[e.id,"uncertainty"])??[]]),i=new Map((t?.completedWork??[]).map(e=>[e.id,e])),a=new Map;for(const n of e.evidenceRegistry){const e={...n,provenance:compactionProvenanceRefSchema.parse(n.provenance)};if(a.has(e.evidenceId))throw new Error(`Duplicate compaction evidence ID: ${e.evidenceId}`);a.set(e.evidenceId,e)}const c=void 0===e.presentedEvidenceIds?void 0:new Set(e.presentedEvidenceIds),S=e=>{if(new Set(e).size!==e.length)return;const n=[];for(const t of e){if(void 0!==c&&!c.has(t))return;const e=a.get(t);if(void 0===e)return;n.push(e)}return n},f=[],h=new Set,y=e=>{for(const n of e)h.add(n)},_=(e,n,t,r,s=!1)=>{const a=[];return t.forEach((t,c)=>{const u=r&&null!==t.priorItemId?i.get(t.priorItemId):void 0;if(void 0!==u&&z(t.text)===u.text)return void a.push(u);const d=S(t.sourceEvidenceIds);if(void 0===d)return void f.push({category:e,index:c,reason:"unknown_provenance"});if(!ie(d,t.sourceQuotes))return void f.push({category:e,index:c,reason:"unsupported_source_quote"});if(s&&!ee(d))return void f.push({category:e,index:c,reason:"missing_required_provenance"});if(r&&!ne(d,t.sourceQuotes))return void f.push({category:e,index:c,reason:"completed_work_without_success_evidence"});const m=r?te(t.sourceQuotes,"Successful Tool evidence"):te(t.sourceQuotes);y(t.sourceEvidenceIds),a.push(q.parse({text:m,provenance:re(d),sourceQuotes:[...t.sourceQuotes],id:X(t.priorItemId,n,m,re(d),o[n])}))}),a};let x=null;if(null!==n.goal){const e=S(n.goal.sourceEvidenceIds);if(void 0===e)f.push({category:"goal",index:0,reason:"unknown_provenance"});else if(ee(e))if(ie(e,n.goal.sourceQuotes)){const t=re(e);y(n.goal.sourceEvidenceIds);const r=te(n.goal.sourceQuotes);x=q.parse({text:r,provenance:t,sourceQuotes:[...n.goal.sourceQuotes],id:X(n.goal.priorItemId,"goal",r,t,o.goal)})}else f.push({category:"goal",index:0,reason:"unsupported_source_quote"});else f.push({category:"goal",index:0,reason:"missing_required_provenance"})}const k=e.harnessGoal,C=void 0===k?void 0:F({kind:"message",sequence:k.sourceSequence}),w=void 0===k?void 0:pe(k.verbatimRequest,s),b=void 0===k||void 0===C||void 0===w?null:q.parse({text:w,provenance:[C],sourceQuotes:[pe(k.verbatimRequest,u)],id:X(null,"goal",w,[C],o.goal)});if(void 0!==k&&null==t?.goal)for(const e of a.values())"message"===e.provenance.kind&&e.provenance.messageSequence===k.sourceSequence&&h.add(e.evidenceId);const E=null!=t?.goal&&n.startsNewGoalScope&&null!==x,$=E?x:t?.goal??b??x,N=[];n.resources.forEach((e,n)=>{const t=S(e.sourceEvidenceIds);if(void 0===t)return void f.push({category:"resource",index:n,reason:"unknown_provenance"});const r=t.filter(e=>"resource"===e.provenance.kind),i=r[0]?.provenance.resourceKey;if(1!==r.length||null==i)return void f.push({category:"resource",index:n,reason:"resource_not_observed"});const a=re(t);y(e.sourceEvidenceIds);const c=pe(i,s);N.push(W.parse({resourceKey:c,provenance:a,id:X(e.priorItemId,"resource",c,a,o.resource)}))});const K=new Set(N.map(e=>e.resourceKey));for(const e of a.values()){const n=e.provenance.resourceKey;"resource"!==e.provenance.kind||null===n||K.has(n)||(N.push(W.parse({resourceKey:pe(n,s),provenance:[e.provenance],id:J("resource",pe(n,s),[e.provenance])})),K.add(n))}const M=[];n.runningSessions.forEach((e,n)=>{const t=S(e.sourceEvidenceIds);if(void 0===t)return void f.push({category:"running_session",index:n,reason:"unknown_provenance"});const r=t.filter(e=>"running_session"===e.provenance.kind),s=r[0]?.provenance;if(1!==r.length||null==s?.managerInstanceId||null===s.sessionId)return void f.push({category:"running_session",index:n,reason:"running_session_not_observed"});const i=`${s.managerInstanceId}:${String(s.sessionId)}`,a=re(t);y(e.sourceEvidenceIds),M.push(O.parse({managerInstanceId:s.managerInstanceId,sessionId:s.sessionId,provenance:a,id:X(e.priorItemId,"running_session",i,a,o.running_session)}))});const Q=new Set(M.map(e=>`${e.managerInstanceId}:${String(e.sessionId)}`));for(const e of a.values()){const n=e.provenance;if("running_session"!==n.kind||null===n.managerInstanceId||null===n.sessionId)continue;const t=`${n.managerInstanceId}:${String(n.sessionId)}`;Q.has(t)||(M.push(O.parse({managerInstanceId:n.managerInstanceId,sessionId:n.sessionId,provenance:[n],id:J("running_session",t,[n])})),Q.add(t))}const R=[];n.resolutions.forEach((e,n)=>{const t=r.get(e.targetItemId);if(void 0===t)return void f.push({category:"resolution",index:n,reason:"unknown_resolution_target"});if(t!==e.targetCategory)return void f.push({category:"resolution",index:n,reason:"resolution_target_category_mismatch"});if(!("constraint"===t&&"revoke"===e.action||"decision"===t&&"supersede"===e.action||"pending_work"===t&&"cancel"===e.action||"uncertainty"===t&&"clarify"===e.action))return void f.push({category:"resolution",index:n,reason:"invalid_resolution_action"});const o=S(e.sourceEvidenceIds);if(void 0===o)return void f.push({category:"resolution",index:n,reason:"unknown_provenance"});if(!ie(o,e.sourceQuotes))return void f.push({category:"resolution",index:n,reason:"unsupported_source_quote"});if(!ee(o))return void f.push({category:"resolution",index:n,reason:"missing_required_provenance"});y(e.sourceEvidenceIds);const s=re(o);R.push({targetItemId:compactionSemanticItemIdSchema.parse(e.targetItemId),targetCategory:e.targetCategory,action:e.action,reason:z(e.reason),provenance:s})});const j=_("decision","decision",n.decisions,!1),P=_("constraint","constraint",n.constraints,!1,!0),T=_("completed_work","completed_work",n.completedWork,!0),A=_("pending_work","pending_work",n.pendingWork,!1),D=_("uncertainty","uncertainty",n.uncertainties,!1),G=[],U=(e,n)=>{if(oe(e))return;const t=pe(`${n}: ${e.summary}`,s);G.push(q.parse({id:J("uncertainty",t,[e.provenance]),text:t,provenance:[e.provenance],sourceQuotes:[pe(e.summary,u)]}))};n.evidenceReviews.forEach((e,n)=>{const t=a.get(e.evidenceId);void 0!==t?(h.add(e.evidenceId),"message"!==t.provenance.kind&&"tool_execution"!==t.provenance.kind||"irrelevant"===e.disposition&&"assistant"===t.messageRole||U(t,"uncertain"===e.disposition?"Unresolved evidence":"User or Tool evidence classified as irrelevant")):f.push({category:"evidence_review",index:n,reason:"unknown_evidence_review"})});for(const n of e.presentedEvidenceIds??[]){if(h.has(n))continue;const e=a.get(n);void 0===e||"message"!==e.provenance.kind&&"tool_execution"!==e.provenance.kind||(U(e,"Unclassified evidence"),h.add(n))}const V=ue(normalizeCompactionSemanticItems(P),m),Z=ue(normalizeCompactionSemanticItems(j),d),L=ue(normalizeCompactionSemanticItems(T),p),B=ue(normalizeCompactionSemanticItems(A),l),Y=ue(normalizeCompactionSemanticItems(N),g),se=ue(normalizeCompactionSemanticItems(M),I),ae=ue(normalizeCompactionSemanticItems([...D,...G]),v),ce=compactionSemanticStateSchema.safeParse({version:1,goal:$,constraints:V.items,decisions:Z.items,completedWork:L.items,pendingWork:B.items,resources:Y.items,runningSessions:se.items,uncertainties:ae.items,prunedItemCounts:{constraint:V.prunedCount,decision:Z.prunedCount,completed_work:L.prunedCount,pending_work:B.prunedCount,resource:Y.prunedCount,running_session:se.prunedCount,uncertainty:ae.prunedCount}});if(!ce.success)throw new CompactionSemanticCandidateError("invalid semantic candidate state",{cause:ce.error});return{state:ce.data,resolutions:R,rejections:f,coveredEvidenceIds:[...h],startsNewGoalScope:E}}export function createEmptyCompactionSemanticState(){return compactionSemanticStateSchema.parse({version:1,goal:null,constraints:[],decisions:[],completedWork:[],pendingWork:[],resources:[],runningSessions:[],uncertainties:[],prunedItemCounts:T})}export function seedCompactionSemanticConstraints(e,n){const t=void 0===e?createEmptyCompactionSemanticState():compactionSemanticStateSchema.parse(e),o=ce(n),r=de(t.constraints,o,new Set,m);return me(compactionSemanticStateSchema.parse({...t,constraints:r.items,prunedItemCounts:{...t.prunedItemCounts,constraint:t.prunedItemCounts.constraint+r.prunedCount}}))}function ae(e,n){const t=[];let o="";for(const r of e){if(o.length>0&&o.length+r.length>n){const e=o.trim();e.length>0&&t.push(e),o=r;continue}o+=r}const r=o.trim();return r.length>0&&t.push(r),t}export function seedLegacyCompactionSnapshotUncertainties(e,n){const t=compactionSemanticStateSchema.parse(e),o=n.fragments.flatMap(e=>ae(e,u));if(0===o.length)return{state:t,requiredItemIds:[],transcriptFragments:[],complete:!0};const r=o.map((e,t)=>{const o=F({kind:"legacy_snapshot",checkpointId:n.checkpointId,snapshotIndex:t}),r=pe(`Unverified legacy V1 active snapshot; confirm before acting: ${e}`,s);return q.parse({id:J("uncertainty",r,[o]),text:r,provenance:[o],sourceQuotes:[e]})}),i=de(t.uncertainties,r,new Set,v),a=me(compactionSemanticStateSchema.parse({...t,uncertainties:i.items,prunedItemCounts:{...t.prunedItemCounts,uncertainty:t.prunedItemCounts.uncertainty+i.prunedCount}})),c=new Set(a.uncertainties.map(e=>e.id)),d=r.every(e=>c.has(e.id));return{state:a,requiredItemIds:r.map(e=>e.id),transcriptFragments:d?legacyCompactionTranscriptFragmentsSchema.parse(o):legacyCompactionTranscriptFragmentsSchema.parse([]),complete:d}}function ce(e){return e.map(e=>{const n=F({kind:"message",sequence:e.sourceSequence}),t=pe(e.quote,u);return q.parse({id:J("constraint",t,[n]),text:t,provenance:[n],sourceQuotes:[t]})})}export function replaceCompactionSemanticConstraints(e,n){const t=compactionSemanticStateSchema.parse(e),o=ue(ce(n),m);return me(compactionSemanticStateSchema.parse({...t,constraints:o.items,prunedItemCounts:{...t.prunedItemCounts,constraint:t.prunedItemCounts.constraint+o.prunedCount}}))}export function replaceCompactionSemanticGoal(e,n){const t=compactionSemanticStateSchema.parse(e);if(void 0===n)return me(compactionSemanticStateSchema.parse({...t,goal:null}));const o=F({kind:"message",sequence:n.sourceSequence}),r=pe(n.verbatimRequest,s),i=pe(n.verbatimRequest,u);return me(compactionSemanticStateSchema.parse({...t,goal:q.parse({id:J("goal",r,[o]),text:r,provenance:[o],sourceQuotes:[i]})}))}function ue(e,n){const t=Math.max(0,e.length-n);return{items:0===t?[...e]:e.slice(-n),prunedCount:t}}function de(e,n,t,o){const r=new Map;for(const n of e)t.has(n.id)||r.set(n.id,n);for(const e of n)t.has(e.id)||r.set(e.id,e);return ue([...r.values()],o)}function me(e){const n=compactionSemanticStateSchema.parse(e),t=[...n.constraints],o=[...n.decisions],r=[...n.completedWork],s=[...n.pendingWork],i=[...n.resources],a=[...n.runningSessions],c=[...n.uncertainties],u={...n.prunedItemCounts},d=()=>compactionSemanticStateSchema.parse({...n,constraints:t,decisions:o,completedWork:r,pendingWork:s,resources:i,runningSessions:a,uncertainties:c,prunedItemCounts:u}),m=[{countKey:"completed_work",items:r},{countKey:"resource",items:i},{countKey:"decision",items:o},{countKey:"running_session",items:a},{countKey:"uncertainty",items:c},{countKey:"constraint",items:t},{countKey:"pending_work",items:s}];let p=!0;for(;Buffer.byteLength(JSON.stringify(d()),"utf8")>S;){const e=m.find(({items:e})=>p?e.length>1:e.length>0);if(void 0===e){if(p){p=!1;continue}throw new Error("Compaction semantic state exceeds its aggregate storage budget")}e.items.shift(),u[e.countKey]+=1}return d()}export function mergeCompactionSemanticState(e,n,t){const o=void 0===e?createEmptyCompactionSemanticState():compactionSemanticStateSchema.parse(e),r=compactionSemanticStateSchema.parse(n.state),s=new Set(n.resolutions.filter(e=>"constraint"===e.targetCategory).map(e=>e.targetItemId)),i=new Set(n.resolutions.filter(e=>"decision"===e.targetCategory).map(e=>e.targetItemId)),a=new Set(n.resolutions.filter(e=>"pending_work"===e.targetCategory).map(e=>e.targetItemId)),c=new Set(n.resolutions.filter(e=>"uncertainty"===e.targetCategory).map(e=>e.targetItemId)),u=t.startsNewGoalScope&&n.startsNewGoalScope,I=de(o.constraints,r.constraints,s,m),S=de(o.decisions,r.decisions,i,d),f=de(o.completedWork,r.completedWork,new Set,p),h=de(o.pendingWork,r.pendingWork,a,l),y=de(o.resources,r.resources,new Set,g),_=de(o.uncertainties,r.uncertainties,c,v);return me(compactionSemanticStateSchema.parse({version:1,goal:u||null!==r.goal?r.goal:o.goal,constraints:I.items,decisions:S.items,completedWork:f.items,pendingWork:h.items,resources:y.items,runningSessions:r.runningSessions.slice(-128),uncertainties:_.items,prunedItemCounts:{constraint:o.prunedItemCounts.constraint+r.prunedItemCounts.constraint+I.prunedCount,decision:o.prunedItemCounts.decision+r.prunedItemCounts.decision+S.prunedCount,completed_work:o.prunedItemCounts.completed_work+r.prunedItemCounts.completed_work+f.prunedCount,pending_work:o.prunedItemCounts.pending_work+r.prunedItemCounts.pending_work+h.prunedCount,resource:o.prunedItemCounts.resource+r.prunedItemCounts.resource+y.prunedCount,running_session:o.prunedItemCounts.running_session+r.prunedItemCounts.running_session,uncertainty:o.prunedItemCounts.uncertainty+r.prunedItemCounts.uncertainty+_.prunedCount}}))}function pe(e,n){const t=z(e);if(t.length<=n)return t;let o="";for(const e of t){if(o.length+e.length>n-1)break;o+=e}return`${o}…`}function le(e){const n=(e,n)=>n.map(n=>({itemId:n.id,category:e,text:pe(n.text,x),sourceQuotes:n.sourceQuotes.map(e=>pe(e,u))}));return[...null===e.goal?[]:[{itemId:e.goal.id,category:"goal",text:pe(e.goal.text,x),sourceQuotes:e.goal.sourceQuotes.map(e=>pe(e,u))}],...n("constraint",e.constraints),...n("pending_work",e.pendingWork),...n("uncertainty",e.uncertainties),...n("decision",e.decisions),...e.resources.map(e=>({itemId:e.id,category:"resource",text:pe(e.resourceKey,x),sourceQuotes:[pe(e.resourceKey,u)]})),...n("completed_work",e.completedWork)]}export function createCompactionSemanticReminderProjection(e,n=16e3){if(!Number.isInteger(n)||n<1024||n>32e3)throw new Error("maxChars must be an integer between 1024 and 32000");const t=compactionSemanticStateSchema.parse(e),r=o,s=le(t),i=new Map(r.map(e=>[e,s.filter(n=>n.category===e)])),a=[],c=()=>{const e=new Map(r.map(e=>[e,a.filter(n=>n.category===e).length]));return compactionSemanticReminderProjectionSchema.parse({version:1,items:a,omittedCounts:{goal:(i.get("goal")?.length??0)-(e.get("goal")??0),constraint:t.prunedItemCounts.constraint+(i.get("constraint")?.length??0)-(e.get("constraint")??0),decision:t.prunedItemCounts.decision+(i.get("decision")?.length??0)-(e.get("decision")??0),completed_work:t.prunedItemCounts.completed_work+(i.get("completed_work")?.length??0)-(e.get("completed_work")??0),pending_work:t.prunedItemCounts.pending_work+(i.get("pending_work")?.length??0)-(e.get("pending_work")??0),resource:t.prunedItemCounts.resource+(i.get("resource")?.length??0)-(e.get("resource")??0),running_session:t.prunedItemCounts.running_session+t.runningSessions.length,uncertainty:t.prunedItemCounts.uncertainty+(i.get("uncertainty")?.length??0)-(e.get("uncertainty")??0)}})},u=Math.max(0,...[...i.values()].map(e=>e.length));for(let e=0;e<u;e+=1)for(const t of r){const o=(i.get(t)??[]).at(-(e+1));void 0!==o&&(a.push(o),JSON.stringify(c()).length>n&&a.pop())}const d=c();if(JSON.stringify(d).length>n)throw new Error("Unable to create bounded semantic reminder projection");return d}export function renderCompactionSemanticSummary(e,n=12e3){if(!Number.isInteger(n)||n<1024||n>32e3)throw new Error("maxChars must be an integer between 1024 and 32000");const t=createCompactionSemanticReminderProjection(compactionSemanticStateSchema.parse(e),n),r={goal:"Goal",constraint:"Active constraints",pending_work:"Pending work",uncertainty:"Uncertainties",decision:"Decisions",resource:"Resources",completed_work:"Completed work"},s=t.omittedCounts,i=["Evidence-grounded structured compaction state:","Each semantic item is a classification; its source quote is the authoritative wording."];for(const e of o){i.push(`${r[e]}:`);const n=t.items.filter(n=>n.category===e);0===n.length?i.push("- (none retained in prompt projection)"):i.push(...n.map(e=>{const n=e.sourceQuotes.map(e=>pe(e,h)).join(" | ");return`- [${e.itemId}] interpretation=${pe(e.text,h)}; source=${n}`})),s[e]>0&&i.push(`- … ${String(s[e])} item(s) omitted; use transcript evidence`)}const a="\n… summary truncated",c=n-[...a].length,u=[];for(const e of i){if([...[...u,e].join("\n")].length>c)break;u.push(e)}const d=u.join("\n");return u.length===i.length?d:`${d}${a}`}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@roll-agent/runtime",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"zod": "^3.25.76"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@roll-agent/core": "0.42.
|
|
38
|
+
"@roll-agent/core": "0.42.2",
|
|
39
39
|
"@types/node": "^22.0.0"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|