@makaio/framework 1.0.0-dev-1783477169057 → 1.0.0-dev-1783615060726

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 (104) hide show
  1. package/dist/.makaio-build.json +2 -2
  2. package/dist/adapters/config/index.d.mts +1 -1
  3. package/dist/adapters/index.d.mts +105 -166
  4. package/dist/adapters/index.mjs +6 -6
  5. package/dist/bus/index.d.mts +22 -22
  6. package/dist/bus/index.mjs +1 -1
  7. package/dist/contracts/adapter/index.d.mts +2 -2
  8. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  9. package/dist/contracts/artifact/index.d.mts +1 -1
  10. package/dist/contracts/canonical-model/index.d.mts +1 -1
  11. package/dist/contracts/client/index.d.mts +1 -1
  12. package/dist/contracts/config/index.d.mts +12 -12
  13. package/dist/contracts/extension/index.d.mts +3 -3
  14. package/dist/contracts/harness/index.d.mts +1 -1
  15. package/dist/contracts/index.d.mts +182 -182
  16. package/dist/contracts/index.mjs +1 -1
  17. package/dist/contracts/provider/index.d.mts +1 -1
  18. package/dist/contracts/session/index.d.mts +2 -2
  19. package/dist/contracts/session/index.mjs +1 -1
  20. package/dist/contracts/shared/index.d.mts +1 -1
  21. package/dist/contracts/skill/index.d.mts +1 -1
  22. package/dist/contracts/variant/index.d.mts +1 -1
  23. package/dist/contracts/workflow/index.d.mts +2 -2
  24. package/dist/{index-Dv4oGVZK.d.mts → index-BSprsrul.d.mts} +409 -371
  25. package/dist/{index-C_xQM96Y.d.mts → index-BbQpQ1N3.d.mts} +388 -388
  26. package/dist/{index-CA-AJbq6.d.mts → index-C9FCWOhp.d.mts} +12 -12
  27. package/dist/{index-NkNbYFud.d.mts → index-CaerrEDH.d.mts} +1 -1
  28. package/dist/{index-BcwOnvUh.d.mts → index-CqCe7Phc.d.mts} +6 -6
  29. package/dist/{index-Bl42SCEI.d.mts → index-Cx1Bm6WD.d.mts} +8 -8
  30. package/dist/{index-B-6DtLLz.d.mts → index-D7rWAEY0.d.mts} +1 -1
  31. package/dist/{index-DScUb-hF.d.mts → index-D8wmMJLi.d.mts} +1 -1
  32. package/dist/{index-Di84JjS0.d.mts → index-DEzdNQum.d.mts} +2 -2
  33. package/dist/{index-uM4KZopE.d.mts → index-DKaEpPFS.d.mts} +4 -4
  34. package/dist/{index-j_X5xefv2.d.mts → index-DLNRgZPo2.d.mts} +26 -26
  35. package/dist/{index-BX1MxwFr.d.mts → index-DWu3qrwe.d.mts} +13 -13
  36. package/dist/{index-CwFSL4xI.d.mts → index-DZ14azod.d.mts} +16 -16
  37. package/dist/{index-B3fjN5HX.d.mts → index-DZPNuWMc.d.mts} +4 -4
  38. package/dist/{index-BjO4Zkap.d.mts → index-DoEF9LAc.d.mts} +1 -1
  39. package/dist/{index-BeouVICp.d.mts → index-Qd1Qom8M.d.mts} +40 -40
  40. package/dist/{index-CQQcnpev.d.mts → index-S7lj2TLp.d.mts} +75 -75
  41. package/dist/{index-DMz-2ACU.d.mts → index-WHUV7neB.d.mts} +105 -105
  42. package/dist/kernel/extension/index.d.mts +1 -1
  43. package/dist/kernel/index.d.mts +2 -2
  44. package/dist/kernel/observability/index.d.mts +1 -1
  45. package/dist/{namespace-TPbegIMi.d.mts → namespace-CZK2ff3B.d.mts} +4 -4
  46. package/dist/{namespace-Boh42UoL.d.mts → namespace-Ceg3zkt2.d.mts} +44 -20
  47. package/dist/{namespace-COEUMuHL.d.mts → namespace-CfvtDD_U.d.mts} +156 -156
  48. package/dist/{namespace-6sIu5nBI2.d.mts → namespace-D8P8Sxce2.d.mts} +2 -2
  49. package/dist/{namespace-OLAh9wHU.d.mts → namespace-Dc94fHZW.d.mts} +27 -27
  50. package/dist/{namespace-D94HrTtq.d.mts → namespace-DuUCiVmK.d.mts} +64 -64
  51. package/dist/{namespace-3yGm4WF9.d.mts → namespace-j7vFsmYL.d.mts} +2 -2
  52. package/dist/node/transports/index.d.mts +25 -3
  53. package/dist/node/transports/index.mjs +1 -1
  54. package/dist/package.json +1 -1
  55. package/dist/{schema-B5vHi7Uu.d.mts → schema-B9goOieO.d.mts} +1 -1
  56. package/dist/{schemas-DOV4UouN2.d.mts → schemas-Br-rSxPE2.d.mts} +19 -19
  57. package/dist/{schemas-CDBn9MTz.d.mts → schemas-CoFCV42v.d.mts} +156 -156
  58. package/dist/{schemas-CscdPqCt.d.mts → schemas-lnE9YoG7.d.mts} +3 -3
  59. package/dist/services/adapter-subsystem/index.d.mts +2 -2
  60. package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
  61. package/dist/services/agent-runtime/index.d.mts +2 -2
  62. package/dist/services/agent-runtime/namespace.d.mts +1 -1
  63. package/dist/services/agent-runtime/schemas.d.mts +1 -1
  64. package/dist/services/context-rules/index.d.mts +11 -11
  65. package/dist/services/execution-target/index.d.mts +1 -1
  66. package/dist/services/filesystem/namespace.d.mts +12 -12
  67. package/dist/services/filesystem/schemas.d.mts +6 -6
  68. package/dist/services/harness/index.d.mts +3 -3
  69. package/dist/services/index.d.mts +144 -144
  70. package/dist/services/index.mjs +1 -1
  71. package/dist/services/log-import/browser.d.mts +2 -2
  72. package/dist/services/log-import/index.d.mts +2 -2
  73. package/dist/services/log-import/log-import.d.mts +1 -1
  74. package/dist/services/log-import/namespace.d.mts +2 -2
  75. package/dist/services/log-import/schemas.d.mts +1 -1
  76. package/dist/services/session/index.d.mts +5 -5
  77. package/dist/services/session/index.mjs +1 -1
  78. package/dist/services/session/messages/namespace.d.mts +1 -1
  79. package/dist/services/session/session-events/namespace.d.mts +1 -1
  80. package/dist/services/session/storage/namespace.d.mts +1 -1
  81. package/dist/services/session/storage/schema.d.mts +1 -1
  82. package/dist/services/session/testing/index.mjs +1 -1
  83. package/dist/services/settings/namespace.d.mts +19 -19
  84. package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
  85. package/dist/services/subagent-template/index.d.mts +2 -2
  86. package/dist/services/subagent-template/namespace.d.mts +1 -1
  87. package/dist/services/subagent-template/schemas.d.mts +1 -1
  88. package/dist/services/tool-approval/index.mjs +1 -1
  89. package/dist/services/tools/index.mjs +1 -1
  90. package/dist/services/tray-menu/index.d.mts +2 -2
  91. package/dist/services/tray-menu/namespace.d.mts +1 -1
  92. package/dist/services/tray-menu/schemas.d.mts +1 -1
  93. package/dist/session-CX6QDhi2.mjs +76 -0
  94. package/dist/{session-Dp7z5N1d.mjs → session-D5rVMqmE.mjs} +1 -1
  95. package/dist/{session-lineage-C1M7-O3C.d.mts → session-lineage-NBFNVkUE.d.mts} +1 -1
  96. package/dist/{tool-approval-service-BNXgr-az.mjs → tool-approval-service-DEiMKTv9.mjs} +1 -1
  97. package/dist/{tools-BaO4GYj0.mjs → tools-CGFZkB7F.mjs} +1 -1
  98. package/dist/{transition-Bbjlwv5K.d.mts → transition-CmI3q3FA.d.mts} +1 -1
  99. package/dist/{types-CNkx2awa.d.mts → types-BWduCvRU.d.mts} +1 -1
  100. package/dist/{types-jruUn6oW.d.mts → types-Dhou-Itn.d.mts} +266 -266
  101. package/dist/{types-D7W0ntGr.d.mts → types-VwMx5_lS.d.mts} +15 -1
  102. package/dist/workflow-engine/index.d.mts +71 -71
  103. package/package.json +1 -1
  104. package/dist/session-CoGaTin6.mjs +0 -69
@@ -1,69 +0,0 @@
1
- import{agents as e,agentsDual as t,sessions as n,sessionsDual as r}from"./services/session/storage/schema.mjs";import"./schema-7aKBGB7S.mjs";import{a as i,n as a,o}from"./namespace-dFBD2ZmS.mjs";import{A as s,E as c,I as l,L as u,O as d,R as f,S as p,_ as m,d as h,f as g,g as _,h as v,l as ee,m as y,p as te,u as b,v as x,y as S,z as C}from"./handlers-B74FvKlA.mjs";import{TurnStorageSubjects as w}from"./services/turn/namespace.mjs";import{SessionStorageSubjects as T}from"./services/session/storage/namespace.mjs";import{r as ne,t as re}from"./provider-context-DC_eq7es.mjs";import{AdapterRuntimeSubjects as ie}from"./services/adapter-runtime/namespace.mjs";import{MessageStorageSubjects as E}from"./services/session/messages/namespace.mjs";import{n as ae}from"./namespace-wke7juzy.mjs";import{z as D}from"zod";import{createBusNamespace as oe}from"@makaio/framework/core";import{MakaioBus as se,NoHandlerError as ce,TimeoutError as le}from"@makaio/framework/bus";import{AdapterSubjects as O,AgentSubjects as k,CanonicalModelSubjects as ue,CapabilitySubjects as A,ClientSubjects as de,CompressionModeSchema as fe,FORK_SESSION_LINEAGE_KIND as pe,ForkTransformsSchema as me,MessageRoutingSchema as he,MessageStorageSubjects as ge,ROOT_SESSION_LINEAGE_KIND as _e,SessionContextSchema as ve,SessionDiscoveredSchema as ye,SessionRecordMetadataSchema as be,SessionStorageSetRequestSchema as xe,SessionStorageUpdateSchema as Se,SessionSubjects as j,TurnIngestionMarkerSchema as Ce,compareMessageCursorAsc as we,compareMessageCursorDesc as Te,isCanonicalModelParseError as Ee,messageToCursor as M,parseCanonicalModel as De}from"@makaio/framework/contracts";import{BaseService as Oe}from"@makaio/framework/service-base";import{blob as ke,index as Ae,integer as je,primaryKey as Me,sqliteTable as Ne,text as Pe,uniqueIndex as Fe}from"drizzle-orm/sqlite-core";import{index as Ie,primaryKey as Le}from"drizzle-orm/pg-core";import{defineDialectSchema as Re,defineDualTable as ze,didAffectRows as N,getRawSqlExecutor as Be,getStorageEngine as Ve,resolveSchema as P,resolveStorageEngine as He}from"@makaio/framework/storage/drizzle";import{and as F,asc as Ue,count as I,desc as We,eq as L,gt as Ge,gte as Ke,inArray as R,isNull as z,lt as qe,lte as Je,or as Ye,sql as B}from"drizzle-orm";import{createStorageNamespaceDefinition as Xe}from"@makaio/framework/storage";import{ClientIdentityObservationSchema as Ze}from"@makaio/framework/contracts/client";import{ImportCursorStorageSubjects as Qe}from"@makaio/framework/adapters";function $e(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;r&&(r.adapterSessionId||(r.adapterSessionId=t.payload.adapterSessionId,r.adapterName=t.payload.adapterName,r.adapterId=t.payload.adapterId),(t.payload.role??(r.leadAgentId?`member`:`lead`))===`lead`&&(r.leadAgentId=t.payload.agentId),r.lastActivityAt=Date.now(),await e.request(T.set,{sessionId:t.payload.sessionId,session:r}))})}function et(e){return e.on(j.agent.removed,async t=>{let n=await e.requestOptional(T.get,{sessionId:t.payload.sessionId}),r=n.handled?n.data.session:void 0;r&&(await e.requestOptional(l.updateStatus,{agentId:t.payload.agentId,status:`disposed`}),r.leadAgentId===t.payload.agentId&&(r.leadAgentId=void 0),r.lastActivityAt=Date.now(),await e.request(T.set,{sessionId:t.payload.sessionId,session:r}))})}function tt(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(l.get,{agentId:n}),c=s.handled?s.data.agent:null;c&&!c.adapterSessionId&&await e.requestOptional(l.updateRuntime,{agentId:n,adapterSessionId:r});let u=await e.requestOptional(T.get,{sessionId:o}),d=u.handled?u.data.session:null;if(d&&!d.adapterSessionId){if(d.adapterName){if(i!==d.adapterName)return;d.adapterSessionId=r}else d.adapterSessionId=r,d.adapterName=i,d.adapterId=a;d.lastActivityAt=Date.now(),await e.requestOptional(T.set,{sessionId:o,session:d})}})}function nt(e){return[at(e),ot(e),st(e),rt(e),ct(e),dt(e),ft(e),pt(e),mt(e),$e(e.bus),et(e.bus),tt(e.bus)]}function rt(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 it(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 le(`session.turn.await`,i):e}})}async function it(e,t,n){let r=await e.requestOptional(w.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 at(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 ot(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 st(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 ct(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}i.status=`closed`,i.lastActivityAt=Date.now(),await t.requestOptional(T.set,{sessionId:n,session:i}),await t.emit(j.closed,{sessionId:n}),e.setResult({success:!0})})}async function lt(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 ut(e,t){if(t!==void 0)return t;let n=await e.requestOptional(ie.getMachineId,{});return n.handled?n.data.machineId:void 0}function dt(e){let{bus:t}=e;return t.on(j.restartAgents,async e=>{let{sessionId:n,machineId:r}=e.payload,i=await t.requestOptional(l.listBySession,{sessionId:n}),a=i.handled?i.data.agents:[],o=[],s=await ut(t,r),u=await t.requestOptional(T.get,{sessionId:n}),d=u.handled?u.data.session??void 0:void 0;for(let e of a)try{let n,r=!1;if(d!==void 0&&(p({intent:`resume`,session:d,localMachineId:s,adapterSupportsNative:await lt(t,e.adapterId),targetAdapterName:e.adapterName,currentCwd:e.cwd,targetCwd:e.cwd}).kind===`native`&&e.adapterSessionId!==void 0?n=e.adapterSessionId:r=!0),r){o.push({agentId:e.agentId,adapterId:e.adapterId,success:!0});continue}let i=await c(t,e,{cwd:e.cwd,model:e.model,resumeAdapterSessionId:n});await t.requestOptional(l.updateRuntime,{agentId:i.agentId,adapterId:i.adapterId}),o.push({agentId:i.agentId,adapterId:i.adapterId,success:!0})}catch(t){let n=t instanceof Error?t.cause:void 0,r=n instanceof Error?n.message:t instanceof Error?t.message:String(t);o.push({agentId:e.agentId,adapterId:e.adapterId,success:!1,error:r})}e.setResult({sessionId:n,results:o})})}function ft(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 pt(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}i.status=`archived`,i.lastActivityAt=Date.now(),await t.requestOptional(T.set,{sessionId:n,session:i}),await t.emit(j.archived,{sessionId:n}),e.setResult({success:!0})})}function mt(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 o=await t.requestOptional(T.list,{status:`all`}),s=o.handled?o.data.sessions:[];for(let e of s)e.parentSessionId===n&&await t.requestOptional(T.set,{sessionId:e.sessionId,session:{...e,parentSessionId:void 0}});let c=await t.requestOptional(a.getEvents,{sessionId:n,options:{limit:1}}),l=c.handled?c.data.totalCount:0;await t.requestOptional(a.deleteBySession,{sessionId:n}),await t.requestOptional(T.delete,{sessionId:n}),await t.emit(j.purged,{sessionId:n}),e.setResult({success:!0,eventsDeleted:l})})}var ht=class extends Oe{constructor(e=se){super(e)}async onInit(){for(let e of nt({bus:this.bus}))this.addCleanup(e);this.addCleanup(C(this.bus)),await this.reconcileOrphanedTurns()}async reconcileOrphanedTurns(){let e=await this.bus.requestOptional(w.listActive,{});if(!e.handled)return;let{turns:t}=e.data;for(let e of t)try{let{transitioned:t}=await this.bus.request(w.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 u(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 gt(e){return Error(`No adapter found for adapterName="${e}". Ensure adapter-runtime identity handlers are registered; adapter startup verifies live availability.`)}var _t=class{bus;registry=new Map;cleanup;constructor(e){this.bus=e,this.cleanup=this.bus.on(O.initialized,e=>{this.registry.set(e.payload.adapterName,e.payload.adapterId)})}resolve(e){let t=this.registry.get(e);if(!t)throw gt(e);return t}async resolveAvailable(e){try{let{adapterId:t}=await this.bus.request(ie.resolveId,{adapterName:e});return this.registry.set(e,t),t}catch{let t=this.registry.get(e);if(t)return t;throw gt(e)}}destroy(){this.cleanup?.(),this.cleanup=void 0,this.registry.clear()}};async function vt(e,t){e.emit(E.stored,{message:structuredClone(t)});try{await e.request(a.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 V(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 yt(e){let{bus:t,db:n}=e,{messages:r}=P(n,o);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 vt(t,s)})}function bt(e){let{bus:t,db:n}=e,{messages:r}=P(n,o);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`?We:Ue,l=n.select().from(r).where(L(r.sessionId,t)).orderBy(c(r.timestamp),c(r.messageId));if(a){let e=s===`desc`?Ye(qe(r.timestamp,a.timestamp),F(L(r.timestamp,a.timestamp),o?Je(r.messageId,a.messageId):qe(r.messageId,a.messageId))):Ye(Ge(r.timestamp,a.timestamp),F(L(r.timestamp,a.timestamp),o?Ke(r.messageId,a.messageId):Ge(r.messageId,a.messageId)));l=n.select().from(r).where(F(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(V),nextCursor:m})})}function xt(e){let{bus:t,db:n}=e,{messages:r}=P(n,o);return t.on(E.getByTurn,async e=>{let{turnId:t}=e.payload,i=await n.select().from(r).where(L(r.turnId,t)).orderBy(Ue(r.timestamp));e.setResult({messages:i.map(V)})})}function St(e){let{bus:t,db:n}=e,{messages:r}=P(n,o);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?V(i):null})})}function Ct(e){let{bus:t,db:n}=e,{messages:r}=P(n,o),i=He(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(V),total:l})})}function wt(e){let{bus:t,db:n}=e,{messages:r}=P(n,o),i=He(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 Tt(e){let{bus:t,db:n}=e,{messages:r}=P(n,o);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?V(i):null})})}function Et(e){let{bus:t,db:n}=e,{messages:r}=P(n,o);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(F(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(F(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 vt(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 Dt(e,t){let n={bus:e,db:t},r=[yt(n),bt(n),xt(n),St(n),Ct(n),wt(n),Et(n),Tt(n)];return()=>r.forEach(e=>e())}function Ot(e,t){return we(M(e),M(t))}function kt(e,t){return Te(M(e),M(t))}function At(e,t){let n=e.get(t);if(n!==void 0)return n;let r=new Map;return e.set(t,r),r}function jt(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 Mt(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=Nt(t,n,r,i),o=[Pt(e,t,a),Ft(e,t,n),It(e,t,r),Lt(e,t),Rt(e,t),zt(e,t,r,i,a),Bt(e,t,n,r,i)];return()=>o.forEach(e=>e())}function Nt(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&&At(r,i.sessionId).set(i.adapterMessageId,i.messageId)}}function Pt(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 vt(e,o)})}function Ft(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`?kt:Ot,u=c.map(e=>t.get(e)).filter(e=>!!e).sort(l);a&&(u=u.filter(e=>{let t=s===`desc`?Te(M(e),a):we(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 It(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(Ot);e.setResult({messages:i})})}function Lt(e,t){return e.on(E.get,async e=>{e.setResult({message:t.get(e.payload.messageId)??null})})}function Rt(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(Ot),e.setResult({messages:c.slice(0,a),total:c.length})})}function zt(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){jt(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 vt(e,v)})}function Bt(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 Vt=ze(`message_routing`,e=>({messageId:e.text(`message_id`).notNull().references(i,{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=>[Me({columns:[e.messageId,e.agentId,e.status]}),Ae(`idx_routing_agent`).on(e.agentId,e.timestamp)],postgres:e=>[Le({columns:[e.messageId,e.agentId,e.status]}),Ie(`idx_routing_agent`).on(e.agentId,e.timestamp)]}),Ht=Vt.sqlite,Ut=Xe(`messageRouting`,{schemas:{record:{request:he,response:D.object({success:D.boolean()})},getByMessage:{request:D.object({messageId:D.string()}),response:D.object({routing:D.array(he)})},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:Ht}}}),H=Ut.subjects,Wt=Vt.postgres,Gt=Re({messageRouting:Ht},{messageRouting:Wt});function Kt(e){return{messageId:e.messageId,agentId:e.agentId,status:e.status,timestamp:e.timestamp,error:e.error??void 0}}function qt(e,t){let{messageRouting:n}=P(t,Gt),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(Kt)})})),r.push(e.on(H.getCompleted,async e=>{let{messageId:r}=e.payload,i=await t.select().from(n).where(F(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(F(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())}var Jt=class{byAgent=new Map;add(e){let t=this.byAgent.get(e.agentId);t?(t.inputTokens+=e.inputTokens,t.outputTokens+=e.outputTokens):this.byAgent.set(e.agentId,{inputTokens:e.inputTokens,outputTokens:e.outputTokens})}snapshot(){if(this.byAgent.size===0)return;let e=0,t=0,n={};for(let[r,i]of this.byAgent)e+=i.inputTokens,t+=i.outputTokens,n[r]={...i};return{total:{inputTokens:e,outputTokens:t},byAgent:n}}flush(){let e=this.snapshot();return this.byAgent.clear(),e}clear(){this.byAgent.clear()}},Yt=class{bus;activeTurns=new Map;usageAccumulators=new Map;completingTurnIds=new Set;completingTurns=new Map;pendingTerminalCompletions=new Map;bufferedUsageDuringCompletion=new Map;syntheticTurnCounters=new Map;assistantStoredCounts=new Map;assistantPersistenceWaiters=new Map;cleanups=[];constructor(e){this.bus=e,this.registerAssistantPersistenceCounter()}async createTurn(e,t,n,r){let i=await this.bus.requestOptional(w.create,{sessionId:e,...r!==void 0&&{turnId:r},...n!==void 0&&{initiator:n}}),a,o;if(i.handled)a=i.data.turn.turnId,o=i.data.turn.turnNumber;else{a=r??crypto.randomUUID();let t=(this.syntheticTurnCounters.get(e)??0)+1;this.syntheticTurnCounters.set(e,t),o=t}let s=new S({sessionId:e,agentIds:t,turnId:a,turnNumber:o,initiator:n});return this.activeTurns.set(e,s),this.usageAccumulators.set(s.turnId,new Jt),s}discardActiveTurn(e){this.clearActiveRoutingTurn(e)&&(this.usageAccumulators.delete(e.turnId),this.assistantStoredCounts.delete(e.turnId))}async failActiveTurnSetup(e,t){if(this.activeTurns.get(e.sessionId)?.turnId===e.turnId&&!(e.messageIds.length>0||e.hasPendingMessageAppends)){try{await this.bus.requestOptional(w.complete,{turnId:e.turnId,status:`error`,expectedStatus:`active`,error:t})}catch(t){console.error(`[SessionTurnManager] Failed to mark setup-failed turn ${e.turnId} as error:`,t)}this.discardActiveTurn(e)}}clearActiveRoutingTurn(e){return this.activeTurns.get(e.sessionId)?.turnId===e.turnId?(this.activeTurns.delete(e.sessionId),!0):!1}registerCompletionHandlers(e){this.cleanups.push(this.bus.on(k.usage,e=>{let{agentId:t,turnId:n,inputTokens:r,outputTokens:i}=e.payload;if(!n){console.warn(`[SessionTurnManager] Dropping usage event without turnId (agentId=${t}).`);return}let a=this.findTurnForUsage(n);if(!a){console.warn(`[SessionTurnManager] Dropping usage for inactive turn ${n} (agentId=${t}).`);return}if(!a.hasAgent(t)){console.warn(`[SessionTurnManager] Dropping usage for turn ${n}: agent ${t} is not part of the turn.`);return}if(this.completingTurnIds.has(a.turnId)){this.bufferUsageDuringCompletion(a.turnId,{agentId:t,inputTokens:r,outputTokens:i});return}this.usageAccumulators.get(a.turnId)?.add({agentId:t,inputTokens:r,outputTokens:i})})),this.cleanups.push(this.bus.on(k.complete,async t=>{let{agentId:n,outcome:r,error:i,turnId:a}=t.payload,o=r!==`error`;await this.handleAgentCompletion(n,o,o?void 0:i,e,a)}))}async completeTurn(e,t){if(this.completingTurnIds.has(e.turnId))return;this.completingTurnIds.add(e.turnId),this.completingTurns.set(e.turnId,e);let n=this.usageAccumulators.get(e.turnId),r=n?.snapshot(),i=this.pendingTerminalCompletions.get(e.turnId)??!1;try{if(!this.pendingTerminalCompletions.has(e.turnId)){let a=await this.persistTurnCompletion(e,t,r,`active`);if(i=a.handled,!a.transitioned){this.clearActiveRoutingTurn(e),this.clearCompletionState(e,n);return}this.pendingTerminalCompletions.set(e.turnId,i),r=await this.flushBufferedUsageDuringCompletion(e,t,n,r)}}catch(t){throw this.completingTurnIds.delete(e.turnId),this.completingTurns.delete(e.turnId),console.error(`[SessionTurnManager] Failed to persist completion for turn ${e.turnId}:`,t),t}this.clearActiveRoutingTurn(e);let a=!1;try{i&&await this.awaitAssistantPersistence(e),r=await this.flushBufferedUsageDuringCompletion(e,t,n,r);let o={sessionId:e.sessionId,turnId:e.turnId,turnNumber:e.turnNumber,success:t.success,error:t.errors.length>0?t.errors.join(`; `):void 0,...r!==void 0&&{usage:r},initiator:e.initiator,ingestionMarker:`live`};await u(this.bus,{type:`turn.completed`,sessionId:e.sessionId,eventId:`turn.completed:${e.turnId}`,payload:o}),a=!0,await this.bus.emit(j.turn.completed,o)}catch(t){throw a?this.clearCompletionState(e,n):this.completingTurnIds.delete(e.turnId),t}this.clearCompletionState(e,n)}clearCompletionState(e,t){t?.clear(),this.usageAccumulators.delete(e.turnId),this.bufferedUsageDuringCompletion.delete(e.turnId),this.assistantStoredCounts.delete(e.turnId),this.completingTurns.delete(e.turnId),this.completingTurnIds.delete(e.turnId),this.pendingTerminalCompletions.delete(e.turnId)}getActiveTurn(e){return this.activeTurns.get(e)}getActiveTurnsMap(){return this.activeTurns}findActiveTurnByTurnId(e){for(let t of this.activeTurns.values())if(t.turnId===e)return t}destroy(){for(let e of this.cleanups)e();this.cleanups.length=0,this.activeTurns.clear(),this.usageAccumulators.clear(),this.completingTurnIds.clear(),this.completingTurns.clear(),this.pendingTerminalCompletions.clear(),this.bufferedUsageDuringCompletion.clear(),this.syntheticTurnCounters.clear();for(let e of[...this.assistantPersistenceWaiters.values()])e.settle();this.assistantPersistenceWaiters.clear(),this.assistantStoredCounts.clear()}async handleAgentCompletion(e,t,n,r,i){let a=i?this.findTurnForCompletion(i):this.findTurnForUncorrelatedCompletion(e);if(!a||!a.hasAgent(e)||this.hasTerminalOutcome(a,e))return;let o=t?a.markAgentCompleted(e):a.markAgentErrored(e,n??`Unknown error`);for(let r of a.messageIds)await this.bus.emit(j.user_message.completed,{sessionId:a.sessionId,turnId:a.turnId,turnNumber:a.turnNumber,messageId:r,agentId:e,outcome:t?`completed`:`error`,error:n});o.turnComplete&&await r(a,o.result)}bufferUsageDuringCompletion(e,t){let n=this.bufferedUsageDuringCompletion.get(e)??[];n.push(t),this.bufferedUsageDuringCompletion.set(e,n)}findTurnForUsage(e){return this.findActiveTurnByTurnId(e)??this.completingTurns.get(e)}findTurnForCompletion(e){return this.findActiveTurnByTurnId(e)??this.completingTurns.get(e)}findTurnForUncorrelatedCompletion(e){for(let t of this.completingTurns.values())if(t.hasAgent(e))return;return y(this.activeTurns,e)}hasTerminalOutcome(e,t){return e.completedAgents.has(t)||e.erroredAgents.has(t)}async persistTurnCompletion(e,t,n,r){let i=await this.bus.requestOptional(w.complete,{turnId:e.turnId,status:t.success?`completed`:`error`,...r!==void 0&&{expectedStatus:r},error:t.errors.length>0?t.errors.join(`; `):void 0,...n!==void 0&&{usage:n}});return{handled:i.handled,transitioned:i.handled?i.data.transitioned:!0}}async flushBufferedUsageDuringCompletion(e,t,n,r){let i=this.bufferedUsageDuringCompletion.get(e.turnId)??[];if(i.length===0)return r;for(let e of i)n?.add(e);this.bufferedUsageDuringCompletion.delete(e.turnId);let a=n?.snapshot()??r;try{await this.persistTurnCompletion(e,t,a)}catch(t){console.warn(`[SessionTurnManager] Failed to persist buffered usage for turn ${e.turnId}:`,t)}return a}registerAssistantPersistenceCounter(){this.cleanups.push(this.bus.on(E.stored,e=>{let{message:t}=e.payload;if(t.role!==`assistant`||!t.turnId)return;let n=t.turnId;if(!this.assistantStoredCounts.has(n)&&this.assistantStoredCounts.size>=1024){let e=this.assistantStoredCounts.keys().next().value;e!==void 0&&this.assistantStoredCounts.delete(e)}let r=(this.assistantStoredCounts.get(n)??0)+1;this.assistantStoredCounts.set(n,r);let i=this.assistantPersistenceWaiters.get(n);i&&r>=i.expected&&i.settle()}))}async awaitAssistantPersistence(e){let t=e.agentIds.length;if(t<=0||(this.assistantStoredCounts.get(e.turnId)??0)>=t)return;let n=await this.bus.requestOptional(E.getByTurn,{turnId:e.turnId});n.handled&&(n.data.messages.filter(e=>e.role===`assistant`).length>=t||(this.assistantStoredCounts.get(e.turnId)??0)>=t||await new Promise(n=>{let r=()=>{clearTimeout(i),this.assistantPersistenceWaiters.delete(e.turnId),n()},i=setTimeout(r,1500);this.assistantPersistenceWaiters.set(e.turnId,{expected:t,settle:r}),(this.assistantStoredCounts.get(e.turnId)??0)>=t&&r()}))}},Xt=class{bus;turnManager;adapterRegistry;machineId;cleanups=[];constructor(e=se,t){this.bus=e,this.machineId=t,this.turnManager=new Yt(e),this.adapterRegistry=new _t(e),this.cleanups.push(b(this.bus,this.turnManager.getActiveTurnsMap(),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=te(o,e.payload.extensionId),u=e.payload.sessionContext?ve.parse(e.payload.sessionContext):void 0,{sessionId:p,session:g}=await v(this.bus,t,u,e.payload.originWindowId,this.machineId);if(g.agents.length===0){let e=await this.resolveInitialAdapterSelection(a,p,n,u),t=await this.resolveAdapterName(e,p),r=h(e.adapterId)??await this.adapterRegistry.resolveAvailable(t),i=e.providerConfigId===void 0?void 0:await ne(this.bus,e.providerConfigId),o=e.providerConfigId??i?.providerConfigId;i!==void 0&&await re(this.bus,i);let s=await this.bus.request(O.startAgent,{adapterId:r,sessionId:p,role:`lead`,...i!==void 0&&{providerContext:i},...e.model!==void 0&&{model:e.model},...e.reasoningEffort!==void 0&&{reasoningEffort:e.reasoningEffort},...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},...e.env!==void 0&&{env:e.env},...e.mcpSessionContext!==void 0&&{mcpSessionContext:e.mcpSessionContext},...e.allowedDirectories!==void 0&&{allowedDirectories:e.allowedDirectories},...e.adapterConfig!==void 0&&{adapterConfig:e.adapterConfig},...u!==void 0&&{sessionContext:u}});if(!s.success)throw Error(`[SessionOrchestrator.sendMessage] Failed to start agent (sessionId=${p}, adapterName=${t}): ${s.message}`);let c=Date.now();g.agents.push({agentId:s.agentId,adapterId:s.adapterId,adapterName:t,sessionId:p,role:`lead`,status:`idle`,...o!==void 0&&{providerConfigId:o},createdAt:c,lastActivityAt:c}),g.leadAgentId=s.agentId,o!==void 0&&await this.bus.requestOptional(l.updateRuntime,{agentId:s.agentId,providerConfigId:o})}let y=_(g,r);if(y.length===0)throw Error(`[SessionOrchestrator.sendMessage] No valid target agents found (sessionId=${p})`);let b=new Set;for(let e of y){let t=await this.bus.requestOptional(O.getAgent,{agentId:e.agentId,adapterId:e.adapterId});t.handled&&t.data.agent===null&&b.add(e.agentId)}let S;if(b.size>0){S=await d(this.bus,g);for(let e of y)b.has(e.agentId)&&await this.bus.requestOptional(O.rehydrateAgent,{agentId:e.agentId,adapterId:e.adapterId})}let C=this.turnManager.getActiveTurn(p);C||=await this.turnManager.createTurn(p,y.map(e=>e.agentId),c,e.payload.turnId);let w=crypto.randomUUID(),T=x(n);C.claimMessageAppend(w);try{if(!(await this.bus.requestOptional(E.append,{message:{messageId:w,turnId:C.turnId,sessionId:p,role:`user`,contentText:m(n),blocks:T,timestamp:Date.now(),...s!==void 0&&{origin:s}}})).handled)throw Error(`Message storage append handler is not registered`)}catch(e){throw console.warn(`[SessionOrchestrator] Failed to store user message`,{sessionId:p,messageId:w,error:e instanceof Error?e.message:String(e)}),C.releaseMessageAppend(w),await this.turnManager.failActiveTurnSetup(C,`user-message-persistence-failed`),e}let ie=C.messageIds.length===0;C.addMessage(w);for(let e of y)this.bus.requestOptional(H.record,{messageId:w,agentId:e.agentId,status:`sent`,timestamp:Date.now()}).catch(t=>{console.warn(`[SessionOrchestrator] Failed to record message routing`,{sessionId:p,messageId:w,agentId:e.agentId,error:t instanceof Error?t.message:String(t)})});ie&&await f(this.bus,{sessionId:p,turnId:C.turnId,turnNumber:C.turnNumber,messageId:w,agentIds:[...C.agentIds],initiator:C.initiator,ingestionMarker:`live`}),await this.bus.emit(j.user_message.sent,{sessionId:p,turnId:C.turnId,turnNumber:C.turnNumber,messageId:w,content:n,agentIds:y.map(e=>e.agentId),...o!==void 0&&{source:o},...s!==void 0&&{origin:s}});let ae=S?{...u,...S}:u;await ee(this.bus,g,y,n,w,C,i,this.completeTurn.bind(this),ae,e.payload.responseSchema),e.setResult({messageId:w,turnId:C.turnId,sessionId:p})}))}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()}async resolveAdapterName(e,t){let n=h(e.adapterName),r=h(e.adapterId);if(!n&&!r)throw Error(`[SessionOrchestrator.sendMessage] adapterName or adapterId required when session has no agents (sessionId=${t})`);return r?g(this.bus,r,n,`[SessionOrchestrator.sendMessage] (sessionId=${t}) `):n}async resolveInitialAdapterSelection(e,t,n,r){if(!e)throw Error(`[SessionOrchestrator.sendMessage] agent selection required when session has no agents (sessionId=${t})`);if(e.kind===`adapter`)return e;if(e.kind===`canonical-model`)return await this.resolveCanonicalModelSelection(e,t,n,r);throw Error(`[SessionOrchestrator.sendMessage] agent with kind: 'adapter' or 'canonical-model' required when session has no agents (sessionId=${t})`)}async resolveCanonicalModelSelection(e,t,n,r){let i=De(e.model);if(Ee(i))throw Error(`[SessionOrchestrator.sendMessage] Invalid canonical model "${e.model}" (sessionId=${t}): ${i.message}`);if(i.kind===`virtual`)throw Error(`[SessionOrchestrator.sendMessage] Virtual canonical models require a host resolver (sessionId=${t})`);let a=await this.bus.request(ue.resolve,{parsed:i,context:{sessionId:t,promptText:m(n),...r===void 0?{}:{sessionContext:r}}});return{...e,...a,kind:`adapter`,providerConfigId:e.providerConfigId??a.providerConfigId}}},Zt=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 ce||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 Qt(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 $t(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}r.status=`active`,r.lastActivityAt=Date.now(),await t.request(T.set,{sessionId:n,session:r}),await t.emit(j.resumed,{sessionId:n}),e.setResult({success:!0})})}function en(e){return e.on(ae.listActions,e=>{let t=s.getAll().map(e=>({id:e.id,label:e.label,description:e.description,category:e.category}));e.setResult({actions:t})})}const tn=[{actionId:`strip-reasoning`},{actionId:`strip-tool-outputs`}];function nn(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 rn=class{bus;agentToSession=new Map;agentContext=new Map;agentBlocks=new Map;cleanups=[];constructor(e=se){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),this.agentContext.delete(t),this.agentBlocks.delete(t))}))}registerTurnTrackingHandlers(){this.cleanups.push(this.bus.on(j.turn.started,e=>{let{sessionId:t,turnId:n,agentIds:r}=e.payload;for(let e of r){let r=this.agentContext.get(e);this.agentContext.set(e,{...r,sessionId:t,turnId:n}),this.agentBlocks.set(e,[])}})),this.cleanups.push(this.bus.on(j.user_message.acknowledged,e=>{let t=this.agentContext.get(e.payload.agentId);this.agentContext.set(e.payload.agentId,{...t,sessionId:e.payload.sessionId,turnId:e.payload.turnId}),this.agentBlocks.has(e.payload.agentId)||this.agentBlocks.set(e.payload.agentId,[])}))}registerBlockAccumulationHandlers(){this.cleanups.push(this.bus.on(k.message,e=>{let t=this.agentBlocks.get(e.payload.agentId);t&&t.push({type:`text`,content:e.payload.content})})),this.cleanups.push(this.bus.on(k.reasoning,e=>{let t=this.agentBlocks.get(e.payload.agentId);t&&t.push({type:`reasoning`,content:e.payload.content})})),this.cleanups.push(this.bus.on(k.tool.use,e=>{let t=this.agentBlocks.get(e.payload.agentId);t&&t.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.agentBlocks.get(e.payload.agentId);if(t){let n=e.payload.result,r=typeof n==`string`?n:JSON.stringify(n);t.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){this.agentBlocks.delete(e.payload.agentId);return}let{agentId:t,adapterSessionId:n,outcome:r,error:i,message:a,structuredOutputValidation:o}=e.payload;await this.storeAssistantMessage(t,r===`error`?void 0:n,r===`error`?i:void 0,o===void 0?void 0:{content:a})}))}async storeAssistantMessage(e,t,n,r){let i=this.agentContext.get(e);if(!i?.turnId)return;let a=r===void 0?this.agentBlocks.get(e)??[]:r.content===void 0?[]:[{type:`text`,content:r.content}];if(a.length===0&&!n){this.agentBlocks.delete(e);return}let o=a.filter(e=>e.type===`text`).map(e=>e.content).join(`
2
- `),s=crypto.randomUUID();try{if(!(await this.bus.requestOptional(E.append,{message:{messageId:s,turnId:i.turnId,sessionId:i.sessionId,role:`assistant`,contentText:o||(n?`[Error: ${n}]`:``),blocks:a,agentId:e,adapterSessionId:t,timestamp:Date.now()}})).handled){this.agentBlocks.delete(e);return}let r=await this.bus.requestOptional(E.getByTurn,{turnId:i.turnId});if(r.handled){let t=r.data.messages.find(e=>e.role===`user`);t&&await this.bus.requestOptional(H.record,{messageId:t.messageId,agentId:e,status:`completed`,timestamp:Date.now(),error:n})}}catch(e){console.error(`[SessionBridge] Failed to store assistant message:`,e)}this.agentBlocks.delete(e)}destroy(){for(let e of this.cleanups)e();this.cleanups.length=0,this.agentToSession.clear(),this.agentContext.clear(),this.agentBlocks.clear()}},an=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 on(e,t,n,r,i,a){return new an(e,t,n,r,i,a)}function sn(e,t){let n=e?.clientAccountId??null,r=t.clientAccountId??null;return!r||n===r?null:{previousClientAccountId:n,clientAccountId:r}}function U(e,t){let n=t.lastClientIdentityObservation;if(t.clientAccountId!==void 0&&!n)throw Error(`Session "${t.sessionId}" cannot persist clientAccountId without lastClientIdentityObservation`);if(t.clientAccountId!==void 0&&t.clientId===void 0)throw Error(`Session "${t.sessionId}" cannot persist clientAccountId without clientId`);if(n&&t.clientId!==void 0&&t.clientId!==n.clientId)throw Error(`Session "${t.sessionId}" cannot persist clientId "${t.clientId}" because lastClientIdentityObservation belongs to "${n.clientId}"`)}function W(e,t,n){let r=sn(t,n);if(!r)return;let i=n.lastClientIdentityObservation;if(!i)return;let a={sessionId:n.sessionId,clientId:i.clientId,previousClientAccountId:r.previousClientAccountId,clientAccountId:r.clientAccountId,source:i.source,observedAt:i.observedAt,lastClientIdentityObservation:structuredClone(i)};queueMicrotask(()=>{Promise.resolve().then(()=>e.emit(j.clientAccount.changed,a)).catch(e=>{console.error(`[SessionStorage] Failed to emit session.clientAccount.changed:`,e)})})}function cn(e){switch(e){case`fork`:return`fork`;case`subagent`:return`subagent`;case`compress`:return`compress`;case`root`:return;default:return}}function ln(e){switch(e.kind){case`root`:return{kind:`root`,parentAdapterSessionId:null,forkPointMessageId:null};case`fork`:return{kind:`fork`,parentAdapterSessionId:e.parentAdapterSessionId,forkPointMessageId:e.forkPointMessageId};case`subagent`:return{kind:`subagent`,parentAdapterSessionId:e.parentAdapterSessionId,forkPointMessageId:null};case`compress`:return{kind:`compress`,parentAdapterSessionId:e.parentAdapterSessionId,forkPointMessageId:null};default:return e.kind}}function un(){let e=0;return()=>{let t=Date.now();return e=t>e?t:e+1,e}}const dn=un();function fn(e,t){return e===`imported`||t===`imported`?`imported`:e===`tracking`||t===`tracking`?`tracking`:e??t??`discovered`}function pn(e,t,n){n!==void 0&&(e[t]=n)}function mn(e,t,n){let r=e.startedAt??n;return{sessionId:t,createdAt:r,lastActivityAt:r,agents:[],status:`discovered`,branchKind:cn(e.kind),adapterName:e.source,adapterSessionId:e.externalSessionId,adapterId:e.adapterId,clientId:e.clientId,isOrchestrated:!1,isImported:!0,title:e.title??void 0,targetWorkingDirectory:e.cwd??void 0,source:e.source,parentExternalSessionId:e.parentAdapterSessionId??void 0,logFilePath:e.logFilePath??void 0,discoveredAt:n,importStatus:e.importStatus??`discovered`,forkPointMessageId:e.forkPointMessageId??void 0,metadata:e.metadata,lastClientIdentityObservation:e.lastClientIdentityObservation,isSidechain:e.isSidechain,machineId:e.machineId??void 0}}function hn(e,t,n){let r=fn(e.importStatus,t.importStatus);r===`discovered`&&(e.status=`discovered`),e.isImported=!0,e.importStatus=r,e.adapterName??=t.source,e.adapterSessionId??=t.externalSessionId,e.source??=t.source,e.discoveredAt??=n}function gn(e,t){t.logFilePath!==void 0&&t.logFilePath!==null&&(e.logFilePath??=t.logFilePath),t.cwd!==null&&(e.targetWorkingDirectory=t.cwd),t.title!==void 0&&t.title!==null&&(e.title=t.title),e.forkPointMessageId===void 0&&t.forkPointMessageId!==null&&(e.forkPointMessageId=t.forkPointMessageId),e.parentExternalSessionId===void 0&&t.parentAdapterSessionId!==null&&(e.parentExternalSessionId=t.parentAdapterSessionId);let n=cn(t.kind);n!==void 0&&e.branchKind===void 0&&(e.branchKind=n),pn(e,`adapterId`,t.adapterId),pn(e,`clientId`,t.clientId),t.metadata!==void 0&&(e.metadata={...t.metadata,...e.metadata??{}}),pn(e,`isSidechain`,t.isSidechain),pn(e,`lastClientIdentityObservation`,t.lastClientIdentityObservation),t.machineId===null?e.machineId=void 0:t.machineId!==void 0&&(e.machineId??=t.machineId)}function _n(e,t,n){t.startedAt!==void 0&&((n===void 0||e.createdAt===n)&&(e.createdAt=t.startedAt),(n===void 0||e.lastActivityAt===n)&&(e.lastActivityAt=t.startedAt))}function vn(e,t,n){let r=e.discoveredAt;hn(e,t,n),gn(e,t),_n(e,t,r)}function yn(e,t){if(t.parentExternalSessionId===void 0)return;let n=t.source??t.adapterName,r=Array.from(e.values()).find(e=>e.adapterSessionId===t.parentExternalSessionId&&(e.source??e.adapterName)===n);r&&(t.parentSessionId=r.sessionId,t.rootSessionId=r.rootSessionId??r.sessionId)}function bn(e,t,n){if(n){e.emit(j.created,{sessionId:t.sessionId,parentSessionId:t.parentSessionId??null,branchKind:t.branchKind??null,createdAt:t.createdAt}).catch(e=>console.error(`[SessionStorage] Failed to emit session.created:`,e));return}e.emit(j.updated,{sessionId:t.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}function xn(e){let t=0,n=0,r=0;for(let i of e)i.importStatus===`imported`&&(t+=1),i.importStatus===`tracking`&&(n+=1),i.importStatus===`discovered`&&(r+=1);return{total:e.length,imported:t,tracking:n,discovered:r}}function Sn(e,t,n){e.emit(j.importStatusChanged,{sessionId:t.sessionId,importStatus:n}).catch(e=>console.error(`[SessionStorage] Failed to emit session.importStatusChanged:`,e));let r=t.source??t.adapterName;n!==`imported`||t.adapterSessionId===void 0||r===void 0||e.emit(j.import.completed,{sessionId:t.sessionId,adapterSessionId:t.adapterSessionId,source:r}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}function Cn(e){let{bus:t,store:n,cloneSession:r,populateAgents:i}=e;return[t.on(T.importUpsert,e=>{let r=e.payload,i=Array.from(n.values()).find(e=>e.adapterSessionId===r.externalSessionId&&e.source===r.source),a=dn(),o=i===void 0,s=i??mn(r,crypto.randomUUID(),a);i?(vn(i,r,a),i.parentExternalSessionId!==void 0&&i.parentSessionId===void 0&&yn(n,i)):(n.set(s.sessionId,s),yn(n,s)),bn(t,s,o),e.setResult({sessionId:s.sessionId,created:o})}),t.on(T.getByLogFilePath,async e=>{let a=Array.from(n.values()).find(t=>t.logFilePath===e.payload.logFilePath);if(!a){e.setResult({session:null});return}let o=await i(t,a.sessionId);e.setResult({session:{...r(a),agents:o}})}),t.on(T.listImported,async e=>{let{source:a,importStatus:o}=e.payload,s=Array.from(n.values()).filter(e=>e.isImported===!0).filter(e=>a===void 0||e.source===a).filter(e=>o===void 0||e.importStatus===o).sort((e,t)=>t.createdAt-e.createdAt),c=await Promise.all(s.map(async e=>({...r(e),agents:await i(t,e.sessionId)})));e.setResult({sessions:c})}),t.on(T.countBySource,e=>{let t=Array.from(n.values()).filter(t=>t.isImported===!0&&t.source===e.payload.source);e.setResult(xn(t))}),t.on(T.updateImportStatus,e=>{let r=n.get(e.payload.sessionId),i=e.payload.importStatus;if(!r||r.importStatus===i){e.setResult({success:!1});return}r.importStatus=i,i===`imported`&&r.status===`discovered`&&(r.status=`active`),e.setResult({success:!0}),Sn(t,r,i)})]}async function wn(e,t){let n=await e.requestOptional(l.listBySession,{sessionId:t});return n.handled?n.data.agents:[]}function G(e){return structuredClone(e)}function K(e,t,n){n!==void 0&&(e[t]=n)}function Tn(e,t,n){n!==void 0&&(e[t]=n??void 0)}function En(e,t){let n=e;return t.status!==`all`&&(n=n.filter(e=>e.status===t.status)),t.executionTargetId!==void 0&&(n=n.filter(e=>e.executionTargetId===t.executionTargetId)),n}function Dn(e,t){K(e,`status`,t.status),K(e,`parentSessionId`,t.parentSessionId),K(e,`contextInheritance`,t.contextInheritance),K(e,`rootSessionId`,t.rootSessionId),K(e,`forkPointMessageId`,t.forkPointMessageId),K(e,`branchKind`,t.branchKind),K(e,`isOrchestrated`,t.isOrchestrated),K(e,`clientId`,t.clientId),K(e,`clientAccountId`,t.clientAccountId),K(e,`lastClientIdentityObservation`,t.lastClientIdentityObservation),K(e,`title`,t.title),K(e,`targetWorkingDirectory`,t.targetWorkingDirectory),K(e,`createdAt`,t.createdAt),K(e,`lastActivityAt`,t.lastActivityAt),K(e,`machineId`,t.machineId),Tn(e,`executionTargetId`,t.executionTargetId),Tn(e,`approvalPolicyOverride`,t.approvalPolicyOverride),Tn(e,`metadata`,t.metadata),t.spawningToolCallId===null?e.spawningToolCallId=void 0:t.spawningToolCallId!==void 0&&e.spawningToolCallId===void 0&&(e.spawningToolCallId=t.spawningToolCallId)}function On(e,t){return e.on(T.list,async n=>{let{status:r=`all`,limit:i,offset:a=0,includePreview:o=!1,executionTargetId:s}=n.payload,c=En(Array.from(t.values()),{status:r,executionTargetId:s});c.sort((e,t)=>t.lastActivityAt-e.lastActivityAt);let l=c.length;i!==void 0&&(c=c.slice(a,a+i));let u=await Promise.all(c.map(async t=>({...G(t),agents:await wn(e,t.sessionId)}))),d=o?u.map(e=>({...e,preview:{messageCount:0,firstUserMessage:null}})):u;n.setResult({sessions:d,total:l})})}function kn(e,t){return e.on(T.update,async n=>{let r=structuredClone(Se.request.parse(n.payload)),i=t.get(r.sessionId);if(!i){n.setResult({success:!1,clientAccountChanged:!1});return}let a=G(i);U(a,{sessionId:i.sessionId,clientId:r.clientId??i.clientId,clientAccountId:r.clientAccountId??i.clientAccountId,lastClientIdentityObservation:r.lastClientIdentityObservation??i.lastClientIdentityObservation}),Dn(i,r),n.setResult({success:!0,clientAccountChanged:(a.clientAccountId??null)!==(i.clientAccountId??null)}),W(e,a,G(i))})}function An(e){let t=new Map,n=[];return n.push(e.on(T.get,async n=>{let r=t.get(n.payload.sessionId);if(!r){n.setResult({session:null});return}let i=await wn(e,n.payload.sessionId);n.setResult({session:{...G(r),agents:i}})})),n.push(e.on(T.set,async n=>{let{sessionId:r,session:i,ifAbsent:a}=xe.parse(n.payload);if(a&&t.has(r)){n.setResult({success:!1,clientAccountChanged:!1});return}let o=structuredClone(i),s=t.get(r)??null,c=s?G(s):null;U(s,o),t.set(r,o),n.setResult({success:!0,clientAccountChanged:(c?.clientAccountId??null)!==(o.clientAccountId??null)}),W(e,c,G(o))})),n.push(e.on(T.delete,async e=>{t.delete(e.payload.sessionId),e.setResult({success:!0}),await e.next()})),n.push(On(e,t)),n.push(e.on(T.getChildren,e=>{let{sessionId:n}=e.payload,r=Array.from(t.values()),i=r.filter(e=>e.parentSessionId===n),a=new Set(r.map(e=>e.parentSessionId).filter(e=>!!e)),o=i.map(e=>({sessionId:e.sessionId,title:e.title??null,forkPointMessageId:e.forkPointMessageId??null,branchKind:e.branchKind??null,messageCount:0,hasChildren:a.has(e.sessionId),spawningToolCallId:e.spawningToolCallId}));e.setResult({children:o})})),n.push(e.on(T.getStatusCounts,e=>{e.payload;let n=Array.from(t.values()),r=n.filter(e=>e.status===`active`).length,i=n.filter(e=>e.status===`closed`).length,a=n.filter(e=>e.status===`archived`).length,o=n.filter(e=>e.status===`discovered`).length;e.setResult({all:r+i+a+o,active:r,closed:i,archived:a,discovered:o})})),n.push(kn(e,t)),n.push(jn(e,t)),n.push(...Cn({bus:e,store:t,populateAgents:wn,cloneSession:G})),()=>n.forEach(e=>e())}function jn(e,t){return e.on(T.getByAdapterSessionId,async n=>{let{adapterSessionId:r,source:i,adapterName:a}=n.payload,o=Array.from(t.values()).filter(e=>e.adapterSessionId!==void 0&&e.adapterSessionId===r&&(i===void 0||e.source===i)&&(a===void 0||e.adapterName===a)),s=o[0];if(o.length!==1||s===void 0){n.setResult({session:null});return}let c=await e.requestOptional(l.listBySession,{sessionId:s.sessionId}),u=c.handled?c.data.agents:[];n.setResult({session:{...G(s),agents:u}})})}const Mn=r.postgres,Nn=t.postgres,q=Re({sessions:n,agents:e},{sessions:Mn,agents:Nn});function Pn(e,t){let n=e?.clientId??null,r=e?.clientAccountId??null,i=e?.lastClientIdentityObservation??null;return F(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 Fn(e){return{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,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?fe.parse(e.compressionMode):void 0}}function In(e){return{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??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 Ln(e){let t;for(let n=e.length-1;n>=0;--n)try{e[n]?.()}catch(e){t??=e}if(t)throw t}function Rn(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.get,async e=>{let[t]=await n.select().from(r).where(L(r.agentId,e.payload.agentId)).limit(1);e.setResult({agent:t?Fn(t):null})})}function zn(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.set,async e=>{let{agent:t}=e.payload,i=In(t),a=await n.insert(r).values(i).onConflictDoUpdate({target:r.agentId,set:i});e.setResult({success:N(a)})})}function Bn(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.delete,async e=>{let t=await n.delete(r).where(L(r.agentId,e.payload.agentId));e.setResult({success:N(t)})})}function Vn(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.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?F(...a):a[0],s=await n.select().from(r).where(o);e.setResult({agents:s.map(Fn)})})}function Hn(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.listBySession,async e=>{let{sessionId:t}=e.payload,i=await n.select().from(r).where(L(r.sessionId,t));e.setResult({agents:i.map(Fn)})})}function Un(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.updateStatus,async e=>{let{agentId:t,status:i}=e.payload,a=Date.now(),o=await n.update(r).set({status:i,lastActivityAt:a}).where(L(r.agentId,t));e.setResult({success:N(o)})})}function Wn(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.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 Gn(e){let{bus:t,db:n}=e,{agents:r}=P(n,q);return t.on(l.updateRuntime,async e=>{let{agentId:t,adapterId:i,adapterSessionId:a,cwd:o,model:s,allowedDirectories:c,providerConfigId:l}=e.payload,u={lastActivityAt:Date.now()};i!==void 0&&(u.adapterId=i),a!==void 0&&(u.adapterSessionId=a),o!==void 0&&(u.cwd=o),s!==void 0&&(u.model=s),c!==void 0&&(u.allowedDirectories=c),l!==void 0&&(u.providerConfigId=l);let d=await n.update(r).set(u).where(L(r.agentId,t));e.setResult({success:N(d)})})}function Kn(e,t){let n={bus:e,db:t},r=[Rn(n),zn(n),Bn(n),Vn(n),Hn(n),Un(n),Wn(n),Gn(n)];return()=>Ln(r)}function J(e){return e??void 0}function qn(e){if(e)try{let t=JSON.parse(e),n=Ze.safeParse(t);return n.success?n.data:void 0}catch{return}}function Jn(e){if(e)try{let t=JSON.parse(e),n=me.safeParse(t);return n.success?n.data:void 0}catch{return}}function Y(e,t){let n=Jn(e.forkTransforms),r=qn(e.lastClientIdentityObservation);return{sessionId:e.sessionId,createdAt:e.createdAt,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:r,isOrchestrated:J(e.isOrchestrated),isImported:J(e.isImported),title:J(e.title),summary:J(e.summary),summaryUpdatedAt:J(e.summaryUpdatedAt),forkTransforms:n,targetWorkingDirectory:J(e.targetWorkingDirectory),executionTargetId:J(e.executionTargetId),agents:t.map(Fn),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),isSidechain:J(e.isSidechain),machineId:J(e.machineId)}}function Yn(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 Xn(e,t,n){if(!n||t.length===0)return{};let{messages:r}=P(e,o),i=e.select({sessionId:r.sessionId,minTimestamp:B`MIN(${r.timestamp})`.as(`min_timestamp`)}).from(r).where(F(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,F(L(r.sessionId,i.sessionId),L(r.timestamp,i.minTimestamp))).where(L(r.role,`user`)),s=new Map;for(let e of a)s.has(e.sessionId)||s.set(e.sessionId,e.preview);let c=await e.select({sessionId:r.sessionId,count:I()}).from(r).where(R(r.sessionId,t)).groupBy(r.sessionId),l=new Map;for(let e of c)l.set(e.sessionId,e.count);return{previewBySession:s,countBySession:l}}function Zn(e,t){return{sessionId:e.sessionId,clientId:t.clientId??e.clientId,clientAccountId:t.clientAccountId??e.clientAccountId,lastClientIdentityObservation:t.lastClientIdentityObservation??e.lastClientIdentityObservation}}function Qn(e){return e.clientId!==void 0||e.clientAccountId!==void 0||e.lastClientIdentityObservation!==void 0}function $n(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=P(n,q);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(F(...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:Y(l,u)})})}function er(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q),{messages:i}=P(n,o);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:I()}).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:I()}).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(F(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})})}const tr=un();function nr(e){return e?JSON.stringify(e):null}function rr(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 ir(e,t){let n=t===`postgres`?B`excluded.metadata || ${e.metadata}`:B`(
15
- SELECT json_group_object(mk.key, json(mk.vjson)) FROM (
16
- ${rr(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
- ${rr(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 ar(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 or(e,t,n,r){return{status:B`
33
- CASE
34
- WHEN COALESCE(${e.importStatus}, excluded.import_status) = 'discovered' THEN excluded.status
35
- ELSE ${e.status}
36
- END
37
- `,isImported:!0,importStatus:B`
38
- CASE
39
- WHEN ${e.importStatus} = 'imported' OR excluded.import_status = 'imported' THEN 'imported'
40
- WHEN ${e.importStatus} = 'tracking' OR excluded.import_status = 'tracking' THEN 'tracking'
41
- ELSE COALESCE(${e.importStatus}, excluded.import_status, 'discovered')
42
- END
43
- `,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:ir(e,n),createdAt:ar(e.createdAt,t,e),lastActivityAt:ar(e.lastActivityAt,t,e)}}function sr(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q),{dialect:i}=Be(n);return t.on(T.importUpsert,async e=>{let{externalSessionId:a,source:o,clientId:s,adapterId:c,cwd:l,logFilePath:u,startedAt:d,title:f,kind:p,parentAdapterSessionId:m,forkPointMessageId:h,metadata:g,lastClientIdentityObservation:_,importStatus:v,isSidechain:ee,machineId:y}=e.payload,te=tr(),b=crypto.randomUUID(),x=d??te,S=cn(p)??null,C=m??null,[w]=await n.insert(r).values({sessionId:b,status:`discovered`,isImported:!0,importStatus:v??`discovered`,adapterName:o,adapterSessionId:a,source:o??null,clientId:s??null,adapterId:c??null,targetWorkingDirectory:l??null,logFilePath:u??null,forkPointMessageId:h??null,branchKind:S,parentExternalSessionId:C,discoveredAt:te,title:f??null,metadata:g??null,lastClientIdentityObservation:nr(_),isSidechain:ee??null,machineId:y??null,createdAt:x,lastActivityAt:x}).onConflictDoUpdate({target:[r.source,r.adapterSessionId],set:or(r,d,i,y)}).returning({sessionId:r.sessionId,discoveredAt:r.discoveredAt,parentExternalSessionId:r.parentExternalSessionId,parentSessionId:r.parentSessionId}),T=w.sessionId===b;await cr(t,n,w,T,S,x,o),e.setResult({sessionId:w.sessionId,created:T})})}async function cr(e,t,n,r,i,a,o){if(r){let r=await lr(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 lr(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 lr(e,t,n,r){let{sessions:i}=P(e,q);if(n===null||r===void 0)return null;let[a]=await e.select({sessionId:i.sessionId,rootSessionId:i.rootSessionId}).from(i).where(F(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 ur(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=P(n,q);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:Y(a,o)})})}function dr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=P(n,q);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=F(...o),c=await n.select().from(r).where(s).orderBy(We(r.createdAt));if(c.length===0){e.setResult({sessions:[]});return}let l=c.map(e=>e.sessionId),u=Yn(await n.select().from(i).where(R(i.sessionId,l)));e.setResult({sessions:c.map(e=>Y(e,u.get(e.sessionId)??[]))})})}function fr(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q);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(F(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 pr(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q);return t.on(T.updateImportStatus,async e=>{let{sessionId:i,importStatus:a}=e.payload,o=a===`imported`?{status:B`
44
- CASE
45
- WHEN ${r.status} = 'discovered' THEN 'active'
46
- ELSE ${r.status}
47
- END
48
- `}:{},[s]=await n.update(r).set({importStatus:a,...o}).where(F(L(r.sessionId,i),Ye(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 mr(e,t){let n={bus:e,db:t};return[sr(n),ur(n),dr(n),fr(n),pr(n)]}function X(e){return e??null}function hr(e){return e?JSON.stringify(e):null}function gr(e){return{lastActivityAt:e.lastActivityAt,status:e.status,leadAgentId:X(e.leadAgentId),parentSessionId:X(e.parentSessionId),contextInheritance:X(e.contextInheritance),rootSessionId:X(e.rootSessionId),forkPointMessageId:X(e.forkPointMessageId),branchKind:X(e.branchKind),adapterName:X(e.adapterName),adapterSessionId:X(e.adapterSessionId),adapterId:X(e.adapterId),clientId:X(e.clientId),clientAccountId:X(e.clientAccountId),lastClientIdentityObservation:_r(e.lastClientIdentityObservation),isOrchestrated:e.isOrchestrated??!1,isImported:e.isImported??!1,title:X(e.title),summary:X(e.summary),summaryUpdatedAt:X(e.summaryUpdatedAt),forkTransforms:hr(e.forkTransforms),targetWorkingDirectory:X(e.targetWorkingDirectory),executionTargetId:X(e.executionTargetId),approvalPolicyOverride:X(e.approvalPolicyOverride),metadata:X(e.metadata),spawningToolCallId:X(e.spawningToolCallId),source:X(e.source),parentExternalSessionId:X(e.parentExternalSessionId),logFilePath:X(e.logFilePath),discoveredAt:X(e.discoveredAt),importStatus:X(e.importStatus),machineId:X(e.machineId)}}function _r(e){return e?JSON.stringify(e):null}function Z(e,t,n){n!==void 0&&(e[t]=n)}function vr(e,t,n){n!==void 0&&(e[t]=n??null)}function yr(e,t){let n={};return Z(n,`status`,e.status),Z(n,`parentSessionId`,e.parentSessionId),Z(n,`contextInheritance`,e.contextInheritance),Z(n,`rootSessionId`,e.rootSessionId),Z(n,`forkPointMessageId`,e.forkPointMessageId),Z(n,`branchKind`,e.branchKind),Z(n,`isOrchestrated`,e.isOrchestrated),Z(n,`clientId`,e.clientId),Z(n,`clientAccountId`,e.clientAccountId),Z(n,`title`,e.title),Z(n,`targetWorkingDirectory`,e.targetWorkingDirectory),Z(n,`createdAt`,e.createdAt),Z(n,`lastActivityAt`,e.lastActivityAt),Z(n,`machineId`,e.machineId),vr(n,`executionTargetId`,e.executionTargetId),vr(n,`approvalPolicyOverride`,e.approvalPolicyOverride),vr(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=_r(e.lastClientIdentityObservation)),n}function br(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=P(n,q);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:Y(t,a)})})}function xr(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q);return t.on(T.set,async e=>{let{sessionId:i,session:a,ifAbsent:o}=xe.parse(e.payload),s=gr(a);if(o){U(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&&W(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?Y(o,[]):null;if(U(c,a),N(await n.insert(r).values({sessionId:i,createdAt:a.createdAt,...s}).onConflictDoUpdate({target:r.sessionId,set:s,setWhere:Pn(o,r)}))){e.setResult({success:!0,clientAccountChanged:(c?.clientAccountId??null)!==(a.clientAccountId??null)}),W(t,c,a);return}}throw Error(`Failed to write session "${i}" with a stable client-account baseline`)})}function Sr(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q);return t.on(T.delete,async e=>{await n.delete(r).where(L(r.sessionId,e.payload.sessionId)),e.setResult({success:!0})})}function Cr(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q);return t.on(T.update,async e=>{let i=Se.request.parse(e.payload),{sessionId:a}=i,o=yr(i,r),s=Qn(i);if(Object.keys(o).length===0){e.setResult({success:!0,clientAccountChanged:!1});return}if(!s){let t=await n.update(r).set(o).where(L(r.sessionId,a));e.setResult({success:N(t),clientAccountChanged:!1});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 c=Y(s,[]),l=Zn(c,i);if(U(c,l),N(await n.update(r).set(o).where(F(L(r.sessionId,a),Pn(s,r))))){e.setResult({success:!0,clientAccountChanged:(c.clientAccountId??null)!==(l.clientAccountId??null)}),W(t,c,l);return}}throw Error(`Failed to update session "${a}" with a stable client-account baseline`)})}function wr(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)),F(...n)}function Tr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=P(n,q);return t.on(T.list,async e=>{let{status:t=`all`,limit:a,offset:o=0,includePreview:s=!1,executionTargetId:c}=e.payload,l=wr({status:t,executionTargetId:c},r),u=l?n.select().from(r).where(l):n.select().from(r),d=a===void 0?await u.orderBy(We(r.lastActivityAt)):await u.orderBy(We(r.lastActivityAt)).limit(a).offset(o),[f]=await(l?n.select({count:I()}).from(r).where(l):n.select({count:I()}).from(r)),p=f?.count??0;if(d.length===0){e.setResult({sessions:[],total:p});return}let m=d.map(e=>e.sessionId),h=Yn(await n.select().from(i).where(R(i.sessionId,m))),{previewBySession:g,countBySession:_}=await Xn(n,m,s),v=d.map(e=>{let t=Y(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 Er(e){let{bus:t,db:n}=e,{sessions:r}=P(n,q);return t.on(T.getStatusCounts,async e=>{e.payload;let t=await n.select({status:r.status,count:I()}).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 Dr(e,t){let n={bus:e,db:t},r=[br(n),xr(n),Sr(n),Cr(n),Tr(n),er(n),$n(n),Er(n),...mr(e,t)];return()=>r.forEach(e=>e())}function Or(e,t){let{adapterId:n,adapterSessionId:r,cwd:i,model:a,allowedDirectories:o,providerConfigId:s}=t;return n===void 0&&r===void 0&&i===void 0&&a===void 0&&o===void 0&&s===void 0?!1:(n!==void 0&&(e.adapterId=n),r!==void 0&&(e.adapterSessionId=r),i!==void 0&&(e.cwd=i),a!==void 0&&(e.model=a),o!==void 0&&(e.allowedDirectories=o),s!==void 0&&(e.providerConfigId=s),!0)}function kr(e){let t=new Map,n=[];return n.push(e.on(l.get,e=>{let n=t.get(e.payload.agentId)??null;e.setResult({agent:n})})),n.push(e.on(l.set,e=>{t.set(e.payload.agentId,e.payload.agent),e.setResult({success:!0})})),n.push(e.on(l.delete,e=>{let n=t.delete(e.payload.agentId);e.setResult({success:n})})),n.push(e.on(l.listByAdapter,e=>{let{adapterName:n,status:r}=e.payload,i=Array.from(t.values()).filter(e=>e.adapterName===n);r&&r!==`all`&&(i=i.filter(e=>e.status===r)),e.setResult({agents:i})})),n.push(e.on(l.listBySession,e=>{let n=Array.from(t.values()).filter(t=>t.sessionId===e.payload.sessionId);e.setResult({agents:n})})),n.push(e.on(l.updateStatus,e=>{let n=t.get(e.payload.agentId);if(!n){e.setResult({success:!1});return}n.status=e.payload.status,n.lastActivityAt=Date.now(),e.setResult({success:!0})})),n.push(e.on(l.updateActivity,e=>{let n=t.get(e.payload.agentId);if(!n){e.setResult({success:!1});return}n.lastActivityAt=e.payload.lastActivityAt,e.setResult({success:!0})})),n.push(e.on(l.updateRuntime,e=>{let n=t.get(e.payload.agentId);if(!n){e.setResult({success:!1});return}let{adapterId:r,adapterSessionId:i,cwd:a,model:o,allowedDirectories:s,providerConfigId:c}=e.payload;if(!Or(n,{adapterId:r,adapterSessionId:i,cwd:a,model:o,allowedDirectories:s,providerConfigId:c})){e.setResult({success:!1});return}n.lastActivityAt=Date.now(),e.setResult({success:!0})})),()=>n.forEach(e=>e())}async function Ar(e,t){if(t.length===0)return new Map;let{agents:n}=P(e,q),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 jr(e,t){return He(e).fts.fetchFirstUserMessagePreviews(e,t)}async function Mr(e,t){if(t.length===0)return new Map;let{messages:n}=P(e,o),r=[...new Set(t)],i=await e.select({sessionId:n.sessionId,count:I()}).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 Nr(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function Pr(e){if(e!==null)try{let t=typeof e==`string`?JSON.parse(e):e,n=be.safeParse(t);return n.success?n.data:void 0}catch{return}}function Fr(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,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:Nr(e.fork_transforms),targetWorkingDirectory:e.target_working_directory??void 0,metadata:Pr(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 Ir(e,t){let n=He(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 Ar(t,d),p=await jr(t,d),m=await Mr(t,d),h=l.map(e=>Fr(e,f.get(e.session_id)??[],p,m));e.setResult({sessions:h,total:u})})),()=>r.forEach(e=>e())}async function Lr(e,t){return(await Be(e).all(B`
49
- WITH RECURSIVE ancestors AS (
50
- SELECT session_id, parent_session_id
51
- FROM sessions
52
- WHERE session_id = ${t}
53
-
54
- UNION ALL
55
-
56
- SELECT s.session_id, s.parent_session_id
57
- FROM sessions s
58
- JOIN ancestors a ON s.session_id = a.parent_session_id
59
- )
60
- SELECT session_id FROM ancestors
61
- `)).map(e=>e.session_id)}const Rr=new Map;function zr(e,t){let n=(Rr.get(e)??Promise.resolve()).then(t),r=n.then(()=>void 0,()=>void 0);return Rr.set(e,r),r.then(()=>{Rr.get(e)===r&&Rr.delete(e)}),n}function Br(e,t){return`${e}:${t}`}async function Vr(e,t,n){let r=await e.requestOptional(a.getByIds,{sessionId:t,eventIds:[Br(`turn.completed`,n)]});if(r.handled)return r.data.events.length>0}function Hr(e,t){return zr(`${t.sessionId}${t.turnAnchorId}`,()=>Ur(e,t))}async function Ur(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(w.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 Vr(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 Wr(e,t,u,f??p)),{turnId:u.turnId,turnNumber:u.turnNumber,created:d}}async function Wr(e,t,n,r){let{sessionId:i,status:a,error:o,usage:s,initiator:c,ingestionMarker:l}=t,d={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},f={sessionId:i,turnId:n.turnId,turnNumber:n.turnNumber,success:a===`completed`,error:o,usage:s,initiator:c,ingestionMarker:l};await u(e,{type:`turn.started`,sessionId:i,payload:d,eventId:Br(`turn.started`,n.turnId)}),await u(e,{type:`turn.completed`,sessionId:i,payload:f,eventId:Br(`turn.completed`,n.turnId)}),await e.emit(j.turn.started,d),await e.emit(j.turn.completed,f)}const Q=`observed-session-ingestion-policy`;function Gr(e,t){return e.emit(A.register,{capabilityId:Q,provider:t})}function Kr(e,t){return e.emit(A.unregister,{capabilityId:Q,providerId:t})}const qr=oe(`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:Ce.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:Ce.optional()}),response:D.object({sessionId:D.string(),messageCount:D.number()})}}).subjects;function $(e,t){process.env.MAKAIO_DEBUG===`true`&&console.debug(`[ObservedSessionIngestion] ${e}`,t??{})}function Jr(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 Yr(e){return e.importStatus===`discovered`&&e.clientId!==void 0}function Xr(e){return e.isImported===!0&&e.importStatus===`tracking`&&e.clientId!==void 0}var Zr=class{bus;managedAdapterSessionIds=new Set;importerByClientId=new Map;unresolvedClientIds=new Set;policyProviders=new Map;cleanups=[];constructor(e=se){this.bus=e,this.cleanups.push(this.bus.on(de.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(de.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(de.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(A.register,e=>{let{provider:t}=e.payload;Jr(t)&&this.policyProviders.set(t.id,t)},{filter:{capabilityId:Q}}),this.bus.on(A.unregister,e=>{this.policyProviders.delete(e.payload.providerId)},{filter:{capabilityId:Q}}))}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)){if(this.managedAdapterSessionIds.size>=1e4){let e=this.managedAdapterSessionIds.values().next().value;e!==void 0&&this.managedAdapterSessionIds.delete(e)}this.managedAdapterSessionIds.add(e.adapterSessionId)}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(!Xr(i))return;let a=await this.bus.requestOptional(ge.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(qr.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||this.managedAdapterSessionIds.has(t))return;let n=await this.resolveImporter(e.clientId);if(n===null)return;let r=Qr(e.metadata),i=await this.decideImportStatus({clientId:e.clientId,source:e.source,adapterSessionId:t,adapterName:n.adapterName,...e.cwd===void 0?{}:{cwd:e.cwd},...e.transcriptPath===void 0?{}:{transcriptPath:e.transcriptPath}}),a=e.startMode===`fork`&&e.parentAdapterSessionId!==void 0&&e.parentAdapterSessionId.length>0?e.parentAdapterSessionId:void 0,o=a===void 0?{kind:_e,parentAdapterSessionId:null,forkPointMessageId:null}:{kind:pe,parentAdapterSessionId:a,forkPointMessageId:null};if(!(await this.bus.requestOptional(T.importUpsert,{...o,externalSessionId:t,source:n.adapterName,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:i,...r===void 0?{}:{metadata:r}})).handled){$(`Session storage unavailable; skipped observed-session registration`,{adapterSessionId:t});return}this.managedAdapterSessionIds.has(t)&&await this.reconcileTrackingStub(e.clientId,t)}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(qr.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(qr.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(Yr(t.data.session))return!1;if(t.data.session.importStatus!==`discovered`)return!0}return await this.decideImportStatus(e)===`tracking`}};function Qr(e){if(e===void 0)return;let t=be.safeParse(e);return t.success?t.data:void 0}const $r=ze(`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()})),ei=$r.sqlite,ti=$r.postgres,ni=Re({importCursors:ei},{importCursors:ti});function ri(e,t){let{importCursors:n}=P(t,ni),r=[];return r.push(e.on(Qe.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(Qe.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(Qe.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())}}Ne(`embeddings`,{id:je(`id`).primaryKey({autoIncrement:!0}),entityType:Pe(`entity_type`).notNull(),entityId:Pe(`entity_id`).notNull(),model:Pe(`model`).notNull(),dimensions:je(`dimensions`).notNull(),content:Pe(`content`),embedding:ke(`embedding`,{mode:`buffer`}).notNull(),createdAt:je(`created_at`).notNull()},e=>[Ae(`idx_embeddings_entity`).on(e.entityType,e.entityId),Ae(`idx_embeddings_model`).on(e.model),Fe(`idx_embeddings_unique`).on(e.entityType,e.entityId,e.model)]);function ii(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 ai=class{rawSql;engine;knownTables=new Set;constructor(e){this.rawSql=Be(e),this.engine=Ve(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} (
62
- entity_type TEXT NOT NULL,
63
- entity_id TEXT NOT NULL,
64
- embedding ${i} NOT NULL,
65
- PRIMARY KEY (entity_type, entity_id)
66
- )`),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)
67
- VALUES (${n}, ${r}, ${o})
68
- ON CONFLICT(entity_type, entity_id) DO UPDATE SET
69
- 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=ii(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)}},oi=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 S({sessionId:this.sessionId,agentIds:e.agentIds,turnNumber:e.turnNumber,turnId:e.turnId});return this._turns.push(t),t.addMessage(e.messageId),await f(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 u(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 si(e,t){let{sessions:n}=P(t,q);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(F(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(F(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 ci=new Set([`Agent`,`spawn_subagent`]),li=`[^A-Za-z0-9_-]`;function ui(e){return e.replaceAll(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function di(e,t){return t.test(e)}async function fi(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 pi(e){let t=[];for(let n of e)for(let e of n.blocks)e.type===`tool_call`&&ci.has(e.name)&&t.push({toolCallId:e.toolCallId});return t}function mi(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(di(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 hi(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 gi(e){return[...e].map(e=>{let t=ui(e);return{id:e,pattern:RegExp(`(^|${li})${t}($|${li})`)}})}async function _i(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=gi(new Set([o])),c=(await Promise.all(i.map(async t=>{let n=await fi(e,t.sessionId),r=pi(n);if(r.length===0)return null;let i=mi(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 vi(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 yi(e,c);if(l.size===0)return;let u=await fi(e,a),d=pi(u);if(d.length===0)return;let f=mi(u,gi(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 yi(e,t){return hi(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 bi(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 _i(e,n,i.parentSessionId);return}if(i.branchKind!==`compress`)return;await vi(e,i,r)}catch(e){console.error(`[CompressLineageResolver] Failed to resolve compress lineage`,{payload:t.payload,error:e})}})}function xi(e){return[...e].map(e=>{let t=ui(e);return{id:e,pattern:RegExp(`(^|${li})${t}($|${li})`)}})}async function Si(e,t,n){return hi(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 Ci(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 Si(e,r,i),o=new Set(a.keys());if(o.size===0)return;let s=await fi(e,n),c=pi(s);if(c.length===0)return;let l=mi(s,xi(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 wi(e){return e.on(O.session.discovered,async t=>{let n=ye.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=ln({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 Ti=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{_t as $,Y as A,en as B,jr as C,Dr as D,kr as E,an as F,Yt as G,$t as H,on as I,H as J,qt as K,rn as L,An as M,cn as N,Xn as O,ln as P,Dt as Q,nn as R,Mr as S,Nr as T,Zt as U,Qt as V,Xt as W,Vt as X,Ht as Y,Mt as Z,Kr as _,si as a,Ir as b,ri as c,qr as d,ht as et,Zr as f,Gr as g,Q as h,bi as i,Kn as j,Yn as k,ei as l,Xr as m,wi as n,oi as o,Yr as p,Ut as q,Ci as r,ai as s,Ti as t,nt as tt,$r as u,Hr as v,Fr as w,Ar as x,Lr as y,tn as z};