@makaio/framework 1.0.0-dev-1789404058608 → 1.0.0-dev-1789642522820

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.
Files changed (117) hide show
  1. package/dist/.makaio-build.json +2 -2
  2. package/dist/{adapter-C4v_gNTI.mjs → adapter-DSRgsh2d.mjs} +1 -1
  3. package/dist/adapters/claude/index.d.mts +24 -24
  4. package/dist/adapters/claude/index.mjs +3 -3
  5. package/dist/bus/index.mjs +1 -1
  6. package/dist/bus-BOGcnhgA.mjs +9 -0
  7. package/dist/client-DqfP7BeX.mjs +1 -0
  8. package/dist/clients/index.d.mts +152 -11
  9. package/dist/clients/index.mjs +1 -1
  10. package/dist/contracts/adapter/index.d.mts +2 -2
  11. package/dist/contracts/adapter/index.mjs +1 -1
  12. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  13. package/dist/contracts/artifact/index.d.mts +2 -2
  14. package/dist/contracts/capabilities/index.d.mts +1 -1
  15. package/dist/contracts/client/index.d.mts +3 -3
  16. package/dist/contracts/client/index.mjs +1 -1
  17. package/dist/contracts/extension/index.d.mts +4 -4
  18. package/dist/contracts/index.d.mts +35 -35
  19. package/dist/contracts/index.mjs +1 -1
  20. package/dist/contracts/materialization/index.d.mts +1 -1
  21. package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
  22. package/dist/contracts/session/index.d.mts +2 -2
  23. package/dist/contracts/session/index.mjs +1 -1
  24. package/dist/contracts/shared/index.d.mts +1 -1
  25. package/dist/contracts/variant/index.d.mts +1 -1
  26. package/dist/contracts/worker/index.d.mts +1 -1
  27. package/dist/contracts/workflow/index.d.mts +2 -2
  28. package/dist/drizzle/0040_session_generation.sql +1 -0
  29. package/dist/drizzle/meta/_journal.json +7 -0
  30. package/dist/{framework-packages-Bg4edkkM.mjs → framework-packages-BNFG51Td.mjs} +1 -1
  31. package/dist/{hook-responses-Dq16X3Cb.d.mts → hook-responses-CQ2q0aPE.d.mts} +47 -4
  32. package/dist/{index-DaAWCLe9.d.mts → index-B-u0Tu8X.d.mts} +24 -24
  33. package/dist/{index-C1nSuiG0.d.mts → index-B6WkHnCQ.d.mts} +1 -1
  34. package/dist/{index-Du4wUv9q.d.mts → index-BS-Fhlux.d.mts} +48 -13
  35. package/dist/{index-BArnbdj6.d.mts → index-Bh57xARQ.d.mts} +65 -65
  36. package/dist/{index-DH0m01hJ2.d.mts → index-CXpgL3gz2.d.mts} +3 -3
  37. package/dist/{index-n1hV8uFw2.d.mts → index-CdWxSwhQ2.d.mts} +11 -11
  38. package/dist/{index-DjQebquc.d.mts → index-ClKwF6LE.d.mts} +291 -291
  39. package/dist/{index-BUC9P6Q12.d.mts → index-CztxEJrG2.d.mts} +51 -8
  40. package/dist/{index-BEi6nx1S2.d.mts → index-De_oh9M-2.d.mts} +1 -1
  41. package/dist/{index-N3f65Z_S.d.mts → index-Dn23R_ck.d.mts} +9 -9
  42. package/dist/{index-gu4mzfTr.d.mts → index-Hnsy6XhM.d.mts} +1 -1
  43. package/dist/{index-CWlvL7GB.d.mts → index-nkix3hP7.d.mts} +6 -6
  44. package/dist/{index-CGxjX4fw.d.mts → index-p1l00SGS.d.mts} +320 -12
  45. package/dist/{index-T-aAKybB.d.mts → index-xsaaa85T.d.mts} +8 -8
  46. package/dist/{index-HMb0RcTG2.d.mts → index-zEkS2L862.d.mts} +18 -12
  47. package/dist/kernel/extension/index.d.mts +1 -1
  48. package/dist/kernel/index.d.mts +2 -2
  49. package/dist/kernel/observability/index.d.mts +1 -1
  50. package/dist/{namespace-DQpBf2CK.d.mts → namespace-B5IFLQc-.d.mts} +6 -6
  51. package/dist/{namespace-Cmu-5_P9.d.mts → namespace-BR03HE8G.d.mts} +42 -0
  52. package/dist/{namespace-uCaKZm89.d.mts → namespace-BqfzcRkL.d.mts} +3 -3
  53. package/dist/{namespace-CPGTaFqO.d.mts → namespace-Phxf0Lep.d.mts} +2 -2
  54. package/dist/{namespace-D2RZfl0a.d.mts → namespace-UFcDEBJB.d.mts} +2 -2
  55. package/dist/{namespace-DSRoDmT6.d.mts → namespace-rJ3ycPMg.d.mts} +2 -2
  56. package/dist/{orchestrator-shared-CtPB6PAr.mjs → orchestrator-shared-CxO1lfpP.mjs} +1 -1
  57. package/dist/ownership-memory-handler-BOhmmlJj.mjs +1 -0
  58. package/dist/{package-D-oIvXJD.d.mts → package-CDj3F-L3.d.mts} +1 -1
  59. package/dist/package.json +1 -1
  60. package/dist/{registry-DNMjJ-Oj.mjs → registry-DtaRGU8i.mjs} +1 -0
  61. package/dist/{schema-BA1cHBbc.d.mts → schema-DqKCg5Ec.d.mts} +30 -0
  62. package/dist/{schemas-CJKDu4Kt.d.mts → schemas-2_D4iVbb.d.mts} +1 -1
  63. package/dist/{schemas-BQsXr4FF.d.mts → schemas-CFciElld.d.mts} +7 -7
  64. package/dist/{schemas-BcynDWi-.d.mts → schemas-Cj6Gbqch.d.mts} +7 -7
  65. package/dist/schemas-CkxAK13D.mjs +1 -0
  66. package/dist/{schemas-e8o4JGBu.d.mts → schemas-Cq1d5tid.d.mts} +2 -2
  67. package/dist/services/adapter-runtime/index.d.mts +3 -3
  68. package/dist/services/adapter-runtime/namespace.d.mts +1 -1
  69. package/dist/services/adapter-runtime/schemas.d.mts +1 -1
  70. package/dist/services/agent-runtime/index.d.mts +2 -2
  71. package/dist/services/agent-runtime/namespace.d.mts +1 -1
  72. package/dist/services/agent-runtime/schemas.d.mts +1 -1
  73. package/dist/services/execution-target/index.d.mts +1 -1
  74. package/dist/services/filesystem/namespace.d.mts +6 -6
  75. package/dist/services/filesystem/schemas.d.mts +3 -3
  76. package/dist/services/index.d.mts +28 -28
  77. package/dist/services/index.mjs +1 -1
  78. package/dist/services/session/index.d.mts +4 -4
  79. package/dist/services/session/index.mjs +1 -1
  80. package/dist/services/session/messages/namespace.d.mts +1 -1
  81. package/dist/services/session/orchestrator-testing/index.mjs +1 -1
  82. package/dist/services/session/storage/namespace.d.mts +1 -1
  83. package/dist/services/session/storage/schema.d.mts +1 -1
  84. package/dist/services/session/storage/schema.mjs +1 -1
  85. package/dist/services/session/testing/index.mjs +2 -1
  86. package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
  87. package/dist/services/settings/namespace.d.mts +4 -4
  88. package/dist/services/subagent-template/index.d.mts +2 -2
  89. package/dist/services/subagent-template/namespace.d.mts +1 -1
  90. package/dist/services/subagent-template/schemas.d.mts +1 -1
  91. package/dist/services/tool-approval/index.mjs +1 -1
  92. package/dist/services/tools/index.mjs +1 -1
  93. package/dist/services/tray-menu/index.d.mts +2 -2
  94. package/dist/services/tray-menu/namespace.d.mts +1 -1
  95. package/dist/services/tray-menu/schemas.d.mts +1 -1
  96. package/dist/services/workflow-transitions/index.mjs +1 -1
  97. package/dist/session-BP5aq2kt.mjs +95 -0
  98. package/dist/{session-BB0s7c2B.mjs → session-BcArFp9M.mjs} +1 -1
  99. package/dist/{session-lineage-BQimcKsh.d.mts → session-lineage-C3myyt5x.d.mts} +1 -1
  100. package/dist/storage/drizzle/client.mjs +1 -1
  101. package/dist/storage/drizzle/index.mjs +1 -1
  102. package/dist/{tool-approval-service-pbkGcAV8.mjs → tool-approval-service-CXTklh3T.mjs} +1 -1
  103. package/dist/{tools-C5Gy0IQG.mjs → tools-hiFv-jJn.mjs} +1 -1
  104. package/dist/{transition-JmAdtcwW.d.mts → transition-D-Lgbp1j.d.mts} +1 -1
  105. package/dist/{types-C5MnkQv6.d.mts → types-D5kqrOad.d.mts} +18 -9
  106. package/dist/{view-builder-ByHQ4Oop.d.mts → view-builder-CHUTXJDl.d.mts} +2 -2
  107. package/dist/workflow-engine/index.d.mts +34 -34
  108. package/dist/workflow-engine/package.d.mts +1 -1
  109. package/dist/{workflow-transitions-C0sg3kar.mjs → workflow-transitions-BalNKTtE.mjs} +1 -1
  110. package/package.json +1 -1
  111. package/dist/bus-DlTN167w.mjs +0 -9
  112. package/dist/client-CgtNXGXg.mjs +0 -1
  113. package/dist/ownership-memory-handler-xex7sLiX.mjs +0 -1
  114. package/dist/schemas-ClkcU_N5.mjs +0 -1
  115. package/dist/session-6UG5udTX.mjs +0 -95
  116. package/dist/{index-CCH0Dnty2.d.mts → index-Htfr-K5U2.d.mts} +6 -6
  117. package/dist/{schemas-lAb9QH1A.d.mts → schemas-JjyFxrC0.d.mts} +8 -8
@@ -1,4 +1,4 @@
1
1
  import { t as TrayMenuService } from "../../index-BZoOYV-y.mjs";
2
- import { a as TrayMenuGroupSchema, c as TrayMenuListEntry, d as TrayMenuSchemas, f as TrayMenuSectionSchema, i as TrayMenuGroupEntrySchema, l as TrayMenuListEntrySchema, n as TrayMenuEntrySchema, o as TrayMenuItemClicked, r as TrayMenuGroup, s as TrayMenuItemClickedSchema, t as TrayMenuEntry, u as TrayMenuMetadataSchema } from "../../schemas-BcynDWi-.mjs";
3
- import { n as TrayMenuSubjects, t as TrayMenuNamespace } from "../../namespace-DQpBf2CK.mjs";
2
+ import { a as TrayMenuGroupSchema, c as TrayMenuListEntry, d as TrayMenuSchemas, f as TrayMenuSectionSchema, i as TrayMenuGroupEntrySchema, l as TrayMenuListEntrySchema, n as TrayMenuEntrySchema, o as TrayMenuItemClicked, r as TrayMenuGroup, s as TrayMenuItemClickedSchema, t as TrayMenuEntry, u as TrayMenuMetadataSchema } from "../../schemas-Cj6Gbqch.mjs";
3
+ import { n as TrayMenuSubjects, t as TrayMenuNamespace } from "../../namespace-B5IFLQc-.mjs";
4
4
  export { TrayMenuEntry, TrayMenuEntrySchema, TrayMenuGroup, TrayMenuGroupEntrySchema, TrayMenuGroupSchema, TrayMenuItemClicked, TrayMenuItemClickedSchema, TrayMenuListEntry, TrayMenuListEntrySchema, TrayMenuMetadataSchema, TrayMenuNamespace, TrayMenuSchemas, TrayMenuSectionSchema, TrayMenuService, TrayMenuSubjects };
@@ -1,2 +1,2 @@
1
- import { n as TrayMenuSubjects, t as TrayMenuNamespace } from "../../namespace-DQpBf2CK.mjs";
1
+ import { n as TrayMenuSubjects, t as TrayMenuNamespace } from "../../namespace-B5IFLQc-.mjs";
2
2
  export { TrayMenuNamespace, TrayMenuSubjects };
@@ -1,2 +1,2 @@
1
- import { a as TrayMenuGroupSchema, c as TrayMenuListEntry, d as TrayMenuSchemas, f as TrayMenuSectionSchema, i as TrayMenuGroupEntrySchema, l as TrayMenuListEntrySchema, n as TrayMenuEntrySchema, o as TrayMenuItemClicked, r as TrayMenuGroup, s as TrayMenuItemClickedSchema, t as TrayMenuEntry, u as TrayMenuMetadataSchema } from "../../schemas-BcynDWi-.mjs";
1
+ import { a as TrayMenuGroupSchema, c as TrayMenuListEntry, d as TrayMenuSchemas, f as TrayMenuSectionSchema, i as TrayMenuGroupEntrySchema, l as TrayMenuListEntrySchema, n as TrayMenuEntrySchema, o as TrayMenuItemClicked, r as TrayMenuGroup, s as TrayMenuItemClickedSchema, t as TrayMenuEntry, u as TrayMenuMetadataSchema } from "../../schemas-Cj6Gbqch.mjs";
2
2
  export { TrayMenuEntry, TrayMenuEntrySchema, TrayMenuGroup, TrayMenuGroupEntrySchema, TrayMenuGroupSchema, TrayMenuItemClicked, TrayMenuItemClickedSchema, TrayMenuListEntry, TrayMenuListEntrySchema, TrayMenuMetadataSchema, TrayMenuSchemas, TrayMenuSectionSchema };
@@ -1 +1 @@
1
- import{D as e,E as t,O as n,k as r}from"../../framework-packages-Bg4edkkM.mjs";import{t as i}from"../../workflow-transitions-C0sg3kar.mjs";export{n as TransitionActionRegistry,t as TransitionPipelineService,e as TransitionRuleRegistry,r as WORKFLOW_START_ACTION_TYPE,i as createTransitionContributionProcessor};
1
+ import{D as e,E as t,O as n,k as r}from"../../framework-packages-BNFG51Td.mjs";import{t as i}from"../../workflow-transitions-BalNKTtE.mjs";export{n as TransitionActionRegistry,t as TransitionPipelineService,e as TransitionRuleRegistry,r as WORKFLOW_START_ACTION_TYPE,i as createTransitionContributionProcessor};
@@ -0,0 +1,95 @@
1
+ import{adapterSessionClaims as e,adapterSessionClaimsDual as t,agents as n,agentsDual as r,runtimeInstanceIncarnationCounters as i,runtimeInstanceIncarnationCountersDual as a,runtimeInstances as o,runtimeInstancesDual as s,sessions as c,sessionsDual as l}from"./services/session/storage/schema.mjs";import"./schema-Cz6-4_Dn.mjs";import{a as u,n as d,o as f}from"./namespace-CMntzAPI.mjs";import{C as p,Ct as m,D as h,E as g,F as _,G as v,I as ee,J as y,K as te,N as ne,P as re,Q as b,S as ie,St as ae,T as oe,U as se,V as ce,W as le,X as x,Y as ue,Z as S,_ as de,_t as fe,at as pe,bt as me,ct as he,d as ge,dt as _e,f as ve,g as ye,gt as be,h as xe,it as Se,l as Ce,lt as we,m as Te,mt as Ee,p as De,pt as Oe,q as ke,rt as Ae,st as je,u as Me,ut as Ne,v as Pe,vt as Fe,w as Ie,xt as Le,y as Re,z as ze}from"./handlers-mjky_fP2.mjs";import{TurnStorageSubjects as C}from"./services/turn/namespace.mjs";import{a as w,n as Be,r as Ve,t as He}from"./ownership-recovery-guard-C9h8K1jo.mjs";import{SessionStorageSubjects as T}from"./services/session/storage/namespace.mjs";import{AdapterRuntimeSubjects as Ue}from"./services/adapter-runtime/namespace.mjs";import{MessageStorageSubjects as E}from"./services/session/messages/namespace.mjs";import{o as We}from"./provider-context-D6GIZ5DC.mjs";import{n as Ge}from"./namespace-Bo6-o_rW.mjs";import{a as Ke,c as qe,d as Je,f as Ye,i as Xe,l as Ze,o as Qe,s as $e,u as et}from"./ownership-memory-handler-BOhmmlJj.mjs";import{z as D}from"zod";import{createBusNamespace as tt}from"@makaio/framework/core";import{AdapterSubjects as O,AgentSubjects as k,CanonicalModelSubjects as nt,CapabilitySubjects as rt,ClientSubjects as it,CompressionModeSchema as at,FORK_SESSION_LINEAGE_KIND as ot,ForkTransformsSchema as st,MessageRoutingSchema as ct,MessageStorageSubjects as lt,ROOT_SESSION_LINEAGE_KIND as ut,SessionContextSchema as dt,SessionDiscoveredSchema as ft,SessionOwnershipSettleMovementRequestSchema as pt,SessionOwnershipStorageSubjects as A,SessionRecordMetadataSchema as mt,SessionStorageSetRequestSchema as ht,SessionStorageUpdateSchema as gt,SessionSubjects as j,TurnIngestionMarkerSchema as _t,compareMessageCursorAsc as vt,compareMessageCursorDesc as yt,isCanonicalModelParseError as bt,isInactiveSafeLeadDesignationMutation as xt,messageToCursor as M,normalizeSessionOwnershipClaimRequest as St,parseCanonicalModel as Ct,resolveResumableAdapterSessionId as wt,teardownWasObserved as Tt}from"@makaio/framework/contracts";import{MakaioBus as Et,NoHandlerError as Dt,TimeoutError as Ot}from"@makaio/framework/bus";import{KernelSubjects as kt}from"@makaio/framework/kernel";import{BaseService as At}from"@makaio/framework/service-base";import{blob as jt,index as Mt,integer as Nt,primaryKey as Pt,sqliteTable as Ft,text as It,uniqueIndex as Lt}from"drizzle-orm/sqlite-core";import{index as Rt,primaryKey as zt}from"drizzle-orm/pg-core";import{acquireTransactionLocks as Bt,defineDialectSchema as Vt,defineDualTable as Ht,didAffectRows as N,executeTransaction as P,getRawSqlExecutor as Ut,getStorageEngine as Wt,resolveSchema as F,resolveStorageEngine as Gt}from"@makaio/framework/storage/drizzle";import{and as I,asc as Kt,count as qt,desc as Jt,eq as L,gt as Yt,gte as Xt,inArray as R,isNotNull as Zt,isNull as z,lt as Qt,lte as $t,ne as en,not as tn,or as nn,sql as B}from"drizzle-orm";import{createStorageNamespaceDefinition as rn}from"@makaio/framework/storage";import{ClientIdentityObservationSchema as an}from"@makaio/framework/contracts/client";import{ImportCursorStorageSubjects as on}from"@makaio/framework/adapters";async function sn(e,t,n,r){try{let t=await e.requestOptional(A.getRuntimeInstance,{instanceId:n.ownerInstanceId,machineId:n.machineId});if(t.handled&&t.data.instance!==null&&t.data.instance.retiredAt!==null)return!0}catch{}try{let i=await e.requestOptional(O.stopAgent,{adapterId:n.adapterId,agentId:t,ownerInstanceId:n.ownerInstanceId,...r&&{teardown:`connector-only`}});return i.handled&&Tt(i.data.evidence)}catch{return!1}}function cn(e,t,n){let r=new Map;for(let t of e){if(t.ownerInstanceId===null)return null;let e={adapterId:t.adapterId,machineId:t.machineId,ownerInstanceId:t.ownerInstanceId};r.set(`${e.ownerInstanceId}\0${e.machineId}\0${e.adapterId}`,e)}if(t!==void 0&&n!==void 0){let e={adapterId:n,machineId:t.machineId,ownerInstanceId:t.instanceId};r.set(`${e.ownerInstanceId}\0${e.machineId}\0${e.adapterId}`,e)}return[...r.values()]}async function ln(e,t,n={releaseClaims:!0}){let r=await e.requestOptional(A.read,{agentId:t}).catch(()=>void 0);if(r===void 0)return{released:!1,claimCount:0};let i=r.handled?r.data.ownership:null;if(i===null)return{released:!1,claimCount:0};let a=i.claims,o=await e.requestOptional(w.get,{agentId:t}).catch(()=>void 0),s=o?.handled?o.data.agent:null,c=cn(a,s?.runtimeOwner,s?.adapterId),l=c!==null&&await Promise.all(c.map(r=>sn(e,t,r,!n.releaseClaims))),u=l!==!1&&l.every(Boolean);if(!n.releaseClaims)return{released:!1,claimCount:a.length};if(a.length===0)return{released:u,claimCount:0};try{let n=await e.request(j.ownership.release,{agentId:t,disposition:u?`released`:`abandoned`});return{released:u&&n.markedClaims.length===0&&n.releasedProviderSessionIds.length===a.length,claimCount:a.length}}catch{try{await e.request(j.ownership.release,{agentId:t,disposition:`abandoned`})}catch{}return{released:!1,claimCount:a.length}}}function un(e,t){if(t!==void 0){if(t.outcome===`lead-conflict`){console.debug(`[session.agent.added] lead designation for ${e} lost to ${t.currentLeadAgentId??`no lead`}`);return}t.outcome!==`claimed`&&t.outcome!==`idempotent`&&console.debug(`[session.agent.added] lead designation for ${e} refused: ${t.outcome}`)}}function dn(e){return Error(`[session.agent.removed] Failed to terminalize agent ${e}`)}async function fn(e){try{await e();return}catch(e){return e}}function pn(e){return e.on(j.agent.added,async t=>{let n=await e.requestOptional(T.get,{sessionId:t.payload.sessionId}),r=n.handled?n.data.session:void 0;if(!r)return;let i=t.payload.role??(r.leadAgentId?`member`:`lead`),a=i===`lead`?await fe(e,{sessionId:t.payload.sessionId,agentId:t.payload.agentId,expectedLeadAgentId:r.leadAgentId??null}):void 0;i===`lead`&&un(t.payload.agentId,a);let o=a?.outcome===`claimed`||a?.outcome===`idempotent`,s=i===`lead`&&a===void 0;if(!r.adapterName&&(o||s)){let n=o?t.payload.agentId:r.leadAgentId;await mn(e,t.payload,n);return}await e.requestOptional(T.update,{sessionId:t.payload.sessionId,lastActivityAt:Date.now()})})}async function mn(e,t,n){let r=await e.requestOptional(T.update,{sessionId:t.sessionId,lastActivityAt:Date.now(),identity:{adapterName:t.adapterName,adapterId:t.adapterId,adapterSessionId:t.adapterSessionId},expectIdentityOpenForLead:n??null});!r.handled||r.data.success||await e.requestOptional(T.update,{sessionId:t.sessionId,lastActivityAt:Date.now()})}function hn(e){return e.on(j.agent.removed,async t=>{let n=await e.requestOptional(T.get,{sessionId:t.payload.sessionId});if(!(n.handled&&n.data.session))return;let r=await fn(async()=>{let n=await e.requestOptional(w.updateStatus,{agentId:t.payload.agentId,status:`disposed`});if(!n.handled||!n.data.success)throw dn(t.payload.agentId)}),i=await fn(async()=>{await fe(e,{sessionId:t.payload.sessionId,agentId:t.payload.agentId,expectedLeadAgentId:t.payload.agentId,clear:!0})}),a=await fn(async()=>{await ln(e,t.payload.agentId,{releaseClaims:r===void 0})}),o=await fn(async()=>{await e.requestOptional(T.update,{sessionId:t.payload.sessionId,lastActivityAt:Date.now()})});if(r!==void 0)throw r;if(i!==void 0)throw i;if(a!==void 0)throw a;if(o!==void 0)throw o})}function gn(e){return e.on(k.started,async t=>{let{agentId:n,adapterSessionId:r,adapterName:i,adapterId:a,sessionId:o}=t.payload;if(!r||!o)return;let s=await e.requestOptional(w.get,{agentId:n}),c=s.handled?s.data.agent:null;c&&!c.adapterSessionId&&await e.requestOptional(w.updateRuntime,{agentId:n,adapterSessionId:r}),await e.requestOptional(T.update,{sessionId:o,reconcileAdapterSession:{agentId:n,adapterName:i,adapterId:a,adapterSessionId:r,lastActivityAt:Date.now()}})})}async function _n(e,t){try{let n=await e.requestOptional(O.getCapabilities,{adapterId:t});return n.handled?new Set(n.data.capabilities).has(`session:resume`):!1}catch{return!1}}async function vn(e,t){if(t!==void 0)return t;let n=await e.requestOptional(Ue.getMachineId,{});return n.handled?n.data.machineId:void 0}async function yn(e,t,n,r,i){let a=pe(t,n);return he(_e({intent:`resume`,session:t,localMachineId:i,adapterSupportsNative:await _n(e,r),targetAdapterName:n.adapterName,currentCwd:n.cwd,targetCwd:n.cwd,resumeIdentity:a}),a.adapterSessionId)}function bn(e,t){let{agentId:n,storedAdapterId:r}=e;switch(t?.kind){case`rehydrated`:case`joined`:return{agentId:n,adapterId:t.agent.adapterId,success:!0};case`deferred`:return{agentId:n,adapterId:r,success:!0};case`refused`:return{agentId:n,adapterId:r,success:!1,error:`Ownership reservation refused: ${t.message??t.outcome}`};case`lost`:return{agentId:n,adapterId:r,success:!1,error:`Another runtime claimed this agent’s recovery`};case`stale-plan`:return{agentId:n,adapterId:r,success:!1,error:`Agent currency kept changing while its restart was planned`};default:return{agentId:n,adapterId:r,success:!1,error:`Restart produced no result`}}}async function xn(e,t,n,r){let{agentId:i,adapterId:a}=n;for(let o=0;o<=1;o+=1){let s=await oe(e,n,async()=>{let a=await re(e,i);if(a===null)return{kind:`lost`};if(!_(a))return a.agent.status===`disposed`?{kind:`refused`,outcome:`agent-disposed`}:{kind:`lost`};Object.assign(n,a.agent);let o=Se(await Ae(e,{adapterName:n.adapterName,storedAdapterId:n.adapterId,...r!==void 0&&{machineId:r}}));if(o===void 0)return{kind:`deferred`,reason:`machine-identity-unavailable`};let s=await yn(e,t,n,o.adapterId,o.machineId);if(we(s))return{kind:`deferred`,reason:`machine-identity-unavailable`};let c=await ne(e,a,o,s.resumeAdapterSessionId);return{agent:n,sessionId:n.sessionId,instance:o,resumeProviderSessionId:s.resumeAdapterSessionId,recoveryGuard:c,...n.cwd!==void 0&&{cwd:n.cwd},...n.model!==void 0&&{model:n.model}}});if(!(s?.kind===`stale-plan`&&o<1))return bn({agentId:i,storedAdapterId:a},s)}return{agentId:i,adapterId:a,success:!1,error:`Agent restart exhausted its recovery-plan retry`}}function Sn(e){let t=e instanceof Error?e.cause:void 0;return t instanceof Error?t.message:e instanceof Error?e.message:String(e)}function Cn(e){return e.on(j.restartAgents,async t=>{let{sessionId:n,machineId:r}=t.payload,i=await e.requestOptional(w.listBySession,{sessionId:n}),a=i.handled?i.data.agents:[],o=[],s=await vn(e,r),c=await e.requestOptional(T.get,{sessionId:n}),l=c.handled?c.data.session:null;for(let t of a){if(l===null){o.push({agentId:t.agentId,adapterId:t.adapterId,success:!1,error:`Session row could not be read; agent has no reachable recovery path`});continue}try{o.push(await xn(e,l,t,s))}catch(e){o.push({agentId:t.agentId,adapterId:t.adapterId,success:!1,error:Sn(e)})}}t.setResult({sessionId:n,results:o})})}function wn(e){let t=be({bus:e.bus,machineId:e.machineId,topology:e.topology??`shared-machine`,...e.instanceId!==void 0&&{instanceId:e.instanceId}});return{cleanups:[Dn(e),On(e),kn(e),Tn(e),An(e),Cn(e.bus),jn(e),Mn(e),Nn(e),pn(e.bus),hn(e.bus),gn(e.bus),...t.cleanups,Ee(e.bus)],ownership:t.ownership}}function Tn(e){let{bus:t}=e;return t.on(j.turn.await,async e=>{let{sessionId:n,turnId:r,timeoutMs:i}=e.payload,a=new AbortController,o=t.once(j.turn.completed,{timeoutMs:i,filter:{sessionId:n,turnId:r},signal:a.signal});o.catch(()=>void 0);let s=await En(t,n,r);if(s!==void 0){a.abort(),e.setResult({completion:s});return}try{let t=await o;e.setResult({completion:t.payload})}catch(e){throw e instanceof Error&&e.name===`OnceTimeoutError`?new Ot(`session.turn.await`,i):e}})}async function En(e,t,n){let r=await e.requestOptional(C.get,{turnId:n}),i=r.handled?r.data.turn:null;if(!(i?.sessionId!==t||i.status!==`completed`&&i.status!==`error`))return{sessionId:t,turnId:n,turnNumber:i.turnNumber,success:i.status===`completed`,...i.error!==void 0&&{error:i.error},...i.usage!==void 0&&{usage:i.usage},...i.initiator!==void 0&&{initiator:i.initiator}}}function Dn(e){let{bus:t}=e;return t.on(j.create,async e=>{let{sessionId:n,parentSessionId:r,contextInheritance:i,forkPointMessageId:a,branchKind:o,forkTransforms:s,title:c,targetWorkingDirectory:l,executionTargetId:u,metadata:d,spawningToolCallId:f,originWindowId:p,machineId:m}=e.payload,h=n??crypto.randomUUID(),g=r===void 0?void 0:(await t.request(j.get,{sessionId:r})).session;if(r!==void 0&&g===null)throw Error(`[session.create] Parent session not found: ${r}`);let _=g?g.rootSessionId??g.sessionId:void 0,v=Date.now(),ee={sessionId:h,createdAt:v,lastActivityAt:v,agents:[],status:`active`,title:c,parentSessionId:r,contextInheritance:i,forkPointMessageId:a,branchKind:o,forkTransforms:s,targetWorkingDirectory:l,executionTargetId:u,metadata:d,spawningToolCallId:f,..._!==void 0&&{rootSessionId:_},...m!==void 0&&{machineId:m}},y=await t.requestOptional(T.set,{sessionId:h,session:ee,ifAbsent:!0});if(y.handled&&!y.data.success){e.setResult({sessionId:h});return}await t.emit(j.created,{sessionId:h,createdAt:ee.createdAt,parentSessionId:r??null,branchKind:o??null,originWindowId:p??`server`}),e.setResult({sessionId:h})})}function On(e){let{bus:t}=e;return t.on(j.get,async e=>{let n=await t.requestOptional(T.get,{sessionId:e.payload.sessionId}),r=n.handled?n.data.session:null;e.setResult({session:r})})}function kn(e){let{bus:t}=e;return t.on(j.list,async e=>{let{status:n,limit:r,offset:i,includePreview:a,executionTargetId:o}=e.payload,s=await t.requestOptional(T.list,{status:n??`all`,limit:r,offset:i,includePreview:a,executionTargetId:o}),c=s.handled?s.data.sessions:[],l=s.handled?s.data.total:0;e.setResult({sessions:c,total:l})})}function An(e){let{bus:t}=e;return t.on(j.close,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(T.get,{sessionId:n}),i=r.handled?r.data.session:null;if(!i){e.setResult({success:!1});return}if(i.status===`closed`){e.setResult({success:!0});return}if(i.status!==`active`){e.setResult({success:!1});return}let a=await t.requestOptional(T.update,{sessionId:n,status:`closed`,lastActivityAt:Date.now(),expectedStatus:[`active`]});if(a.handled&&a.data.success){await t.emit(j.closed,{sessionId:n}),e.setResult({success:!0});return}let o=await t.requestOptional(T.get,{sessionId:n});e.setResult({success:o.handled&&o.data.session?.status===`closed`})})}function jn(e){let{bus:t}=e;return t.on(j.update,async e=>{let{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:a,metadata:o}=e.payload,s=await t.requestOptional(T.update,{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:a,metadata:o}),c=s.handled?s.data.success:!1;if(c){let e=[];r!==void 0&&e.push(`executionTargetId`),i!==void 0&&e.push(`approvalPolicyOverride`),a!==void 0&&e.push(`title`),o!==void 0&&e.push(`metadata`),e.length>0&&await t.emit(j.updated,{sessionId:n,changedProperties:e})}e.setResult({success:c})})}function Mn(e){let{bus:t}=e;return t.on(j.archive,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(T.get,{sessionId:n}),i=r.handled?r.data.session:null;if(!i){e.setResult({success:!1});return}if(i.status===`archived`){e.setResult({success:!0});return}if(i.status!==`closed`){e.setResult({success:!1});return}let a=await t.requestOptional(T.update,{sessionId:n,status:`archived`,lastActivityAt:Date.now(),expectedStatus:[`closed`]});if(a.handled&&a.data.success){await t.emit(j.archived,{sessionId:n}),e.setResult({success:!0});return}let o=await t.requestOptional(T.get,{sessionId:n});e.setResult({success:o.handled&&o.data.session?.status===`archived`})})}function Nn(e){let{bus:t}=e;return t.on(j.purge,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(T.get,{sessionId:n}),i=r.handled?r.data.session:null;if(!i){e.setResult({success:!1,error:`Session not found`});return}if(i.status!==`archived`){e.setResult({success:!1,error:`Cannot purge session unless archived. Call close then archive first.`});return}let a=await t.requestOptional(w.listBySession,{sessionId:n}),o=a.handled?a.data.agents:[];if((await Promise.all(o.map(async e=>{let n=await t.requestOptional(w.updateStatus,{agentId:e.agentId,status:`disposed`});return n.handled&&n.data.success}))).some(e=>!e)){e.setResult({success:!1,error:`Cannot purge session because an agent could not be sealed.`});return}if((await Promise.all(o.map(e=>ln(t,e.agentId)))).some(e=>!e.released)){e.setResult({success:!1,error:`Cannot purge session while an owner runtime may still hold an agent connector.`});return}let s=await t.requestOptional(T.list,{status:`all`}),c=s.handled?s.data.sessions:[];for(let e of c)e.parentSessionId===n&&await t.requestOptional(T.update,{sessionId:e.sessionId,parentSessionId:null});let l=await t.requestOptional(d.getEvents,{sessionId:n,options:{limit:1}}),u=l.handled?l.data.totalCount:0;await t.requestOptional(d.deleteBySession,{sessionId:n}),await t.requestOptional(T.delete,{sessionId:n}),await t.emit(j.purged,{sessionId:n}),e.setResult({success:!0,eventsDeleted:u})})}var Pn=class extends At{options;ownership;requireOwnershipInstanceId(){let e=this.ownership?.instanceId;if(e===void 0)throw Error(`Session ownership authority is not initialized`);return e}constructor(e=Et,t={}){super(e),this.options=t}async onInit(){let e=wn({bus:this.bus,...this.options.machineId!==void 0&&{machineId:this.options.machineId},...this.options.topology!==void 0&&{topology:this.options.topology},instanceId:crypto.randomUUID()});this.ownership=e.ownership,this.addCleanup(async()=>{this.ownership===e.ownership&&(this.ownership=void 0),await e.ownership.close()});for(let t of e.cleanups)this.addCleanup(t);this.addCleanup(m(this.bus)),this.addCleanup(this.scheduleOwnershipReconcile()),await this.reconcileOrphanedTurns()}async onDestroy(){let e=this.ownership;this.ownership=void 0,await e?.close()}scheduleOwnershipReconcile(){let e=this.bus.on(kt.phase.coordinatorReady,async t=>{e(),t.setResult({});try{await this.bus.request(j.ownership.reconcile,{})}catch(e){console.error(`[MakaioSessionService] Ownership reconcile failed:`,e)}});return e}async reconcileOrphanedTurns(){let e=await this.bus.requestOptional(C.listActive,{});if(!e.handled)return;let{turns:t}=e.data;for(let e of t)try{let{transitioned:t}=await this.bus.request(C.complete,{turnId:e.turnId,status:`error`,expectedStatus:`active`,error:`process-restart`});if(t){let t={sessionId:e.sessionId,turnId:e.turnId,turnNumber:e.turnNumber,success:!1,error:`process-restart`,ingestionMarker:`live`};await me(this.bus,{type:`turn.completed`,sessionId:e.sessionId,payload:t}),await this.bus.emit(j.turn.completed,t)}}catch(t){console.error(`[MakaioSessionService] Failed to reconcile orphaned turn ${e.turnId}:`,t)}}};function Fn(e,t){let n=t===void 0?``:` machineId="${t}"`;return Error(`No adapter found for adapterName="${e}"${n}. Ensure adapter-runtime identity handlers are registered; adapter startup verifies live availability.`)}function V(e,t){return JSON.stringify([t??null,e])}var In=class{bus;registry=new Map;cleanup;constructor(e){this.bus=e;let t=this.bus.on(O.initialized,e=>{this.registry.set(V(e.payload.adapterName),e.payload.adapterId),this.registry.set(V(e.payload.adapterName,e.payload.machineId),e.payload.adapterId)}),n=this.bus.on(O.deinitialized,e=>{let t=[V(e.payload.adapterName),V(e.payload.adapterName,e.payload.machineId)];for(let n of t)this.registry.get(n)===e.payload.adapterId&&this.registry.delete(n)});this.cleanup=()=>{t(),n()}}resolve(e){let t=this.registry.get(V(e));if(!t)throw Fn(e);return t}async resolveAvailable(e,t){try{let{adapterId:n}=await this.bus.request(Ue.resolveId,{adapterName:e,...t!==void 0&&{machineId:t}});return this.registry.set(V(e,t),n),n}catch{let n=this.registry.get(V(e,t));if(n)return n;throw Fn(e,t)}}destroy(){this.cleanup?.(),this.cleanup=void 0,this.registry.clear()}};async function Ln(e,t){e.emit(E.stored,{message:structuredClone(t)});try{await e.request(d.append,{event:{sessionId:t.sessionId,eventId:crypto.randomUUID(),timestamp:t.timestamp,type:`message`,payload:{messageId:t.messageId,turnId:t.turnId,role:t.role}}})}catch(e){console.error(`[MessageStorage] Failed to emit session event for message:`,e)}}function Rn(e){return{messageId:e.messageId,turnId:e.turnId,sessionId:e.sessionId,role:e.role,contentText:e.contentText,blocks:JSON.parse(e.blocks),agentId:e.agentId??void 0,adapterSessionId:e.adapterSessionId??void 0,adapterMessageId:e.adapterMessageId??void 0,timestamp:e.timestamp,editOf:e.editOf??void 0,origin:e.origin??void 0}}function zn(e){let{bus:t,db:n}=e,{messages:r}=F(n,f);return t.on(E.append,async e=>{let{message:i,emitEvent:a}=e.payload,o=i.messageId??crypto.randomUUID(),s={...i,messageId:o,blocks:i.blocks??[]};await n.insert(r).values({messageId:o,turnId:s.turnId,sessionId:s.sessionId,role:s.role,contentText:s.contentText,blocks:JSON.stringify(s.blocks),agentId:s.agentId??null,adapterSessionId:s.adapterSessionId??null,adapterMessageId:s.adapterMessageId??null,timestamp:s.timestamp,editOf:s.editOf??null,origin:s.origin??null}),e.setResult({message:s}),(a??!0)&&await Ln(t,s)})}function Bn(e){let{bus:t,db:n}=e,{messages:r}=F(n,f);return t.on(E.getBySession,async e=>{let{sessionId:t,limit:i,after:a,includeAfter:o=!1,order:s=`asc`}=e.payload,c=s===`desc`?Jt:Kt,l=n.select().from(r).where(L(r.sessionId,t)).orderBy(c(r.timestamp),c(r.messageId));if(a){let e=s===`desc`?nn(Qt(r.timestamp,a.timestamp),I(L(r.timestamp,a.timestamp),o?$t(r.messageId,a.messageId):Qt(r.messageId,a.messageId))):nn(Yt(r.timestamp,a.timestamp),I(L(r.timestamp,a.timestamp),o?Xt(r.messageId,a.messageId):Yt(r.messageId,a.messageId)));l=n.select().from(r).where(I(L(r.sessionId,t),e)).orderBy(c(r.timestamp),c(r.messageId))}let u=i??100,d=await l.limit(u+1),f=d.length>u,p=f?d.slice(0,u):d,m=f&&p.length>0?M(p[p.length-1]):null;e.setResult({messages:p.map(Rn),nextCursor:m})})}function Vn(e){let{bus:t,db:n}=e,{messages:r}=F(n,f);return t.on(E.getByTurn,async e=>{let{turnId:t}=e.payload,i=await n.select().from(r).where(L(r.turnId,t)).orderBy(Kt(r.timestamp));e.setResult({messages:i.map(Rn)})})}function Hn(e){let{bus:t,db:n}=e,{messages:r}=F(n,f);return t.on(E.get,async e=>{let{messageId:t}=e.payload,[i]=await n.select().from(r).where(L(r.messageId,t)).limit(1);e.setResult({message:i?Rn(i):null})})}function Un(e){let{bus:t,db:n}=e,{messages:r}=F(n,f),i=Gt(n).fts;return t.on(E.search,async e=>{let{query:t,sessionId:a,limit:o}=e.payload,s=o??50;if(!t.trim()){e.setResult({messages:[],total:0});return}let{rows:c,total:l}=await i.searchMessages(n,r,{query:t,sessionId:a,limit:s});e.setResult({messages:c.map(Rn),total:l})})}function Wn(e){let{bus:t,db:n}=e,{messages:r}=F(n,f),i=Gt(n).fts;return t.on(E.ftsSearch,async e=>{let{query:t,sessionId:a,limit:o=20}=e.payload;if(!t.trim()){e.setResult({results:[],total:0});return}let{results:s,total:c}=await i.searchMessageExcerpts(n,r,{query:t,sessionId:a,limit:o});e.setResult({results:s,total:c})})}function Gn(e){let{bus:t,db:n}=e,{messages:r}=F(n,f);return t.on(E.getByAdapterMessageId,async e=>{let{adapterMessageId:t}=e.payload,[i]=await n.select().from(r).where(L(r.adapterMessageId,t)).limit(1);e.setResult({message:i?Rn(i):null})})}function Kn(e){let{bus:t,db:n}=e,{messages:r}=F(n,f);return t.on(E.upsertByAdapterMessageId,async e=>{let{adapterMessageId:i,sessionId:a,turnId:o,role:s,contentText:c,blocks:l,agentId:u,adapterSessionId:d,timestamp:f,origin:p}=e.payload,[m]=await n.select({messageId:r.messageId,turnId:r.turnId}).from(r).where(I(L(r.adapterMessageId,i),L(r.sessionId,a))).limit(1);if(m){m.turnId===null&&o!==null&&await n.update(r).set({turnId:o}).where(L(r.messageId,m.messageId)),e.setResult({messageId:m.messageId,created:!1});return}let h=crypto.randomUUID();if((await n.insert(r).values({messageId:h,turnId:o,sessionId:a,role:s,contentText:c,blocks:JSON.stringify(l),agentId:u??null,adapterSessionId:d??null,adapterMessageId:i,timestamp:f,editOf:null,origin:p??null}).onConflictDoNothing({target:[r.adapterMessageId,r.sessionId]}).returning({messageId:r.messageId})).length===0){let[t]=await n.select({messageId:r.messageId,turnId:r.turnId}).from(r).where(I(L(r.adapterMessageId,i),L(r.sessionId,a))).limit(1);if(t===void 0)throw Error(`Message upsert conflict winner disappeared before reread completed`);t.turnId===null&&o!==null&&await n.update(r).set({turnId:o}).where(L(r.messageId,t.messageId)),e.setResult({messageId:t.messageId,created:!1});return}e.setResult({messageId:h,created:!0}),await Ln(t,{messageId:h,sessionId:a,turnId:o,role:s,contentText:c,blocks:l,agentId:u??void 0,adapterSessionId:d??void 0,adapterMessageId:i,timestamp:f,editOf:void 0,origin:p??void 0})})}function qn(e,t){let n={bus:e,db:t},r=[zn(n),Bn(n),Vn(n),Hn(n),Un(n),Wn(n),Kn(n),Gn(n)];return()=>r.forEach(e=>e())}function Jn(e,t){return vt(M(e),M(t))}function Yn(e,t){return yt(M(e),M(t))}function Xn(e,t){let n=e.get(t);if(n!==void 0)return n;let r=new Map;return e.set(t,r),r}function Zn(e,t,n,r){if(r===null)return;let i=e.get(n);if(i===void 0||i.turnId!==null)return;i.turnId=r;let a=t.get(r)??[];a.includes(n)||(a.push(n),t.set(r,a))}function Qn(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=$n(t,n,r,i),o=[er(e,t,a),tr(e,t,n),nr(e,t,r),rr(e,t),ir(e,t),ar(e,t,r,i,a),or(e,t,n,r,i)];return()=>o.forEach(e=>e())}function $n(e,t,n,r){return i=>{e.set(i.messageId,i);let a=t.get(i.sessionId)??[];if(a.push(i.messageId),t.set(i.sessionId,a),i.turnId){let e=n.get(i.turnId)??[];e.push(i.messageId),n.set(i.turnId,e)}i.adapterMessageId&&Xn(r,i.sessionId).set(i.adapterMessageId,i.messageId)}}function er(e,t,n){return e.on(E.append,async t=>{let{message:r,emitEvent:i}=t.payload,a=r.messageId??crypto.randomUUID(),o={...r,messageId:a,blocks:r.blocks??[]};n(o),t.setResult({message:o}),(i??!0)&&await Ln(e,o)})}function tr(e,t,n){return e.on(E.getBySession,async e=>{let{sessionId:r,limit:i,after:a,includeAfter:o=!1,order:s=`asc`}=e.payload,c=n.get(r)??[],l=s===`desc`?Yn:Jn,u=c.map(e=>t.get(e)).filter(e=>!!e).sort(l);a&&(u=u.filter(e=>{let t=s===`desc`?yt(M(e),a):vt(M(e),a);return o?t>=0:t>0}));let d=i??100,f=u.length>d,p=f?u.slice(0,d):u,m=f&&p.length>0?M(p[p.length-1]):null;e.setResult({messages:p,nextCursor:m})})}function nr(e,t,n){return e.on(E.getByTurn,async e=>{let{turnId:r}=e.payload,i=(n.get(r)??[]).map(e=>t.get(e)).filter(e=>!!e).sort(Jn);e.setResult({messages:i})})}function rr(e,t){return e.on(E.get,async e=>{e.setResult({message:t.get(e.payload.messageId)??null})})}function ir(e,t){return e.on(E.search,async e=>{let{query:n,sessionId:r,limit:i}=e.payload,a=i??50,o=n.trim().toLowerCase(),s=[...t.values()].filter(e=>r?e.sessionId===r:!0),c=o.length===0?[]:s.filter(e=>e.contentText.toLowerCase().includes(o));c.sort(Jn),e.setResult({messages:c.slice(0,a),total:c.length})})}function ar(e,t,n,r,i){return e.on(E.upsertByAdapterMessageId,async a=>{let{adapterMessageId:o,sessionId:s,turnId:c,role:l,contentText:u,blocks:d,agentId:f,adapterSessionId:p,timestamp:m,origin:h}=a.payload,g=r.get(s)?.get(o);if(g){Zn(t,n,g,c),a.setResult({messageId:g,created:!1});return}let _=crypto.randomUUID(),v={messageId:_,sessionId:s,turnId:c,role:l,contentText:u,blocks:d,agentId:f??void 0,adapterSessionId:p??void 0,adapterMessageId:o,timestamp:m,editOf:void 0,origin:h??void 0};i(v),a.setResult({messageId:_,created:!0}),await Ln(e,v)})}function or(e,t,n,r,i){return e.on(T.delete,e=>{let{sessionId:a}=e.payload,o=n.get(a)??[];for(let e of o){let n=t.get(e);if(n){if(t.delete(e),n.turnId){let t=(r.get(n.turnId)??[]).filter(t=>t!==e);t.length===0?r.delete(n.turnId):r.set(n.turnId,t)}if(n.adapterMessageId){let e=i.get(n.sessionId);e?.delete(n.adapterMessageId),e?.size===0&&i.delete(n.sessionId)}}}n.delete(a)})}const sr=Ht(`message_routing`,e=>({messageId:e.text(`message_id`).notNull().references(u,{onDelete:`cascade`}),agentId:e.text(`agent_id`).notNull(),status:e.textEnum(`status`,{enum:[`sent`,`acknowledged`,`completed`]}).notNull(),timestamp:e.epochMs(`timestamp`).notNull(),error:e.text(`error`)}),{sqlite:e=>[Pt({columns:[e.messageId,e.agentId,e.status]}),Mt(`idx_routing_agent`).on(e.agentId,e.timestamp)],postgres:e=>[zt({columns:[e.messageId,e.agentId,e.status]}),Rt(`idx_routing_agent`).on(e.agentId,e.timestamp)]}),cr=sr.sqlite,lr=rn(`messageRouting`,{schemas:{record:{request:ct,response:D.object({success:D.boolean()})},getByMessage:{request:D.object({messageId:D.string()}),response:D.object({routing:D.array(ct)})},getCompleted:{request:D.object({messageId:D.string()}),response:D.object({agentIds:D.array(D.string())})},isComplete:{request:D.object({messageId:D.string(),targetAgentIds:D.array(D.string())}),response:D.object({complete:D.boolean(),pending:D.array(D.string())})}},extensions:{drizzle:{messageRouting:cr}}}),H=lr.subjects,ur=sr.postgres,dr=Vt({messageRouting:cr},{messageRouting:ur});function fr(e){return{messageId:e.messageId,agentId:e.agentId,status:e.status,timestamp:e.timestamp,error:e.error??void 0}}function pr(e,t){let{messageRouting:n}=F(t,dr),r=[];return r.push(e.on(H.record,async e=>{let{messageId:r,agentId:i,status:a,timestamp:o,error:s}=e.payload;await t.insert(n).values({messageId:r,agentId:i,status:a,timestamp:o,error:s??null}).onConflictDoUpdate({target:[n.messageId,n.agentId,n.status],set:{timestamp:o,error:s??null}}),e.setResult({success:!0})})),r.push(e.on(H.getByMessage,async e=>{let{messageId:r}=e.payload,i=await t.select().from(n).where(L(n.messageId,r));e.setResult({routing:i.map(fr)})})),r.push(e.on(H.getCompleted,async e=>{let{messageId:r}=e.payload,i=await t.select().from(n).where(I(L(n.messageId,r),L(n.status,`completed`)));e.setResult({agentIds:i.map(e=>e.agentId)})})),r.push(e.on(H.isComplete,async e=>{let{messageId:r,targetAgentIds:i}=e.payload,a=await t.select().from(n).where(I(L(n.messageId,r),L(n.status,`completed`))),o=new Set(a.map(e=>e.agentId)),s=i.filter(e=>!o.has(e));e.setResult({complete:s.length===0,pending:s})})),()=>r.forEach(e=>e())}const mr=`[session.sendMessage]`,hr={droppedAgentIds:new Set,recoveringAgentIds:new Set,deferredAgentIds:new Set,arbitratedAgentIds:new Set};function U(e,t){for(let n of t)e.add(n)}function W(e,t){let n=new Set(t.map(e=>e.agentId));return new Set([...e].filter(e=>n.has(e)))}function gr(e,t,n){let r=W(e,n);return{recovering:r,arbitrated:new Set([...W(t,n)].filter(e=>r.has(e)))}}function _r(e,t){if(e>=2)throw new S(`start-unresolved`,`[session.start] session ${t} did not stabilize after 2 deferral convergence passes`);return e+1}async function vr(e,t,n,r,i,a){let o=n,s=new Set(r),c=new Set(i),l=W(a,o),u,d=new Set(l),f=0;for(;d.size>0;){f=_r(f,t.sessionId);let n=await br(e,t,o,d,l);o=n.targetAgents,{recovering:s,arbitrated:c}=gr(s,c,o),U(s,n.recovering),U(c,W(n.arbitrated,o)),c=new Set([...W(c,o)].filter(e=>s.has(e))),U(l,W(n.deferred,o)),u=n.recoveryContext??u,d=W(n.deferred,o)}let p=await yr(e,t.session,o,s,c);for(U(l,p.deferredAgentIds),u=p.recoveryContext??u,s=new Set,c=new Set,d=W(p.deferredAgentIds,o);d.size>0;){f=_r(f,t.sessionId);let n=await br(e,t,o,d,l);if(o=n.targetAgents,{recovering:s,arbitrated:c}=gr(s,c,o),U(s,n.recovering),U(c,W(n.arbitrated,o)),c=new Set([...W(c,o)].filter(e=>s.has(e))),U(l,W(n.deferred,o)),u=n.recoveryContext??u,s.size>0){let n=await yr(e,t.session,o,s,c);U(l,n.deferredAgentIds),u=n.recoveryContext??u,d=W(n.deferredAgentIds,o),s=new Set,c=new Set}else d=W(n.deferred,o)}return{targetAgents:o,deferredAgentIds:l,recoveryContext:u}}async function yr(e,t,n,r,i){let a=await Promise.all(n.map(async t=>{if(t.runtimeOwner!==void 0&&!(r.has(t.agentId)&&!i.has(t.agentId)))return e.bus.requestOptional(O.getAgent,{agentId:t.agentId,adapterId:t.adapterId,ownerInstanceId:t.runtimeOwner.instanceId})})),o=[],s=new Set;for(let[t,r]of n.entries()){if(r.runtimeOwner===void 0){s.add(r.agentId);continue}let n=a[t];if(n===void 0){o.push(r);continue}let c=n.handled?n.data.agent:void 0;if(i.has(r.agentId)){if(c==null){o.push(r);continue}await Ie(e.bus,r.agentId);continue}(!n.handled||c===null)&&o.push(r)}if(o.length===0)return{recoveryContext:void 0,deferredAgentIds:s};let c=je,l=await ee(e.bus,t,c),u=Ne(c)??null,d=0;for(let t of o)(await ie(e.bus,t,{resumeProviderSessionId:u,machineId:e.machineId})).deferred?s.add(t.agentId):d+=1;return d===0?{recoveryContext:void 0,deferredAgentIds:s}:{recoveryContext:l,deferredAgentIds:s}}async function br(e,t,n,r,i){let a=n.filter(e=>r.has(e.agentId)),o=de(t.session,n,r);if(o.length>0)return{targetAgents:o,recovering:hr.recoveringAgentIds,arbitrated:hr.arbitratedAgentIds,deferred:hr.deferredAgentIds};Re(t.targetSpec)!==`lead-default`&&Pe(mr,t.sessionId,i);let s=await e.startReplacementLeadAgent(t.agentSelection??xe(a[0],e.machineId)),c=le(t.session,t.targetSpec);return c.length===0&&Pe(mr,t.sessionId,i),{targetAgents:c,recovering:s.recoveringAgentIds,arbitrated:s.arbitratedAgentIds,deferred:s.deferredAgentIds,recoveryContext:await ee(e.bus,t.session,je)}}const xr={writesAgentStatus:!0,connectorOnlyTeardown:!0};function Sr(e,t){return e.leadTransition.kind===`replace`?{...xr,reservation:t}:xr}async function Cr(e,t,n){let r=Fe(),i;try{i=await b(e,{sessionId:t.sessionId,agentId:n,adapterName:t.adapterName,instance:t.instance,role:`lead`,resumeProviderSessionId:null,expectedLeadAgentId:t.expectedLeadAgentId,claimToken:r})}catch(t){throw await e.requestOptional(j.ownership.release,{agentId:n,claimToken:r,disposition:`released`}).catch(()=>void 0),t}return i.outcome===`reserved`?{kind:`reserved`,reservation:i.reservation}:i.outcome===`lead-conflict`?{kind:`lead-conflict`,currentLeadAgentId:i.currentLeadAgentId}:i.outcome===`session-not-active`?{kind:`refused`,outcome:i.outcome,status:i.status}:{kind:`refused`,outcome:i.outcome}}async function wr(e,t,n,r,i,a,o){if(i.agentId===n&&i.adapterId===t.instance.adapterId&&i.sessionId===t.sessionId&&i.ownerInstanceId===a)return{...i,ownerInstanceId:i.ownerInstanceId};throw await y(e,n,o,r),await x(e,t.instance.adapterId,n,a,!0),new S(`start-failed`,`[session.start] ${i.ownerInstanceId===void 0?`adapter omitted its owner instance`:i.ownerInstanceId===a?`adapter response identity mismatch`:`adapter owner mismatch`} for agent ${n}`)}async function Tr(e,t,n,r,i,a){let o,s={...t.startRequest,adapterId:t.instance.adapterId,sessionId:t.sessionId,role:`lead`,agentId:n,ownerInstanceId:r.ownerInstanceId};try{o=t.dispatch?await t.dispatch(s):await e.request(O.startAgent,s)}catch(o){throw await y(e,n,a,i),await x(e,t.instance.adapterId,n,r.ownerInstanceId,!0),o}if(!o.success){let s=new S(`start-failed`,`[session.start] Failed to start agent (sessionId=${t.sessionId}, adapterName=${t.adapterName}): ${o.message}`);throw o.dispatch===`not-dispatched`?await ue(e,n,r):(await y(e,n,a,i),await x(e,t.instance.adapterId,n,r.ownerInstanceId,!0)),s}return wr(e,t,n,i,o,r.ownerInstanceId,a)}async function Er(e,t,n){await ue(e,n,void 0,{sessionId:t.sessionId,agentId:n,expectedLeadAgentId:t.expectedLeadAgentId,transition:t.leadTransition.kind})}async function Dr(e,t,n){let r=De({agentId:n,instance:t.instance,adapterName:t.adapterName,sessionId:t.sessionId,role:`lead`,runtime:t.startRequest,...t.providerConfigId!==void 0&&{providerConfigId:t.providerConfigId},...t.personaId!==void 0&&{personaId:t.personaId},...t.profileId!==void 0&&{profileId:t.profileId}}),i;try{await e.requestOptional(w.set,{agentId:n,agent:r}),i=await Cr(e,t,n)}catch(r){throw await Er(e,t,n),r}if(i.kind===`lead-conflict`){if(!(await ue(e,n,void 0)).rowDeleted)throw new S(`start-unresolved`,`[session.start] lost lead designation for agent ${n}, but its rollback could not be confirmed`);return{outcome:`lead-conflict`,currentLeadAgentId:i.currentLeadAgentId}}if(i.kind===`refused`)throw await ue(e,n,void 0),new S(i.outcome===`session-not-active`?`session-not-active`:`start-failed`,`[session.start] reservation for agent ${n} was refused: ${i.outcome}`,void 0,void 0,i.status);let{reservation:a}=i,o=Sr(t,a),s=new ke([a.claim?.claimToken]),c=await Tr(e,t,n,a,s,o),l=Fe();return s.add(l),await g(e,{sessionId:t.sessionId,agentId:n,adapterId:t.instance.adapterId,adapterName:t.adapterName,policy:o,claimTokens:s,settlementClaimToken:l,admitSessionBeforeFinalAdoption:!0,...t.providerConfigId!==void 0&&{providerConfigId:t.providerConfigId},machineId:t.instance.machineId,ownerInstanceId:t.instance.ownerInstanceId},c.adapterSessionId,c.settlementAckToken,c.ownerInstanceId),{outcome:`started`,agent:{...r,status:`idle`,...c.adapterSessionId!==void 0&&{adapterSessionId:c.adapterSessionId}}}}async function Or(e,t){if(Se(t.instance)===void 0)throw new S(`start-failed`,`[session.start] lead transition requires a machine-scoped adapter instance (sessionId=${t.sessionId})`);let n=crypto.randomUUID(),r;if(await Oe(n,async()=>(r=await Dr(e,t,n),r.outcome===`started`?`connected`:`no-connector`)).settled,r===void 0)throw new S(`start-failed`,`[session.start] start for agent ${n} produced no result`);return r}function kr(e){return{source:e.source,...e.sourceId!==void 0&&{sourceId:e.sourceId}}}var Ar=class{turnId;sessionId;turnNumber;startedAt;_initiator;_agentIds;_messageIds=[];admittedTargetsByMessageId=new Map;terminalPairs=new Map;pendingMessageAdmissions=new Set;constructor(e){if(!Number.isInteger(e.turnNumber)||e.turnNumber<1)throw Error(`turnNumber must be a positive integer`);this.turnId=e.turnId??crypto.randomUUID(),this.sessionId=e.sessionId,this.turnNumber=e.turnNumber,this.startedAt=e.startedAt??Date.now(),this._initiator=Object.freeze(kr(e.initiator??{source:`user`})),this._agentIds=Object.freeze([...e.agentIds])}get agentIds(){return this._agentIds}get initiator(){return kr(this._initiator)}get messageIds(){return this._messageIds}get hasPendingMessageAppends(){return this.pendingMessageAdmissions.size>0}addMessage(e){this.admitMessage(e,this._agentIds),this.commitMessageAdmission(e)}claimMessageAppend(e){this.admitMessage(e,this._agentIds)}releaseMessageAppend(e){this.rollbackMessageAdmission(e)}admitMessage(e,t){if(this.admittedTargetsByMessageId.has(e))throw Error(`Turn ${this.turnId} already admitted message ${e}`);if(t.length===0||new Set(t).size!==t.length)throw Error(`Turn ${this.turnId} requires a non-empty unique target set for message ${e}`);if(t.some(e=>!this.hasAgent(e)))throw Error(`Turn ${this.turnId} cannot admit targets outside its immutable participant set`);this._messageIds.push(e),this.admittedTargetsByMessageId.set(e,new Set(t)),this.pendingMessageAdmissions.add(e)}commitMessageAdmission(e){if(!this.admittedTargetsByMessageId.has(e))throw Error(`Turn ${this.turnId} cannot commit unknown message ${e}`);this.pendingMessageAdmissions.delete(e)}rollbackMessageAdmission(e){let t=this.admittedTargetsByMessageId.get(e);if(!t)return;if([...t].some(t=>this.terminalPairs.has(this.pairKey(e,t))))throw Error(`Turn ${this.turnId} cannot roll back terminal message ${e}`);this.admittedTargetsByMessageId.delete(e),this.pendingMessageAdmissions.delete(e);let n=this._messageIds.indexOf(e);n>=0&&this._messageIds.splice(n,1)}recordPairTerminal(e,t,n,r){if(!this.admittedTargetsByMessageId.get(e)?.has(t))return{accepted:!1,turnComplete:!1};let i=this.pairKey(e,t);return this.terminalPairs.has(i)?{accepted:!1,turnComplete:!1}:(this.terminalPairs.set(i,{outcome:n,...r!==void 0&&{error:r}}),this.isComplete()?{accepted:!0,turnComplete:!0,result:this.getResult()}:{accepted:!0,turnComplete:!1})}hasAdmittedPair(e,t){return this.admittedTargetsByMessageId.get(e)?.has(t)??!1}get admittedPairs(){return[...this.admittedTargetsByMessageId].flatMap(([e,t])=>[...t].map(t=>({messageId:e,agentId:t})))}hasAgent(e){return this._agentIds.includes(e)}isComplete(){if(this.admittedTargetsByMessageId.size===0||this.pendingMessageAdmissions.size>0)return!1;for(let[e,t]of this.admittedTargetsByMessageId)for(let n of t)if(!this.terminalPairs.has(this.pairKey(e,n)))return!1;return!0}getResult(){let e=[...this.terminalPairs.values()].filter(e=>e.outcome===`error`).map(e=>e.error??`Unknown error`);return{success:e.length===0,errors:e}}getContext(){if(this._messageIds.length===0)throw Error(`Turn ${this.turnId} has no messages yet`);return{turnId:this.turnId,messageId:this._messageIds[this._messageIds.length-1]}}getContextForMessage(e){return{turnId:this.turnId,messageId:e}}pairKey(e,t){return JSON.stringify([e,t])}},jr=class e{byAgent=new Map;coverageByAgent=new Map;ambiguousAgents=new Set;providerCalls=new Set;add(e){if(e.granularity===`latest-request-gauge`||this.ambiguousAgents.has(e.agentId))return;let t=this.coverageByAgent.get(e.agentId);if(t!==void 0&&t!==e.granularity){this.byAgent.delete(e.agentId),this.ambiguousAgents.add(e.agentId);return}if(e.granularity===`provider-call`&&e.llmCallId!==void 0){let t=`${e.agentId}:${e.llmCallId}`;if(this.providerCalls.has(t))return;this.providerCalls.add(t)}this.coverageByAgent.set(e.agentId,e.granularity);let n=this.byAgent.get(e.agentId);n?(n.inputTokens+=e.inputTokens,e.inputCachedTokens>0&&(n.cachedInputTokens=(n.cachedInputTokens??0)+e.inputCachedTokens),n.outputTokens+=e.outputTokens):this.byAgent.set(e.agentId,{inputTokens:e.inputTokens,...e.inputCachedTokens>0&&{cachedInputTokens:e.inputCachedTokens},outputTokens:e.outputTokens})}preview(t){let n=new e;for(let[e,t]of this.byAgent)n.byAgent.set(e,{...t});for(let[e,t]of this.coverageByAgent)n.coverageByAgent.set(e,t);for(let e of this.ambiguousAgents)n.ambiguousAgents.add(e);for(let e of this.providerCalls)n.providerCalls.add(e);for(let e of t)n.add(e);return n.snapshot()}snapshot(){if(this.byAgent.size===0)return;let e=0,t=0,n=0,r={};for(let[i,a]of this.byAgent)e+=a.inputTokens,t+=a.cachedInputTokens??0,n+=a.outputTokens,r[i]={...a};return{total:{inputTokens:e,...t>0&&{cachedInputTokens:t},outputTokens:n},byAgent:r}}flush(){let e=this.snapshot();return this.byAgent.clear(),this.coverageByAgent.clear(),this.ambiguousAgents.clear(),this.providerCalls.clear(),e}clear(){this.byAgent.clear(),this.coverageByAgent.clear(),this.ambiguousAgents.clear(),this.providerCalls.clear()}};const Mr=Symbol(`turnReservation`);var Nr=class{activeTurns=new Map;reservations=new Map;pendingAcquisitions=new Map;pendingPreparations=new Map;preparedTurnIds=new Set;pendingFinalizations=new Map;finalizingTurnIds=new Set;async awaitFinalization(e,t){let n=this.pendingFinalizations.get(e);if(n)return await n;let r=t();this.pendingFinalizations.set(e,r);try{await r}finally{this.pendingFinalizations.get(e)===r&&this.pendingFinalizations.delete(e)}}getActive(e){return this.activeTurns.get(e)}findActiveByTurnId(e){for(let t of this.activeTurns.values())if(t.turnId===e)return t}async acquire(e,t){let n=this.activeTurns.get(e);if(n)return{turn:n,isNew:!1};let r=this.pendingAcquisitions.get(e);if(r)return{turn:await r,isNew:!1};let i=t(this.reserve(e));this.pendingAcquisitions.set(e,i);try{return{turn:await i,isNew:!0}}finally{this.pendingAcquisitions.get(e)===i&&this.pendingAcquisitions.delete(e)}}reserve(e){if(this.activeTurns.has(e)||this.reservations.has(e))throw Error(`Session ${e} already has a routable or pending turn`);let t={sessionId:e,[Mr]:!0};return this.reservations.set(e,t),t}release(e){this.reservations.get(e.sessionId)===e&&this.reservations.delete(e.sessionId)}activate(e,t){if(this.reservations.get(e.sessionId)!==e)throw Error(`Turn reservation for session ${e.sessionId} is no longer active`);this.activeTurns.set(e.sessionId,t),this.release(e)}clearActive(e){return this.activeTurns.get(e.sessionId)?.turnId===e.turnId?(this.activeTurns.delete(e.sessionId),this.preparedTurnIds.delete(e.turnId),!0):!1}tryAdmitMessage(e,t,n){if(this.finalizingTurnIds.has(e.turnId)||this.activeTurns.get(e.sessionId)?.turnId!==e.turnId)return;e.admitMessage(t,n);let r=!1;return{turn:e,messageId:t,agentIds:[...n],commit:()=>{r||(r=!0,e.commitMessageAdmission(t))},rollback:async()=>{r||(r=!0,e.rollbackMessageAdmission(t))}}}beginFinalization(e){return this.finalizingTurnIds.has(e.turnId)||this.activeTurns.get(e.sessionId)?.turnId!==e.turnId?!1:(this.finalizingTurnIds.add(e.turnId),this.clearActive(e),!0)}finishFinalization(e){this.finalizingTurnIds.delete(e.turnId)}beginPreparation(e){if(this.preparedTurnIds.has(e.turnId))return{turn:e,isOwner:!1,ready:Promise.resolve()};let t=this.pendingPreparations.get(e.turnId);if(t)return{turn:e,isOwner:!1,ready:t.ready};let n,r,i=new Promise((e,t)=>{n=e,r=t});return i.catch(()=>{}),this.pendingPreparations.set(e.turnId,{turn:e,ready:i,resolve:n,reject:r}),{turn:e,isOwner:!0,ready:i}}completePreparation(e){if(!e.isOwner)throw Error(`Only the preparation owner can complete turn ${e.turn.turnId}`);let t=this.pendingPreparations.get(e.turn.turnId);if(!t||t.turn!==e.turn)throw Error(`Turn preparation for ${e.turn.turnId} is no longer active`);this.pendingPreparations.delete(e.turn.turnId),this.preparedTurnIds.add(e.turn.turnId),t.resolve()}failPreparation(e,t){if(!e.isOwner)throw Error(`Only the preparation owner can fail turn ${e.turn.turnId}`);let n=this.pendingPreparations.get(e.turn.turnId);!n||n.turn!==e.turn||(this.pendingPreparations.delete(e.turn.turnId),n.reject(t))}clear(){this.activeTurns.clear(),this.reservations.clear(),this.pendingAcquisitions.clear(),this.pendingFinalizations.clear(),this.finalizingTurnIds.clear();for(let e of this.pendingPreparations.values())e.reject(Error(`Turn slot registry was cleared during preparation`));this.pendingPreparations.clear(),this.preparedTurnIds.clear()}},Pr=class{bus;resolveTurn;timeoutMs;settledPairs=new Map;waiters=new Map;cleanup;destroyed=!1;constructor(e,t,n){this.bus=e,this.resolveTurn=t,this.timeoutMs=n,this.cleanup=e.on(j.turn.assistantPersistenceSettled,e=>{if(this.destroyed)return;let{sessionId:t,turnId:n,messageId:r,agentId:i}=e.payload,a=this.resolveTurn(n);if(!a||a.sessionId!==t||!a.hasAdmittedPair(r,i))return;let o=this.settledPairs.get(n)??new Set;o.add(this.pairKey(r,i)),this.settledPairs.set(n,o),this.isSettled(a)&&this.waiters.get(n)?.settle()})}async waitFor(e){if(this.destroyed||e.agentIds.length===0||this.isSettled(e))return;let t=await this.bus.requestOptional(E.getByTurn,{turnId:e.turnId});this.destroyed||!t.handled||await new Promise(t=>{let n=()=>{clearTimeout(r),this.waiters.delete(e.turnId),t()},r=setTimeout(n,this.timeoutMs);this.waiters.set(e.turnId,{settle:n}),this.isSettled(e)&&n()})}clear(e){this.waiters.get(e)?.settle(),this.settledPairs.delete(e)}destroy(){if(!this.destroyed){this.destroyed=!0,this.cleanup();for(let e of[...this.waiters.values()])e.settle();this.waiters.clear(),this.settledPairs.clear()}}isSettled(e){if(e.admittedPairs.length===0)return!0;let t=this.settledPairs.get(e.turnId);return t!==void 0&&e.admittedPairs.every(({messageId:e,agentId:n})=>t.has(this.pairKey(e,n)))}pairKey(e,t){return JSON.stringify([e,t])}};function Fr(e,t,n){return{...e,isPreparationOwner:t.isOwner,commit:()=>{e.commit(),t.isOwner&&n.completePreparation(t)},rollback:async(r=`message-setup-failed:${e.messageId}`)=>{let i=e.rollback();if(t.isOwner){let a={success:!1,errors:[r]};n.beginSetupFailure(e,a),n.failPreparation(t,Error(`Message ${e.messageId} setup failed`)),await i,await n.finalizeSetupFailure(e,a);return}await i,e.turn.isComplete()&&await n.finalizeCompletedLedger(e,e.turn.getResult())}}}function Ir(e){return{status:e.success?`completed`:`error`,error:e.errors.length>0?e.errors.join(`; `):void 0}}function Lr(e,t){if(e===void 0||t===void 0)return e===t;if(e.total.inputTokens!==t.total.inputTokens||e.total.cachedInputTokens!==t.total.cachedInputTokens||e.total.outputTokens!==t.total.outputTokens||e.total.cost!==t.total.cost)return!1;let n=e.byAgent??{},r=t.byAgent??{},i=Object.keys(n).sort(),a=Object.keys(r).sort();return i.length===a.length?i.every((e,t)=>{if(e!==a[t])return!1;let i=n[e],o=r[e];return i?.inputTokens===o?.inputTokens&&i?.cachedInputTokens===o?.cachedInputTokens&&i?.outputTokens===o?.outputTokens&&i?.cost===o?.cost}):!1}async function Rr(e,t,n,r,i){let a=Ir(n),o=await e.requestOptional(C.complete,{turnId:t.turnId,status:a.status,...i!==void 0&&{expectedStatus:i},error:a.error,usage:r??null});if(!o.handled)return{handled:!1,transitioned:!0};let s=o.data.turn;if(!(s.status===a.status&&s.error===a.error))return{handled:!0,transitioned:!1};if(Lr(s.usage,r))return{handled:!0,transitioned:!0};if(o.data.transitioned)throw Error(`Turn completion storage returned non-canonical usage for transitioned turn ${t.turnId}`);let c=await e.requestOptional(C.complete,{turnId:t.turnId,status:a.status,error:a.error,usage:r??null});if(!c.handled||!Lr(c.data.turn.usage,r))throw Error(`Turn completion usage reconciliation did not persist the canonical snapshot for ${t.turnId}`);if(c.data.turn.status!==a.status||c.data.turn.error!==a.error)throw Error(`Turn completion usage reconciliation changed terminal metadata for ${t.turnId}`);return{handled:!0,transitioned:!0}}async function zr(e){let t=e.turn.turnId,n=e.currentUsage;for(;;){let r=e.bufferedUsage.get(t);if(r===void 0||r.length===0)return n;e.bufferedUsage.delete(t);let i=e.usageAccumulator?e.usageAccumulator.preview(r):n;try{await Rr(e.bus,e.turn,e.result,i)}catch(n){let i=e.bufferedUsage.get(t)??[];throw e.bufferedUsage.set(t,[...r,...i]),n}for(let t of r)e.usageAccumulator?.add(t);n=e.usageAccumulator?.snapshot()??i}}function Br(e,t,n){return[e.on(k.usage,e=>{let{agentId:n,turnId:r,inputTokens:i,inputCachedTokens:a,outputTokens:o,granularity:s,llmCallId:c}=e.payload;if(!r){console.warn(`[SessionTurnManager] Dropping usage event without turnId (agentId=${n}).`);return}let l=t.resolveUsageTurn(r);if(!l||!l.hasAgent(n))return;let u={agentId:n,inputTokens:i,inputCachedTokens:a,outputTokens:o,granularity:s,...c&&{llmCallId:c}};t.isCompletionInFlight(l.turnId)?t.bufferUsage(l.turnId,u):t.addUsage(l,u)}),e.on(k.complete,async r=>{let{agentId:i,outcome:a,error:o,turnId:s,messageId:c}=r.payload;r.payload._import||!s||await Vr(e,t,{agentId:i,messageId:c,outcome:a??`completed`,error:a===`error`?o:void 0,turnId:s,onTurnComplete:n})})]}async function Vr(e,t,n){let r=t.resolveCompletionTurn(n.turnId);if(!r?.hasAgent(n.agentId))return;let i=r.recordPairTerminal(n.messageId,n.agentId,n.outcome,n.error);if(!i.accepted){t.canRetry(r.turnId)&&await t.retry(r.turnId);return}i.turnComplete&&t.beginFinalization(r,i.result);let a=e.emit(j.user_message.completed,{sessionId:r.sessionId,turnId:r.turnId,turnNumber:r.turnNumber,messageId:n.messageId,agentId:n.agentId,outcome:n.outcome,...n.error!==void 0&&{error:n.error}}),o=i.turnComplete?n.onTurnComplete(r,i.result):Promise.resolve(),[s,c]=await Promise.allSettled([a,o]);if(s.status===`rejected`&&console.error(`[SessionTurnManager] Failed to emit user-message completion:`,s.reason),c.status===`rejected`)throw c.reason}var Hr=class{bus;turnSlots=new Nr;usageAccumulators=new Map;completingTurnIds=new Set;completionPromises=new Map;completingTurns=new Map;closedUsageAdmissions=new Set;pendingTerminalCompletions=new Map;pendingTerminalResults=new Map;setupFinalizingTurnIds=new Set;bufferedUsageDuringCompletion=new Map;syntheticTurnCounters=new Map;assistantPersistenceBarrier;cleanups=[];constructor(e){this.bus=e,this.assistantPersistenceBarrier=new Pr(e,e=>this.findTurnForCompletion(e),1500)}async acquireTurn(e,t,n,r){await this.retryRetainedCompletionsForSession(e);let i=await this.turnSlots.acquire(e,e=>this.createReservedTurn(e,t,n,r));if(t.some(e=>!i.turn.hasAgent(e)))throw Error(`Turn ${i.turn.turnId} cannot route agents outside its immutable participant set (sessionId=${e})`);return i}async reserveTurn(e){return await this.retryRetainedCompletionsForSession(e),this.turnSlots.reserve(e)}releaseTurnReservation(e){this.turnSlots.release(e)}async acquireMessageAdmission(e,t,n,r,i){for(;;){let a=await this.acquireTurn(e,t,r,i),o=this.turnSlots.tryAdmitMessage(a.turn,n,t);if(!o)continue;let s=this.turnSlots.beginPreparation(a.turn);if(!s.isOwner)try{await s.ready}catch{await o.rollback();continue}return this.composeAdmissionWithPreparation(o,s)}}admitReservedMessage(e,t,n){let r=this.turnSlots.tryAdmitMessage(e,t,n);if(!r)throw Error(`Turn ${e.turnId} is no longer routable for message admission`);return this.composeAdmissionWithPreparation(r,this.turnSlots.beginPreparation(e))}async createReservedTurn(e,t,n,r){let{sessionId:i}=e;try{let a=await this.bus.requestOptional(C.create,{sessionId:i,...r!==void 0&&{turnId:r},...n!==void 0&&{initiator:n}}),o,s;if(a.handled)o=a.data.turn.turnId,s=a.data.turn.turnNumber;else{o=r??crypto.randomUUID();let e=(this.syntheticTurnCounters.get(i)??0)+1;this.syntheticTurnCounters.set(i,e),s=e}let c=new Ar({sessionId:i,agentIds:t,turnId:o,turnNumber:s,initiator:n});return this.turnSlots.activate(e,c),this.usageAccumulators.set(c.turnId,new jr),c}finally{this.releaseTurnReservation(e)}}async createTurn(e,t,n,r){return this.createReservedTurn(await this.reserveTurn(e),t,n,r)}discardActiveTurn(e){this.clearActiveRoutingTurn(e)&&(this.usageAccumulators.delete(e.turnId),this.assistantPersistenceBarrier.clear(e.turnId))}async failActiveTurnBeforeDispatch(e,t){if(this.turnSlots.getActive(e.sessionId)?.turnId!==e.turnId)return;let n={success:!1,errors:[t]};this.beginFinalization(e,n,`setup`),await this.completeTurn(e,n)}async failActiveTurnSetup(e,t){e.messageIds.length>0||e.hasPendingMessageAppends||await this.failActiveTurnBeforeDispatch(e,t)}clearActiveRoutingTurn(e){return this.turnSlots.clearActive(e)}composeAdmissionWithPreparation(e,t){return Fr(e,t,{completePreparation:e=>this.turnSlots.completePreparation(e),failPreparation:(e,t)=>this.turnSlots.failPreparation(e,t),beginSetupFailure:(e,t)=>this.beginFinalization(e.turn,t,`setup`),finalizeSetupFailure:async(e,t)=>this.completeTurn(e.turn,t),finalizeCompletedLedger:async(e,t)=>{this.beginFinalization(e.turn,t,`normal`),await this.completeTurn(e.turn,t)}})}registerCompletionHandlers(e){this.cleanups.push(...Br(this.bus,this.completionEventHooks(),e))}async completeTurn(e,t){let n=this.completionPromises.get(e.turnId);if(n)return await n;let r=this.completeTurnInternal(e,t);this.completionPromises.set(e.turnId,r);try{await r}finally{this.completionPromises.get(e.turnId)===r&&this.completionPromises.delete(e.turnId)}}async completeTurnInternal(e,t){if(this.completingTurnIds.has(e.turnId))return;this.completingTurnIds.add(e.turnId);let n=this.beginFinalization(e,t,`normal`),r=this.usageAccumulators.get(e.turnId),i=r?.snapshot(),a=this.pendingTerminalCompletions.get(e.turnId)??!1;try{if(!this.pendingTerminalCompletions.has(e.turnId)){let t=await Rr(this.bus,e,n,i,`active`);if(a=t.handled,!t.transitioned){this.clearActiveRoutingTurn(e),this.clearCompletionState(e,r);return}this.pendingTerminalCompletions.set(e.turnId,a),i=await zr({bus:this.bus,turn:e,result:n,usageAccumulator:r,currentUsage:i,bufferedUsage:this.bufferedUsageDuringCompletion})}}catch(t){throw this.completingTurnIds.delete(e.turnId),console.error(`[SessionTurnManager] Failed to persist completion for turn ${e.turnId}:`,t),t}let o=!1;try{a&&!this.setupFinalizingTurnIds.has(e.turnId)&&await this.assistantPersistenceBarrier.waitFor(e),this.closedUsageAdmissions.add(e.turnId),i=await zr({bus:this.bus,turn:e,result:n,usageAccumulator:r,currentUsage:i,bufferedUsage:this.bufferedUsageDuringCompletion});let t={sessionId:e.sessionId,turnId:e.turnId,turnNumber:e.turnNumber,success:n.success,error:n.errors.length>0?n.errors.join(`; `):void 0,...i!==void 0&&{usage:i},initiator:e.initiator,ingestionMarker:`live`};await me(this.bus,{type:`turn.completed`,sessionId:e.sessionId,eventId:`turn.completed:${e.turnId}`,payload:t}),o=!0,await this.bus.emit(j.turn.completed,t)}catch(t){throw o?this.clearCompletionState(e,r):this.completingTurnIds.delete(e.turnId),t}this.clearCompletionState(e,r)}async retryTurnCompletion(e){let t=this.completingTurns.get(e),n=this.pendingTerminalResults.get(e);if(t===void 0||n===void 0)throw Error(`Turn ${e} has no retryable completion`);await this.completeTurn(t,n)}async retryRetainedCompletionsForSession(e){await this.turnSlots.awaitFinalization(e,async()=>{for(let t of[...this.completingTurns.values()].filter(t=>t.sessionId===e&&this.setupFinalizingTurnIds.has(t.turnId))){let e=this.completionPromises.get(t.turnId);e?await e:this.completingTurnIds.has(t.turnId)||await this.retryTurnCompletion(t.turnId)}for(let t of[...this.completingTurns.values()].filter(t=>t.sessionId===e&&this.pendingTerminalResults.has(t.turnId)&&!this.completingTurnIds.has(t.turnId))){let e=this.completionPromises.get(t.turnId);e?await e:await this.retryTurnCompletion(t.turnId)}})}clearCompletionState(e,t){t?.clear(),this.usageAccumulators.delete(e.turnId),this.bufferedUsageDuringCompletion.delete(e.turnId),this.assistantPersistenceBarrier.clear(e.turnId),this.completingTurns.delete(e.turnId),this.closedUsageAdmissions.delete(e.turnId),this.completingTurnIds.delete(e.turnId),this.pendingTerminalCompletions.delete(e.turnId),this.pendingTerminalResults.delete(e.turnId),this.setupFinalizingTurnIds.delete(e.turnId),this.turnSlots.finishFinalization(e)}getActiveTurn(e){return this.turnSlots.getActive(e)}findActiveTurnByTurnId(e){return this.turnSlots.findActiveByTurnId(e)}destroy(){for(let e of this.cleanups)e();this.cleanups.length=0,this.turnSlots.clear(),this.usageAccumulators.clear(),this.completingTurnIds.clear(),this.completionPromises.clear(),this.completingTurns.clear(),this.closedUsageAdmissions.clear(),this.pendingTerminalCompletions.clear(),this.pendingTerminalResults.clear(),this.setupFinalizingTurnIds.clear(),this.bufferedUsageDuringCompletion.clear(),this.syntheticTurnCounters.clear(),this.assistantPersistenceBarrier.destroy()}async recordAgentCompletion(e,t,n,r,i,a){await Vr(this.bus,this.completionEventHooks(),{agentId:e,messageId:t,outcome:n,...r!==void 0&&{error:r},turnId:a,onTurnComplete:i})}completionEventHooks(){return{resolveUsageTurn:e=>this.findTurnForUsage(e),resolveCompletionTurn:e=>this.findTurnForCompletion(e),isCompletionInFlight:e=>this.completingTurnIds.has(e),addUsage:(e,t)=>this.usageAccumulators.get(e.turnId)?.add(t),bufferUsage:(e,t)=>this.bufferUsageDuringCompletion(e,t),canRetry:e=>this.pendingTerminalResults.has(e)&&!this.completingTurnIds.has(e),retry:async e=>this.retryTurnCompletion(e),beginFinalization:(e,t)=>this.beginFinalization(e,t,`normal`)}}beginFinalization(e,t,n){let r=this.pendingTerminalResults.get(e.turnId)??t;return this.completingTurns.set(e.turnId,e),this.pendingTerminalResults.set(e.turnId,r),n===`setup`&&this.setupFinalizingTurnIds.add(e.turnId),this.turnSlots.beginFinalization(e),r}bufferUsageDuringCompletion(e,t){let n=this.bufferedUsageDuringCompletion.get(e)??[];n.push(t),this.bufferedUsageDuringCompletion.set(e,n)}findTurnForUsage(e){let t=this.findActiveTurnByTurnId(e);if(t!==void 0)return t;if(!this.closedUsageAdmissions.has(e))return this.completingTurns.get(e)}findTurnForCompletion(e){return this.findActiveTurnByTurnId(e)??this.completingTurns.get(e)}};async function Ur(e,t,n){let r=ge(t.adapterName),i=ge(t.adapterId);if(!r&&!i)throw Error(`[SessionOrchestrator.sendMessage] adapterName or adapterId required when session has no agents (sessionId=${n})`);if(i)return ve(e,i,r,`[SessionOrchestrator.sendMessage] (sessionId=${n}) `);if(r===void 0)throw Error(`[SessionOrchestrator.sendMessage] adapterName could not be resolved (sessionId=${n})`);return r}async function Wr(e,t,n,r,i){if(!t)throw Error(`[SessionOrchestrator.sendMessage] agent selection required when session has no agents (sessionId=${n})`);if(t.kind===`adapter`)return t;if(t.kind===`canonical-model`)return await Gr(e,t,n,r,i);throw Error(`[SessionOrchestrator.sendMessage] agent with kind: 'adapter' or 'canonical-model' required when session has no agents (sessionId=${n})`)}async function Gr(e,t,n,r,i){let a=Ct(t.model);if(bt(a))throw Error(`[SessionOrchestrator.sendMessage] Invalid canonical model "${t.model}" (sessionId=${n}): ${a.message}`);if(a.kind===`virtual`)throw Error(`[SessionOrchestrator.sendMessage] Virtual canonical models require a host resolver (sessionId=${n})`);let o=await e.request(nt.resolve,{parsed:a,context:{sessionId:n,promptText:v(r),...i===void 0?{}:{sessionContext:i}}});return{...t,...o,kind:`adapter`,providerConfigId:t.providerConfigId??o.providerConfigId}}async function Kr(e,t,n){let{adapterName:r,sessionId:i,machineId:a}=n,o={adapterId:ge(t.adapterId),machineId:ge(t.machineId)},s=Me(o,{sessionId:i,errorPrefix:`[SessionOrchestrator.sendMessage] `});if(s!==void 0)throw new S(`start-failed`,s);if(o.adapterId===void 0){let t=await Ae(e,{adapterName:r,machineId:a});if(t===void 0||t.machineId===void 0||t.ownerInstanceId===void 0)throw new S(`start-failed`,`[SessionOrchestrator.sendMessage] adapter runtime did not prove a live owner for ${r} (sessionId=${i})`);return{adapterId:t.adapterId,machineId:t.machineId,ownerInstanceId:t.ownerInstanceId}}let c=await Ae(e,{adapterName:r,adapterId:o.adapterId,...o.machineId!==void 0&&{machineId:o.machineId}});if(c?.machineId===void 0)throw new S(`start-failed`,`[SessionOrchestrator.sendMessage] agent instance resolution for ${o.adapterId} produced no machine (sessionId=${i})`);if(c.ownerInstanceId===void 0)throw new S(`start-failed`,`[SessionOrchestrator.sendMessage] agent instance resolution for ${o.adapterId} produced no owner (sessionId=${i})`);return{adapterId:c.adapterId,machineId:c.machineId,ownerInstanceId:c.ownerInstanceId}}async function qr(e,t,n){let r=await Ur(e,t,n.sessionId),i=t.providerConfigId===void 0?void 0:We(e,{adapterName:r,providerConfigId:t.providerConfigId});i?.catch(()=>void 0);let a=await Kr(e,t,{...n,adapterName:r}),o=await i;return{adapterName:r,instance:a,providerContext:o,providerConfigId:t.providerConfigId??o?.providerConfigId}}var Jr=class{bus;turnManager;adapterRegistry;machineId;cleanups=[];constructor(e=Et,t){this.bus=e,this.machineId=t,this.turnManager=new Hr(e),this.adapterRegistry=new In(e),this.cleanups.push(Ce(this.bus,this.turnManager,t)),this.registerSendMessageHandler(),this.turnManager.registerCompletionHandlers(this.completeTurn.bind(this))}registerSendMessageHandler(){this.cleanups.push(this.bus.on(j.sendMessage,async e=>{let{sessionId:t,message:n,agentIds:r,deliveryMode:i,agent:a,source:o,origin:s}=e.payload,c=ce(o,e.payload.extensionId),l=e.payload.sessionContext?dt.parse(e.payload.sessionContext):void 0,{sessionId:u,session:d}=await se(this.bus,t,l,e.payload.originWindowId,this.machineId),f=await p(this.bus,d);ye(`[session.sendMessage]`,u,d,r);let m=new Set(f.recoveringAgentIds),g=new Set(f.arbitratedAgentIds),_=new Set(f.deferredAgentIds);if(d.agents.length===0){let e=await this.startLeadAgent(d,u,a,n,l,{kind:`fresh`});for(let t of e.recoveringAgentIds)m.add(t);for(let t of e.arbitratedAgentIds)g.add(t);for(let t of e.deferredAgentIds)_.add(t)}let ee=le(d,r);if(ee.length===0)throw Error(`[SessionOrchestrator.sendMessage] No valid target agents found (sessionId=${u})`);let{targetAgents:y,deferredAgentIds:ne,recoveryContext:re}=await vr({bus:this.bus,machineId:this.machineId,startReplacementLeadAgent:e=>this.startLeadAgent(d,u,e,n,l,{kind:`replace`})},{session:d,sessionId:u,targetSpec:r,agentSelection:a,message:n,sessionContext:l},ee,m,g,_),b=crypto.randomUUID(),ie=te(n),oe=await this.turnManager.acquireMessageAdmission(u,y.map(e=>e.agentId),b,c,e.payload.turnId),x=oe.turn;try{if(!(await this.bus.requestOptional(E.append,{message:{messageId:b,turnId:x.turnId,sessionId:u,role:`user`,contentText:v(n),blocks:ie,timestamp:Date.now(),...s!==void 0&&{origin:s}}})).handled)throw Error(`Message storage append handler is not registered`);oe.isPreparationOwner&&await Le(this.bus,{sessionId:u,turnId:x.turnId,turnNumber:x.turnNumber,messageId:b,agentIds:[...x.agentIds],initiator:x.initiator,ingestionMarker:`live`}),await ae(this.bus,{sessionId:u,turnId:x.turnId,turnNumber:x.turnNumber,messageId:b,content:n,agentIds:y.map(e=>e.agentId),...o!==void 0&&{source:o},...s!==void 0&&{origin:s}}),oe.commit()}catch(e){try{await oe.rollback(`user-message-persistence-failed`)}catch(e){console.error(`[SessionOrchestrator] Failed to finalize rejected message setup:`,e)}throw e}for(let e of y)this.bus.requestOptional(H.record,{messageId:b,agentId:e.agentId,status:`sent`,timestamp:Date.now()}).catch(t=>{console.warn(`[SessionOrchestrator] Failed to record message routing`,{sessionId:u,messageId:b,agentId:e.agentId,error:t instanceof Error?t.message:String(t)})});let ue=re?{...l,...re}:l;await h(this.bus,d,y,n,b,x,i,this.completeTurn.bind(this),this.turnManager,ue,e.payload.responseSchema),e.setResult({messageId:b,turnId:x.turnId,sessionId:u,...ne.size>0&&{deferredAgentIds:[...ne]}})}))}async startLeadAgent(e,t,n,r,i,a){let o=await Wr(this.bus,n,t,r,i),{adapterName:s,instance:c,providerContext:l,providerConfigId:u}=await qr(this.bus,o,{sessionId:t,machineId:this.machineId,registry:this.adapterRegistry}),d=await Or(this.bus,{sessionId:t,instance:c,adapterName:s,leadTransition:a,expectedLeadAgentId:e.leadAgentId??null,...u!==void 0&&{providerConfigId:u},startRequest:Te(o,{adapterId:c.adapterId,sessionId:t,providerContext:l,sessionContext:i})});if(d.outcome===`started`)return e.agents.push(d.agent),e.leadAgentId=d.agent.agentId,{droppedAgentIds:new Set,recoveringAgentIds:new Set,deferredAgentIds:new Set,arbitratedAgentIds:new Set};let{session:f}=await this.bus.request(j.get,{sessionId:t});if(!f||f.agents.length===0)throw new S(`lead-conflict`,`[SessionOrchestrator.sendMessage] lead designation for session ${t} was won by ${d.currentLeadAgentId??`another start`}, which left no agent behind`);e.agents=f.agents,e.leadAgentId=f.leadAgentId;let m=await p(this.bus,e);if(e.agents.length===0)throw new S(`lead-conflict`,`[SessionOrchestrator.sendMessage] lead designation for session ${t} was won by ${d.currentLeadAgentId??`another start`}, whose agent did not survive its start`);return m}async completeTurn(e,t){await this.turnManager.completeTurn(e,t)}destroy(){for(let e of this.cleanups)e();this.cleanups.length=0,this.turnManager.destroy(),this.adapterRegistry.destroy()}},Yr=class{bus;constructor(e){this.bus=e}async getTurnSoFarContext(e){try{let{messages:t}=await this.bus.request(E.getByTurn,{turnId:e});return this.convertSessionMessagesToMessages(t)}catch(e){return e instanceof Dt||console.warn(`[TurnContextEnricher] Failed to load turn-so-far context:`,e),[]}}async enrichForDeliveryMode(e,t,n){if(n!==`immediate`)return e;let r=await this.getTurnSoFarContext(t);return r.length===0?e:[...e??[],...r]}convertSessionMessagesToMessages(e){return e.map(e=>({role:e.role,blocks:e.blocks}))}};function Xr(e){let{bus:t}=e;return t.on(j.getStatusCounts,async e=>{e.payload;let{all:n,active:r,closed:i,archived:a,discovered:o}=await t.request(T.getStatusCounts,{});e.setResult({all:n,active:r,closed:i,archived:a,discovered:o})})}function Zr(e){let{bus:t}=e;return t.on(j.resume,async e=>{let{sessionId:n}=e.payload,{session:r}=await t.request(T.get,{sessionId:n});if(!r||r.status!==`closed`){e.setResult({success:!1});return}let i=await t.requestOptional(T.update,{sessionId:n,status:`active`,lastActivityAt:Date.now(),expectedStatus:[`closed`]});if(i.handled&&i.data.success){await t.emit(j.resumed,{sessionId:n}),e.setResult({success:!0});return}let a=await t.requestOptional(T.get,{sessionId:n});e.setResult({success:a.handled&&a.data.session?.status===`active`})})}function Qr(e){return e.on(Ge.listActions,e=>{let t=ze.getAll().map(e=>({id:e.id,label:e.label,description:e.description,category:e.category}));e.setResult({actions:t})})}const $r=[{actionId:`strip-reasoning`},{actionId:`strip-tool-outputs`}];function ei(e){return{...e.cwd!==void 0&&{cwd:e.cwd},...e.systemPrompt!==void 0&&{systemPrompt:e.systemPrompt},...e.allowedTools!==void 0&&{allowedTools:e.allowedTools},...e.disallowedTools!==void 0&&{disallowedTools:e.disallowedTools}}}var ti=class{bus;agentToSession=new Map;pendingAssistantResponses=new Map;cleanups=[];constructor(e=Et){this.bus=e,this.registerHandlers()}registerHandlers(){this.registerMappingHandlers(),this.registerTurnTrackingHandlers(),this.registerBlockAccumulationHandlers()}registerMappingHandlers(){this.cleanups.push(this.bus.on(j.agent.added,e=>{this.agentToSession.set(e.payload.agentId,e.payload.sessionId)})),this.cleanups.push(this.bus.on(j.closed,e=>{for(let[t,n]of this.agentToSession)n===e.payload.sessionId&&this.agentToSession.delete(t);for(let[t,n]of this.pendingAssistantResponses)n.sessionId===e.payload.sessionId&&this.pendingAssistantResponses.delete(t)}))}registerTurnTrackingHandlers(){this.cleanups.push(this.bus.on(j.turn.started,e=>{let{sessionId:t,turnId:n,messageId:r,agentIds:i}=e.payload;for(let e of i){let i=this.pendingKey(n,r,e);this.pendingAssistantResponses.has(i)||this.pendingAssistantResponses.set(i,{sessionId:t,turnId:n,messageId:r,agentId:e,blocks:[]})}})),this.cleanups.push(this.bus.on(j.user_message.sent,e=>{let{sessionId:t,turnId:n,messageId:r,agentIds:i}=e.payload;for(let e of i){let i=this.pendingKey(n,r,e);this.pendingAssistantResponses.set(i,{sessionId:t,turnId:n,messageId:r,agentId:e,blocks:[]})}})),this.cleanups.push(this.bus.on(j.user_message.acknowledged,e=>{let t=this.pendingKey(e.payload.turnId,e.payload.messageId,e.payload.agentId);this.pendingAssistantResponses.has(t)||this.pendingAssistantResponses.set(t,{sessionId:e.payload.sessionId,turnId:e.payload.turnId,messageId:e.payload.messageId,agentId:e.payload.agentId,blocks:[]})})),this.cleanups.push(this.bus.on(j.turn.assistantPersistenceSettled,e=>{let{turnId:t,messageId:n,agentId:r}=e.payload;this.pendingAssistantResponses.delete(this.pendingKey(t,n,r))})),this.cleanups.push(this.bus.on(j.turn.completed,e=>{let{sessionId:t,turnId:n}=e.payload;for(let[e,r]of this.pendingAssistantResponses)r.sessionId===t&&r.turnId===n&&this.pendingAssistantResponses.delete(e)}))}registerBlockAccumulationHandlers(){this.cleanups.push(this.bus.on(k.message,e=>{let t=this.pendingForProviderEvent(e.payload);t&&t.blocks.push({type:`text`,content:e.payload.content})})),this.cleanups.push(this.bus.on(k.reasoning,e=>{let t=this.pendingForProviderEvent(e.payload);t&&t.blocks.push({type:`reasoning`,content:e.payload.content})})),this.cleanups.push(this.bus.on(k.tool.use,e=>{let t=this.pendingForProviderEvent(e.payload);t&&t.blocks.push({type:`tool_call`,toolCallId:e.payload.toolCallId,name:e.payload.toolName,args:e.payload.args??{}})})),this.cleanups.push(this.bus.on(k.tool.completed,e=>{let t=this.pendingForProviderEvent(e.payload);if(t){let n=e.payload.result,r=typeof n==`string`?n:JSON.stringify(n);t.blocks.push({type:`tool_output`,toolCallId:e.payload.toolCallId,output:r,isError:e.payload.success===!1})}})),this.cleanups.push(this.bus.on(k.complete,async e=>{if(e.payload._import){let{turnId:t,messageId:n,agentId:r}=e.payload;t&&this.pendingAssistantResponses.delete(this.pendingKey(t,n,r));return}let{agentId:t,adapterSessionId:n,outcome:r,error:i,message:a,structuredOutputValidation:o,turnId:s,messageId:c}=e.payload;if(!s)return;let l=this.pendingKey(s,c,t),u=this.pendingAssistantResponses.get(l);if(u){this.pendingAssistantResponses.delete(l);try{await this.storeAssistantMessage(u,r===`error`?void 0:n,r===`error`?i:void 0,o===void 0?void 0:{content:a})}finally{await this.bus.emit(j.turn.assistantPersistenceSettled,{sessionId:u.sessionId,turnId:u.turnId,agentId:t,messageId:u.messageId})}}}))}async storeAssistantMessage(e,t,n,r){let i=r===void 0?e.blocks:r.content===void 0?[]:[{type:`text`,content:r.content}];if(i.length===0&&!n)return;let a=i.filter(e=>e.type===`text`).map(e=>e.content).join(`
2
+ `),o=crypto.randomUUID();try{if(!(await this.bus.requestOptional(E.append,{message:{messageId:o,turnId:e.turnId,sessionId:e.sessionId,role:`assistant`,contentText:a||(n?`[Error: ${n}]`:``),blocks:i,agentId:e.agentId,adapterSessionId:t,timestamp:Date.now()}})).handled)return;let r=await this.bus.requestOptional(E.getByTurn,{turnId:e.turnId});if(r.handled){let t=r.data.messages.find(t=>t.role===`user`&&t.messageId===e.messageId);t&&await this.bus.requestOptional(H.record,{messageId:t.messageId,agentId:e.agentId,status:`completed`,timestamp:Date.now(),error:n})}}catch(e){console.error(`[SessionBridge] Failed to store assistant message:`,e)}}destroy(){for(let e of this.cleanups)e();this.cleanups.length=0,this.agentToSession.clear(),this.pendingAssistantResponses.clear()}pendingForProviderEvent(e){if(!(!e.turnId||!e.messageId))return this.pendingAssistantResponses.get(this.pendingKey(e.turnId,e.messageId,e.agentId))}pendingKey(e,t,n){return JSON.stringify([e,t,n])}},ni=class{bus;_sessionId;_extensionId;_turnId;_parentSessionId;contextTracker;contextContributions=new Map;constructor(e,t,n,r,i,a){this.bus=e,this._sessionId=t,this._extensionId=n,this._turnId=r,this._parentSessionId=i,this.contextTracker=a}get sessionId(){return this._sessionId}get turnId(){return this._turnId}get parentSessionId(){return this._parentSessionId}get extensionId(){return this._extensionId}async sendToAgent(e,t){await this.bus.request(j.sendMessage,{sessionId:this._sessionId,agentIds:[e],message:t,source:`extension`,extensionId:this._extensionId})}contributeContext(e,t){this.contextContributions.set(e,t)}getContributions(){return Object.fromEntries(this.contextContributions)}async fork(e){return(await this.bus.request(j.fork,{sourceSessionId:this._sessionId,name:e.reason})).sessionId}async merge(e,t){await this.bus.request(j.merge,{parentSessionId:this._sessionId,childSessionId:e,summary:t,source:`extension`,extensionId:this._extensionId})}async abandon(e){await this.bus.request(j.abandon,{parentSessionId:this._sessionId,childSessionId:e,source:`extension`,extensionId:this._extensionId})}async requestCompression(e){await this.bus.emit(j.compressionRequested,{sessionId:this._sessionId,reason:e,source:`extension`,extensionId:this._extensionId})}async getContextWindowState(){if(this.contextTracker){let e=this.contextTracker.getSessionState(this._sessionId);if(e)return{currentTokens:e.currentTokens,maxTokens:e.maxTokens,percentage:e.percentage,level:e.level}}let{session:e}=await this.bus.request(j.get,{sessionId:this._sessionId});return!e||e.agents.length===0?{currentTokens:0,maxTokens:1,percentage:0,level:`ok`}:{currentTokens:0,maxTokens:2e5,percentage:0,level:`ok`}}async getChildSessions(){return(await this.bus.request(j.getChildren,{sessionId:this._sessionId})).children.map(e=>e.sessionId)}};function ri(e,t,n,r,i,a){return new ni(e,t,n,r,i,a)}const ii=l.postgres,ai=r.postgres,oi=a.postgres,si=s.postgres,ci=t.postgres,G=Vt({sessions:c,agents:n,runtimeInstanceIncarnationCounters:i,runtimeInstances:o,adapterSessionClaims:e},{sessions:ii,agents:ai,runtimeInstanceIncarnationCounters:oi,runtimeInstances:si,adapterSessionClaims:ci});function li(e,t){let n=e?.clientId??null,r=e?.clientAccountId??null,i=e?.lastClientIdentityObservation??null;return I(n===null?z(t.clientId):L(t.clientId,n),r===null?z(t.clientAccountId):L(t.clientAccountId,r),i===null?z(t.lastClientIdentityObservation):L(t.lastClientIdentityObservation,i))}function ui(e){return{agentId:e.agentId,adapterId:e.adapterId,adapterName:e.adapterName,sessionId:e.sessionId,...e.ownerMachineId!==null&&e.ownerInstanceId!==null?{runtimeOwner:{machineId:e.ownerMachineId,instanceId:e.ownerInstanceId}}:{},...e.recoveryAttemptId===null?{}:{recoveryAttemptId:e.recoveryAttemptId},role:e.role,status:e.status,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,model:e.model??void 0,adapterSessionId:e.adapterSessionId??void 0,cwd:e.cwd??void 0,allowedDirectories:e.allowedDirectories??void 0,providerConfigId:e.providerConfigId??void 0,personaId:e.personaId??void 0,profileId:e.profileId??void 0,harnessId:e.harnessId??void 0,clientId:e.clientId??void 0,compressionMode:e.compressionMode?at.parse(e.compressionMode):void 0,currentAdapterSessionId:e.currentAdapterSessionId??void 0,currentAdapterSessionIdState:e.currentAdapterSessionIdState,revision:e.revision,currencyFence:e.currencyFence}}function di(e){return{agentId:e.agentId,adapterId:e.adapterId,adapterName:e.adapterName,sessionId:e.sessionId,ownerMachineId:e.runtimeOwner?.machineId??null,ownerInstanceId:e.runtimeOwner?.instanceId??null,recoveryAttemptId:e.recoveryAttemptId??null,role:e.role,status:e.status,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,model:e.model??null,adapterSessionId:e.adapterSessionId??null,cwd:e.cwd??null,allowedDirectories:e.allowedDirectories??null,providerConfigId:e.providerConfigId??null,personaId:e.personaId??null,profileId:e.profileId??null,harnessId:e.harnessId??null,clientId:e.clientId??null,compressionMode:e.compressionMode??null}}function fi(e,t){let{adapterSessionId:n,ownerMachineId:r,ownerInstanceId:i,recoveryAttemptId:a,status:o,...s}=e;return{...s,status:B`CASE WHEN ${t.status} = 'disposed' THEN ${t.status} ELSE excluded.status END`}}function pi(e){let t;for(let n=e.length-1;n>=0;--n)try{e[n]?.()}catch(e){t??=e}if(t)throw t}function mi(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.get,async e=>{let[t]=await n.select().from(r).where(L(r.agentId,e.payload.agentId)).limit(1);e.setResult({agent:t?ui(t):null})})}function hi(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.set,async e=>{let{agent:t}=e.payload,i=di(t),a=await n.insert(r).values(i).onConflictDoUpdate({target:r.agentId,set:fi(i,r)});e.setResult({success:N(a)})})}function gi(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.delete,async e=>{let t=await n.delete(r).where(L(r.agentId,e.payload.agentId));e.setResult({success:N(t)})})}function _i(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.listByAdapter,async e=>{let{adapterName:t,status:i}=e.payload,a=[L(r.adapterName,t)];i&&i!==`all`&&a.push(L(r.status,i));let o=a.length>1?I(...a):a[0],s=await n.select().from(r).where(o);e.setResult({agents:s.map(ui)})})}function vi(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.listBySession,async e=>{let{sessionId:t}=e.payload,i=await n.select().from(r).where(L(r.sessionId,t));e.setResult({agents:i.map(ui)})})}function yi(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.updateStatus,async e=>{let{agentId:t,status:i,expectedStatus:a}=e.payload,o=Date.now(),s=[L(r.agentId,t),en(r.status,`disposed`)];if(a&&s.push(R(r.status,a)),N(await n.update(r).set({status:i,lastActivityAt:o}).where(I(...s)))){e.setResult({success:!0,transitioned:!0});return}let[c]=await n.select({agentId:r.agentId}).from(r).where(L(r.agentId,t)).limit(1);e.setResult({success:c!==void 0,transitioned:!1})})}function bi(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.updateActivity,async e=>{let{agentId:t,lastActivityAt:i}=e.payload,a=await n.update(r).set({lastActivityAt:i}).where(L(r.agentId,t));e.setResult({success:N(a)})})}function xi(e){let{bus:t,db:n}=e,{agents:r}=F(n,G);return t.on(w.updateRuntime,async e=>{let{agentId:t,adapterId:i,runtimeOwner:a,adapterSessionId:o,cwd:s,model:c,allowedDirectories:l,providerConfigId:u}=e.payload,d={lastActivityAt:Date.now()};i!==void 0&&(d.adapterId=i),a!==void 0&&(d.ownerMachineId=a.machineId,d.ownerInstanceId=a.instanceId),o!==void 0&&(d.adapterSessionId=o),s!==void 0&&(d.cwd=s),c!==void 0&&(d.model=c),l!==void 0&&(d.allowedDirectories=l),u!==void 0&&(d.providerConfigId=u);let f=await n.update(r).set(d).where(L(r.agentId,t));e.setResult({success:N(f)})})}function Si(e,t){let n={bus:e,db:t},r=[mi(n),hi(n),gi(n),_i(n),vi(n),yi(n),bi(n),xi(n)];return()=>pi(r)}function K(e){return e??void 0}function Ci(e){if(e)try{let t=JSON.parse(e),n=an.safeParse(t);return n.success?n.data:void 0}catch{return}}function wi(e){if(e)try{let t=JSON.parse(e),n=st.safeParse(t);return n.success?n.data:void 0}catch{return}}function q(e,t){let n=wi(e.forkTransforms),r=Ci(e.lastClientIdentityObservation);return{sessionId:e.sessionId,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,status:e.status,leadAgentId:K(e.leadAgentId),parentSessionId:K(e.parentSessionId),contextInheritance:K(e.contextInheritance),rootSessionId:K(e.rootSessionId),forkPointMessageId:K(e.forkPointMessageId),branchKind:K(e.branchKind),generation:e.generation,adapterName:K(e.adapterName),adapterSessionId:K(e.adapterSessionId),currentAdapterSessionId:K(e.currentAdapterSessionId),currentAdapterSessionIdState:e.currentAdapterSessionIdState,adapterId:K(e.adapterId),clientId:K(e.clientId),clientAccountId:K(e.clientAccountId),lastClientIdentityObservation:r,isOrchestrated:K(e.isOrchestrated),isImported:K(e.isImported),title:K(e.title),summary:K(e.summary),summaryUpdatedAt:K(e.summaryUpdatedAt),forkTransforms:n,targetWorkingDirectory:K(e.targetWorkingDirectory),executionTargetId:K(e.executionTargetId),agents:t.map(ui),approvalPolicyOverride:K(e.approvalPolicyOverride),metadata:K(e.metadata),spawningToolCallId:K(e.spawningToolCallId),source:K(e.source),parentExternalSessionId:K(e.parentExternalSessionId),logFilePath:K(e.logFilePath),discoveredAt:K(e.discoveredAt),importStatus:K(e.importStatus),isSidechain:K(e.isSidechain),machineId:K(e.machineId)}}function Ti(e){let t=new Map;for(let n of e){let e=t.get(n.sessionId)??[];e.push(n),t.set(n.sessionId,e)}return t}async function Ei(e,t,n){if(!n||t.length===0)return{};let{messages:r}=F(e,f),i=e.select({sessionId:r.sessionId,minTimestamp:B`MIN(${r.timestamp})`.as(`min_timestamp`)}).from(r).where(I(L(r.role,`user`),R(r.sessionId,t))).groupBy(r.sessionId).as(`first_user_message_by_session`),a=await e.select({sessionId:r.sessionId,preview:r.contentText}).from(r).innerJoin(i,I(L(r.sessionId,i.sessionId),L(r.timestamp,i.minTimestamp))).where(L(r.role,`user`)),o=new Map;for(let e of a)o.has(e.sessionId)||o.set(e.sessionId,e.preview);let s=await e.select({sessionId:r.sessionId,count:qt()}).from(r).where(R(r.sessionId,t)).groupBy(r.sessionId),c=new Map;for(let e of s)c.set(e.sessionId,e.count);return{previewBySession:o,countBySession:c}}function Di(e,t){return{sessionId:e.sessionId,clientId:t.clientId??e.clientId,clientAccountId:t.clientAccountId??e.clientAccountId,lastClientIdentityObservation:t.lastClientIdentityObservation??e.lastClientIdentityObservation}}function Oi(e){return e.clientId!==void 0||e.clientAccountId!==void 0||e.lastClientIdentityObservation!==void 0}function ki(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=F(n,G);return t.on(T.getByAdapterSessionId,async e=>{let{adapterSessionId:t,source:a,adapterName:o}=e.payload,s=[L(r.adapterSessionId,t)];a!==void 0&&s.push(L(r.source,a)),o!==void 0&&s.push(L(r.adapterName,o));let c=await n.select().from(r).where(I(...s)).limit(2),l=c[0];if(c.length!==1||l===void 0){e.setResult({session:null});return}let u=await n.select().from(i).where(L(i.sessionId,l.sessionId));e.setResult({session:q(l,u)})})}function Ai(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G),{messages:i}=F(n,f);return t.on(T.getChildren,async e=>{let{sessionId:t}=e.payload,a=await n.select().from(r).where(L(r.parentSessionId,t));if(a.length===0){e.setResult({children:[]});return}let o=a.map(e=>e.sessionId),s=await n.select({sessionId:i.sessionId,count:qt()}).from(i).where(R(i.sessionId,o)).groupBy(i.sessionId),c=new Map;for(let e of s)c.set(e.sessionId,e.count);let l=await n.select({parentSessionId:r.parentSessionId,count:qt()}).from(r).where(R(r.parentSessionId,o)).groupBy(r.parentSessionId),u=new Set;for(let e of l)e.parentSessionId&&u.add(e.parentSessionId);let d=a.map(e=>e.forkPointMessageId).filter(e=>e!==null),f=new Map;if(d.length>0){let e=await n.select({messageId:i.messageId,adapterMessageId:i.adapterMessageId}).from(i).where(I(L(i.sessionId,t),R(i.adapterMessageId,d)));for(let t of e)t.adapterMessageId&&f.set(t.adapterMessageId,t.messageId)}let p=a.map(e=>{let t=e.forkPointMessageId,n=t?f.get(t)??t:null;return{sessionId:e.sessionId,title:e.title??null,forkPointMessageId:n,branchKind:e.branchKind??null,messageCount:c.get(e.sessionId)??0,hasChildren:u.has(e.sessionId),spawningToolCallId:e.spawningToolCallId??void 0}});e.setResult({children:p})})}function ji(e){return{...e.cwd===void 0?{}:{targetWorkingDirectory:e.cwd},...e.logFilePath===void 0?{}:{logFilePath:e.logFilePath},...e.machineId===void 0?{}:{machineId:e.machineId}}}function Mi(e){return e.startMode===`compact`}function Ni(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G);return t.on(T.rebindObserved,async e=>{let i=e.payload,a=I(L(r.source,i.source),L(r.adapterSessionId,i.externalSessionId)),o=ji(i),s=Object.keys(o),c=Mi(i);c&&s.push(`generation`);let l=c?{...o,generation:B`${r.generation} + 1`}:{...o},[u]=s.length===0?await n.select({sessionId:r.sessionId}).from(r).where(a).limit(1):await n.update(r).set(l).where(a).returning({sessionId:r.sessionId});if(!u){e.setResult({outcome:`not-found`});return}e.setResult({outcome:`rebound`,sessionId:u.sessionId}),s.length>0&&t.emit(j.updated,{sessionId:u.sessionId,changedProperties:s}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))})}const Pi=qe();function Fi(e){return e?JSON.stringify(e):null}function Ii(e,t){return B`
3
+ SELECT ${t}.key AS key,
4
+ CASE ${t}.type
5
+ WHEN 'object' THEN ${t}.value
6
+ WHEN 'array' THEN ${t}.value
7
+ WHEN 'true' THEN 'true'
8
+ WHEN 'false' THEN 'false'
9
+ WHEN 'null' THEN 'null'
10
+ WHEN 'text' THEN json_quote(${t}.value)
11
+ ELSE CAST(${t}.value AS TEXT)
12
+ END AS vjson
13
+ FROM json_each(${e}) AS ${t}
14
+ `}function Li(e,t){let n=t===`postgres`?B`excluded.metadata || ${e.metadata}`:B`(
15
+ SELECT json_group_object(mk.key, json(mk.vjson)) FROM (
16
+ ${Ii(B`excluded.metadata`,B`inc`)}
17
+ WHERE inc.key NOT IN (SELECT ex2.key FROM json_each(${e.metadata}) AS ex2)
18
+ UNION ALL
19
+ ${Ii(B`${e.metadata}`,B`ex`)}
20
+ ) AS mk
21
+ )`;return B`
22
+ CASE
23
+ WHEN ${e.metadata} IS NULL THEN excluded.metadata
24
+ WHEN excluded.metadata IS NULL THEN ${e.metadata}
25
+ ELSE ${n}
26
+ END
27
+ `}function Ri(e,t,n){return t===void 0?B`${e}`:B`
28
+ CASE
29
+ WHEN ${n.discoveredAt} IS NULL OR ${e} = ${n.discoveredAt} THEN ${t}
30
+ ELSE ${e}
31
+ END
32
+ `}function zi(e){return B`
33
+ CASE
34
+ WHEN ${e.importStatus} = 'imported' OR excluded.import_status = 'imported' THEN 'imported'
35
+ WHEN ${e.importStatus} = 'tracking' OR excluded.import_status = 'tracking' THEN 'tracking'
36
+ ELSE COALESCE(${e.importStatus}, excluded.import_status, 'discovered')
37
+ END
38
+ `}function Bi(e,t){return t===`live`?B`
39
+ CASE
40
+ WHEN ${e.status} = 'discovered' THEN 'active'
41
+ ELSE ${e.status}
42
+ END
43
+ `:B`
44
+ CASE
45
+ WHEN ${e.status} IN ('closed', 'archived') THEN ${e.status}
46
+ WHEN ${e.status} = 'active' AND ${e.isImported} = TRUE THEN ${e.status}
47
+ WHEN ${zi(e)} = 'discovered' THEN excluded.status
48
+ ELSE ${e.status}
49
+ END
50
+ `}function Vi(e,t,n,r,i){return{status:Bi(e,i),isImported:!0,importStatus:zi(e),adapterName:B`COALESCE(${e.adapterName}, excluded.adapter_name)`,discoveredAt:B`COALESCE(${e.discoveredAt}, excluded.discovered_at)`,source:B`COALESCE(${e.source}, excluded.source)`,logFilePath:B`COALESCE(${e.logFilePath}, excluded.log_file_path)`,targetWorkingDirectory:B`COALESCE(excluded.target_working_directory, ${e.targetWorkingDirectory})`,title:B`COALESCE(excluded.title, ${e.title})`,forkPointMessageId:B`COALESCE(${e.forkPointMessageId}, excluded.fork_point_message_id)`,parentExternalSessionId:B`COALESCE(${e.parentExternalSessionId}, excluded.parent_external_session_id)`,branchKind:B`COALESCE(${e.branchKind}, excluded.branch_kind)`,adapterId:B`COALESCE(excluded.adapter_id, ${e.adapterId})`,clientId:B`COALESCE(excluded.client_id, ${e.clientId})`,isSidechain:B`COALESCE(excluded.is_sidechain, ${e.isSidechain})`,lastClientIdentityObservation:B`COALESCE(excluded.last_client_identity_observation, ${e.lastClientIdentityObservation})`,machineId:r===void 0?B`${e.machineId}`:r===null?B`NULL`:B`COALESCE(${e.machineId}, excluded.machine_id)`,metadata:Li(e,n),createdAt:Ri(e.createdAt,t,e),lastActivityAt:Ri(e.lastActivityAt,t,e)}}function Hi(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G),{dialect:i}=Ut(n);return t.on(T.importUpsert,async e=>{let a=e.payload,{externalSessionId:o,source:s,clientId:c,adapterId:l,cwd:u,logFilePath:d,startedAt:f,title:p,kind:m,parentAdapterSessionId:h,forkPointMessageId:g,metadata:_,lastClientIdentityObservation:v,importStatus:ee,isSidechain:y,machineId:te,activation:ne}=a,re=Pi(),b=crypto.randomUUID(),ie=f??re,ae=Ze(m)??null,oe=h??null,[se]=await n.insert(r).values({sessionId:b,status:$e(a),isImported:!0,importStatus:ee??`discovered`,adapterName:s,adapterSessionId:o,source:s??null,clientId:c??null,adapterId:l??null,targetWorkingDirectory:u??null,logFilePath:d??null,forkPointMessageId:g??null,branchKind:ae,parentExternalSessionId:oe,discoveredAt:re,title:p??null,metadata:_??null,lastClientIdentityObservation:Fi(v),isSidechain:y??null,machineId:te??null,createdAt:ie,lastActivityAt:ie}).onConflictDoUpdate({target:[r.source,r.adapterSessionId],set:Vi(r,f,i,te,ne)}).returning({sessionId:r.sessionId,discoveredAt:r.discoveredAt,parentExternalSessionId:r.parentExternalSessionId,parentSessionId:r.parentSessionId}),ce=se.sessionId===b;await Ui(t,n,se,ce,ae,ie,s),e.setResult({sessionId:se.sessionId,created:ce})})}async function Ui(e,t,n,r,i,a,o){if(r){let r=await Wi(t,n.sessionId,n.parentExternalSessionId,o);e.emit(j.created,{sessionId:n.sessionId,parentSessionId:r,branchKind:i,createdAt:a}).catch(e=>console.error(`[SessionStorage] Failed to emit session.created:`,e))}else n.parentExternalSessionId!==null&&n.parentSessionId===null&&await Wi(t,n.sessionId,n.parentExternalSessionId,o),e.emit(j.updated,{sessionId:n.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}async function Wi(e,t,n,r){let{sessions:i}=F(e,G);if(n===null||r===void 0)return null;let[a]=await e.select({sessionId:i.sessionId,rootSessionId:i.rootSessionId}).from(i).where(I(L(i.adapterSessionId,n),L(i.source,r))).limit(1);if(!a)return null;let o=a.rootSessionId??a.sessionId;return await e.update(i).set({parentSessionId:a.sessionId,rootSessionId:o}).where(L(i.sessionId,t)),a.sessionId}function Gi(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=F(n,G);return t.on(T.getByLogFilePath,async e=>{let{logFilePath:t}=e.payload,[a]=await n.select().from(r).where(L(r.logFilePath,t)).limit(1);if(!a){e.setResult({session:null});return}let o=await n.select().from(i).where(L(i.sessionId,a.sessionId));e.setResult({session:q(a,o)})})}function Ki(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=F(n,G);return t.on(T.listImported,async e=>{let{source:t,importStatus:a}=e.payload,o=[L(r.isImported,!0)];t!==void 0&&o.push(L(r.source,t)),a!==void 0&&o.push(L(r.importStatus,a));let s=I(...o),c=await n.select().from(r).where(s).orderBy(Jt(r.createdAt));if(c.length===0){e.setResult({sessions:[]});return}let l=c.map(e=>e.sessionId),u=Ti(await n.select().from(i).where(R(i.sessionId,l)));e.setResult({sessions:c.map(e=>q(e,u.get(e.sessionId)??[]))})})}function qi(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G);return t.on(T.countBySource,async e=>{let{source:t}=e.payload,i=await n.select({importStatus:r.importStatus,count:B`count(*)`}).from(r).where(I(L(r.isImported,!0),L(r.source,t))).groupBy(r.importStatus),a=0,o=0,s=0,c=0;for(let e of i){let t=Number(e.count);a+=t,e.importStatus===`imported`&&(o+=t),e.importStatus===`tracking`&&(s+=t),e.importStatus===`discovered`&&(c=t)}e.setResult({total:a,imported:o,tracking:s,discovered:c})})}function Ji(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G);return t.on(T.updateImportStatus,async e=>{let{sessionId:i,importStatus:a}=e.payload,o=a===`imported`?{status:B`
51
+ CASE
52
+ WHEN ${r.status} = 'discovered' THEN 'active'
53
+ ELSE ${r.status}
54
+ END
55
+ `}:{},[s]=await n.update(r).set({importStatus:a,...o}).where(I(L(r.sessionId,i),nn(z(r.importStatus),B`${r.importStatus} <> ${a}`))).returning({adapterSessionId:r.adapterSessionId,adapterName:r.adapterName,source:r.source}),c=s!==void 0;if(e.setResult({success:c}),c){t.emit(j.importStatusChanged,{sessionId:i,importStatus:a}).catch(e=>console.error(`[SessionStorage] Failed to emit session.importStatusChanged:`,e));let e=s.source??s.adapterName;a===`imported`&&s.adapterSessionId&&e&&t.emit(j.import.completed,{sessionId:i,adapterSessionId:s.adapterSessionId,source:e}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}})}function Yi(e,t){let n={bus:e,db:t};return[Hi(n),Ni(n),Gi(n),Ki(n),qi(n),Ji(n)]}function Xi(e){let t=e.reconcileAdapterSession;if(t!==void 0)return{adapterName:t.adapterName,adapterId:t.adapterId,adapterSessionId:t.adapterSessionId,lastActivityAt:t.lastActivityAt};let n=e.identity;return n===void 0?{}:{adapterName:n.adapterName,adapterId:n.adapterId,...n.adapterSessionId===void 0?{}:{adapterSessionId:n.adapterSessionId}}}function Zi(e,t){let n=e.expectIdentityOpenForLead,r=e.reconcileAdapterSession;return{status:e.expectedStatus===void 0?void 0:R(t.status,e.expectedStatus),identity:n===void 0?void 0:I(z(t.adapterName),z(t.adapterId),n===null?z(t.leadAgentId):L(t.leadAgentId,n)),reconciliation:r===void 0?void 0:I(z(t.adapterSessionId),L(t.leadAgentId,r.agentId),nn(I(z(t.adapterName),z(t.adapterId)),I(L(t.adapterName,r.adapterName),L(t.adapterId,r.adapterId))))}}function J(e){return e??null}function Qi(e){return e?JSON.stringify(e):null}function $i(e){return{lastActivityAt:e.lastActivityAt,status:e.status,leadAgentId:J(e.leadAgentId),parentSessionId:J(e.parentSessionId),contextInheritance:J(e.contextInheritance),rootSessionId:J(e.rootSessionId),forkPointMessageId:J(e.forkPointMessageId),branchKind:J(e.branchKind),adapterName:J(e.adapterName),adapterSessionId:J(e.adapterSessionId),adapterId:J(e.adapterId),clientId:J(e.clientId),clientAccountId:J(e.clientAccountId),lastClientIdentityObservation:ta(e.lastClientIdentityObservation),isOrchestrated:e.isOrchestrated??!1,isImported:e.isImported??!1,title:J(e.title),summary:J(e.summary),summaryUpdatedAt:J(e.summaryUpdatedAt),forkTransforms:Qi(e.forkTransforms),targetWorkingDirectory:J(e.targetWorkingDirectory),executionTargetId:J(e.executionTargetId),approvalPolicyOverride:J(e.approvalPolicyOverride),metadata:J(e.metadata),spawningToolCallId:J(e.spawningToolCallId),source:J(e.source),parentExternalSessionId:J(e.parentExternalSessionId),logFilePath:J(e.logFilePath),discoveredAt:J(e.discoveredAt),importStatus:J(e.importStatus),machineId:J(e.machineId),generation:e.generation??0}}function ea(e){let{leadAgentId:t,generation:n,...r}=e;return r}function ta(e){return e?JSON.stringify(e):null}function Y(e,t,n){n!==void 0&&(e[t]=n)}function na(e,t,n){n!==void 0&&(e[t]=n??null)}function ra(e,t){let n={};return Y(n,`status`,e.status),na(n,`parentSessionId`,e.parentSessionId),Y(n,`contextInheritance`,e.contextInheritance),Y(n,`rootSessionId`,e.rootSessionId),Y(n,`forkPointMessageId`,e.forkPointMessageId),Y(n,`branchKind`,e.branchKind),Y(n,`isOrchestrated`,e.isOrchestrated),Y(n,`clientId`,e.clientId),Y(n,`clientAccountId`,e.clientAccountId),Y(n,`title`,e.title),Y(n,`targetWorkingDirectory`,e.targetWorkingDirectory),Y(n,`createdAt`,e.createdAt),Y(n,`lastActivityAt`,e.lastActivityAt),Y(n,`machineId`,e.machineId),Object.assign(n,Xi(e)),na(n,`executionTargetId`,e.executionTargetId),na(n,`approvalPolicyOverride`,e.approvalPolicyOverride),na(n,`metadata`,e.metadata),e.spawningToolCallId===null?n.spawningToolCallId=null:e.spawningToolCallId!==void 0&&(n.spawningToolCallId=B`coalesce(${t.spawningToolCallId}, ${e.spawningToolCallId})`),e.lastClientIdentityObservation!==void 0&&(n.lastClientIdentityObservation=ta(e.lastClientIdentityObservation)),e.advanceGeneration===!0&&(n.generation=B`${t.generation} + 1`),n}function ia(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=F(n,G);return t.on(T.get,async e=>{let[t]=await n.select().from(r).where(L(r.sessionId,e.payload.sessionId)).limit(1);if(!t){e.setResult({session:null});return}let a=await n.select().from(i).where(L(i.sessionId,e.payload.sessionId));e.setResult({session:q(t,a)})})}function aa(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G);return t.on(T.set,async e=>{let{sessionId:i,session:a,ifAbsent:o}=ht.parse(e.payload),s=$i(a);if(o){Je(null,a);let o=N(await n.insert(r).values({sessionId:i,createdAt:a.createdAt,...s}).onConflictDoNothing());e.setResult({success:o,clientAccountChanged:o&&a.clientAccountId!==void 0}),o&&Ye(t,null,a);return}for(let o=0;o<3;o++){let[o]=await n.select().from(r).where(L(r.sessionId,i)).limit(1),c=o?q(o,[]):null;if(Je(c,a),N(await n.insert(r).values({sessionId:i,createdAt:a.createdAt,...s}).onConflictDoUpdate({target:r.sessionId,set:ea(s),setWhere:li(o,r)}))){e.setResult({success:!0,clientAccountChanged:(c?.clientAccountId??null)!==(a.clientAccountId??null)}),Ye(t,c,a);return}}throw Error(`Failed to write session "${i}" with a stable client-account baseline`)})}function oa(e){let{bus:t,db:n}=e,{sessions:r,agents:i,adapterSessionClaims:a}=F(n,G);return t.on(T.delete,async e=>{let{sessionId:t}=e.payload;await P(n,async e=>{await e.delete(i).where(L(i.sessionId,t)),await e.delete(a).where(L(a.sessionId,t)),await e.delete(r).where(L(r.sessionId,t))}),e.setResult({success:!0})})}function sa(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G);return t.on(T.update,async e=>{let i=gt.request.parse(e.payload),{sessionId:a}=i,o=ra(i,r),s=Oi(i);if(Object.keys(o).length===0){e.setResult({success:!0,clientAccountChanged:!1});return}let{status:c,identity:l,reconciliation:u}=Zi(i,r);if(!s){let s=N(await n.update(r).set(o).where(I(L(r.sessionId,a),c,l,u)));e.setResult({success:s,clientAccountChanged:!1}),s&&i.advanceGeneration===!0&&Qe(t,a);return}for(let s=0;s<3;s++){let[s]=await n.select().from(r).where(L(r.sessionId,a)).limit(1);if(!s){e.setResult({success:!1,clientAccountChanged:!1});return}let d=q(s,[]),f=Di(d,i);if(Je(d,f),i.expectedStatus!==void 0&&!i.expectedStatus.includes(d.status)){e.setResult({success:!1,clientAccountChanged:!1});return}if(Ke(d,i)){e.setResult({success:!1,clientAccountChanged:!1});return}if(Xe(d,i)){e.setResult({success:!1,clientAccountChanged:!1});return}if(N(await n.update(r).set(o).where(I(L(r.sessionId,a),c,l,u,li(s,r))))){e.setResult({success:!0,clientAccountChanged:(d.clientAccountId??null)!==(f.clientAccountId??null)}),Ye(t,d,f),i.advanceGeneration===!0&&Qe(t,a);return}}throw Error(`Failed to update session "${a}" with a stable client-account baseline`)})}function ca(e,t){let n=[];return e.status!==`all`&&n.push(L(t.status,e.status)),e.executionTargetId!==void 0&&n.push(L(t.executionTargetId,e.executionTargetId)),I(...n)}function la(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=F(n,G);return t.on(T.list,async e=>{let{status:t=`all`,limit:a,offset:o=0,includePreview:s=!1,executionTargetId:c}=e.payload,l=ca({status:t,executionTargetId:c},r),u=l?n.select().from(r).where(l):n.select().from(r),d=a===void 0?await u.orderBy(Jt(r.lastActivityAt)):await u.orderBy(Jt(r.lastActivityAt)).limit(a).offset(o),[f]=await(l?n.select({count:qt()}).from(r).where(l):n.select({count:qt()}).from(r)),p=f?.count??0;if(d.length===0){e.setResult({sessions:[],total:p});return}let m=d.map(e=>e.sessionId),h=Ti(await n.select().from(i).where(R(i.sessionId,m))),{previewBySession:g,countBySession:_}=await Ei(n,m,s),v=d.map(e=>{let t=q(e,h.get(e.sessionId)??[]);return s&&g&&_?{...t,preview:{messageCount:_.get(e.sessionId)??0,firstUserMessage:g.get(e.sessionId)??null}}:t});e.setResult({sessions:v,total:p})})}function ua(e){let{bus:t,db:n}=e,{sessions:r}=F(n,G);return t.on(T.getStatusCounts,async e=>{e.payload;let t=await n.select({status:r.status,count:qt()}).from(r).groupBy(r.status),i=0,a=0,o=0,s=0;for(let e of t)e.status===`active`?i=e.count:e.status===`closed`?a=e.count:e.status===`archived`?o=e.count:e.status===`discovered`&&(s=e.count);let c=i+a+o+s;e.setResult({all:c,active:i,closed:a,archived:o,discovered:s})})}function da(e,t){let n={bus:e,db:t},r=[ia(n),aa(n),oa(n),sa(n),la(n),Ai(n),ki(n),ua(n),...Yi(e,t)];return()=>r.forEach(e=>e())}var X=class extends Error{result;constructor(e){super(`session ownership claim rolled back: ${e.outcome}`),this.name=`ClaimRollbackSignal`,this.result=e}};async function fa(e,t,n){let{agents:r}=t,[i]=await e.update(r).set({currencyFence:r.currencyFence}).where(L(r.agentId,n)).returning();return i}function Z(e){return B`cast(${e} as text)`}function pa(e){return B`cast(${e} as bigint)`}function ma(e){return B`cast(${e} as integer)`}async function ha(e,t,n,r){let{runtimeInstanceIncarnationCounters:i,runtimeInstances:a}=t,[o]=await e.insert(i).values({machineId:n.machineId,lastAllocatedIncarnation:0}).onConflictDoUpdate({target:i.machineId,set:{lastAllocatedIncarnation:i.lastAllocatedIncarnation}}).returning({machineId:i.machineId});if(o===void 0)throw Error(`runtime incarnation allocation returned no counter for ${n.machineId}`);let[s]=await e.select().from(a).where(I(L(a.instanceId,n.instanceId),L(a.machineId,n.machineId))).limit(1);if(s!==void 0)return{instance:s,inserted:!1};let[c]=await e.update(i).set({lastAllocatedIncarnation:B`${i.lastAllocatedIncarnation} + 1`}).where(L(i.machineId,n.machineId)).returning({incarnation:i.lastAllocatedIncarnation});if(c===void 0)throw Error(`runtime incarnation counter disappeared while allocating for ${o.machineId}`);let[l]=await e.insert(a).values({instanceId:n.instanceId,machineId:n.machineId,incarnation:c.incarnation,startedAt:r,retiredAt:null}).onConflictDoNothing({target:[a.instanceId,a.machineId]}).returning();if(l!==void 0)return{instance:l,inserted:!0};let[u]=await e.select().from(a).where(I(L(a.instanceId,n.instanceId),L(a.machineId,n.machineId))).limit(1);if(u!==void 0)return{instance:u,inserted:!1};throw Error(`runtime instance ${n.instanceId}/${n.machineId} was neither inserted nor found`)}function ga(e,t){return B`(case when ${e} > ${t} then ${e} else ${t} end)`}function _a(e,t){let{adapterSessionClaims:n}=e;return B`coalesce((select max(${n.fence}) from ${n}
56
+ where ${L(n.agentId,t)}), 0)`}function va(e,t){let{agents:n}=e;return B`coalesce((select ${n.currencyFence} from ${n}
57
+ where ${L(n.agentId,t)}), 0)`}function ya(e,t,n){return B`1 + ${ga(n,_a(e,t))}`}function ba(e,t,n){return ya(e,t,ga(ma(n),va(e,t)))}function Q(e){return{claimId:e.claimId,machineId:e.machineId,adapterId:e.adapterId,adapterName:e.adapterName,providerSessionId:e.providerSessionId,sessionId:e.sessionId,agentId:e.agentId,ownerInstanceId:e.ownerInstanceId,claimToken:e.claimToken,fence:e.fence,status:e.status,claimedAt:e.claimedAt,updatedAt:e.updatedAt}}function xa(e){return{instanceId:e.instanceId,machineId:e.machineId,incarnation:e.incarnation,startedAt:e.startedAt,retiredAt:e.retiredAt}}function Sa(e,t){let{runtimeInstances:n}=F(t,G);return[e.on(A.retireInstance,async e=>{let r=await t.update(n).set({retiredAt:Date.now()}).where(I(L(n.instanceId,e.payload.instanceId),z(n.retiredAt))).returning({machineId:n.machineId});e.setResult({retiredMachines:r.length})}),e.on(A.getRuntimeInstance,async e=>{let[r]=await t.select().from(n).where(I(L(n.instanceId,e.payload.instanceId),L(n.machineId,e.payload.machineId))).limit(1);e.setResult({instance:r===void 0?null:xa(r)})})]}function Ca(e){return{adapterSessionId:e.adapterSessionId??null,currentAdapterSessionId:e.currentAdapterSessionId??null,currentAdapterSessionIdState:e.currentAdapterSessionIdState}}function wa(e,t,n,r){let{agents:i}=e;return B`exists (select 1 from ${i} where ${I(L(i.agentId,t),L(i.sessionId,n),...r===`live`?[en(i.status,`disposed`)]:[])})`}function Ta(e,t,n,r){let{agents:i,sessions:a}=e,o={claimId:Z(n),machineId:Z(t.machineId),adapterId:Z(t.adapterId),adapterName:Z(t.adapterName),providerSessionId:Z(t.providerSessionId),sessionId:Z(t.sessionId),agentId:Z(t.agentId),ownerInstanceId:Z(t.ownerInstanceId),claimToken:Z(t.claimToken),fence:ya(e,t.agentId,B`${i.currencyFence}`),status:Z(`held`),claimedAt:pa(r),updatedAt:pa(r)};return B`select ${B.join(Object.values(o),B`, `)} from ${i}
58
+ where ${L(i.agentId,t.agentId)}
59
+ and ${L(i.sessionId,t.sessionId)}
60
+ and ${en(i.status,`disposed`)}
61
+ and exists (select 1 from ${a} where ${L(a.sessionId,t.sessionId)})`}function Ea(e,t){let{agents:n,sessions:r}=e,i=L(n.agentId,t),a=e=>B`(select ${e} from ${n} where ${i})`,o=a(B`${n.currentAdapterSessionIdState}`),s=a(B`${n.currentAdapterSessionId}`),c=a(B`${n.adapterSessionId}`),l=B`${r.adapterSessionId}`,u=B`(${c} = ${l} or (${c} is null and ${l} is null))`;return{currentAdapterSessionId:B`(case
62
+ when ${o} <> 'inherited' then ${s}
63
+ when ${u} then null
64
+ when ${c} is null then null
65
+ else ${c} end)`,currentAdapterSessionIdState:B`(case
66
+ when ${o} <> 'inherited' then ${o}
67
+ when ${u} then ${Z(`inherited`)}
68
+ when ${c} is null then ${Z(`moved`)}
69
+ else ${Z(`confirmed`)} end)`}}function Da(e,t){let{adapterSessionClaims:n}=e,r=[L(n.machineId,t.machineId)];return t.adapterId!==void 0&&r.push(L(n.adapterId,t.adapterId)),t.providerSessionId!==void 0&&r.push(L(n.providerSessionId,t.providerSessionId)),t.statuses!==void 0&&r.push(R(n.status,t.statuses)),r}function Oa(e,t){let n=F(t,G),{agents:r,adapterSessionClaims:i}=n;return[e.on(A.read,async e=>{let[n]=await t.select().from(r).where(L(r.agentId,e.payload.agentId)).limit(1);if(n===void 0){e.setResult({ownership:null});return}let a=await t.select().from(i).where(L(i.agentId,e.payload.agentId)).orderBy(Kt(i.fence),Kt(i.claimId));e.setResult({ownership:{agentId:n.agentId,sessionId:n.sessionId,currency:Ca(n),revision:n.revision,currencyFence:n.currencyFence,claims:a.map(Q)}})}),e.on(A.listClaims,async e=>{let r=await t.select().from(i).where(I(...Da(n,e.payload))).orderBy(Kt(i.claimedAt),Kt(i.claimId));e.setResult({claims:r.map(Q)})})]}function ka(e){return{outcome:`lead-conflict`,currentLeadAgentId:e}}function Aa(e,t,n){return{outcome:e,claim:t===null?null:Q(t),leadDesignated:n.leadDesignated,previousLeadAgentId:n.previousLeadAgentId}}const ja=`makaio:session-ownership:claim:v1`;function Ma(e){return{namespace:ja,identity:JSON.stringify([e.machineId,e.adapterId,e.providerSessionId])}}async function Na(e,t,n){let{adapterSessionClaims:r}=t;return(await e.select({machineId:r.machineId,adapterId:r.adapterId,providerSessionId:r.providerSessionId}).from(r).where(I(L(r.agentId,n),L(r.status,`held`)))).map(Ma)}function Pa(e){return Ma(e)}async function Fa(e,t){let n=F(e,G);return P(e,async e=>{await fa(e,n,t.agentId);let r=t.action.kind===`rollback`?{status:t.action.preimage.status,adapterId:t.action.preimage.adapterId,ownerMachineId:t.action.preimage.binding?.ownerMachineId??null,ownerInstanceId:t.action.preimage.binding?.ownerInstanceId??null,recoveryAttemptId:t.action.preimage.recoveryAttemptId??null}:{status:t.action.kind===`succeeded`?`idle`:`dead`,recoveryAttemptId:null};return{applied:N(await e.update(n.agents).set({...r,lastActivityAt:Date.now()}).where(I(L(n.agents.agentId,t.agentId),L(n.agents.status,`starting`),L(n.agents.recoveryAttemptId,t.attemptId),L(n.agents.adapterId,t.binding.adapterId),L(n.agents.ownerMachineId,t.binding.ownerMachineId),L(n.agents.ownerInstanceId,t.binding.ownerInstanceId))))}})}async function Ia(e,t,n){let{adapterSessionClaims:r}=t,[i]=await e.select().from(r).where(I(L(r.machineId,n.machineId),L(r.adapterId,n.adapterId),L(r.providerSessionId,n.providerSessionId))).limit(1);return i}async function La(e,t,n){let{adapterSessionClaims:r}=t,[i]=await e.select().from(r).where(L(r.claimToken,n)).limit(1);return i}async function Ra(e,t,n){let{agents:r}=t,[i]=await e.select().from(r).where(L(r.agentId,n)).limit(1);return i}async function za(e,t,n){let{sessions:r}=t,[i]=await e.select({leadAgentId:r.leadAgentId}).from(r).where(L(r.sessionId,n)).limit(1);return i===void 0?void 0:i.leadAgentId??null}async function Ba(e,t){let n=F(e,G),{adapterSessionClaims:r}=n,i=Date.now();return P(e,async e=>{await fa(e,n,t.agentId);let a=I(L(r.claimToken,t.claimToken),L(r.agentId,t.agentId));if(t.disposition===`released`){if((await e.delete(r).where(a).returning({claimId:r.claimId})).length>0)return{outcome:`released`}}else{let[n]=await e.update(r).set({status:t.disposition,updatedAt:i}).where(a).returning();if(n!==void 0)return{outcome:`marked`,claim:Q(n)}}let o=await La(e,n,t.claimToken);return o===void 0?{outcome:`not-found`}:{outcome:`not-owner`,holder:Q(o)}})}async function Va(e,t,n){if(await za(e,t,n.sessionId)===void 0)return{kind:`refused`,result:{outcome:`not-found`,missing:`session`}};let r=await Ra(e,t,n.agentId);return r===void 0||r.sessionId!==n.sessionId?{kind:`refused`,result:{outcome:`not-found`,missing:`agent`}}:r.status===`disposed`?{kind:`refused`,result:{outcome:`agent-disposed`}}:{kind:`ok`,agent:r}}async function Ha(e,t,n,r){let{adapterSessionClaims:i}=t,[a]=await e.insert(i).select(Ta(t,n,crypto.randomUUID(),r)).onConflictDoNothing({target:[i.machineId,i.adapterId,i.providerSessionId]}).returning();return a}function Ua(e,t,n){let{adapterSessionClaims:r,runtimeInstances:i}=e;return n===`same-instance`?I(L(r.status,`held`),L(r.agentId,t.agentId),L(r.ownerInstanceId,t.ownerInstanceId)):n===`owner-retired`?B`exists (select 1 from ${i} where ${I(L(i.instanceId,r.ownerInstanceId),L(i.machineId,r.machineId),Zt(i.retiredAt))})`:B`(select ${i.incarnation} from ${i}
70
+ where ${L(i.instanceId,t.ownerInstanceId)}
71
+ and ${L(i.machineId,r.machineId)})
72
+ > (select ${i.incarnation} from ${i}
73
+ where ${L(i.instanceId,r.ownerInstanceId)}
74
+ and ${L(i.machineId,r.machineId)})`}async function Wa(e,t,n,r,i,a,o){let{adapterSessionClaims:s}=t,c=i===`named-token`?void 0:Ua(t,n,i),l=o===void 0?void 0:I(L(s.claimId,o.claimId),L(s.claimToken,o.claimToken),L(s.fence,o.fence),o.ownerInstanceId===null?z(s.ownerInstanceId):L(s.ownerInstanceId,o.ownerInstanceId),L(s.status,o.status)),[u]=await e.update(s).set({claimToken:n.claimToken,fence:ba(t,n.agentId,r.fence),agentId:n.agentId,sessionId:n.sessionId,adapterName:n.adapterName,ownerInstanceId:n.ownerInstanceId,status:`held`,claimedAt:a,updatedAt:a}).where(I(L(s.claimId,r.claimId),L(s.claimToken,r.claimToken),Zt(s.ownerInstanceId),wa(t,n.agentId,n.sessionId,`live`),...c===void 0?[]:[c],...l===void 0?[]:[l])).returning();return u}async function Ga(e,t,n,r,i){if(r.ownerInstanceId===null)return;if(i)return`named-token`;if(r.status===`held`&&r.agentId===n.agentId&&r.ownerInstanceId===n.ownerInstanceId)return`same-instance`;let{runtimeInstances:a}=t,[o]=await e.select().from(a).where(I(L(a.instanceId,r.ownerInstanceId),L(a.machineId,r.machineId))).limit(1);if(o?.retiredAt!==null&&o?.retiredAt!==void 0)return`owner-retired`;if(n.topology===`machine-exclusive`){let[t]=await e.select().from(a).where(I(L(a.instanceId,n.ownerInstanceId),L(a.machineId,n.machineId))).limit(1);if(o!==void 0&&t!==void 0&&t.incarnation>o.incarnation)return`owner-superseded`}}async function Ka(e,t,n,r){if(n.recoveryGuard===void 0)return;let i=n.providerSessionId===null?void 0:await Ia(e,t,{machineId:n.machineId,adapterId:n.adapterId,providerSessionId:n.providerSessionId});return He(n,{status:r.status,adapterId:r.adapterId,runtimeOwner:r.ownerMachineId===null||r.ownerInstanceId===null?void 0:{machineId:r.ownerMachineId,instanceId:r.ownerInstanceId},recoveryAttemptId:r.recoveryAttemptId??void 0,revision:r.revision,currencyFence:r.currencyFence,currency:Ca(r)},i===void 0?null:Q(i))}async function qa(e,t,n,r){if(n.recoveryGuard!==void 0&&(r.outcome===`claimed`||r.outcome===`idempotent`)){if(n.recoveryAttemptId===void 0||n.ownerInstance===void 0)throw Error(`guarded recovery claim requires recoveryAttemptId and ownerInstance`);let[i]=await e.select().from(t.agents).where(L(t.agents.agentId,n.agentId));if(i===void 0)return{outcome:`not-found`,missing:`agent`};let a={status:i.status,adapterId:i.adapterId,...i.ownerMachineId===null||i.ownerInstanceId===null?{}:{binding:{adapterId:i.adapterId,ownerMachineId:i.ownerMachineId,ownerInstanceId:i.ownerInstanceId}},...i.recoveryAttemptId===null?{}:{recoveryAttemptId:i.recoveryAttemptId}};return await e.update(t.agents).set({status:`starting`,adapterId:n.adapterId,ownerMachineId:n.machineId,ownerInstanceId:n.ownerInstance.instanceId,recoveryAttemptId:n.recoveryAttemptId,lastActivityAt:Date.now()}).where(L(t.agents.agentId,n.agentId)),{...r,recovery:{attemptId:n.recoveryAttemptId,preimage:a}}}return r}function Ja(e,t){let n=e.recoveryGuard;if(n===void 0)throw Error(`recovery conflict requires a recovery guard`);return{outcome:`recovery-conflict`,status:n.expectedStatus,ownerGeneration:t===void 0?null:Be(Q(t))}}async function Ya(e,t,n,r){let i=n.recoveryGuard?.ownerGeneration;if(i==null)throw Error(`guarded recovery takeover requires an observed owner generation`);let a=await Ia(e,t,n),o=a===void 0?null:Be(Q(a));if(a===void 0||!Ve(o,i))return Ja(n,a);let s=await Ga(e,t,n,a,n.supersedes?.claimToken===a.claimToken);if(s===void 0)return Ja(n,a);let c=await r(a,s);return c===void 0||c.outcome===`already-claimed`?Ja(n,c===void 0?void 0:await Ia(e,t,n)):c}function Xa(e,t){let{agents:n,adapterSessionClaims:r}=e,{target:i}=t,a=B`(${i.currentAdapterSessionId===null?z(n.currentAdapterSessionId):L(n.currentAdapterSessionId,i.currentAdapterSessionId)} and ${L(n.currentAdapterSessionIdState,i.currentAdapterSessionIdState)} and ${L(n.currencyFence,t.fence)})`;return I(L(n.agentId,t.agentId),en(n.status,`disposed`),L(n.revision,t.expectedRevision),$t(n.currencyFence,t.fence),B`exists (select 1 from ${r} where ${I(L(r.claimToken,t.claimToken),L(r.agentId,t.agentId),L(r.sessionId,n.sessionId),L(r.status,`held`),L(r.fence,t.fence))})`,tn(a))}function Za(e,t,n){if(t.status===`disposed`)return{outcome:`agent-disposed`};if(e===void 0||e.agentId!==n.agentId||e.sessionId!==t.sessionId||e.status!==`held`||e.fence!==n.fence)return{outcome:`not-owner`};if(n.fence<t.currencyFence)return{outcome:`superseded`,currentFence:t.currencyFence};let r=Ca(t);return r.currentAdapterSessionId===n.target.currentAdapterSessionId&&r.currentAdapterSessionIdState===n.target.currentAdapterSessionIdState&&t.currencyFence===n.fence?{outcome:`idempotent`,revision:t.revision,currency:r,sessionSnapshotUpdated:!1}:{outcome:`currency-changed`,revision:t.revision,currency:r}}async function Qa(e,t,n){let r=await Ra(e,t,n.agentId);return r===void 0?{outcome:`not-found`}:Za(await La(e,t,n.claimToken),r,n)}async function $a(e,t,n){let{adapterSessionClaims:r}=t;return(await e.update(r).set({updatedAt:r.updatedAt}).where(L(r.claimToken,n)).returning({claimId:r.claimId})).length>0}async function eo(e,t,n){let{agents:r,sessions:i}=t,{target:a}=n,[o]=await e.update(r).set({currentAdapterSessionId:a.currentAdapterSessionId,currentAdapterSessionIdState:a.currentAdapterSessionIdState,currencyFence:n.fence,revision:n.expectedRevision+1,lastActivityAt:Date.now()}).where(Xa(t,n)).returning();if(o===void 0)return Qa(e,t,n);let s=await e.update(i).set({...Ea(t,n.agentId)}).where(I(L(i.sessionId,o.sessionId),L(i.leadAgentId,n.agentId))).returning({sessionId:i.sessionId});return{outcome:`settled`,revision:n.expectedRevision+1,currency:{adapterSessionId:o.adapterSessionId??null,...a},sessionSnapshotUpdated:s.length>0}}async function to(e,t){let n=F(e,G);return P(e,async e=>await fa(e,n,t.agentId)===void 0?{outcome:`not-found`}:await $a(e,n,t.claimToken)?eo(e,n,t):Qa(e,n,t))}var no=class extends Error{result;constructor(e){super(`session ownership movement rolled back: ${e.outcome}`),this.name=`MovementRollbackSignal`,this.result=e}};function ro(e,t){if(e.kind===`confirmed`)return{providerSessionId:e.providerSessionId,currency:{currentAdapterSessionId:e.providerSessionId,currentAdapterSessionIdState:`confirmed`}};let n=wt(Ca(t));return n===null?null:{providerSessionId:n,currency:{currentAdapterSessionId:null,currentAdapterSessionIdState:`moved`}}}async function io(e,t,n){let{adapterSessionClaims:r}=t,[i]=await e.select().from(r).where(I(L(r.machineId,n.machineId),L(r.adapterId,n.adapterId),L(r.providerSessionId,n.providerSessionId),L(r.agentId,n.agentId),L(r.status,`held`),nn(L(r.ownerInstanceId,n.ownerInstanceId),z(r.ownerInstanceId)))).limit(1);return i}async function ao(e,t,n,r){if(n.ownerInstanceId!==null)return n;let{adapterSessionClaims:i}=t,[a]=await e.update(i).set({ownerInstanceId:r}).where(I(L(i.claimId,n.claimId),z(i.ownerInstanceId))).returning();if(a===void 0)throw Error(`locked legacy movement generation disappeared before adoption`);return a}async function oo(e,t,n,r){for(let i=0;i<2;i+=1){let i=await Ha(e,t,n,r);if(i!==void 0)return i;let a=await Ia(e,t,n);if(a===void 0){let r=await Va(e,t,n);if(r.kind===`refused`)throw new no(r.result.outcome===`agent-disposed`?{outcome:`agent-disposed`}:{outcome:`not-found`});continue}let o=await Ga(e,t,n,a,!1);if(o!==void 0){let i=await Wa(e,t,n,a,o,r);if(i!==void 0)return i;let s=await Ia(e,t,n);if(s===void 0)continue;throw new no({outcome:`already-claimed`,holder:Q(s)})}throw new no({outcome:`already-claimed`,holder:Q(a)})}throw Error(`session ownership movement could not acquire the key ${n.machineId}/${n.adapterId}/${n.providerSessionId}: it was taken and freed by a competitor on every attempt`)}async function so(e,t,n,r){let{adapterSessionClaims:i}=t;return(await e.delete(i).where(I(L(i.agentId,n),L(i.status,`held`),en(i.claimId,r))).returning({providerSessionId:i.providerSessionId})).map(e=>e.providerSessionId)}function co(e,t){return e.outcome===`idempotent`?{outcome:`idempotent`,revision:e.revision,currency:e.currency,sessionSnapshotUpdated:!1,claim:Q(t)}:e}function lo(e,t){if(t)throw new no(e);return e}function uo(e,t,n){return{machineId:e.machineId,adapterId:e.adapterId,adapterName:e.adapterName,providerSessionId:n,sessionId:e.sessionId,agentId:e.agentId,ownerInstanceId:t,topology:e.topology,claimToken:e.movement.claimToken}}async function fo(e,t){let n=F(e,G),r=Date.now(),i=t.ownerInstance;if(i===void 0)throw Error(`session ownership movement requires ownerInstance`);try{return await P(e,async a=>{let o=await ha(a,n,{instanceId:i.instanceId,machineId:t.machineId},r),s=await fa(a,n,t.agentId);if(s===void 0||s.sessionId!==t.sessionId)return lo({outcome:`not-found`},o.inserted);if(s.status===`disposed`)return lo({outcome:`agent-disposed`},o.inserted);let c=ro(t.movement,s);if(c===null)return lo({outcome:`idempotent`,revision:s.revision,currency:Ca(s),sessionSnapshotUpdated:!1,claim:null},o.inserted);let l=uo(t,i.instanceId,c.providerSessionId);await Bt(e,a,[Pa(l),...await Na(a,n,t.agentId)]);let u=await io(a,n,l)??await oo(a,n,l,r),d=t.movement.kind===`confirmed`?await so(a,n,t.agentId,u.claimId):[],f=await eo(a,n,{agentId:t.agentId,claimToken:u.claimToken,fence:u.fence,expectedRevision:t.expectedRevision,target:c.currency});if(f.outcome!==`settled`)throw new no(co(f,u));let p=await ao(a,n,u,i.instanceId);return{outcome:`settled`,revision:f.revision,currency:f.currency,sessionSnapshotUpdated:f.sessionSnapshotUpdated,releasedProviderSessionIds:d,claim:Q(p)}})}catch(e){if(e instanceof no)return e.result;throw e}}async function po(e,t,n){let{sessions:r}=t,[i]=await e.update(r).set({lastActivityAt:r.lastActivityAt}).where(L(r.sessionId,n)).returning({leadAgentId:r.leadAgentId,status:r.status});return i===void 0?void 0:{leadAgentId:i.leadAgentId??null,status:i.status}}function mo(e,t,n,r){let{sessions:i}=e,a=n===null?z(i.leadAgentId):L(i.leadAgentId,n);return r?a:nn(a,L(i.leadAgentId,t.agentId))}async function ho(e,t,n){let{sessions:r}=t,i=await po(e,t,n.sessionId);if(i===void 0)throw new X({outcome:`not-found`,missing:`session`});if(i.status!==`active`&&(i.status!==`closed`||!xt(n)))throw new X({outcome:`session-not-active`,status:i.status});let a=i.leadAgentId,o=n.designateLead;if(o===void 0)return{leadDesignated:!1,previousLeadAgentId:a};let s=o.clear===!0,c=s?null:n.agentId,l=s?`any-status`:`live`,u=c!==a;return(await e.update(r).set({leadAgentId:c,...s||!u?{}:Ea(t,n.agentId)}).where(I(L(r.sessionId,n.sessionId),mo(t,n,o.expectedLeadAgentId,s),wa(t,n.agentId,n.sessionId,l))).returning({leadAgentId:r.leadAgentId})).length===0?go(e,t,n,a,l):{leadDesignated:u,previousLeadAgentId:a}}async function go(e,t,n,r,i){let a=await Va(e,t,n);throw a.kind===`refused`&&!(i===`any-status`&&a.result.outcome===`agent-disposed`)?new X(a.result):new X(ka(r))}async function _o(e,t,n,r,i,a){let o=await Wa(e,t,n,r,i,a,n.recoveryGuard?.ownerGeneration??void 0);if(o!==void 0)return Aa(`claimed`,o,await ho(e,t,n));let s=await Ia(e,t,n);if(s===void 0)return yo;if(s.claimToken===r.claimToken){let r=await Va(e,t,n);if(r.kind===`refused`)return r.result}return{outcome:`already-claimed`,holder:Q(s)}}async function vo(e,t,n,r){if(r.status!==`held`)return{outcome:`already-claimed`,holder:Q(r)};let i=await Va(e,t,n);return i.kind===`refused`?i.result:Aa(`idempotent`,r,await ho(e,t,n))}const yo=Symbol(`retry-acquisition`);async function bo(e,t,n,r){if(n.recoveryGuard?.ownerGeneration)return Ya(e,t,n,async(i,a)=>{let o=await _o(e,t,n,i,a,r);return o===yo?void 0:o});let i=await Ha(e,t,n,r);if(i!==void 0)return Aa(`claimed`,i,await ho(e,t,n));let a=await Ia(e,t,n);if(n.recoveryGuard!==void 0)return Ja(n,a);if(a===void 0){let r=await Va(e,t,n);return r.kind===`refused`?r.result:yo}if(a.claimToken===n.claimToken)return a.agentId===n.agentId&&a.sessionId===n.sessionId?vo(e,t,n,a):{outcome:`already-claimed`,holder:Q(a)};let o=await Ga(e,t,n,a,n.supersedes?.claimToken===a.claimToken);return o===void 0?{outcome:`already-claimed`,holder:Q(a)}:_o(e,t,n,a,o,r)}async function xo(e,t,n,r){return r.sessionId===n.sessionId?r.status===`disposed`&&n.designateLead?.clear!==!0?{outcome:`agent-disposed`}:Aa(`claimed`,null,await ho(e,t,n)):{outcome:`not-found`,missing:`agent`}}async function So(e,t,n){let r=await fa(e,t,n.agentId);if(r!==void 0)return{kind:`ok`,agent:r};let i=await Va(e,t,n);if(i.kind===`refused`)return{kind:`refused`,result:i.result};let a=await fa(e,t,n.agentId);return a===void 0?{kind:`refused`,result:{outcome:`not-found`,missing:`agent`}}:{kind:`ok`,agent:a}}async function Co(e,t,n,r,i){let a;if(n.recoveryGuard!==void 0){if(r===void 0)throw Error(`guarded recovery claim requires ownerInstance`);a=await ha(e,t,{instanceId:r.instanceId,machineId:n.machineId},i)}let o=await So(e,t,n);if(o.kind===`refused`){if(a!==void 0)throw new X(o.result);return o.result}let s=await Ka(e,t,n,o.agent);if(s!==void 0){if(a!==void 0)throw new X(s);return s}let c=await xo(e,t,n,o.agent);if(a!==void 0&&c.outcome!==`claimed`)throw new X(c);return qa(e,t,n,c)}async function wo(e,t){let n=St(t),r=F(e,G),i=Date.now(),a=n.ownerInstance;if(n.providerSessionId!==null&&a===void 0)throw Error(`keyed session ownership claim requires ownerInstance`);if(n.recoveryGuard!==void 0&&a===void 0)throw Error(`guarded recovery claim requires ownerInstance`);try{return await P(e,async t=>{let{providerSessionId:o}=n;if(o!==null){if(a===void 0)throw Error(`keyed session ownership claim requires ownerInstance`);let s=await ha(t,r,{instanceId:a.instanceId,machineId:n.machineId},i),c=await So(t,r,n);if(c.kind===`refused`){if(s.inserted)throw new X(c.result);return c.result}let l={...n,providerSessionId:o,ownerInstance:a,ownerInstanceId:a.instanceId};if(await Bt(e,t,[Pa(l)]),n.recoveryGuard!==void 0){let e=await Ka(t,r,n,c.agent);if(e!==void 0){if(s.inserted)throw new X(e);return e}}for(let e=0;e<2;e+=1){let e=await bo(t,r,l,i);if(e!==yo){if(s.inserted&&e.outcome!==`claimed`)throw new X(e);return qa(t,r,n,e)}}throw Error(`session ownership claim could not be acquired: the key ${n.machineId}/${n.adapterId}/${o} was taken and freed by a competitor on every attempt`)}return Co(t,r,n,a,i)})}catch(e){if(e instanceof X)return e.result;throw e}}async function To(e,t){let n=F(e,G),{adapterSessionClaims:r}=n,i=Date.now();return P(e,async e=>{await fa(e,n,t.agentId);let a=t.claimToken===void 0?L(r.agentId,t.agentId):I(L(r.agentId,t.agentId),L(r.claimToken,t.claimToken));if(t.disposition===`released`){let n=await e.delete(r).where(a).returning({providerSessionId:r.providerSessionId});return{releasedProviderSessionIds:n.map(e=>e.providerSessionId),markedClaims:[],claimTokenNotFound:t.claimToken!==void 0&&n.length===0}}let o=await e.update(r).set({status:t.disposition,updatedAt:i}).where(a).returning();return{releasedProviderSessionIds:[],markedClaims:o.map(Q),claimTokenNotFound:t.claimToken!==void 0&&o.length===0}})}function Eo(e,t){let n=[...Oa(e,t),e.on(A.claim,async e=>{e.setResult(await wo(t,e.payload))}),e.on(A.finalizeRecovery,async e=>{e.setResult(await Fa(t,e.payload))}),e.on(A.settleCurrency,async e=>{e.setResult(await to(t,e.payload))}),e.on(A.settleMovement,async e=>{let n=pt.parse(e.payload);e.setResult(await fo(t,n))}),e.on(A.release,async e=>{e.setResult(await Ba(t,e.payload))}),e.on(A.releaseAgentClaims,async e=>{e.setResult(await To(t,e.payload))}),...Sa(e,t)];return()=>{for(let e=n.length-1;e>=0;--e)n[e]?.()}}async function Do(e,t){if(t.length===0)return new Map;let{agents:n}=F(e,G),r=[...new Set(t)],i=await e.select().from(n).where(R(n.sessionId,r)),a=new Map;for(let e of i){let t=a.get(e.sessionId)??[];t.push(e),a.set(e.sessionId,t)}return a}async function Oo(e,t){return Gt(e).fts.fetchFirstUserMessagePreviews(e,t)}async function ko(e,t){if(t.length===0)return new Map;let{messages:n}=F(e,f),r=[...new Set(t)],i=await e.select({sessionId:n.sessionId,count:qt()}).from(n).where(R(n.sessionId,r)).groupBy(n.sessionId),a=new Map;for(let e of i)a.set(e.sessionId,e.count);return a}function Ao(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function jo(e){if(e!==null)try{let t=typeof e==`string`?JSON.parse(e):e,n=mt.safeParse(t);return n.success?n.data:void 0}catch{return}}function Mo(e,t,n,r){return{sessionId:e.session_id,createdAt:e.created_at,lastActivityAt:e.last_activity_at,status:e.status,title:e.title??void 0,leadAgentId:e.lead_agent_id??void 0,parentSessionId:e.parent_session_id??void 0,rootSessionId:e.root_session_id??void 0,forkPointMessageId:e.fork_point_message_id??void 0,branchKind:e.branch_kind??void 0,generation:e.generation,adapterName:e.adapter_name??void 0,adapterSessionId:e.adapter_session_id??void 0,adapterId:e.adapter_id??void 0,isOrchestrated:e.is_orchestrated===null?void 0:!!e.is_orchestrated,isImported:e.is_imported===null?void 0:!!e.is_imported,summary:e.summary??void 0,summaryUpdatedAt:e.summary_updated_at??void 0,forkTransforms:Ao(e.fork_transforms),targetWorkingDirectory:e.target_working_directory??void 0,metadata:jo(e.metadata),machineId:e.machine_id??void 0,agents:t.map(e=>({agentId:e.agentId,adapterId:e.adapterId,adapterName:e.adapterName,sessionId:e.sessionId,role:e.role,status:e.status,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,model:e.model??void 0,adapterSessionId:e.adapterSessionId??void 0,cwd:e.cwd??void 0})),preview:{messageCount:r.get(e.session_id)??0,firstUserMessage:n.get(e.session_id)??null}}}function No(e,t){let n=Gt(t).fts,r=[];return r.push(e.on(T.search,async e=>{let{query:r,limit:i=20,status:a=`all`,isImported:o}=e.payload,s=r.trim();if(!s){e.setResult({sessions:[],total:0});return}let c={query:s,likePattern:`%${s.toLowerCase()}%`,status:a===`all`?void 0:a,isImported:o},l=await n.searchSessionRows(t,{...c,limit:i});if(l.length===0){e.setResult({sessions:[],total:0});return}let u=await n.countSessionMatches(t,c),d=l.map(e=>e.session_id),f=await Do(t,d),p=await Oo(t,d),m=await ko(t,d),h=l.map(e=>Mo(e,f.get(e.session_id)??[],p,m));e.setResult({sessions:h,total:u})})),()=>r.forEach(e=>e())}async function Po(e,t){return(await Ut(e).all(B`
75
+ WITH RECURSIVE ancestors AS (
76
+ SELECT session_id, parent_session_id
77
+ FROM sessions
78
+ WHERE session_id = ${t}
79
+
80
+ UNION ALL
81
+
82
+ SELECT s.session_id, s.parent_session_id
83
+ FROM sessions s
84
+ JOIN ancestors a ON s.session_id = a.parent_session_id
85
+ )
86
+ SELECT session_id FROM ancestors
87
+ `)).map(e=>e.session_id)}const Fo=new Map;function Io(e,t){let n=(Fo.get(e)??Promise.resolve()).then(t),r=n.then(()=>void 0,()=>void 0);return Fo.set(e,r),r.then(()=>{Fo.get(e)===r&&Fo.delete(e)}),n}function Lo(e,t){return`${e}:${t}`}async function Ro(e,t,n){let r=await e.requestOptional(d.getByIds,{sessionId:t,eventIds:[Lo(`turn.completed`,n)]});if(r.handled)return r.data.events.length>0}function zo(e,t){return Io(JSON.stringify([t.sessionId,t.turnAnchorId]),()=>Bo(e,t))}async function Bo(e,t){let{sessionId:n,turnAnchorId:r,startedAt:i,completedAt:a,status:o,error:s,usage:c,initiator:l}=t,{turn:u,created:d}=await e.request(C.ingestCompleted,{sessionId:n,turnAnchorId:r,startedAt:i,completedAt:a,status:o,error:s,usage:c,initiator:l}),f,p;for(let r of t.messages){let{messageId:t}=await e.request(E.upsertByAdapterMessageId,{sessionId:n,turnId:u.turnId,adapterMessageId:r.adapterMessageId,role:r.role,contentText:r.contentText,blocks:r.blocks,agentId:r.agentId,adapterSessionId:r.adapterSessionId,timestamp:r.timestamp,origin:r.origin});p??=t,f===void 0&&r.role===`user`&&(f=t)}let m=d;return d||(m=await Ro(e,n,u.turnId)===!1),m&&(p===void 0?console.warn(`[turn-ingest] Turn ${u.turnId} (session ${n}) ingested without messages — skipping session.turn.* emission (getByTurn contract unfulfillable)`):await Vo(e,t,u,f??p)),{turnId:u.turnId,turnNumber:u.turnNumber,created:d}}async function Vo(e,t,n,r){let{sessionId:i,status:a,error:o,usage:s,initiator:c,ingestionMarker:l}=t,u={sessionId:i,turnId:n.turnId,turnNumber:n.turnNumber,messageId:r,agentIds:[...new Set(t.messages.flatMap(e=>e.role===`assistant`&&e.agentId?[e.agentId]:[]))],initiator:c,ingestionMarker:l},d={sessionId:i,turnId:n.turnId,turnNumber:n.turnNumber,success:a===`completed`,error:o,usage:s,initiator:c,ingestionMarker:l};await me(e,{type:`turn.started`,sessionId:i,payload:u,eventId:Lo(`turn.started`,n.turnId)}),await me(e,{type:`turn.completed`,sessionId:i,payload:d,eventId:Lo(`turn.completed`,n.turnId)}),await e.emit(j.turn.started,u),await e.emit(j.turn.completed,d)}const Ho=tt(`log-import`,{listImporters:{request:D.object({}),response:D.object({importers:D.array(D.object({adapterName:D.string(),clientId:D.string().optional()}))})},importFile:{request:D.object({filePath:D.string(),adapterName:D.string(),ingestionMarker:_t.optional()}),response:D.discriminatedUnion(`status`,[D.object({status:D.literal(`imported`),sessionId:D.string(),messageCount:D.number(),turnCount:D.number()}),D.object({status:D.literal(`skipped`),reason:D.enum([`no-importer`,`file-missing`])})])},importSession:{request:D.object({adapterSessionId:D.string(),adapterName:D.string(),ingestionMarker:_t.optional()}),response:D.object({sessionId:D.string(),messageCount:D.number()})}}).subjects;async function Uo(e,t,n){await e.requestOptional(T.rebindObserved,{externalSessionId:t,source:n,startMode:`compact`})}async function Wo(e,t,n){let r=n??await Go(e,t);if(r===void 0){process.env.MAKAIO_DEBUG===`true`&&console.debug(`[ObservedSessionIngestion] Managed compaction reached no row; ordinal not advanced`,{adapterSessionId:t});return}await e.requestOptional(T.update,{sessionId:r,advanceGeneration:!0})}async function Go(e,t){let n=await e.requestOptional(T.getByAdapterSessionId,{adapterSessionId:t});if(!(!n.handled||n.data.session===null))return n.data.session.sessionId}const Ko=`observed-session-ingestion-policy`;function qo(e,t){return e.emit(rt.register,{capabilityId:Ko,provider:t})}function Jo(e,t){return e.emit(rt.unregister,{capabilityId:Ko,providerId:t})}function $(e,t){process.env.MAKAIO_DEBUG===`true`&&console.debug(`[ObservedSessionIngestion] ${e}`,t??{})}function Yo(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&typeof t.displayName==`string`&&typeof t.decideObservedSessionIngestion==`function`}function Xo(e){return e.importStatus===`discovered`&&e.clientId!==void 0}function Zo(e){return e.isImported===!0&&e.importStatus===`tracking`&&e.clientId!==void 0}var Qo=class{bus;managedAdapterSessionIds=new Map;importerByClientId=new Map;unresolvedClientIds=new Set;policyProviders=new Map;cleanups=[];constructor(e=Et){this.bus=e,this.cleanups.push(this.bus.on(it.runtime.started,async e=>{try{await this.handleRuntimeStarted(e.payload)}catch(t){console.warn(`[ObservedSessionIngestion] Failed to handle runtime started`,{clientId:e.payload.clientId,adapterSessionId:e.payload.adapterSessionId,error:t})}}),this.bus.on(it.session.started,async e=>{try{await this.handleSessionStarted(e.payload)}catch(t){console.warn(`[ObservedSessionIngestion] Failed to register observed session`,{clientId:e.payload.clientId,adapterSessionId:e.payload.adapterSessionId,error:t})}}),this.bus.on(it.session.turn.completed,async e=>{try{await this.handleTurnCompleted(e.payload)}catch(t){console.warn(`[ObservedSessionIngestion] Failed to trigger import for observed turn`,{clientId:e.payload.clientId,adapterSessionId:e.payload.adapterSessionId,error:t})}}),this.bus.on(rt.register,e=>{let{provider:t}=e.payload;Yo(t)&&this.policyProviders.set(t.id,t)},{filter:{capabilityId:Ko}}),this.bus.on(rt.unregister,e=>{this.policyProviders.delete(e.payload.providerId)},{filter:{capabilityId:Ko}}))}destroy(){for(let e of this.cleanups.splice(0))e()}async handleRuntimeStarted(e){if(!(e.source.layer!==`adapter`||e.adapterSessionId===void 0)){if(this.managedAdapterSessionIds.has(e.adapterSessionId))e.sessionId!==void 0&&this.managedAdapterSessionIds.set(e.adapterSessionId,e.sessionId);else{if(this.managedAdapterSessionIds.size>=1e4){let e=this.managedAdapterSessionIds.keys().next().value;e!==void 0&&this.managedAdapterSessionIds.delete(e)}this.managedAdapterSessionIds.set(e.adapterSessionId,e.sessionId)}await this.reconcileTrackingStub(e.clientId,e.adapterSessionId)}}async reconcileTrackingStub(e,t){let n=await this.resolveImporter(e);if(n===null)return;let r=await this.bus.requestOptional(T.getByAdapterSessionId,{adapterSessionId:t,source:n.adapterName});if(!r.handled||r.data.session===null)return;let i=r.data.session;if(!Zo(i))return;let a=await this.bus.requestOptional(lt.getBySession,{sessionId:i.sessionId,limit:1});if(!a.handled){$(`Preserved tracking stub because message storage is unavailable`,{adapterSessionId:t,source:n.adapterName,sessionId:i.sessionId});return}if(a.data.messages.length>0){$(`Preserved tracking stub with imported content (native takeover)`,{adapterSessionId:t,source:n.adapterName,sessionId:i.sessionId});return}(await this.bus.requestOptional(T.delete,{sessionId:i.sessionId})).handled&&$(`Reconciled hook-first tracking stub`,{adapterSessionId:t,source:n.adapterName,deletedSessionId:i.sessionId})}async resolveImporter(e){let t=this.importerByClientId.get(e);if(t!==void 0)return t===null?null:{adapterName:t};let n=await this.bus.requestOptional(Ho.listImporters,{});if(!n.handled)return this.debugUnresolved(e,`no log-import service registered`),null;let r=n.data.importers.find(t=>t.clientId===e);return r===void 0?(this.importerByClientId.set(e,null),this.debugUnresolved(e,`no importer registered for client`),null):(this.importerByClientId.set(e,r.adapterName),{adapterName:r.adapterName})}debugUnresolved(e,t){this.unresolvedClientIds.has(e)||(this.unresolvedClientIds.add(e),$(`Skipping observed ingestion for client '${e}': ${t}`))}async handleSessionStarted(e){let t=e.adapterSessionId;if(t===void 0||t.length===0)return;if(this.managedAdapterSessionIds.has(t)){e.startMode===`compact`&&await Wo(this.bus,t,this.managedAdapterSessionIds.get(t));return}let n=await this.resolveImporter(e.clientId);if(n===null)return;let r=e.startMode===`resume`||e.startMode===`compact`?e.startMode:void 0,i=r===void 0?await this.registerObservedSession(e,t,n.adapterName):await this.rebindObservedSession(e,t,n.adapterName,r);this.managedAdapterSessionIds.has(t)&&(e.startMode===`compact`&&await Wo(this.bus,t,this.managedAdapterSessionIds.get(t)),i&&await this.reconcileTrackingStub(e.clientId,t))}async rebindObservedSession(e,t,n,r){let i=await this.bus.requestOptional(T.rebindObserved,{externalSessionId:t,source:n,startMode:r,...e.cwd===void 0?{}:{cwd:e.cwd},...e.transcriptPath===void 0?{}:{logFilePath:e.transcriptPath},...e.machineId===void 0?{}:{machineId:e.machineId}});if(!i.handled)return $(`Session storage unavailable; skipped observed-session rebind`,{adapterSessionId:t}),!1;if(i.data.outcome===`not-found`){let i=await this.decideImportStatus(this.policyInput(e,t,n));if(i===`discovered`){let a=await this.registerObservedSession(e,t,n,i);return a&&r===`compact`&&await Uo(this.bus,t,n),a}return $(`Observed continuation of an unknown session; leaving creation to the transcript import`,{adapterSessionId:t,source:n,startMode:r}),!1}try{await this.bus.requestOptional(j.ownership.continuation,{sessionId:i.data.sessionId,startMode:r})}catch(e){$(`Continuation report failed; the rebind stands`,{sessionId:i.data.sessionId,startMode:r,error:e})}return!0}policyInput(e,t,n){return{clientId:e.clientId,source:e.source,adapterSessionId:t,adapterName:n,...e.cwd===void 0?{}:{cwd:e.cwd},...e.transcriptPath===void 0?{}:{transcriptPath:e.transcriptPath}}}async registerObservedSession(e,t,n,r){let i=$o(e.metadata),a=r??await this.decideImportStatus(this.policyInput(e,t,n)),o=e.startMode===`fork`&&e.parentAdapterSessionId!==void 0&&e.parentAdapterSessionId.length>0?e.parentAdapterSessionId:void 0,s=o===void 0?{kind:ut,parentAdapterSessionId:null,forkPointMessageId:null}:{kind:ot,parentAdapterSessionId:o,forkPointMessageId:null};return(await this.bus.requestOptional(T.importUpsert,{...s,externalSessionId:t,source:n,clientId:e.clientId,cwd:e.cwd??null,...e.transcriptPath===void 0?{}:{logFilePath:e.transcriptPath},...e.machineId===void 0?{}:{machineId:e.machineId},startedAt:e.observedAt,importStatus:a,activation:a===`tracking`?`live`:void 0,...i===void 0?{}:{metadata:i}})).handled?!0:($(`Session storage unavailable; skipped observed-session registration`,{adapterSessionId:t}),!1)}async handleTurnCompleted(e){let t=e.adapterSessionId;if(t===void 0||t.length===0||this.managedAdapterSessionIds.has(t))return;let n=await this.resolveImporter(e.clientId);if(n!==null&&await this.shouldImportObservedContent({clientId:e.clientId,source:e.source,adapterSessionId:t,adapterName:n.adapterName,...e.transcriptPath===void 0?{}:{transcriptPath:e.transcriptPath}})){if(e.transcriptPath!==void 0){let r=await this.bus.requestOptional(Ho.importFile,{filePath:e.transcriptPath,adapterName:n.adapterName,ingestionMarker:`live`});r.handled?r.data.status===`skipped`&&$(`Targeted import skipped`,{adapterSessionId:t,reason:r.data.reason}):$(`log-import.importFile unhandled; watcher fallback will ingest`,{adapterSessionId:t});return}try{await this.bus.requestOptional(Ho.importSession,{adapterSessionId:t,adapterName:n.adapterName,ingestionMarker:`live`})}catch(e){$(`Discovery-based import fallback failed (no stub yet); watcher will ingest`,{adapterSessionId:t,error:e})}}}async decideImportStatus(e){for(let t of this.policyProviders.values())if((await t.decideObservedSessionIngestion(e)).importStatus===`discovered`)return`discovered`;return`tracking`}async shouldImportObservedContent(e){let t=await this.bus.requestOptional(T.getByAdapterSessionId,{adapterSessionId:e.adapterSessionId,source:e.adapterName});if(t.handled&&t.data.session!==null){if(Xo(t.data.session))return!1;if(t.data.session.importStatus!==`discovered`)return!0}return await this.decideImportStatus(e)===`tracking`}};function $o(e){if(e===void 0)return;let t=mt.safeParse(e);return t.success?t.data:void 0}const es=Ht(`import_cursors`,e=>({filePath:e.text(`file_path`).primaryKey(),bytesRead:e.int8(`bytes_read`).notNull(),lastModified:e.text(`last_modified`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()})),ts=es.sqlite,ns=es.postgres,rs=Vt({importCursors:ts},{importCursors:ns});function is(e,t){let{importCursors:n}=F(t,rs),r=[];return r.push(e.on(on.get,async e=>{let{filePath:r}=e.payload,i=(await t.select().from(n).where(L(n.filePath,r)).limit(1))[0];if(!i){e.setResult({cursor:null});return}e.setResult({cursor:{filePath:i.filePath,bytesRead:i.bytesRead,lastModified:i.lastModified}})})),r.push(e.on(on.set,async e=>{let{filePath:r,bytesRead:i,lastModified:a}=e.payload;await t.insert(n).values({filePath:r,bytesRead:i,lastModified:a,updatedAt:Date.now()}).onConflictDoUpdate({target:n.filePath,set:{bytesRead:i,lastModified:a,updatedAt:Date.now()}}),e.setResult({success:!0})})),r.push(e.on(on.delete,async e=>{let{filePath:r}=e.payload,i=await t.delete(n).where(L(n.filePath,r));e.setResult({success:N(i)})})),()=>{r.forEach(e=>e())}}Ft(`embeddings`,{id:Nt(`id`).primaryKey({autoIncrement:!0}),entityType:It(`entity_type`).notNull(),entityId:It(`entity_id`).notNull(),model:It(`model`).notNull(),dimensions:Nt(`dimensions`).notNull(),content:It(`content`),embedding:jt(`embedding`,{mode:`buffer`}).notNull(),createdAt:Nt(`created_at`).notNull()},e=>[Mt(`idx_embeddings_entity`).on(e.entityType,e.entityId),Mt(`idx_embeddings_model`).on(e.model),Lt(`idx_embeddings_unique`).on(e.entityType,e.entityId,e.model)]);function as(e){if(e.byteLength%4!=0)throw Error(`Invalid embedding blob: byte length ${e.byteLength} is not a multiple of 4 (IEEE-754 f32 lanes)`);return e instanceof ArrayBuffer?new Float32Array(e):e.byteOffset%4==0?new Float32Array(e.buffer,e.byteOffset,e.byteLength/4):new Float32Array(Uint8Array.from(e).buffer)}var os=class{rawSql;engine;knownTables=new Set;constructor(e){this.rawSql=Ut(e),this.engine=Wt(this.rawSql.dialect)}slugify(e){return e.replace(/[^a-zA-Z0-9]/g,`_`).toLowerCase()}hashModel(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return t.toString(36)}getTableName(e){return`embeddings_idx_${this.slugify(e)}_${this.hashModel(e)}`}async ensureIndexTable(e,t){let n=this.getTableName(e);if(this.knownTables.has(n))return n;let r=B.identifier(n),i=B.raw(this.engine.capabilities.binaryColumnType);return await this.rawSql.run(B`CREATE TABLE IF NOT EXISTS ${r} (
88
+ entity_type TEXT NOT NULL,
89
+ entity_id TEXT NOT NULL,
90
+ embedding ${i} NOT NULL,
91
+ PRIMARY KEY (entity_type, entity_id)
92
+ )`),this.knownTables.add(n),n}async upsertIndexed(e,t,n,r,i){let a=await this.ensureIndexTable(e,t),o=new Uint8Array(i.buffer,i.byteOffset,i.byteLength),s=B.identifier(a);await this.rawSql.run(B`INSERT INTO ${s} (entity_type, entity_id, embedding)
93
+ VALUES (${n}, ${r}, ${o})
94
+ ON CONFLICT(entity_type, entity_id) DO UPDATE SET
95
+ embedding = excluded.embedding`)}async searchSimilar(e,t,n=10){let r=this.getTableName(e);if(!this.knownTables.has(r)){if(!await this.engine.capabilities.tableExists(this.rawSql,r))return[];this.knownTables.add(r)}let i=B.identifier(r),a=await this.rawSql.all(B`SELECT entity_type, entity_id, embedding FROM ${i}`);return a.length===0?[]:a.map(e=>{let n=as(e.embedding),r=this.euclideanDistance(t,n);return{entityType:e.entity_type,entityId:e.entity_id,distance:r}}).sort((e,t)=>e.distance-t.distance).slice(0,n)}async deleteByEntity(e,t,n){let r=this.getTableName(e);if(!this.knownTables.has(r)){if(!await this.engine.capabilities.tableExists(this.rawSql,r))return;this.knownTables.add(r)}let i=B.identifier(r);await this.rawSql.run(B`DELETE FROM ${i} WHERE entity_type = ${t} AND entity_id = ${n}`)}euclideanDistance(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e[r]-t[r];n+=i*i}return Math.sqrt(n)}},ss=class{sessionId;parentSessionId;status=`active`;_turns=[];_completedTurnIds=new Set;bus;constructor(e){this.sessionId=e.sessionId??crypto.randomUUID(),this.parentSessionId=e.parentSessionId,this.bus=e.bus}get turns(){return this._turns}async startTurn(e){if(this.status!==`active`)throw Error(`Cannot start turn on non-active session`);let t=new Ar({sessionId:this.sessionId,agentIds:e.agentIds,turnNumber:e.turnNumber,turnId:e.turnId});return this._turns.push(t),t.addMessage(e.messageId),await Le(this.bus,{sessionId:this.sessionId,turnId:t.turnId,turnNumber:t.turnNumber,agentIds:[...t.agentIds],messageId:e.messageId,ingestionMarker:`live`}),t}getActiveTurn(){for(let e=this._turns.length-1;e>=0;e--){let t=this._turns[e];if(!this._completedTurnIds.has(t.turnId))return t}}async completeTurn(e){if(!e.isComplete())throw Error(`Turn ${e.turnId} is not complete yet`);let t=e.getResult(),n={turnId:e.turnId,turnNumber:e.turnNumber,success:t.success,error:t.errors.length>0?t.errors.join(`; `):void 0};await me(this.bus,{type:`turn.completed`,sessionId:this.sessionId,payload:{sessionId:this.sessionId,...n}}),await this.emit(j.turn.completed,n),this._completedTurnIds.add(e.turnId)}async emit(e,t){await this.bus.emit(e,{...t,sessionId:this.sessionId})}};function cs(e,t){let{sessions:n}=F(t,G);async function r(i,a,o,s=0){if(s>100)throw Error(`Cycle detected in session lineage (depth > 100)`);let c=await t.select({adapterSessionId:n.adapterSessionId,sessionId:n.sessionId,parentSessionId:n.parentSessionId}).from(n).where(I(L(n.parentExternalSessionId,i),L(n.source,a)));for(let t of c)t.parentSessionId!==null&&await e.request(T.update,{sessionId:t.sessionId,rootSessionId:o}),t.adapterSessionId!==null&&await r(t.adapterSessionId,a,o,s+1)}return e.on(j.import.completed,async i=>{let{adapterSessionId:a,sessionId:o,source:s}=i.payload,c=await t.select({sessionId:n.sessionId,adapterSessionId:n.adapterSessionId,branchKind:n.branchKind}).from(n).where(I(L(n.parentExternalSessionId,a),L(n.source,s),z(n.parentSessionId)));if(c.length===0)return;let{session:l}=await e.request(T.get,{sessionId:o}),u=l?.rootSessionId??o;for(let t of c)await e.request(T.update,{sessionId:t.sessionId,parentSessionId:o,rootSessionId:u,...t.branchKind===null?{}:{branchKind:t.branchKind}}),t.adapterSessionId!==null&&await r(t.adapterSessionId,s,u)})}const ls=new Set([`Agent`,`spawn_subagent`]),us=`[^A-Za-z0-9_-]`;function ds(e){return e.replaceAll(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function fs(e,t){return t.test(e)}async function ps(e,t){let n=[],r,i=0;do{let a=await e.request(E.getBySession,{sessionId:t,order:`asc`,...r===void 0?{}:{after:r}});if(n.push(...a.messages),r=a.nextCursor??void 0,i+=1,r!==void 0&&i>=1e3)throw Error(`Exceeded 1000 message pages while loading session ${t}`)}while(r!==void 0);return n}function ms(e){let t=[];for(let n of e)for(let e of n.blocks)e.type===`tool_call`&&ls.has(e.name)&&t.push({toolCallId:e.toolCallId});return t}function hs(e,t){let n=new Map;for(let r of e)for(let e of r.blocks)if(e.type===`tool_output`){for(let r of t)if(fs(e.output,r.pattern)){let t=n.get(e.toolCallId)??new Set;t.add(r.id),n.set(e.toolCallId,t)}}let r=new Map;for(let[e,t]of n)if(t.size===1){let[n]=t;r.set(e,n)}return r}function gs(e){let t=new Map,n=new Set;for(let r of e)if(!(r===null||n.has(r.adapterSessionId))){if(t.has(r.adapterSessionId)){t.delete(r.adapterSessionId),n.add(r.adapterSessionId);continue}t.set(r.adapterSessionId,r.sessionId)}return t}function _s(e){return[...e].map(e=>{let t=ds(e);return{id:e,pattern:RegExp(`(^|${us})${t}($|${us})`)}})}async function vs(e,t,n){let{children:r}=await e.request(T.getChildren,{sessionId:n}),i=r.filter(e=>e.branchKind===`compress`);if(i.length===0)return;let{session:a}=await e.request(T.get,{sessionId:t}),o=a?.adapterSessionId;if(!o)return;let s=_s(new Set([o])),c=(await Promise.all(i.map(async t=>{let n=await ps(e,t.sessionId),r=ms(n);if(r.length===0)return null;let i=hs(n,s);if(i.size===0)return null;let a=[...i.entries()].filter(([,e])=>e===o);if(a.length!==1)return null;let[c]=a[0];return r.some(e=>e.toolCallId===c)?{parentSessionId:t.sessionId,toolCallId:c}:null}))).filter(e=>e!==null);c.length===1&&await e.request(T.update,{sessionId:t,parentSessionId:c[0].parentSessionId,spawningToolCallId:c[0].toolCallId})}async function ys(e,t,n){let r=t.parentExternalSessionId,i=t.source??n;if(!r||!i)return;let a=t.sessionId,{session:o}=await e.request(T.getByAdapterSessionId,{adapterSessionId:r,source:i}),s=o?.sessionId;if(!s)return;let{children:c}=await e.request(T.getChildren,{sessionId:s}),l=await bs(e,c);if(l.size===0)return;let u=await ps(e,a),d=ms(u);if(d.length===0)return;let f=hs(u,_s(new Set(l.keys()))),p=new Map;for(let e of d){let t=f.get(e.toolCallId);t!==void 0&&p.set(t,(p.get(t)??0)+1)}let m=new Map;for(let e of d){let t=f.get(e.toolCallId),n=t===void 0?void 0:l.get(t);n!==void 0&&t!==void 0&&p.get(t)===1&&m.set(n,e.toolCallId)}if(m.size===0)return;let h=[...m].map(async([t,n])=>{try{await e.request(T.update,{sessionId:t,parentSessionId:a,spawningToolCallId:n})}catch(e){console.error(`[CompressLineageResolver] Failed to re-parent subagent`,{compressChildSessionId:a,parentMakaioSessionId:s,childSessionId:t,toolCallId:n,error:e})}});await Promise.allSettled(h)}async function bs(e,t){return gs(await Promise.all(t.filter(e=>e.branchKind===`subagent`).map(async t=>{let{session:n}=await e.request(T.get,{sessionId:t.sessionId});return n?.adapterSessionId?{sessionId:t.sessionId,adapterSessionId:n.adapterSessionId}:null})))}function xs(e){return e.on(j.import.completed,async t=>{try{let{sessionId:n,source:r}=t.payload,{session:i}=await e.request(T.get,{sessionId:n});if(!i)return;if(i.branchKind===`subagent`&&i.parentSessionId!==void 0){await vs(e,n,i.parentSessionId);return}if(i.branchKind!==`compress`)return;await ys(e,i,r)}catch(e){console.error(`[CompressLineageResolver] Failed to resolve compress lineage`,{payload:t.payload,error:e})}})}function Ss(e){return[...e].map(e=>{let t=ds(e);return{id:e,pattern:RegExp(`(^|${us})${t}($|${us})`)}})}async function Cs(e,t,n){return gs(await Promise.all(n.filter(e=>e.branchKind===`subagent`&&e.spawningToolCallId===void 0).map(async n=>{let{session:r}=await e.request(T.get,{sessionId:n.sessionId}),i=r?.source??r?.adapterName;return r?.adapterSessionId&&i===t?{sessionId:n.sessionId,adapterSessionId:r.adapterSessionId}:null})))}function ws(e){return e.on(j.import.completed,async t=>{try{let{sessionId:n,source:r}=t.payload,{children:i}=await e.request(T.getChildren,{sessionId:n}),a=await Cs(e,r,i),o=new Set(a.keys());if(o.size===0)return;let s=await ps(e,n),c=ms(s);if(c.length===0)return;let l=hs(s,Ss(o)),u=new Map;for(let e of c){let t=l.get(e.toolCallId);t!==void 0&&u.set(t,(u.get(t)??0)+1)}let d=new Map;for(let e of c){let t=l.get(e.toolCallId),n=t===void 0?void 0:a.get(t);n!==void 0&&t!==void 0&&u.get(t)===1&&d.set(n,e.toolCallId)}let f=[...d].map(async([t,r])=>{try{let{session:n}=await e.request(T.get,{sessionId:t});if(n?.spawningToolCallId!==void 0)return;await e.request(T.update,{sessionId:t,spawningToolCallId:r})}catch(e){console.error(`Failed to persist spawning tool call correlation`,{parentSessionId:n,childSessionId:t,toolCallId:r,error:e})}});await Promise.allSettled(f)}catch(e){console.error(`Failed to backfill spawningToolCallId for imported session`,{payload:t.payload,error:e})}})}function Ts(e){return e.on(O.session.discovered,async t=>{let n=ft.safeParse(t.payload);if(!n.success)throw console.error(`[registerSessionDiscoveredHandler] Invalid adapter.session.discovered payload`,{issues:n.error.issues}),n.error;let{adapterId:r,adapterSessionId:i,adapterName:a,cwd:o,title:s,logFilePath:c,startedAt:l,machineId:u,kind:d,parentAdapterSessionId:f,forkPointMessageId:p}=n.data,m=et({kind:d,parentAdapterSessionId:f??null,forkPointMessageId:p??null});await e.request(T.importUpsert,{externalSessionId:i,source:a,adapterId:r,cwd:o??null,...s===void 0?{}:{title:s},...c===void 0?{}:{logFilePath:c},...l===void 0?{}:{startedAt:l},...u===void 0?{}:{machineId:u},...m})})}var Es=class{bus;agentStates=new Map;sessionStates=new Map;unsubscribe;staleThresholdMs;constructor(e,t){this.bus=e,this.staleThresholdMs=t?.staleThresholdMs??36e5}start(){this.unsubscribe||=this.bus.on(k.contextWindow.updated,e=>{let{agentId:t,sessionId:n,currentTokens:r,maxTokens:i,percentage:a,level:o,cachedTokens:s}=e.payload;if(!n)return;let c={agentId:t,sessionId:n,currentTokens:r,maxTokens:i,percentage:a,level:o,cachedTokens:s,updatedAt:Date.now()};this.agentStates.set(t,c),this.recomputeSessionState(n)})}stop(){this.unsubscribe?.(),this.unsubscribe=void 0,this.agentStates.clear(),this.sessionStates.clear()}getSessionState(e){return this.sessionStates.get(e)}clearSession(e){this.sessionStates.delete(e);for(let[t,n]of this.agentStates)n.sessionId===e&&this.agentStates.delete(t)}recomputeSessionState(e){let t=Date.now(),n;for(let[r,i]of this.agentStates){if(t-i.updatedAt>this.staleThresholdMs){this.agentStates.delete(r);continue}i.sessionId===e&&(!n||i.percentage>n.percentage)&&(n=i)}n&&this.sessionStates.set(e,{currentTokens:n.currentTokens,maxTokens:n.maxTokens,percentage:n.percentage,level:n.level,worstAgentId:n.agentId,lastUpdatedAt:n.updatedAt})}};export{Qn as $,Ei as A,Xr as B,Oo as C,ja as D,Eo as E,ri as F,Hr as G,Yr as H,ti as I,pr as J,Ar as K,ei as L,q as M,Si as N,Ma as O,ni as P,sr as Q,$r as R,ko as S,Ao as T,Jr as U,Zr as V,Kr as W,H as X,lr as Y,cr as Z,Ho as _,cs as a,No as b,is as c,Qo as d,qn as et,Xo as f,Jo as g,qo as h,xs as i,Ti as j,da as k,ts as l,Ko as m,Ts as n,Pn as nt,ss as o,Zo as p,Or as q,ws as r,wn as rt,os as s,Es as t,In as tt,es as u,zo as v,Mo as w,Do as x,Po as y,Qr as z};
@@ -1 +1 @@
1
- import{$t as e,A as t,Bt as n,Cn as ee,Gt as r,Jt as i,Kt as a,Sn as o,Vt as s,en as c,nn as l,qt as u,vn as te,xn as d}from"./schemas-ClkcU_N5.mjs";import"./compression-CPrVeC42.mjs";import{t as f}from"./schemas-BmoFWBdh.mjs";import{i as p}from"./account-identity-C-v4mHq3.mjs";import{t as m}from"./storage-namespace-definition-BUpCw171.mjs";import{CompressSessionLineageSchema as h,ForkSessionLineageSchema as g,RootSessionLineageSchema as _,SubagentSessionLineageSchema as v}from"./contracts/adapter/schemas/session-lineage.mjs";import{z as y}from"zod";import{createBusNamespace as b}from"@makaio/framework/core";const x=b(`session`,t),S=x.subjects;function ne(e){return s.includes(e.type)}const re=`ui-warnings`,ie=`connector-swap-warning-suppressed`,ae=1440*60*1e3,oe={cancel:`cancel`,edit:`edit`,continue:`continue`},C=`CONNECTOR_SWAP_CANCELLED`;var w=class extends Error{code=C;constructor(){super(`Connector swap cancelled by user`),this.name=`ConnectorSwapCancelledError`}};function T(e){return e instanceof w||e instanceof Error&&`code`in e&&e.code===`CONNECTOR_SWAP_CANCELLED`}const E={branch:{label:`branch`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},subagent:{label:`subagent`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},fork:{label:`fork`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},compress:{label:`compress`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},rewrite:{label:`rewrite`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},coordinator:{label:`coordinator`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1},aside:{label:`aside`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1}};function D(e){return e!=null&&E[e].staysInView}function O(e){return e==null||E[e].navigatesToChild}function k(e){return e!=null&&E[e].canMergeBack}function A(e){return E[e]}const j=y.object({timestamp:y.number(),messageId:y.string()}),M=m(`message`,{schemas:{append:{request:y.object({message:l.omit({messageId:!0}).extend({messageId:y.string().optional()}),emitEvent:y.boolean().optional()}),response:y.object({message:l})},getBySession:{request:y.object({sessionId:y.string(),limit:y.number().int().min(1).optional(),after:j.optional(),includeAfter:y.boolean().optional(),order:y.enum([`asc`,`desc`]).optional()}),response:y.object({messages:y.array(l),nextCursor:j.nullable()})},getByTurn:{request:y.object({turnId:y.string()}),response:y.object({messages:y.array(l)})},get:{request:y.object({messageId:y.string()}),response:y.object({message:l.nullable()})},getByAdapterMessageId:{request:y.object({adapterMessageId:y.string()}),response:y.object({message:l.nullable()})},search:{request:y.object({query:y.string(),sessionId:y.string().optional(),limit:y.number().int().min(1).optional()}),response:y.object({messages:y.array(l),total:y.number()})},ftsSearch:{request:y.object({query:y.string(),sessionId:y.string().optional(),limit:y.number().int().min(1).optional().default(20)}),response:y.object({results:y.array(y.object({messageId:y.string(),sessionId:y.string(),score:y.number(),excerpt:y.string()})),total:y.number()})},upsertByAdapterMessageId:{request:y.object({sessionId:y.string(),turnId:y.string().nullable(),adapterMessageId:y.string(),role:y.enum([`user`,`assistant`]),contentText:y.string(),blocks:y.array(e),agentId:y.string().optional(),adapterSessionId:y.string().optional(),timestamp:y.number(),origin:c.optional()}),response:y.object({messageId:y.string(),created:y.boolean()})},stored:y.object({message:l})}}),N=M.subjects;function P(e,t){return e.timestamp===t.timestamp?e.messageId.localeCompare(t.messageId):e.timestamp-t.timestamp}function F(e,t){return P(t,e)}function I(e){return{timestamp:e.timestamp,messageId:e.messageId}}function L(e){return`${e.timestamp}:${e.messageId}`}const R=y.object({after:y.string().optional(),limit:y.number().int().min(1).optional(),types:y.array(y.string()).optional(),includeReasoning:y.boolean().optional(),order:y.enum([`asc`,`desc`]).optional()}),se=y.object({events:y.array(n),nextCursor:y.string().nullable(),totalCount:y.number().optional()}),z=m(`sessionEvent`,{schemas:{append:{request:y.object({event:n}),response:y.object({success:y.boolean()})},getEvents:{request:y.object({sessionId:y.string(),options:R.optional()}),response:se},getByIds:{request:y.object({sessionId:y.string(),eventIds:y.array(y.string())}),response:y.object({events:y.array(n)})},deleteBySession:{request:y.object({sessionId:y.string()}),response:y.object({success:y.boolean(),deletedCount:y.number().optional()})},getEventsBySessions:{request:y.object({sessionIds:y.array(y.string()),types:y.array(y.string()),limitPerSession:y.number().int().min(1).optional()}),response:y.object({eventsBySession:y.record(y.string(),y.array(n))})}}}),B=z.subjects,V=r.extend({preview:a});function H(e,t){e.clientAccountId!==void 0&&e.lastClientIdentityObservation===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`lastClientIdentityObservation`],message:`lastClientIdentityObservation is required when clientAccountId is provided`}),e.clientAccountId!==void 0&&e.clientId===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`clientId`],message:`clientId is required when clientAccountId is provided`})}const U=r.superRefine((e,t)=>{H(e,t)}),W=y.object({sessionId:y.string(),session:U,ifAbsent:y.boolean().optional()}).superRefine((e,t)=>{e.sessionId!==e.session.sessionId&&t.addIssue({code:y.ZodIssueCode.custom,path:[`session`,`sessionId`],message:`session.sessionId must match the top-level sessionId`})}),G=y.string().nullable().optional(),K=y.enum([`active`,`closed`,`archived`,`discovered`]),ce=y.object({adapterName:y.string(),adapterId:y.string(),adapterSessionId:y.string().optional()}),le=y.object({agentId:y.string(),adapterName:y.string(),adapterId:y.string(),adapterSessionId:y.string(),lastActivityAt:y.number().finite()});function ue(e,t){e.identity!==void 0&&e.expectIdentityOpenForLead===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`expectIdentityOpenForLead`],message:`expectIdentityOpenForLead is required when identity is provided`}),e.expectIdentityOpenForLead!==void 0&&e.identity===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`identity`],message:`identity is required when expectIdentityOpenForLead is provided`}),e.reconcileAdapterSession!==void 0&&(e.identity!==void 0||e.expectIdentityOpenForLead!==void 0)&&t.addIssue({code:y.ZodIssueCode.custom,path:[`reconcileAdapterSession`],message:`reconcileAdapterSession cannot be combined with the identity-open-for-lead authority mode`})}const q={request:y.object({sessionId:y.string(),status:K.optional(),expectedStatus:y.array(K).nonempty().optional(),parentSessionId:y.string().nullable().optional(),contextInheritance:ee.optional(),rootSessionId:y.string().optional(),forkPointMessageId:y.string().optional(),branchKind:d.optional(),isOrchestrated:y.boolean().optional(),clientId:y.string().optional(),clientAccountId:y.string().optional(),lastClientIdentityObservation:p.optional(),executionTargetId:y.string().nullable().optional(),approvalPolicyOverride:f.nullable().optional(),title:y.string().optional(),targetWorkingDirectory:y.string().optional(),createdAt:y.number().finite().optional(),lastActivityAt:y.number().finite().optional(),metadata:u.nullable().optional(),spawningToolCallId:y.string().nullable().optional(),machineId:G,identity:ce.optional(),expectIdentityOpenForLead:y.string().nullable().optional(),reconcileAdapterSession:le.optional()}).superRefine((e,t)=>{ue(e,t)}),response:y.object({success:y.boolean(),clientAccountChanged:y.boolean().optional()})},de=y.enum([`live`]),J=y.object({externalSessionId:y.string(),source:y.string(),clientId:y.string().optional(),adapterId:y.string().optional(),cwd:y.string().nullable(),logFilePath:y.string().nullable().optional(),startedAt:y.number().finite().optional(),title:y.string().nullable().optional(),metadata:u.optional(),lastClientIdentityObservation:p.optional(),importStatus:y.enum([`discovered`,`tracking`]).optional(),activation:de.optional(),isSidechain:y.boolean().optional(),machineId:G}),Y=y.discriminatedUnion(`kind`,[J.merge(_),J.merge(g),J.merge(v),J.merge(h)]),X=y.object({externalSessionId:y.string(),source:y.string(),cwd:y.string().optional(),logFilePath:y.string().optional(),machineId:G}),Z=y.discriminatedUnion(`outcome`,[y.object({outcome:y.literal(`rebound`),sessionId:y.string()}),y.object({outcome:y.literal(`not-found`)})]),Q=m(`session`,{schemas:{get:{request:y.object({sessionId:y.string()}),response:y.object({session:r.nullable()})},set:{request:W,response:y.object({success:y.boolean(),clientAccountChanged:y.boolean().optional()})},delete:{request:y.object({sessionId:y.string()}),response:y.object({success:y.boolean()})},list:{request:y.object({status:y.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),limit:y.number().int().min(1).optional(),offset:y.number().int().min(0).optional(),includePreview:y.boolean().optional(),executionTargetId:y.string().optional()}),response:y.object({sessions:y.array(i),total:y.number()})},getChildren:{request:y.object({sessionId:y.string()}),response:y.object({children:y.array(te)})},search:{request:y.object({query:y.string(),limit:y.number().int().min(1).optional(),status:y.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),isImported:y.boolean().optional()}),response:y.object({sessions:y.array(V),total:y.number()})},update:q,getByAdapterSessionId:{request:y.object({adapterSessionId:y.string(),source:y.string().optional(),adapterName:y.string().optional()}),response:y.object({session:r.nullable()})},getStatusCounts:{request:y.object({}),response:y.object({all:y.number(),active:y.number(),closed:y.number(),archived:y.number(),discovered:y.number()})},importUpsert:{request:Y,response:y.object({sessionId:y.string(),created:y.boolean()})},rebindObserved:{request:X,response:Z},getByLogFilePath:{request:y.object({logFilePath:y.string()}),response:y.object({session:r.nullable()})},listImported:{request:y.object({source:y.string().optional(),importStatus:o.optional()}),response:y.object({sessions:y.array(r)})},countBySource:{request:y.object({source:y.string()}),response:y.object({total:y.number(),imported:y.number(),discovered:y.number(),tracking:y.number()})},updateImportStatus:{request:y.object({sessionId:y.string(),importStatus:o}),response:y.object({success:y.boolean()})}}}),fe=Q.subjects,$=`makaio:extraction-excluded`;function pe(e){return e?.[$]===!0}function me(){return{[$]:!0}}export{ae as A,k as C,T as D,w as E,ne as M,x as N,oe as O,S as P,D as S,C as T,I as _,Q as a,N as b,W as c,q as d,z as f,L as g,F as h,Y as i,re as j,ie as k,U as l,P as m,me as n,X as o,B as p,pe as r,Z as s,$ as t,fe as u,j as v,O as w,A as x,M as y};
1
+ import{$t as e,A as t,Bt as n,Cn as ee,Gt as r,Jt as i,Kt as a,Sn as o,Vt as s,en as c,nn as l,qt as u,vn as te,xn as d}from"./schemas-CkxAK13D.mjs";import"./compression-CPrVeC42.mjs";import{t as f}from"./schemas-BmoFWBdh.mjs";import{i as p}from"./account-identity-C-v4mHq3.mjs";import{t as m}from"./storage-namespace-definition-BUpCw171.mjs";import{CompressSessionLineageSchema as h,ForkSessionLineageSchema as g,RootSessionLineageSchema as _,SubagentSessionLineageSchema as v}from"./contracts/adapter/schemas/session-lineage.mjs";import{z as y}from"zod";import{createBusNamespace as b}from"@makaio/framework/core";const x=b(`session`,t),S=x.subjects;function ne(e){return s.includes(e.type)}const re=`ui-warnings`,ie=`connector-swap-warning-suppressed`,ae=1440*60*1e3,oe={cancel:`cancel`,edit:`edit`,continue:`continue`},C=`CONNECTOR_SWAP_CANCELLED`;var w=class extends Error{code=C;constructor(){super(`Connector swap cancelled by user`),this.name=`ConnectorSwapCancelledError`}};function T(e){return e instanceof w||e instanceof Error&&`code`in e&&e.code===`CONNECTOR_SWAP_CANCELLED`}const E={branch:{label:`branch`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},subagent:{label:`subagent`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},fork:{label:`fork`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},compress:{label:`compress`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},rewrite:{label:`rewrite`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},coordinator:{label:`coordinator`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1},aside:{label:`aside`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1}};function D(e){return e!=null&&E[e].staysInView}function O(e){return e==null||E[e].navigatesToChild}function k(e){return e!=null&&E[e].canMergeBack}function A(e){return E[e]}const j=y.object({timestamp:y.number(),messageId:y.string()}),M=m(`message`,{schemas:{append:{request:y.object({message:l.omit({messageId:!0}).extend({messageId:y.string().optional()}),emitEvent:y.boolean().optional()}),response:y.object({message:l})},getBySession:{request:y.object({sessionId:y.string(),limit:y.number().int().min(1).optional(),after:j.optional(),includeAfter:y.boolean().optional(),order:y.enum([`asc`,`desc`]).optional()}),response:y.object({messages:y.array(l),nextCursor:j.nullable()})},getByTurn:{request:y.object({turnId:y.string()}),response:y.object({messages:y.array(l)})},get:{request:y.object({messageId:y.string()}),response:y.object({message:l.nullable()})},getByAdapterMessageId:{request:y.object({adapterMessageId:y.string()}),response:y.object({message:l.nullable()})},search:{request:y.object({query:y.string(),sessionId:y.string().optional(),limit:y.number().int().min(1).optional()}),response:y.object({messages:y.array(l),total:y.number()})},ftsSearch:{request:y.object({query:y.string(),sessionId:y.string().optional(),limit:y.number().int().min(1).optional().default(20)}),response:y.object({results:y.array(y.object({messageId:y.string(),sessionId:y.string(),score:y.number(),excerpt:y.string()})),total:y.number()})},upsertByAdapterMessageId:{request:y.object({sessionId:y.string(),turnId:y.string().nullable(),adapterMessageId:y.string(),role:y.enum([`user`,`assistant`]),contentText:y.string(),blocks:y.array(e),agentId:y.string().optional(),adapterSessionId:y.string().optional(),timestamp:y.number(),origin:c.optional()}),response:y.object({messageId:y.string(),created:y.boolean()})},stored:y.object({message:l})}}),N=M.subjects;function P(e,t){return e.timestamp===t.timestamp?e.messageId.localeCompare(t.messageId):e.timestamp-t.timestamp}function F(e,t){return P(t,e)}function I(e){return{timestamp:e.timestamp,messageId:e.messageId}}function L(e){return`${e.timestamp}:${e.messageId}`}const R=y.object({after:y.string().optional(),limit:y.number().int().min(1).optional(),types:y.array(y.string()).optional(),includeReasoning:y.boolean().optional(),order:y.enum([`asc`,`desc`]).optional()}),se=y.object({events:y.array(n),nextCursor:y.string().nullable(),totalCount:y.number().optional()}),z=m(`sessionEvent`,{schemas:{append:{request:y.object({event:n}),response:y.object({success:y.boolean()})},getEvents:{request:y.object({sessionId:y.string(),options:R.optional()}),response:se},getByIds:{request:y.object({sessionId:y.string(),eventIds:y.array(y.string())}),response:y.object({events:y.array(n)})},deleteBySession:{request:y.object({sessionId:y.string()}),response:y.object({success:y.boolean(),deletedCount:y.number().optional()})},getEventsBySessions:{request:y.object({sessionIds:y.array(y.string()),types:y.array(y.string()),limitPerSession:y.number().int().min(1).optional()}),response:y.object({eventsBySession:y.record(y.string(),y.array(n))})}}}),B=z.subjects,V=r.extend({preview:a});function H(e,t){e.clientAccountId!==void 0&&e.lastClientIdentityObservation===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`lastClientIdentityObservation`],message:`lastClientIdentityObservation is required when clientAccountId is provided`}),e.clientAccountId!==void 0&&e.clientId===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`clientId`],message:`clientId is required when clientAccountId is provided`})}const U=r.superRefine((e,t)=>{H(e,t)}),W=y.object({sessionId:y.string(),session:U,ifAbsent:y.boolean().optional()}).superRefine((e,t)=>{e.sessionId!==e.session.sessionId&&t.addIssue({code:y.ZodIssueCode.custom,path:[`session`,`sessionId`],message:`session.sessionId must match the top-level sessionId`})}),G=y.string().nullable().optional(),K=y.enum([`active`,`closed`,`archived`,`discovered`]),ce=y.object({adapterName:y.string(),adapterId:y.string(),adapterSessionId:y.string().optional()}),le=y.object({agentId:y.string(),adapterName:y.string(),adapterId:y.string(),adapterSessionId:y.string(),lastActivityAt:y.number().finite()});function ue(e,t){e.identity!==void 0&&e.expectIdentityOpenForLead===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`expectIdentityOpenForLead`],message:`expectIdentityOpenForLead is required when identity is provided`}),e.expectIdentityOpenForLead!==void 0&&e.identity===void 0&&t.addIssue({code:y.ZodIssueCode.custom,path:[`identity`],message:`identity is required when expectIdentityOpenForLead is provided`}),e.reconcileAdapterSession!==void 0&&(e.identity!==void 0||e.expectIdentityOpenForLead!==void 0)&&t.addIssue({code:y.ZodIssueCode.custom,path:[`reconcileAdapterSession`],message:`reconcileAdapterSession cannot be combined with the identity-open-for-lead authority mode`})}const q={request:y.object({sessionId:y.string(),status:K.optional(),expectedStatus:y.array(K).nonempty().optional(),parentSessionId:y.string().nullable().optional(),contextInheritance:ee.optional(),rootSessionId:y.string().optional(),forkPointMessageId:y.string().optional(),branchKind:d.optional(),isOrchestrated:y.boolean().optional(),clientId:y.string().optional(),clientAccountId:y.string().optional(),lastClientIdentityObservation:p.optional(),executionTargetId:y.string().nullable().optional(),approvalPolicyOverride:f.nullable().optional(),title:y.string().optional(),targetWorkingDirectory:y.string().optional(),createdAt:y.number().finite().optional(),lastActivityAt:y.number().finite().optional(),metadata:u.nullable().optional(),spawningToolCallId:y.string().nullable().optional(),machineId:G,advanceGeneration:y.literal(!0).optional(),identity:ce.optional(),expectIdentityOpenForLead:y.string().nullable().optional(),reconcileAdapterSession:le.optional()}).superRefine((e,t)=>{ue(e,t)}),response:y.object({success:y.boolean(),clientAccountChanged:y.boolean().optional()})},de=y.enum([`live`]),J=y.object({externalSessionId:y.string(),source:y.string(),clientId:y.string().optional(),adapterId:y.string().optional(),cwd:y.string().nullable(),logFilePath:y.string().nullable().optional(),startedAt:y.number().finite().optional(),title:y.string().nullable().optional(),metadata:u.optional(),lastClientIdentityObservation:p.optional(),importStatus:y.enum([`discovered`,`tracking`]).optional(),activation:de.optional(),isSidechain:y.boolean().optional(),machineId:G}),Y=y.discriminatedUnion(`kind`,[J.merge(_),J.merge(g),J.merge(v),J.merge(h)]),X=y.object({externalSessionId:y.string(),source:y.string(),cwd:y.string().optional(),logFilePath:y.string().optional(),machineId:G,startMode:y.enum([`resume`,`compact`]).optional()}),Z=y.discriminatedUnion(`outcome`,[y.object({outcome:y.literal(`rebound`),sessionId:y.string()}),y.object({outcome:y.literal(`not-found`)})]),Q=m(`session`,{schemas:{get:{request:y.object({sessionId:y.string()}),response:y.object({session:r.nullable()})},set:{request:W,response:y.object({success:y.boolean(),clientAccountChanged:y.boolean().optional()})},delete:{request:y.object({sessionId:y.string()}),response:y.object({success:y.boolean()})},list:{request:y.object({status:y.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),limit:y.number().int().min(1).optional(),offset:y.number().int().min(0).optional(),includePreview:y.boolean().optional(),executionTargetId:y.string().optional()}),response:y.object({sessions:y.array(i),total:y.number()})},getChildren:{request:y.object({sessionId:y.string()}),response:y.object({children:y.array(te)})},search:{request:y.object({query:y.string(),limit:y.number().int().min(1).optional(),status:y.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),isImported:y.boolean().optional()}),response:y.object({sessions:y.array(V),total:y.number()})},update:q,getByAdapterSessionId:{request:y.object({adapterSessionId:y.string(),source:y.string().optional(),adapterName:y.string().optional()}),response:y.object({session:r.nullable()})},getStatusCounts:{request:y.object({}),response:y.object({all:y.number(),active:y.number(),closed:y.number(),archived:y.number(),discovered:y.number()})},importUpsert:{request:Y,response:y.object({sessionId:y.string(),created:y.boolean()})},rebindObserved:{request:X,response:Z},getByLogFilePath:{request:y.object({logFilePath:y.string()}),response:y.object({session:r.nullable()})},listImported:{request:y.object({source:y.string().optional(),importStatus:o.optional()}),response:y.object({sessions:y.array(r)})},countBySource:{request:y.object({source:y.string()}),response:y.object({total:y.number(),imported:y.number(),discovered:y.number(),tracking:y.number()})},updateImportStatus:{request:y.object({sessionId:y.string(),importStatus:o}),response:y.object({success:y.boolean()})}}}),fe=Q.subjects,$=`makaio:extraction-excluded`;function pe(e){return e?.[$]===!0}function me(){return{[$]:!0}}export{ae as A,k as C,T as D,w as E,ne as M,x as N,oe as O,S as P,D as S,C as T,I as _,Q as a,N as b,W as c,q as d,z as f,L as g,F as h,Y as i,re as j,ie as k,U as l,P as m,me as n,X as o,B as p,pe as r,Z as s,$ as t,fe as u,j as v,O as w,A as x,M as y};
@@ -14,8 +14,8 @@ declare const COMPRESS_SESSION_LINEAGE_KIND: "compress";
14
14
  /** Discriminates the relationship of a session to its parent. */
15
15
  declare const SessionLineageKindSchema: z.ZodEnum<{
16
16
  fork: "fork";
17
- subagent: "subagent";
18
17
  root: "root";
18
+ subagent: "subagent";
19
19
  compress: "compress";
20
20
  }>;
21
21
  type SessionLineageKind = z.infer<typeof SessionLineageKindSchema>;
@@ -1 +1 @@
1
- import{a as e,h as t,n}from"../../registry-DNMjJ-Oj.mjs";async function r(r={}){if(r.url!==void 0){let n=e(r.url);if(n.kind===`missing-engine`)throw Error(t(n.dialect,n.packageName));if(n.kind===`engine`)return n.engine.createClient(r)}return n(`sqlite`).createClient(r)}export{r as createDatabaseClient};
1
+ import{a as e,h as t,n}from"../../registry-DtaRGU8i.mjs";async function r(r={}){if(r.url!==void 0){let n=e(r.url);if(n.kind===`missing-engine`)throw Error(t(n.dialect,n.packageName));if(n.kind===`engine`)return n.engine.createClient(r)}return n(`sqlite`).createClient(r)}export{r as createDatabaseClient};
@@ -1 +1 @@
1
- import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x,y as S}from"../../registry-DNMjJ-Oj.mjs";import{autoPk as C,bool as w,epochMs as T,float8 as E,jsonCol as D}from"./columns/sqlite.mjs";import{autoPk as O,bool as k,epochMs as A,float8 as j,jsonCol as M}from"./columns/postgres.mjs";import{integer as N,sqliteTable as P,text as F}from"drizzle-orm/sqlite-core";import{bigint as ee,integer as I,pgTable as L,text as R}from"drizzle-orm/pg-core";import{getTableColumns as z,sql as B}from"drizzle-orm";import{createStorageNamespace as V}from"@makaio/framework/storage";const H=[{dialect:`postgres`,enginePackageName:`@makaio/storage-pg`,chainDirName:`drizzle-postgres`,drizzleConfigSpecifier:`drizzle.config.ts`,normalizeScriptSpecifier:`scripts/normalize-migrations.ts`}];function U(e){return H.find(t=>t.dialect===e)}async function W(e,t,n){for(let r of u(e).transactionLocks.lockExpressions(n))await t.select({acquired:r}).from(B.raw(`(SELECT 1) AS transaction_lock_anchor`))}async function G(e,t,n){let r=e.get(t)??Promise.resolve(),i=Promise.withResolvers(),a=r.catch(()=>void 0).then(()=>i.promise);e.set(t,a),await r.catch(()=>void 0);try{return await n()}finally{i.resolve(),e.get(t)===a&&e.delete(t)}}async function K(e,t){return G(J,e,t)}async function q(e,t){return K(e,()=>e.transaction(t))}const J=new WeakMap;function Y(e){return(t,n,r)=>e(t,n,r)}function X(e,t){return{sqlite:e,postgres:t}}function Z(t,n){return n[e(t)]}function Q(e,t){let n=(e,t)=>({sqlite:e,postgres:t,notNull:()=>n(e.notNull(),t.notNull()),default:r=>n(e.default(r),t.default(r)),primaryKey:()=>n(e.primaryKey(),t.primaryKey()),unique:r=>n(e.unique(r),t.unique(r)),$type:()=>n(e,t),references:(r,i)=>n(e.references(()=>r().sqlite,i),t.references(()=>r().postgres,i))});return n(e,t)}const $={text:e=>Q(F(e),R(e)),textEnum:(e,t)=>Q(F(e,t),R(e,t)),epochMs:e=>Q(T(e),A(e)),bool:e=>Q(w(e),k(e)),jsonCol:e=>Q(D(e),M(e)),autoPk:e=>Q(C(e),O(e)),float8:e=>Q(E(e),j(e)),int4:e=>Q(N(e),I(e)),int8:e=>Q(N(e),ee(e,{mode:`number`}))};function te(e,t,n){let r=t($),i={},a={};for(let[e,t]of Object.entries(r))i[e]=t.sqlite,a[e]=t.postgres;let o=P(e,i,n?.sqlite),s=L(e,a,n?.postgres),c=z(o),l=z(s);return{sqlite:o,postgres:s,columnPair(e){return{sqlite:c[e],postgres:l[e]}}}}export{t as DATABASE_DIALECT,H as NON_BASELINE_GENERATION_LEGS,f as STORAGE_ENGINE_URL_HINTS,W as acquireTransactionLocks,i as affectedRowCount,b as brandDatabase,d as buildFirstUserMessagePreviewQuery,V as createStorageNamespace,X as defineDialectSchema,te as defineDualTable,l as describeMissingStorageEngine,x as didAffectRows,q as executeTransaction,U as findGenerationLegForDialect,v as findStorageEngine,e as getDatabaseDialect,S as getRawSqlExecutor,p as getStorageEngine,n as importRuntimeModule,y as isSqliteDuplicateObjectError,o as isSqliteUniqueViolationError,c as quoteSqlIdentifier,s as readErrorCode,Y as registerDrizzleHandlers,g as registerStorageEngine,Z as resolveSchema,u as resolveStorageEngine,r as resolveStorageEngineForUrl,a as sanitizeFtsQuery,G as serializeByKey,K as serializeDatabaseOperation,h as someInCauseChain,_ as sqliteFtsSearchStrategy,m as sqliteStorageEngine};
1
+ import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x,y as S}from"../../registry-DtaRGU8i.mjs";import{autoPk as C,bool as w,epochMs as T,float8 as E,jsonCol as D}from"./columns/sqlite.mjs";import{autoPk as O,bool as k,epochMs as A,float8 as j,jsonCol as M}from"./columns/postgres.mjs";import{integer as N,sqliteTable as P,text as F}from"drizzle-orm/sqlite-core";import{bigint as ee,integer as I,pgTable as L,text as R}from"drizzle-orm/pg-core";import{getTableColumns as z,sql as B}from"drizzle-orm";import{createStorageNamespace as V}from"@makaio/framework/storage";const H=[{dialect:`postgres`,enginePackageName:`@makaio/storage-pg`,chainDirName:`drizzle-postgres`,drizzleConfigSpecifier:`drizzle.config.ts`,normalizeScriptSpecifier:`scripts/normalize-migrations.ts`}];function U(e){return H.find(t=>t.dialect===e)}async function W(e,t,n){for(let r of u(e).transactionLocks.lockExpressions(n))await t.select({acquired:r}).from(B.raw(`(SELECT 1) AS transaction_lock_anchor`))}async function G(e,t,n){let r=e.get(t)??Promise.resolve(),i=Promise.withResolvers(),a=r.catch(()=>void 0).then(()=>i.promise);e.set(t,a),await r.catch(()=>void 0);try{return await n()}finally{i.resolve(),e.get(t)===a&&e.delete(t)}}async function K(e,t){return G(J,e,t)}async function q(e,t){return K(e,()=>e.transaction(t))}const J=new WeakMap;function Y(e){return(t,n,r)=>e(t,n,r)}function X(e,t){return{sqlite:e,postgres:t}}function Z(t,n){return n[e(t)]}function Q(e,t){let n=(e,t)=>({sqlite:e,postgres:t,notNull:()=>n(e.notNull(),t.notNull()),default:r=>n(e.default(r),t.default(r)),primaryKey:()=>n(e.primaryKey(),t.primaryKey()),unique:r=>n(e.unique(r),t.unique(r)),$type:()=>n(e,t),references:(r,i)=>n(e.references(()=>r().sqlite,i),t.references(()=>r().postgres,i))});return n(e,t)}const $={text:e=>Q(F(e),R(e)),textEnum:(e,t)=>Q(F(e,t),R(e,t)),epochMs:e=>Q(T(e),A(e)),bool:e=>Q(w(e),k(e)),jsonCol:e=>Q(D(e),M(e)),autoPk:e=>Q(C(e),O(e)),float8:e=>Q(E(e),j(e)),int4:e=>Q(N(e),I(e)),int8:e=>Q(N(e),ee(e,{mode:`number`}))};function te(e,t,n){let r=t($),i={},a={};for(let[e,t]of Object.entries(r))i[e]=t.sqlite,a[e]=t.postgres;let o=P(e,i,n?.sqlite),s=L(e,a,n?.postgres),c=z(o),l=z(s);return{sqlite:o,postgres:s,columnPair(e){return{sqlite:c[e],postgres:l[e]}}}}export{t as DATABASE_DIALECT,H as NON_BASELINE_GENERATION_LEGS,f as STORAGE_ENGINE_URL_HINTS,W as acquireTransactionLocks,i as affectedRowCount,b as brandDatabase,d as buildFirstUserMessagePreviewQuery,V as createStorageNamespace,X as defineDialectSchema,te as defineDualTable,l as describeMissingStorageEngine,x as didAffectRows,q as executeTransaction,U as findGenerationLegForDialect,v as findStorageEngine,e as getDatabaseDialect,S as getRawSqlExecutor,p as getStorageEngine,n as importRuntimeModule,y as isSqliteDuplicateObjectError,o as isSqliteUniqueViolationError,c as quoteSqlIdentifier,s as readErrorCode,Y as registerDrizzleHandlers,g as registerStorageEngine,Z as resolveSchema,u as resolveStorageEngine,r as resolveStorageEngineForUrl,a as sanitizeFtsQuery,G as serializeByKey,K as serializeDatabaseOperation,h as someInCauseChain,_ as sqliteFtsSearchStrategy,m as sqliteStorageEngine};
@@ -1 +1 @@
1
- import{a as e}from"./ownership-recovery-guard-C9h8K1jo.mjs";import{SessionStorageSubjects as t}from"./services/session/storage/namespace.mjs";import"./session-6UG5udTX.mjs";import{AgentSubjects as n,ApprovalSubjects as r,HarnessSubjects as i,computeMetaTags as a}from"@makaio/framework/contracts";import{BaseService as o}from"@makaio/framework/service-base";import{extractToolFilePath as s}from"@makaio/framework/tools";const c={"full-access":0,"always-ask":1,reject:2};function l(){return`apr_${crypto.randomUUID()}`}function u(e){switch(e){case`allow`:return`full-access`;case`deny`:return`reject`;case`ask`:return`always-ask`}}function d(e){if(!e?.length)return`neutral`;let t=a(e);return t.includes(`destructive`)?`destructive`:t.includes(`read-only`)?`safe`:`neutral`}function f(e,t){if(e)return t&&e.toolApprovalOverrides?.[t]!==void 0?e.toolApprovalOverrides[t]:e.approvalPolicy}function p(e,t,n,r){let i=r[t];if(!i?.length)return e;let a=e;for(let e of i){let t=n[e];t&&c[t]>c[a]&&(a=t)}return a}function m(e,t,n){return n.handled?n.data.allowedDirectories??void 0:t?[]:void 0}function h(e,t,n){if(!n||!e?.cwd)return{};let r;return(e.personaId||e.profileId)&&t&&(r=m(e.personaId,e.profileId,t)),{cwd:e.cwd,...r&&{allowedDirectories:r}}}function g(e,t,n){if(!(!e&&!t))return!n||!n.handled?{policy:`always-ask`}:{policy:u(n.data.action),...n.data.personaName&&{personaName:n.data.personaName},...n.data.profileName&&{profileName:n.data.profileName}}}function _(e,t){let n=t.harness?.toolCapabilityMap&&e.toolName?t.harness.toolCapabilityMap[e.toolName]:void 0;return{requestId:l(),toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,agentId:e.agentId,sessionId:e.sessionId,adapterName:t.resolvedAdapterName,...t.personaName&&{personaName:t.personaName},...t.profileName&&{profileName:t.profileName},capabilities:n,riskLevel:d(n),reasoning:e.reasoning,createdAt:Date.now()}}var v=class extends o{logger=console;options;constructor(e,t={}){super(e),this.options=t}async onInit(){this.registerHandler(n.toolApprove,async e=>{let t=await this.getAgentMetadata(e.payload.agentId,e.payload.sessionId),n=(t?.personaId||t?.profileId)&&e.payload.toolName?await this.fetchRawEnrichedPolicy(t?.personaId,t?.profileId,e.payload.toolName):void 0,r=h(t,n,this.options.fileAccessRuleProvider),i=await this.checkFileAccessDenyReason(e.payload,r);if(i){e.setResult({action:`deny`,message:i,shouldAbort:!1});return}let a=await this.resolveSessionOverride(e.payload.sessionId);if(a===`full-access`){e.setResult({action:`allow`});return}if(a===`reject`){e.setResult({action:`deny`,message:`Tool use rejected by session approval policy override`,shouldAbort:!1});return}let o=await this.resolvePolicyWithContext({adapterName:e.payload.adapterName,toolName:e.payload.toolName},t,n);switch(a===`always-ask`?`always-ask`:o.policy){case`full-access`:e.setResult({action:`allow`});return;case`reject`:e.setResult({action:`deny`,message:`Tool use rejected by approval policy`,shouldAbort:!1});return;case`always-ask`:await this.dispatchAlwaysAskApproval(e.payload,e.setResult.bind(e),o);return}})}async dispatchAlwaysAskApproval(e,t,i){let a=_(e,i),o=new AbortController,s=this.bus.on(n.session.closed,()=>{o.abort()},{filter:{agentId:a.agentId,...e.adapterSessionId!==void 0&&{adapterSessionId:e.adapterSessionId}}});try{let e=await this.bus.requestOptional(r.request,a,{timeout:0,signal:o.signal});e.handled&&e.data.action===`allow`?t({action:`allow`,...e.data.updatedInput&&{updatedInput:e.data.updatedInput}}):t({action:`deny`,message:e.handled&&e.data.action===`deny`?e.data.message??`User denied tool execution`:`No approval handler available`,shouldAbort:!1})}catch{t({action:`deny`,message:o.signal.aborted?`Approval cancelled — agent session closed`:`Tool approval request failed`,shouldAbort:!1})}finally{s()}}async checkFileAccessDenyReason(e,t){if(!this.options.fileAccessRuleProvider||!t.cwd)return;let n=s(e.toolName,e.args,t.cwd);if(n)try{return(await this.options.fileAccessRuleProvider(t.cwd,t.allowedDirectories)).isDenied(n)?`Access denied: '${n}' is restricted by .makaioignore rules`:void 0}catch{return`Access denied: file access rules could not be evaluated`}}async fetchRawEnrichedPolicy(e,t,n){try{return await this.bus.requestOptional(r.resolveEnrichedPolicy,{toolName:n,personaId:e,profileId:t})}catch(r){return this.logger.error(`[ToolApprovalService] approval.resolveEnrichedPolicy failed; falling back to fail-closed`,{toolName:n,personaId:e,profileId:t,error:r}),{handled:!1}}}async resolvePolicyWithContext(e,t,n){let r=t?.adapterName??e.adapterName,i=g(t?.personaId,t?.profileId,n),a=await this.resolveHarnessPolicy(r,t?.harnessId,t?.clientId),o=f(a,e.toolName),s=i?.policy??o??`always-ask`,c=s;return a?.capabilityOverrides&&a.toolCapabilityMap&&e.toolName&&(c=p(s,e.toolName,a.capabilityOverrides,a.toolCapabilityMap)),{policy:c,harness:a,agent:t,resolvedAdapterName:r,...i?.personaName&&{personaName:i.personaName},...i?.profileName&&{profileName:i.profileName}}}async getAgentMetadata(t,n){try{if(n){let{agents:r}=await this.bus.request(e.listBySession,{sessionId:n});return r.find(e=>e.agentId===t)??null}let r=await this.bus.requestOptional(e.get,{agentId:t});return r.handled?r.data.agent:null}catch{return null}}async resolveSessionOverride(e){if(e)try{let n=await this.bus.requestOptional(t.get,{sessionId:e});return n.handled?n.data.session?.approvalPolicyOverride??void 0:void 0}catch{return}}async resolveHarnessPolicy(e,t,n){try{let r=await this.bus.request(i.resolve,{adapterName:e,...t&&{profileHarnessId:t},...n&&{clientId:n}});return{approvalPolicy:r.approvalPolicy,capabilityOverrides:r.capabilityOverrides,toolCapabilityMap:r.toolCapabilityMap,toolApprovalOverrides:r.toolApprovalOverrides}}catch{return}}};export{v as t};
1
+ import{a as e}from"./ownership-recovery-guard-C9h8K1jo.mjs";import{SessionStorageSubjects as t}from"./services/session/storage/namespace.mjs";import"./session-BP5aq2kt.mjs";import{AgentSubjects as n,ApprovalSubjects as r,HarnessSubjects as i,computeMetaTags as a}from"@makaio/framework/contracts";import{BaseService as o}from"@makaio/framework/service-base";import{extractToolFilePath as s}from"@makaio/framework/tools";const c={"full-access":0,"always-ask":1,reject:2};function l(){return`apr_${crypto.randomUUID()}`}function u(e){switch(e){case`allow`:return`full-access`;case`deny`:return`reject`;case`ask`:return`always-ask`}}function d(e){if(!e?.length)return`neutral`;let t=a(e);return t.includes(`destructive`)?`destructive`:t.includes(`read-only`)?`safe`:`neutral`}function f(e,t){if(e)return t&&e.toolApprovalOverrides?.[t]!==void 0?e.toolApprovalOverrides[t]:e.approvalPolicy}function p(e,t,n,r){let i=r[t];if(!i?.length)return e;let a=e;for(let e of i){let t=n[e];t&&c[t]>c[a]&&(a=t)}return a}function m(e,t,n){return n.handled?n.data.allowedDirectories??void 0:t?[]:void 0}function h(e,t,n){if(!n||!e?.cwd)return{};let r;return(e.personaId||e.profileId)&&t&&(r=m(e.personaId,e.profileId,t)),{cwd:e.cwd,...r&&{allowedDirectories:r}}}function g(e,t,n){if(!(!e&&!t))return!n||!n.handled?{policy:`always-ask`}:{policy:u(n.data.action),...n.data.personaName&&{personaName:n.data.personaName},...n.data.profileName&&{profileName:n.data.profileName}}}function _(e,t){let n=t.harness?.toolCapabilityMap&&e.toolName?t.harness.toolCapabilityMap[e.toolName]:void 0;return{requestId:l(),toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,agentId:e.agentId,sessionId:e.sessionId,adapterName:t.resolvedAdapterName,...t.personaName&&{personaName:t.personaName},...t.profileName&&{profileName:t.profileName},capabilities:n,riskLevel:d(n),reasoning:e.reasoning,createdAt:Date.now()}}var v=class extends o{logger=console;options;constructor(e,t={}){super(e),this.options=t}async onInit(){this.registerHandler(n.toolApprove,async e=>{let t=await this.getAgentMetadata(e.payload.agentId,e.payload.sessionId),n=(t?.personaId||t?.profileId)&&e.payload.toolName?await this.fetchRawEnrichedPolicy(t?.personaId,t?.profileId,e.payload.toolName):void 0,r=h(t,n,this.options.fileAccessRuleProvider),i=await this.checkFileAccessDenyReason(e.payload,r);if(i){e.setResult({action:`deny`,message:i,shouldAbort:!1});return}let a=await this.resolveSessionOverride(e.payload.sessionId);if(a===`full-access`){e.setResult({action:`allow`});return}if(a===`reject`){e.setResult({action:`deny`,message:`Tool use rejected by session approval policy override`,shouldAbort:!1});return}let o=await this.resolvePolicyWithContext({adapterName:e.payload.adapterName,toolName:e.payload.toolName},t,n);switch(a===`always-ask`?`always-ask`:o.policy){case`full-access`:e.setResult({action:`allow`});return;case`reject`:e.setResult({action:`deny`,message:`Tool use rejected by approval policy`,shouldAbort:!1});return;case`always-ask`:await this.dispatchAlwaysAskApproval(e.payload,e.setResult.bind(e),o);return}})}async dispatchAlwaysAskApproval(e,t,i){let a=_(e,i),o=new AbortController,s=this.bus.on(n.session.closed,()=>{o.abort()},{filter:{agentId:a.agentId,...e.adapterSessionId!==void 0&&{adapterSessionId:e.adapterSessionId}}});try{let e=await this.bus.requestOptional(r.request,a,{timeout:0,signal:o.signal});e.handled&&e.data.action===`allow`?t({action:`allow`,...e.data.updatedInput&&{updatedInput:e.data.updatedInput}}):t({action:`deny`,message:e.handled&&e.data.action===`deny`?e.data.message??`User denied tool execution`:`No approval handler available`,shouldAbort:!1})}catch{t({action:`deny`,message:o.signal.aborted?`Approval cancelled — agent session closed`:`Tool approval request failed`,shouldAbort:!1})}finally{s()}}async checkFileAccessDenyReason(e,t){if(!this.options.fileAccessRuleProvider||!t.cwd)return;let n=s(e.toolName,e.args,t.cwd);if(n)try{return(await this.options.fileAccessRuleProvider(t.cwd,t.allowedDirectories)).isDenied(n)?`Access denied: '${n}' is restricted by .makaioignore rules`:void 0}catch{return`Access denied: file access rules could not be evaluated`}}async fetchRawEnrichedPolicy(e,t,n){try{return await this.bus.requestOptional(r.resolveEnrichedPolicy,{toolName:n,personaId:e,profileId:t})}catch(r){return this.logger.error(`[ToolApprovalService] approval.resolveEnrichedPolicy failed; falling back to fail-closed`,{toolName:n,personaId:e,profileId:t,error:r}),{handled:!1}}}async resolvePolicyWithContext(e,t,n){let r=t?.adapterName??e.adapterName,i=g(t?.personaId,t?.profileId,n),a=await this.resolveHarnessPolicy(r,t?.harnessId,t?.clientId),o=f(a,e.toolName),s=i?.policy??o??`always-ask`,c=s;return a?.capabilityOverrides&&a.toolCapabilityMap&&e.toolName&&(c=p(s,e.toolName,a.capabilityOverrides,a.toolCapabilityMap)),{policy:c,harness:a,agent:t,resolvedAdapterName:r,...i?.personaName&&{personaName:i.personaName},...i?.profileName&&{profileName:i.profileName}}}async getAgentMetadata(t,n){try{if(n){let{agents:r}=await this.bus.request(e.listBySession,{sessionId:n});return r.find(e=>e.agentId===t)??null}let r=await this.bus.requestOptional(e.get,{agentId:t});return r.handled?r.data.agent:null}catch{return null}}async resolveSessionOverride(e){if(e)try{let n=await this.bus.requestOptional(t.get,{sessionId:e});return n.handled?n.data.session?.approvalPolicyOverride??void 0:void 0}catch{return}}async resolveHarnessPolicy(e,t,n){try{let r=await this.bus.request(i.resolve,{adapterName:e,...t&&{profileHarnessId:t},...n&&{clientId:n}});return{approvalPolicy:r.approvalPolicy,capabilityOverrides:r.capabilityOverrides,toolCapabilityMap:r.toolCapabilityMap,toolApprovalOverrides:r.toolApprovalOverrides}}catch{return}}};export{v as t};
@@ -1 +1 @@
1
- import{l as e}from"./framework-packages-Bg4edkkM.mjs";import{FILE_ACCESS_RULES_KEY as t,extractToolFilePath as n}from"@makaio/framework/tools";function r(){let t=new Map;return{filter:e=>!!e.tools?.createToolsets,async processActivated(n,r,i){let a=i.getService(e);if(!a)throw Error(`ToolRegistry is not available. Ensure toolRegistryPackage is included in the composition root.`);let o=r.tools.createToolsets(i),s=[];try{for(let e of o)await a.register(e),s.push(()=>a.deregister(e.metadata.name))}catch(e){for(let e=s.length-1;e>=0;--e)try{await s[e]()}catch(e){console.error(`[ToolContributionProcessor] Rollback error for "${n}":`,e)}throw e}t.set(n,s)},async processStopped(e){let n=t.get(e);if(n){for(let t=n.length-1;t>=0;--t)try{await n[t]()}catch(t){console.error(`[ToolContributionProcessor] Deregister error for "${e}":`,t)}t.delete(e)}}}}export{n,r,t};
1
+ import{l as e}from"./framework-packages-BNFG51Td.mjs";import{FILE_ACCESS_RULES_KEY as t,extractToolFilePath as n}from"@makaio/framework/tools";function r(){let t=new Map;return{filter:e=>!!e.tools?.createToolsets,async processActivated(n,r,i){let a=i.getService(e);if(!a)throw Error(`ToolRegistry is not available. Ensure toolRegistryPackage is included in the composition root.`);let o=r.tools.createToolsets(i),s=[];try{for(let e of o)await a.register(e),s.push(()=>a.deregister(e.metadata.name))}catch(e){for(let e=s.length-1;e>=0;--e)try{await s[e]()}catch(e){console.error(`[ToolContributionProcessor] Rollback error for "${n}":`,e)}throw e}t.set(n,s)},async processStopped(e){let n=t.get(e);if(n){for(let t=n.length-1;t>=0;--t)try{await n[t]()}catch(t){console.error(`[ToolContributionProcessor] Deregister error for "${e}":`,t)}t.delete(e)}}}}export{n,r,t};