@makaio/framework 1.0.0-dev-1783439621927 → 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 (111) 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 +106 -167
  4. package/dist/adapters/index.mjs +6 -6
  5. package/dist/adapters/node.d.mts +1 -1
  6. package/dist/adapters/node.mjs +4 -4
  7. package/dist/{base-orchestrator-ODRyDBzu.d.mts → base-orchestrator-J1WKAUkF.d.mts} +24 -3
  8. package/dist/bus/index.mjs +1 -1
  9. package/dist/{client-n0OJiTt1.mjs → client-l1Rq5p6X.mjs} +1 -1
  10. package/dist/clients/index.d.mts +30 -0
  11. package/dist/clients/index.mjs +2 -2
  12. package/dist/contracts/adapter/index.d.mts +2 -2
  13. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  14. package/dist/contracts/artifact/index.d.mts +1 -1
  15. package/dist/contracts/client/index.d.mts +2 -2
  16. package/dist/contracts/client/index.mjs +1 -1
  17. package/dist/contracts/config/index.d.mts +6 -6
  18. package/dist/contracts/extension/index.d.mts +3 -3
  19. package/dist/contracts/facet/index.d.mts +1 -1
  20. package/dist/contracts/harness/index.d.mts +1 -1
  21. package/dist/contracts/index.d.mts +105 -105
  22. package/dist/contracts/index.mjs +1 -1
  23. package/dist/contracts/materialization/index.d.mts +3 -3
  24. package/dist/contracts/provider/index.d.mts +1 -1
  25. package/dist/contracts/session/index.d.mts +2 -2
  26. package/dist/contracts/session/index.mjs +1 -1
  27. package/dist/contracts/shared/index.d.mts +1 -1
  28. package/dist/contracts/variant/index.d.mts +1 -1
  29. package/dist/contracts/workflow/index.d.mts +2 -2
  30. package/dist/{definition-DpkfJi8v.d.mts → definition-DePb3ke-.d.mts} +1 -1
  31. package/dist/{index-BwGfdbI0.d.mts → index-2fK9iSHI.d.mts} +9 -9
  32. package/dist/{index-DTBQOCar.d.mts → index-BMbmoarE.d.mts} +16 -16
  33. package/dist/{index-DmJ-OpTD.d.mts → index-BSprsrul.d.mts} +82 -44
  34. package/dist/{index-D7Fu3375.d.mts → index-BbQpQ1N3.d.mts} +3 -3
  35. package/dist/{index-B5Uczo3R.d.mts → index-C9FCWOhp.d.mts} +28 -28
  36. package/dist/{index-NkNbYFud.d.mts → index-CaerrEDH.d.mts} +1 -1
  37. package/dist/{index-BvjLe_w9.d.mts → index-Cx1Bm6WD.d.mts} +8 -8
  38. package/dist/{index-CwHP8Jxs.d.mts → index-D8wmMJLi.d.mts} +189 -1
  39. package/dist/{index-CYHWOXUm.d.mts → index-DEzdNQum.d.mts} +1 -1
  40. package/dist/{index-BIZeIA5k.d.mts → index-DKaEpPFS.d.mts} +9 -9
  41. package/dist/{index-DS6kxiFl.d.mts → index-DWu3qrwe.d.mts} +29 -29
  42. package/dist/{index-DFK3tpEY.d.mts → index-DZ14azod.d.mts} +79 -16
  43. package/dist/{index-B3fjN5HX.d.mts → index-DZPNuWMc.d.mts} +4 -4
  44. package/dist/{index-C8k2f_E0.d.mts → index-DoEF9LAc.d.mts} +1 -1
  45. package/dist/{index-Cyi7y_aG.d.mts → index-Qd1Qom8M.d.mts} +16 -16
  46. package/dist/{index-Dtb2cVJz.d.mts → index-S7lj2TLp.d.mts} +81 -81
  47. package/dist/kernel/extension/index.d.mts +1 -1
  48. package/dist/kernel/index.d.mts +2 -2
  49. package/dist/kernel/observability/index.d.mts +1 -1
  50. package/dist/{namespace-JFzrlNs4.d.mts → namespace-CZK2ff3B.d.mts} +5 -5
  51. package/dist/{namespace-DRXQyBe0.d.mts → namespace-Ceg3zkt2.d.mts} +24 -0
  52. package/dist/{namespace-BLER-Qom.d.mts → namespace-CfvtDD_U.d.mts} +2 -2
  53. package/dist/{namespace-6sIu5nBI2.d.mts → namespace-D8P8Sxce2.d.mts} +2 -2
  54. package/dist/{namespace-D4Uf5Mw_.d.mts → namespace-Dc94fHZW.d.mts} +18 -18
  55. package/dist/{namespace-CGxFYDlK.d.mts → namespace-DuUCiVmK.d.mts} +26 -26
  56. package/dist/{namespace-C74bbsdZ.d.mts → namespace-j7vFsmYL.d.mts} +2 -2
  57. package/dist/node/transports/index.d.mts +25 -3
  58. package/dist/node/transports/index.mjs +1 -1
  59. package/dist/package.json +1 -1
  60. package/dist/{schemas-CurUbHy4.d.mts → schemas-BemsLc_V.d.mts} +4 -4
  61. package/dist/{schemas-9S9Y9PHT2.d.mts → schemas-Br-rSxPE2.d.mts} +11 -11
  62. package/dist/{schemas-B_t6oOK-.d.mts → schemas-CoFCV42v.d.mts} +2 -2
  63. package/dist/{schemas-DXeGCbJ9.d.mts → schemas-D512XweP.d.mts} +5 -5
  64. package/dist/{schemas-DnmbwE_V.d.mts → schemas-DWfo0wp4.d.mts} +7 -7
  65. package/dist/{schemas-CW6YsPT4.d.mts → schemas-lnE9YoG7.d.mts} +3 -3
  66. package/dist/services/adapter-subsystem/index.d.mts +2 -2
  67. package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
  68. package/dist/services/agent-runtime/index.d.mts +2 -2
  69. package/dist/services/agent-runtime/namespace.d.mts +1 -1
  70. package/dist/services/agent-runtime/schemas.d.mts +1 -1
  71. package/dist/services/context-rules/index.d.mts +6 -6
  72. package/dist/services/filesystem/namespace.d.mts +6 -6
  73. package/dist/services/filesystem/schemas.d.mts +3 -3
  74. package/dist/services/index.d.mts +43 -43
  75. package/dist/services/index.mjs +1 -1
  76. package/dist/services/log-import/index.mjs +2 -2
  77. package/dist/services/preferences/index.d.mts +2 -2
  78. package/dist/services/preferences/schemas.d.mts +1 -1
  79. package/dist/services/preferences/storage-namespace.d.mts +2 -2
  80. package/dist/services/session/index.d.mts +5 -5
  81. package/dist/services/session/index.mjs +1 -1
  82. package/dist/services/session/messages/namespace.d.mts +1 -1
  83. package/dist/services/session/session-events/namespace.d.mts +1 -1
  84. package/dist/services/session/storage/namespace.d.mts +1 -1
  85. package/dist/services/session/testing/index.mjs +1 -1
  86. package/dist/services/settings/namespace.d.mts +8 -8
  87. package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
  88. package/dist/services/subagent-template/index.d.mts +2 -2
  89. package/dist/services/subagent-template/namespace.d.mts +1 -1
  90. package/dist/services/subagent-template/schemas.d.mts +1 -1
  91. package/dist/services/tool-approval/index.mjs +1 -1
  92. package/dist/services/tools/index.mjs +1 -1
  93. package/dist/services/tray-menu/index.d.mts +2 -2
  94. package/dist/services/tray-menu/namespace.d.mts +1 -1
  95. package/dist/services/tray-menu/schemas.d.mts +1 -1
  96. package/dist/session-CX6QDhi2.mjs +76 -0
  97. package/dist/{session-Dp7z5N1d.mjs → session-D5rVMqmE.mjs} +1 -1
  98. package/dist/{session-lineage-C1M7-O3C.d.mts → session-lineage-NBFNVkUE.d.mts} +1 -1
  99. package/dist/{storage-namespace-BvRF22by.d.mts → storage-namespace-Di1A3DMm.d.mts} +10 -10
  100. package/dist/{tool-approval-service-BIbUSuqg.mjs → tool-approval-service-DEiMKTv9.mjs} +1 -1
  101. package/dist/tools-CGFZkB7F.mjs +1 -0
  102. package/dist/{transition-DYorNHZu.d.mts → transition-CmI3q3FA.d.mts} +1 -1
  103. package/dist/{types-9XCB1aPK.d.mts → types-Dhou-Itn.d.mts} +14 -14
  104. package/dist/{types-N_BOtTqt.d.mts → types-VwMx5_lS.d.mts} +31 -1
  105. package/dist/ui-kernel/index.d.mts +4 -4
  106. package/dist/ui-kernel/pages/namespace.d.mts +4 -4
  107. package/dist/ui-kernel/pages/schemas.d.mts +1 -1
  108. package/dist/workflow-engine/index.d.mts +69 -69
  109. package/package.json +1 -1
  110. package/dist/session-CZUrp7gC.mjs +0 -69
  111. package/dist/tools-Yz8XyiwA.mjs +0 -1
@@ -0,0 +1,76 @@
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 ne,y as x,z as S}from"./handlers-B74FvKlA.mjs";import{TurnStorageSubjects as C}from"./services/turn/namespace.mjs";import{SessionStorageSubjects as w}from"./services/session/storage/namespace.mjs";import{r as re,t as ie}from"./provider-context-DC_eq7es.mjs";import{AdapterRuntimeSubjects as ae}from"./services/adapter-runtime/namespace.mjs";import{MessageStorageSubjects as T}from"./services/session/messages/namespace.mjs";import{n as oe}from"./namespace-wke7juzy.mjs";import{z as E}from"zod";import{createBusNamespace as se}from"@makaio/framework/core";import{MakaioBus as D,NoHandlerError as ce,TimeoutError as le}from"@makaio/framework/bus";import{AdapterSubjects as O,AgentSubjects as k,CanonicalModelSubjects as ue,CapabilitySubjects as de,ClientSubjects as fe,CompressionModeSchema as pe,FORK_SESSION_LINEAGE_KIND as me,ForkTransformsSchema as he,MessageRoutingSchema as ge,MessageStorageSubjects as _e,ROOT_SESSION_LINEAGE_KIND as ve,SessionContextSchema as ye,SessionDiscoveredSchema as be,SessionRecordMetadataSchema as xe,SessionStorageSetRequestSchema as Se,SessionStorageUpdateSchema as Ce,SessionSubjects as A,TurnIngestionMarkerSchema as we,compareMessageCursorAsc as Te,compareMessageCursorDesc as Ee,isCanonicalModelParseError as De,messageToCursor as j,parseCanonicalModel as Oe}from"@makaio/framework/contracts";import{BaseService as ke}from"@makaio/framework/service-base";import{blob as Ae,index as je,integer as Me,primaryKey as Ne,sqliteTable as Pe,text as Fe,uniqueIndex as Ie}from"drizzle-orm/sqlite-core";import{index as Le,primaryKey as Re}from"drizzle-orm/pg-core";import{defineDialectSchema as ze,defineDualTable as Be,didAffectRows as M,getRawSqlExecutor as Ve,getStorageEngine as He,resolveSchema as N,resolveStorageEngine as Ue}from"@makaio/framework/storage/drizzle";import{and as P,asc as We,count as F,desc as I,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(A.agent.added,async t=>{let n=await e.requestOptional(w.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(w.set,{sessionId:t.payload.sessionId,session:r}))})}function et(e){return e.on(A.agent.removed,async t=>{let n=await e.requestOptional(w.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(w.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(w.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(w.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(A.turn.await,async e=>{let{sessionId:n,turnId:r,timeoutMs:i}=e.payload,a=new AbortController,o=t.once(A.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(C.get,{turnId:n}),i=r.handled?r.data.turn:null;if(!(i?.sessionId!==t||i.status!==`completed`&&i.status!==`error`))return{sessionId:t,turnId:n,turnNumber:i.turnNumber,success:i.status===`completed`,...i.error!==void 0&&{error:i.error},...i.usage!==void 0&&{usage:i.usage},...i.initiator!==void 0&&{initiator:i.initiator}}}function at(e){let{bus:t}=e;return t.on(A.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(A.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(w.set,{sessionId:h,session:ee,ifAbsent:!0});if(y.handled&&!y.data.success){e.setResult({sessionId:h});return}await t.emit(A.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(A.get,async e=>{let n=await t.requestOptional(w.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(A.list,async e=>{let{status:n,limit:r,offset:i,includePreview:a,executionTargetId:o}=e.payload,s=await t.requestOptional(w.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(A.close,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(w.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(w.set,{sessionId:n,session:i}),await t.emit(A.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(ae.getMachineId,{});return n.handled?n.data.machineId:void 0}function dt(e){let{bus:t}=e;return t.on(A.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(w.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(A.update,async e=>{let{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:a,metadata:o}=e.payload,s=await t.requestOptional(w.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(A.updated,{sessionId:n,changedProperties:e})}e.setResult({success:c})})}function pt(e){let{bus:t}=e;return t.on(A.archive,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(w.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(w.set,{sessionId:n,session:i}),await t.emit(A.archived,{sessionId:n}),e.setResult({success:!0})})}function mt(e){let{bus:t}=e;return t.on(A.purge,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(w.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(w.list,{status:`all`}),s=o.handled?o.data.sessions:[];for(let e of s)e.parentSessionId===n&&await t.requestOptional(w.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(w.delete,{sessionId:n}),await t.emit(A.purged,{sessionId:n}),e.setResult({success:!0,eventsDeleted:l})})}var ht=class extends ke{constructor(e=D){super(e)}async onInit(){for(let e of nt({bus:this.bus}))this.addCleanup(e);this.addCleanup(S(this.bus)),await this.reconcileOrphanedTurns()}async reconcileOrphanedTurns(){let e=await this.bus.requestOptional(C.listActive,{});if(!e.handled)return;let{turns:t}=e.data;for(let e of t)try{let{transitioned:t}=await this.bus.request(C.complete,{turnId:e.turnId,status:`error`,expectedStatus:`active`,error:`process-restart`});if(t){let t={sessionId:e.sessionId,turnId:e.turnId,turnNumber:e.turnNumber,success:!1,error:`process-restart`,ingestionMarker:`live`};await u(this.bus,{type:`turn.completed`,sessionId:e.sessionId,payload:t}),await this.bus.emit(A.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(ae.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(T.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}=N(n,o);return t.on(T.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}=N(n,o);return t.on(T.getBySession,async e=>{let{sessionId:t,limit:i,after:a,includeAfter:o=!1,order:s=`asc`}=e.payload,c=s===`desc`?I:We,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),P(L(r.timestamp,a.timestamp),o?Je(r.messageId,a.messageId):qe(r.messageId,a.messageId))):Ye(Ge(r.timestamp,a.timestamp),P(L(r.timestamp,a.timestamp),o?Ke(r.messageId,a.messageId):Ge(r.messageId,a.messageId)));l=n.select().from(r).where(P(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?j(p[p.length-1]):null;e.setResult({messages:p.map(V),nextCursor:m})})}function xt(e){let{bus:t,db:n}=e,{messages:r}=N(n,o);return t.on(T.getByTurn,async e=>{let{turnId:t}=e.payload,i=await n.select().from(r).where(L(r.turnId,t)).orderBy(We(r.timestamp));e.setResult({messages:i.map(V)})})}function St(e){let{bus:t,db:n}=e,{messages:r}=N(n,o);return t.on(T.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}=N(n,o),i=Ue(n).fts;return t.on(T.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}=N(n,o),i=Ue(n).fts;return t.on(T.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}=N(n,o);return t.on(T.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}=N(n,o);return t.on(T.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(P(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(P(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 Te(j(e),j(t))}function kt(e,t){return Ee(j(e),j(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(T.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(T.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`?Ee(j(e),a):Te(j(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?j(p[p.length-1]):null;e.setResult({messages:p,nextCursor:m})})}function It(e,t,n){return e.on(T.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(T.get,async e=>{e.setResult({message:t.get(e.payload.messageId)??null})})}function Rt(e,t){return e.on(T.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(T.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(w.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=Be(`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=>[Ne({columns:[e.messageId,e.agentId,e.status]}),je(`idx_routing_agent`).on(e.agentId,e.timestamp)],postgres:e=>[Re({columns:[e.messageId,e.agentId,e.status]}),Le(`idx_routing_agent`).on(e.agentId,e.timestamp)]}),Ht=Vt.sqlite,Ut=Xe(`messageRouting`,{schemas:{record:{request:ge,response:E.object({success:E.boolean()})},getByMessage:{request:E.object({messageId:E.string()}),response:E.object({routing:E.array(ge)})},getCompleted:{request:E.object({messageId:E.string()}),response:E.object({agentIds:E.array(E.string())})},isComplete:{request:E.object({messageId:E.string(),targetAgentIds:E.array(E.string())}),response:E.object({complete:E.boolean(),pending:E.array(E.string())})}},extensions:{drizzle:{messageRouting:Ht}}}),H=Ut.subjects,Wt=Vt.postgres,Gt=ze({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}=N(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(P(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(P(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(C.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 x({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(C.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(A.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(A.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(C.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(T.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(T.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=D,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(A.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?ye.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 re(this.bus,e.providerConfigId),o=e.providerConfigId??i?.providerConfigId;i!==void 0&&await ie(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 x;if(b.size>0){x=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 S=this.turnManager.getActiveTurn(p);S||=await this.turnManager.createTurn(p,y.map(e=>e.agentId),c,e.payload.turnId);let C=crypto.randomUUID(),w=ne(n);S.claimMessageAppend(C);try{if(!(await this.bus.requestOptional(T.append,{message:{messageId:C,turnId:S.turnId,sessionId:p,role:`user`,contentText:m(n),blocks:w,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:C,error:e instanceof Error?e.message:String(e)}),S.releaseMessageAppend(C),await this.turnManager.failActiveTurnSetup(S,`user-message-persistence-failed`),e}let ae=S.messageIds.length===0;S.addMessage(C);for(let e of y)this.bus.requestOptional(H.record,{messageId:C,agentId:e.agentId,status:`sent`,timestamp:Date.now()}).catch(t=>{console.warn(`[SessionOrchestrator] Failed to record message routing`,{sessionId:p,messageId:C,agentId:e.agentId,error:t instanceof Error?t.message:String(t)})});ae&&await f(this.bus,{sessionId:p,turnId:S.turnId,turnNumber:S.turnNumber,messageId:C,agentIds:[...S.agentIds],initiator:S.initiator,ingestionMarker:`live`}),await this.bus.emit(A.user_message.sent,{sessionId:p,turnId:S.turnId,turnNumber:S.turnNumber,messageId:C,content:n,agentIds:y.map(e=>e.agentId),...o!==void 0&&{source:o},...s!==void 0&&{origin:s}});let oe=x?{...u,...x}:u;await ee(this.bus,g,y,n,C,S,i,this.completeTurn.bind(this),oe,e.payload.responseSchema),e.setResult({messageId:C,turnId:S.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=Oe(e.model);if(De(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(T.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(A.getStatusCounts,async e=>{e.payload;let{all:n,active:r,closed:i,archived:a,discovered:o}=await t.request(w.getStatusCounts,{});e.setResult({all:n,active:r,closed:i,archived:a,discovered:o})})}function $t(e){let{bus:t}=e;return t.on(A.resume,async e=>{let{sessionId:n}=e.payload,{session:r}=await t.request(w.get,{sessionId:n});if(!r||r.status!==`closed`){e.setResult({success:!1});return}r.status=`active`,r.lastActivityAt=Date.now(),await t.request(w.set,{sessionId:n,session:r}),await t.emit(A.resumed,{sessionId:n}),e.setResult({success:!0})})}function en(e){return e.on(oe.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=D){this.bus=e,this.registerHandlers()}registerHandlers(){this.registerMappingHandlers(),this.registerTurnTrackingHandlers(),this.registerBlockAccumulationHandlers()}registerMappingHandlers(){this.cleanups.push(this.bus.on(A.agent.added,e=>{this.agentToSession.set(e.payload.agentId,e.payload.sessionId)})),this.cleanups.push(this.bus.on(A.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(A.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(A.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(T.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(T.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(A.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(A.fork,{sourceSessionId:this._sessionId,name:e.reason})).sessionId}async merge(e,t){await this.bus.request(A.merge,{parentSessionId:this._sessionId,childSessionId:e,summary:t,source:`extension`,extensionId:this._extensionId})}async abandon(e){await this.bus.request(A.abandon,{parentSessionId:this._sessionId,childSessionId:e,source:`extension`,extensionId:this._extensionId})}async requestCompression(e){await this.bus.emit(A.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(A.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(A.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(A.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}}function dn(e){return e.activation===`live`?`active`:`discovered`}const fn=un();function pn(e,t){return e===`imported`||t===`imported`?`imported`:e===`tracking`||t===`tracking`?`tracking`:e??t??`discovered`}function mn(e,t,n){n!==void 0&&(e[t]=n)}function hn(e){return e.status===`closed`||e.status===`archived`||e.status===`active`&&e.isImported===!0}function gn(e,t,n){if(!hn(e)){if(n===`live`){e.status===`discovered`&&(e.status=`active`);return}t===`discovered`&&(e.status=`discovered`)}}function _n(e,t,n){let r=e.startedAt??n,i=cn(e.kind);return{sessionId:t,createdAt:r,lastActivityAt:r,agents:[],status:dn(e),branchKind:i,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 vn(e,t,n){let r=pn(e.importStatus,t.importStatus);gn(e,r,t.activation),e.isImported=!0,e.importStatus=r,e.adapterName??=t.source,e.adapterSessionId??=t.externalSessionId,e.source??=t.source,e.discoveredAt??=n}function yn(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),mn(e,`adapterId`,t.adapterId),mn(e,`clientId`,t.clientId),t.metadata!==void 0&&(e.metadata={...t.metadata,...e.metadata??{}}),mn(e,`isSidechain`,t.isSidechain),mn(e,`lastClientIdentityObservation`,t.lastClientIdentityObservation),t.machineId===null?e.machineId=void 0:t.machineId!==void 0&&(e.machineId??=t.machineId)}function bn(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 xn(e,t,n){let r=e.discoveredAt;vn(e,t,n),yn(e,t),bn(e,t,r)}function Sn(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 Cn(e,t,n){if(n){e.emit(A.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(A.updated,{sessionId:t.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}function wn(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 Tn(e,t,n){e.emit(A.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(A.import.completed,{sessionId:t.sessionId,adapterSessionId:t.adapterSessionId,source:r}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}function En(e){let{bus:t,store:n,cloneSession:r,populateAgents:i}=e;return[t.on(w.importUpsert,e=>{let r=e.payload,i=Array.from(n.values()).find(e=>e.adapterSessionId===r.externalSessionId&&e.source===r.source),a=fn(),o=i===void 0,s=i??_n(r,crypto.randomUUID(),a);i?(xn(i,r,a),i.parentExternalSessionId!==void 0&&i.parentSessionId===void 0&&Sn(n,i)):(n.set(s.sessionId,s),Sn(n,s)),Cn(t,s,o),e.setResult({sessionId:s.sessionId,created:o})}),t.on(w.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(w.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(w.countBySource,e=>{let t=Array.from(n.values()).filter(t=>t.isImported===!0&&t.source===e.payload.source);e.setResult(wn(t))}),t.on(w.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}),Tn(t,r,i)})]}async function Dn(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 On(e,t,n){n!==void 0&&(e[t]=n??void 0)}function kn(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 An(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),On(e,`executionTargetId`,t.executionTargetId),On(e,`approvalPolicyOverride`,t.approvalPolicyOverride),On(e,`metadata`,t.metadata),t.spawningToolCallId===null?e.spawningToolCallId=void 0:t.spawningToolCallId!==void 0&&e.spawningToolCallId===void 0&&(e.spawningToolCallId=t.spawningToolCallId)}function jn(e,t){return e.on(w.list,async n=>{let{status:r=`all`,limit:i,offset:a=0,includePreview:o=!1,executionTargetId:s}=n.payload,c=kn(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 Dn(e,t.sessionId)}))),d=o?u.map(e=>({...e,preview:{messageCount:0,firstUserMessage:null}})):u;n.setResult({sessions:d,total:l})})}function Mn(e,t){return e.on(w.update,async n=>{let r=structuredClone(Ce.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}),An(i,r),n.setResult({success:!0,clientAccountChanged:(a.clientAccountId??null)!==(i.clientAccountId??null)}),W(e,a,G(i))})}function Nn(e){let t=new Map,n=[];return n.push(e.on(w.get,async n=>{let r=t.get(n.payload.sessionId);if(!r){n.setResult({session:null});return}let i=await Dn(e,n.payload.sessionId);n.setResult({session:{...G(r),agents:i}})})),n.push(e.on(w.set,async n=>{let{sessionId:r,session:i,ifAbsent:a}=Se.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(w.delete,async e=>{t.delete(e.payload.sessionId),e.setResult({success:!0}),await e.next()})),n.push(jn(e,t)),n.push(e.on(w.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(w.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(Mn(e,t)),n.push(Pn(e,t)),n.push(...En({bus:e,store:t,populateAgents:Dn,cloneSession:G})),()=>n.forEach(e=>e())}function Pn(e,t){return e.on(w.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 Fn=r.postgres,In=t.postgres,q=ze({sessions:n,agents:e},{sessions:Fn,agents:In});function Ln(e,t){let n=e?.clientId??null,r=e?.clientAccountId??null,i=e?.lastClientIdentityObservation??null;return P(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 Rn(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?pe.parse(e.compressionMode):void 0}}function zn(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 Bn(e){let t;for(let n=e.length-1;n>=0;--n)try{e[n]?.()}catch(e){t??=e}if(t)throw t}function Vn(e){let{bus:t,db:n}=e,{agents:r}=N(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?Rn(t):null})})}function Hn(e){let{bus:t,db:n}=e,{agents:r}=N(n,q);return t.on(l.set,async e=>{let{agent:t}=e.payload,i=zn(t),a=await n.insert(r).values(i).onConflictDoUpdate({target:r.agentId,set:i});e.setResult({success:M(a)})})}function Un(e){let{bus:t,db:n}=e,{agents:r}=N(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:M(t)})})}function Wn(e){let{bus:t,db:n}=e,{agents:r}=N(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?P(...a):a[0],s=await n.select().from(r).where(o);e.setResult({agents:s.map(Rn)})})}function Gn(e){let{bus:t,db:n}=e,{agents:r}=N(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(Rn)})})}function Kn(e){let{bus:t,db:n}=e,{agents:r}=N(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:M(o)})})}function qn(e){let{bus:t,db:n}=e,{agents:r}=N(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:M(a)})})}function Jn(e){let{bus:t,db:n}=e,{agents:r}=N(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:M(d)})})}function Yn(e,t){let n={bus:e,db:t},r=[Vn(n),Hn(n),Un(n),Wn(n),Gn(n),Kn(n),qn(n),Jn(n)];return()=>Bn(r)}function J(e){return e??void 0}function Xn(e){if(e)try{let t=JSON.parse(e),n=Ze.safeParse(t);return n.success?n.data:void 0}catch{return}}function Zn(e){if(e)try{let t=JSON.parse(e),n=he.safeParse(t);return n.success?n.data:void 0}catch{return}}function Y(e,t){let n=Zn(e.forkTransforms),r=Xn(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(Rn),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 Qn(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 $n(e,t,n){if(!n||t.length===0)return{};let{messages:r}=N(e,o),i=e.select({sessionId:r.sessionId,minTimestamp:B`MIN(${r.timestamp})`.as(`min_timestamp`)}).from(r).where(P(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,P(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:F()}).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 er(e,t){return{sessionId:e.sessionId,clientId:t.clientId??e.clientId,clientAccountId:t.clientAccountId??e.clientAccountId,lastClientIdentityObservation:t.lastClientIdentityObservation??e.lastClientIdentityObservation}}function tr(e){return e.clientId!==void 0||e.clientAccountId!==void 0||e.lastClientIdentityObservation!==void 0}function nr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,q);return t.on(w.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(P(...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 rr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q),{messages:i}=N(n,o);return t.on(w.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:F()}).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:F()}).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(P(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 ir=un();function ar(e){return e?JSON.stringify(e):null}function or(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 sr(e,t){let n=t===`postgres`?B`excluded.metadata || ${e.metadata}`:B`(
15
+ SELECT json_group_object(mk.key, json(mk.vjson)) FROM (
16
+ ${or(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
+ ${or(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 cr(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 lr(e){return B`
33
+ CASE
34
+ WHEN ${e.importStatus} = 'imported' OR excluded.import_status = 'imported' THEN 'imported'
35
+ WHEN ${e.importStatus} = 'tracking' OR excluded.import_status = 'tracking' THEN 'tracking'
36
+ ELSE COALESCE(${e.importStatus}, excluded.import_status, 'discovered')
37
+ END
38
+ `}function ur(e,t){return t===`live`?B`
39
+ CASE
40
+ WHEN ${e.status} = 'discovered' THEN 'active'
41
+ ELSE ${e.status}
42
+ END
43
+ `:B`
44
+ CASE
45
+ WHEN ${e.status} IN ('closed', 'archived') THEN ${e.status}
46
+ WHEN ${e.status} = 'active' AND ${e.isImported} = TRUE THEN ${e.status}
47
+ WHEN ${lr(e)} = 'discovered' THEN excluded.status
48
+ ELSE ${e.status}
49
+ END
50
+ `}function dr(e,t,n,r,i){return{status:ur(e,i),isImported:!0,importStatus:lr(e),adapterName:B`COALESCE(${e.adapterName}, excluded.adapter_name)`,discoveredAt:B`COALESCE(${e.discoveredAt}, excluded.discovered_at)`,source:B`COALESCE(${e.source}, excluded.source)`,logFilePath:B`COALESCE(${e.logFilePath}, excluded.log_file_path)`,targetWorkingDirectory:B`COALESCE(excluded.target_working_directory, ${e.targetWorkingDirectory})`,title:B`COALESCE(excluded.title, ${e.title})`,forkPointMessageId:B`COALESCE(${e.forkPointMessageId}, excluded.fork_point_message_id)`,parentExternalSessionId:B`COALESCE(${e.parentExternalSessionId}, excluded.parent_external_session_id)`,branchKind:B`COALESCE(${e.branchKind}, excluded.branch_kind)`,adapterId:B`COALESCE(excluded.adapter_id, ${e.adapterId})`,clientId:B`COALESCE(excluded.client_id, ${e.clientId})`,isSidechain:B`COALESCE(excluded.is_sidechain, ${e.isSidechain})`,lastClientIdentityObservation:B`COALESCE(excluded.last_client_identity_observation, ${e.lastClientIdentityObservation})`,machineId:r===void 0?B`${e.machineId}`:r===null?B`NULL`:B`COALESCE(${e.machineId}, excluded.machine_id)`,metadata:sr(e,n),createdAt:cr(e.createdAt,t,e),lastActivityAt:cr(e.lastActivityAt,t,e)}}function fr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q),{dialect:i}=Ve(n);return t.on(w.importUpsert,async e=>{let a=e.payload,{externalSessionId:o,source:s,clientId:c,adapterId:l,cwd:u,logFilePath:d,startedAt:f,title:p,kind:m,parentAdapterSessionId:h,forkPointMessageId:g,metadata:_,lastClientIdentityObservation:v,importStatus:ee,isSidechain:y,machineId:te,activation:b}=a,ne=ir(),x=crypto.randomUUID(),S=f??ne,C=cn(m)??null,w=h??null,[re]=await n.insert(r).values({sessionId:x,status:dn(a),isImported:!0,importStatus:ee??`discovered`,adapterName:s,adapterSessionId:o,source:s??null,clientId:c??null,adapterId:l??null,targetWorkingDirectory:u??null,logFilePath:d??null,forkPointMessageId:g??null,branchKind:C,parentExternalSessionId:w,discoveredAt:ne,title:p??null,metadata:_??null,lastClientIdentityObservation:ar(v),isSidechain:y??null,machineId:te??null,createdAt:S,lastActivityAt:S}).onConflictDoUpdate({target:[r.source,r.adapterSessionId],set:dr(r,f,i,te,b)}).returning({sessionId:r.sessionId,discoveredAt:r.discoveredAt,parentExternalSessionId:r.parentExternalSessionId,parentSessionId:r.parentSessionId}),ie=re.sessionId===x;await pr(t,n,re,ie,C,S,s),e.setResult({sessionId:re.sessionId,created:ie})})}async function pr(e,t,n,r,i,a,o){if(r){let r=await mr(t,n.sessionId,n.parentExternalSessionId,o);e.emit(A.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 mr(t,n.sessionId,n.parentExternalSessionId,o),e.emit(A.updated,{sessionId:n.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}async function mr(e,t,n,r){let{sessions:i}=N(e,q);if(n===null||r===void 0)return null;let[a]=await e.select({sessionId:i.sessionId,rootSessionId:i.rootSessionId}).from(i).where(P(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 hr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,q);return t.on(w.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 gr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,q);return t.on(w.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=P(...o),c=await n.select().from(r).where(s).orderBy(I(r.createdAt));if(c.length===0){e.setResult({sessions:[]});return}let l=c.map(e=>e.sessionId),u=Qn(await n.select().from(i).where(R(i.sessionId,l)));e.setResult({sessions:c.map(e=>Y(e,u.get(e.sessionId)??[]))})})}function _r(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q);return t.on(w.countBySource,async e=>{let{source:t}=e.payload,i=await n.select({importStatus:r.importStatus,count:B`count(*)`}).from(r).where(P(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 vr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q);return t.on(w.updateImportStatus,async e=>{let{sessionId:i,importStatus:a}=e.payload,o=a===`imported`?{status:B`
51
+ CASE
52
+ WHEN ${r.status} = 'discovered' THEN 'active'
53
+ ELSE ${r.status}
54
+ END
55
+ `}:{},[s]=await n.update(r).set({importStatus:a,...o}).where(P(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(A.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(A.import.completed,{sessionId:i,adapterSessionId:s.adapterSessionId,source:e}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}})}function yr(e,t){let n={bus:e,db:t};return[fr(n),hr(n),gr(n),_r(n),vr(n)]}function X(e){return e??null}function br(e){return e?JSON.stringify(e):null}function xr(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:Sr(e.lastClientIdentityObservation),isOrchestrated:e.isOrchestrated??!1,isImported:e.isImported??!1,title:X(e.title),summary:X(e.summary),summaryUpdatedAt:X(e.summaryUpdatedAt),forkTransforms:br(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 Sr(e){return e?JSON.stringify(e):null}function Z(e,t,n){n!==void 0&&(e[t]=n)}function Cr(e,t,n){n!==void 0&&(e[t]=n??null)}function wr(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),Cr(n,`executionTargetId`,e.executionTargetId),Cr(n,`approvalPolicyOverride`,e.approvalPolicyOverride),Cr(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=Sr(e.lastClientIdentityObservation)),n}function Tr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,q);return t.on(w.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 Er(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q);return t.on(w.set,async e=>{let{sessionId:i,session:a,ifAbsent:o}=Se.parse(e.payload),s=xr(a);if(o){U(null,a);let o=M(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),M(await n.insert(r).values({sessionId:i,createdAt:a.createdAt,...s}).onConflictDoUpdate({target:r.sessionId,set:s,setWhere:Ln(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 Dr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q);return t.on(w.delete,async e=>{await n.delete(r).where(L(r.sessionId,e.payload.sessionId)),e.setResult({success:!0})})}function Or(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q);return t.on(w.update,async e=>{let i=Ce.request.parse(e.payload),{sessionId:a}=i,o=wr(i,r),s=tr(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:M(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=er(c,i);if(U(c,l),M(await n.update(r).set(o).where(P(L(r.sessionId,a),Ln(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 kr(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)),P(...n)}function Ar(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,q);return t.on(w.list,async e=>{let{status:t=`all`,limit:a,offset:o=0,includePreview:s=!1,executionTargetId:c}=e.payload,l=kr({status:t,executionTargetId:c},r),u=l?n.select().from(r).where(l):n.select().from(r),d=a===void 0?await u.orderBy(I(r.lastActivityAt)):await u.orderBy(I(r.lastActivityAt)).limit(a).offset(o),[f]=await(l?n.select({count:F()}).from(r).where(l):n.select({count:F()}).from(r)),p=f?.count??0;if(d.length===0){e.setResult({sessions:[],total:p});return}let m=d.map(e=>e.sessionId),h=Qn(await n.select().from(i).where(R(i.sessionId,m))),{previewBySession:g,countBySession:_}=await $n(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 jr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q);return t.on(w.getStatusCounts,async e=>{e.payload;let t=await n.select({status:r.status,count:F()}).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 Mr(e,t){let n={bus:e,db:t},r=[Tr(n),Er(n),Dr(n),Or(n),Ar(n),rr(n),nr(n),jr(n),...yr(e,t)];return()=>r.forEach(e=>e())}function Nr(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 Pr(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(!Nr(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 Fr(e,t){if(t.length===0)return new Map;let{agents:n}=N(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 Ir(e,t){return Ue(e).fts.fetchFirstUserMessagePreviews(e,t)}async function Lr(e,t){if(t.length===0)return new Map;let{messages:n}=N(e,o),r=[...new Set(t)],i=await e.select({sessionId:n.sessionId,count:F()}).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 Rr(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function zr(e){if(e!==null)try{let t=typeof e==`string`?JSON.parse(e):e,n=xe.safeParse(t);return n.success?n.data:void 0}catch{return}}function Br(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:Rr(e.fork_transforms),targetWorkingDirectory:e.target_working_directory??void 0,metadata:zr(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 Vr(e,t){let n=Ue(t).fts,r=[];return r.push(e.on(w.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 Fr(t,d),p=await Ir(t,d),m=await Lr(t,d),h=l.map(e=>Br(e,f.get(e.session_id)??[],p,m));e.setResult({sessions:h,total:u})})),()=>r.forEach(e=>e())}async function Hr(e,t){return(await Ve(e).all(B`
56
+ WITH RECURSIVE ancestors AS (
57
+ SELECT session_id, parent_session_id
58
+ FROM sessions
59
+ WHERE session_id = ${t}
60
+
61
+ UNION ALL
62
+
63
+ SELECT s.session_id, s.parent_session_id
64
+ FROM sessions s
65
+ JOIN ancestors a ON s.session_id = a.parent_session_id
66
+ )
67
+ SELECT session_id FROM ancestors
68
+ `)).map(e=>e.session_id)}const Ur=new Map;function Wr(e,t){let n=(Ur.get(e)??Promise.resolve()).then(t),r=n.then(()=>void 0,()=>void 0);return Ur.set(e,r),r.then(()=>{Ur.get(e)===r&&Ur.delete(e)}),n}function Gr(e,t){return`${e}:${t}`}async function Kr(e,t,n){let r=await e.requestOptional(a.getByIds,{sessionId:t,eventIds:[Gr(`turn.completed`,n)]});if(r.handled)return r.data.events.length>0}function qr(e,t){return Wr(`${t.sessionId}${t.turnAnchorId}`,()=>Jr(e,t))}async function Jr(e,t){let{sessionId:n,turnAnchorId:r,startedAt:i,completedAt:a,status:o,error:s,usage:c,initiator:l}=t,{turn:u,created:d}=await e.request(C.ingestCompleted,{sessionId:n,turnAnchorId:r,startedAt:i,completedAt:a,status:o,error:s,usage:c,initiator:l}),f,p;for(let r of t.messages){let{messageId:t}=await e.request(T.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 Kr(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 Yr(e,t,u,f??p)),{turnId:u.turnId,turnNumber:u.turnNumber,created:d}}async function Yr(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:Gr(`turn.started`,n.turnId)}),await u(e,{type:`turn.completed`,sessionId:i,payload:f,eventId:Gr(`turn.completed`,n.turnId)}),await e.emit(A.turn.started,d),await e.emit(A.turn.completed,f)}const Q=`observed-session-ingestion-policy`;function Xr(e,t){return e.emit(de.register,{capabilityId:Q,provider:t})}function Zr(e,t){return e.emit(de.unregister,{capabilityId:Q,providerId:t})}const Qr=se(`log-import`,{listImporters:{request:E.object({}),response:E.object({importers:E.array(E.object({adapterName:E.string(),clientId:E.string().optional()}))})},importFile:{request:E.object({filePath:E.string(),adapterName:E.string(),ingestionMarker:we.optional()}),response:E.discriminatedUnion(`status`,[E.object({status:E.literal(`imported`),sessionId:E.string(),messageCount:E.number(),turnCount:E.number()}),E.object({status:E.literal(`skipped`),reason:E.enum([`no-importer`,`file-missing`])})])},importSession:{request:E.object({adapterSessionId:E.string(),adapterName:E.string(),ingestionMarker:we.optional()}),response:E.object({sessionId:E.string(),messageCount:E.number()})}}).subjects;function $(e,t){process.env.MAKAIO_DEBUG===`true`&&console.debug(`[ObservedSessionIngestion] ${e}`,t??{})}function $r(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 ei(e){return e.importStatus===`discovered`&&e.clientId!==void 0}function ti(e){return e.isImported===!0&&e.importStatus===`tracking`&&e.clientId!==void 0}var ni=class{bus;managedAdapterSessionIds=new Set;importerByClientId=new Map;unresolvedClientIds=new Set;policyProviders=new Map;cleanups=[];constructor(e=D){this.bus=e,this.cleanups.push(this.bus.on(fe.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(fe.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(fe.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(de.register,e=>{let{provider:t}=e.payload;$r(t)&&this.policyProviders.set(t.id,t)},{filter:{capabilityId:Q}}),this.bus.on(de.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(w.getByAdapterSessionId,{adapterSessionId:t,source:n.adapterName});if(!r.handled||r.data.session===null)return;let i=r.data.session;if(!ti(i))return;let a=await this.bus.requestOptional(_e.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(w.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=ri(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:ve,parentAdapterSessionId:null,forkPointMessageId:null}:{kind:me,parentAdapterSessionId:a,forkPointMessageId:null};if(!(await this.bus.requestOptional(w.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,activation:i===`tracking`?`live`:void 0,...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(w.getByAdapterSessionId,{adapterSessionId:e.adapterSessionId,source:e.adapterName});if(t.handled&&t.data.session!==null){if(ei(t.data.session))return!1;if(t.data.session.importStatus!==`discovered`)return!0}return await this.decideImportStatus(e)===`tracking`}};function ri(e){if(e===void 0)return;let t=xe.safeParse(e);return t.success?t.data:void 0}const ii=Be(`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()})),ai=ii.sqlite,oi=ii.postgres,si=ze({importCursors:ai},{importCursors:oi});function ci(e,t){let{importCursors:n}=N(t,si),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:M(i)})})),()=>{r.forEach(e=>e())}}Pe(`embeddings`,{id:Me(`id`).primaryKey({autoIncrement:!0}),entityType:Fe(`entity_type`).notNull(),entityId:Fe(`entity_id`).notNull(),model:Fe(`model`).notNull(),dimensions:Me(`dimensions`).notNull(),content:Fe(`content`),embedding:Ae(`embedding`,{mode:`buffer`}).notNull(),createdAt:Me(`created_at`).notNull()},e=>[je(`idx_embeddings_entity`).on(e.entityType,e.entityId),je(`idx_embeddings_model`).on(e.model),Ie(`idx_embeddings_unique`).on(e.entityType,e.entityId,e.model)]);function li(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 ui=class{rawSql;engine;knownTables=new Set;constructor(e){this.rawSql=Ve(e),this.engine=He(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} (
69
+ entity_type TEXT NOT NULL,
70
+ entity_id TEXT NOT NULL,
71
+ embedding ${i} NOT NULL,
72
+ PRIMARY KEY (entity_type, entity_id)
73
+ )`),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)
74
+ VALUES (${n}, ${r}, ${o})
75
+ ON CONFLICT(entity_type, entity_id) DO UPDATE SET
76
+ 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=li(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)}},di=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 x({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(A.turn.completed,n),this._completedTurnIds.add(e.turnId)}async emit(e,t){await this.bus.emit(e,{...t,sessionId:this.sessionId})}};function fi(e,t){let{sessions:n}=N(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(P(L(n.parentExternalSessionId,i),L(n.source,a)));for(let t of c)t.parentSessionId!==null&&await e.request(w.update,{sessionId:t.sessionId,rootSessionId:o}),t.adapterSessionId!==null&&await r(t.adapterSessionId,a,o,s+1)}return e.on(A.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(P(L(n.parentExternalSessionId,a),L(n.source,s),z(n.parentSessionId)));if(c.length===0)return;let{session:l}=await e.request(w.get,{sessionId:o}),u=l?.rootSessionId??o;for(let t of c)await e.request(w.update,{sessionId:t.sessionId,parentSessionId:o,rootSessionId:u,...t.branchKind===null?{}:{branchKind:t.branchKind}}),t.adapterSessionId!==null&&await r(t.adapterSessionId,s,u)})}const pi=new Set([`Agent`,`spawn_subagent`]),mi=`[^A-Za-z0-9_-]`;function hi(e){return e.replaceAll(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function gi(e,t){return t.test(e)}async function _i(e,t){let n=[],r,i=0;do{let a=await e.request(T.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 vi(e){let t=[];for(let n of e)for(let e of n.blocks)e.type===`tool_call`&&pi.has(e.name)&&t.push({toolCallId:e.toolCallId});return t}function yi(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(gi(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 bi(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 xi(e){return[...e].map(e=>{let t=hi(e);return{id:e,pattern:RegExp(`(^|${mi})${t}($|${mi})`)}})}async function Si(e,t,n){let{children:r}=await e.request(w.getChildren,{sessionId:n}),i=r.filter(e=>e.branchKind===`compress`);if(i.length===0)return;let{session:a}=await e.request(w.get,{sessionId:t}),o=a?.adapterSessionId;if(!o)return;let s=xi(new Set([o])),c=(await Promise.all(i.map(async t=>{let n=await _i(e,t.sessionId),r=vi(n);if(r.length===0)return null;let i=yi(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(w.update,{sessionId:t,parentSessionId:c[0].parentSessionId,spawningToolCallId:c[0].toolCallId})}async function Ci(e,t,n){let r=t.parentExternalSessionId,i=t.source??n;if(!r||!i)return;let a=t.sessionId,{session:o}=await e.request(w.getByAdapterSessionId,{adapterSessionId:r,source:i}),s=o?.sessionId;if(!s)return;let{children:c}=await e.request(w.getChildren,{sessionId:s}),l=await wi(e,c);if(l.size===0)return;let u=await _i(e,a),d=vi(u);if(d.length===0)return;let f=yi(u,xi(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(w.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 wi(e,t){return bi(await Promise.all(t.filter(e=>e.branchKind===`subagent`).map(async t=>{let{session:n}=await e.request(w.get,{sessionId:t.sessionId});return n?.adapterSessionId?{sessionId:t.sessionId,adapterSessionId:n.adapterSessionId}:null})))}function Ti(e){return e.on(A.import.completed,async t=>{try{let{sessionId:n,source:r}=t.payload,{session:i}=await e.request(w.get,{sessionId:n});if(!i)return;if(i.branchKind===`subagent`&&i.parentSessionId!==void 0){await Si(e,n,i.parentSessionId);return}if(i.branchKind!==`compress`)return;await Ci(e,i,r)}catch(e){console.error(`[CompressLineageResolver] Failed to resolve compress lineage`,{payload:t.payload,error:e})}})}function Ei(e){return[...e].map(e=>{let t=hi(e);return{id:e,pattern:RegExp(`(^|${mi})${t}($|${mi})`)}})}async function Di(e,t,n){return bi(await Promise.all(n.filter(e=>e.branchKind===`subagent`&&e.spawningToolCallId===void 0).map(async n=>{let{session:r}=await e.request(w.get,{sessionId:n.sessionId}),i=r?.source??r?.adapterName;return r?.adapterSessionId&&i===t?{sessionId:n.sessionId,adapterSessionId:r.adapterSessionId}:null})))}function Oi(e){return e.on(A.import.completed,async t=>{try{let{sessionId:n,source:r}=t.payload,{children:i}=await e.request(w.getChildren,{sessionId:n}),a=await Di(e,r,i),o=new Set(a.keys());if(o.size===0)return;let s=await _i(e,n),c=vi(s);if(c.length===0)return;let l=yi(s,Ei(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(w.get,{sessionId:t});if(n?.spawningToolCallId!==void 0)return;await e.request(w.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 ki(e){return e.on(O.session.discovered,async t=>{let n=be.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(w.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 Ai=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,Ir as C,Mr as D,Pr as E,an as F,Yt as G,$t as H,on as I,H as J,qt as K,rn as L,Nn as M,cn as N,$n as O,ln as P,Dt as Q,nn as R,Lr as S,Rr as T,Zt as U,Qt as V,Xt as W,Vt as X,Ht as Y,Mt as Z,Zr as _,fi as a,Vr as b,ci as c,Qr as d,ht as et,ni as f,Xr as g,Q as h,Ti as i,Yn as j,Qn as k,ai as l,ti as m,ki as n,di as o,ei as p,Ut as q,Oi as r,ui as s,Ai as t,nt as tt,ii as u,qr as v,Br as w,Fr as x,Hr as y,tn as z};
@@ -1 +1 @@
1
- import{B as e,G as t,J as n,K as r,L as i,M as a,N as o,R as s,dt as c,ft as l,lt as ee,pt as u,x as d,z as f}from"./schemas-CkOigLAT.mjs";import"./compression-C5JAWdgZ.mjs";import{t as p}from"./schemas-XeIBqwvE.mjs";import{i as m}from"./account-identity-C7Kx_ieU.mjs";import{CompressSessionLineageSchema as h,ForkSessionLineageSchema as g,RootSessionLineageSchema as _,SubagentSessionLineageSchema as v}from"./contracts/adapter/schemas/session-lineage.mjs";import{t as y}from"./storage-namespace-definition-CzXPW45M.mjs";import{z as b}from"zod";import{createBusNamespace as x}from"@makaio/framework/core";const S=x(`session`,d),te=S.subjects;function ne(e){return o.includes(e.type)}const re=`ui-warnings`,C=`connector-swap-warning-suppressed`,w=1440*60*1e3,T={cancel:`cancel`,edit:`edit`,continue:`continue`},E=`CONNECTOR_SWAP_CANCELLED`;var D=class extends Error{code=E;constructor(){super(`Connector swap cancelled by user`),this.name=`ConnectorSwapCancelledError`}};function O(e){return e instanceof D||e instanceof Error&&`code`in e&&e.code===`CONNECTOR_SWAP_CANCELLED`}const k={branch:{label:`branch`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},subagent:{label:`subagent`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},fork:{label:`fork`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},compress:{label:`compress`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},rewrite:{label:`rewrite`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},coordinator:{label:`coordinator`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1},aside:{label:`aside`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1}};function A(e){return e!=null&&k[e].staysInView}function j(e){return e==null||k[e].navigatesToChild}function M(e){return e!=null&&k[e].canMergeBack}function N(e){return k[e]}const P=b.object({timestamp:b.number(),messageId:b.string()}),F=y(`message`,{schemas:{append:{request:b.object({message:n.omit({messageId:!0}).extend({messageId:b.string().optional()}),emitEvent:b.boolean().optional()}),response:b.object({message:n})},getBySession:{request:b.object({sessionId:b.string(),limit:b.number().int().min(1).optional(),after:P.optional(),includeAfter:b.boolean().optional(),order:b.enum([`asc`,`desc`]).optional()}),response:b.object({messages:b.array(n),nextCursor:P.nullable()})},getByTurn:{request:b.object({turnId:b.string()}),response:b.object({messages:b.array(n)})},get:{request:b.object({messageId:b.string()}),response:b.object({message:n.nullable()})},getByAdapterMessageId:{request:b.object({adapterMessageId:b.string()}),response:b.object({message:n.nullable()})},search:{request:b.object({query:b.string(),sessionId:b.string().optional(),limit:b.number().int().min(1).optional()}),response:b.object({messages:b.array(n),total:b.number()})},ftsSearch:{request:b.object({query:b.string(),sessionId:b.string().optional(),limit:b.number().int().min(1).optional().default(20)}),response:b.object({results:b.array(b.object({messageId:b.string(),sessionId:b.string(),score:b.number(),excerpt:b.string()})),total:b.number()})},upsertByAdapterMessageId:{request:b.object({sessionId:b.string(),turnId:b.string().nullable(),adapterMessageId:b.string(),role:b.enum([`user`,`assistant`]),contentText:b.string(),blocks:b.array(t),agentId:b.string().optional(),adapterSessionId:b.string().optional(),timestamp:b.number(),origin:r.optional()}),response:b.object({messageId:b.string(),created:b.boolean()})},stored:b.object({message:n})}}),I=F.subjects;function L(e,t){return e.timestamp===t.timestamp?e.messageId.localeCompare(t.messageId):e.timestamp-t.timestamp}function R(e,t){return L(t,e)}function ie(e){return{timestamp:e.timestamp,messageId:e.messageId}}function z(e){return`${e.timestamp}:${e.messageId}`}const B=b.object({after:b.string().optional(),limit:b.number().int().min(1).optional(),types:b.array(b.string()).optional(),includeReasoning:b.boolean().optional(),order:b.enum([`asc`,`desc`]).optional()}),V=b.object({events:b.array(a),nextCursor:b.string().nullable(),totalCount:b.number().optional()}),H=y(`sessionEvent`,{schemas:{append:{request:b.object({event:a}),response:b.object({success:b.boolean()})},getEvents:{request:b.object({sessionId:b.string(),options:B.optional()}),response:V},getByIds:{request:b.object({sessionId:b.string(),eventIds:b.array(b.string())}),response:b.object({events:b.array(a)})},deleteBySession:{request:b.object({sessionId:b.string()}),response:b.object({success:b.boolean(),deletedCount:b.number().optional()})},getEventsBySessions:{request:b.object({sessionIds:b.array(b.string()),types:b.array(b.string()),limitPerSession:b.number().int().min(1).optional()}),response:b.object({eventsBySession:b.record(b.string(),b.array(a))})}}}),U=H.subjects,W=i.extend({preview:s});function G(e,t){e.clientAccountId!==void 0&&e.lastClientIdentityObservation===void 0&&t.addIssue({code:b.ZodIssueCode.custom,path:[`lastClientIdentityObservation`],message:`lastClientIdentityObservation is required when clientAccountId is provided`}),e.clientAccountId!==void 0&&e.clientId===void 0&&t.addIssue({code:b.ZodIssueCode.custom,path:[`clientId`],message:`clientId is required when clientAccountId is provided`})}const K=i.superRefine((e,t)=>{G(e,t)}),q=b.object({sessionId:b.string(),session:K,ifAbsent:b.boolean().optional()}).superRefine((e,t)=>{e.sessionId!==e.session.sessionId&&t.addIssue({code:b.ZodIssueCode.custom,path:[`session`,`sessionId`],message:`session.sessionId must match the top-level sessionId`})}),J=b.string().nullable().optional(),Y={request:b.object({sessionId:b.string(),status:b.enum([`active`,`closed`,`archived`,`discovered`]).optional(),parentSessionId:b.string().optional(),contextInheritance:u.optional(),rootSessionId:b.string().optional(),forkPointMessageId:b.string().optional(),branchKind:c.optional(),isOrchestrated:b.boolean().optional(),clientId:b.string().optional(),clientAccountId:b.string().optional(),lastClientIdentityObservation:m.optional(),executionTargetId:b.string().nullable().optional(),approvalPolicyOverride:p.nullable().optional(),title:b.string().optional(),targetWorkingDirectory:b.string().optional(),createdAt:b.number().finite().optional(),lastActivityAt:b.number().finite().optional(),metadata:f.nullable().optional(),spawningToolCallId:b.string().nullable().optional(),machineId:J}),response:b.object({success:b.boolean(),clientAccountChanged:b.boolean().optional()})},X=b.object({externalSessionId:b.string(),source:b.string(),clientId:b.string().optional(),adapterId:b.string().optional(),cwd:b.string().nullable(),logFilePath:b.string().nullable().optional(),startedAt:b.number().finite().optional(),title:b.string().nullable().optional(),metadata:f.optional(),lastClientIdentityObservation:m.optional(),importStatus:b.enum([`discovered`,`tracking`]).optional(),isSidechain:b.boolean().optional(),machineId:J}),Z=b.discriminatedUnion(`kind`,[X.merge(_),X.merge(g),X.merge(v),X.merge(h)]),Q=y(`session`,{schemas:{get:{request:b.object({sessionId:b.string()}),response:b.object({session:i.nullable()})},set:{request:q,response:b.object({success:b.boolean(),clientAccountChanged:b.boolean().optional()})},delete:{request:b.object({sessionId:b.string()}),response:b.object({success:b.boolean()})},list:{request:b.object({status:b.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),limit:b.number().int().min(1).optional(),offset:b.number().int().min(0).optional(),includePreview:b.boolean().optional(),executionTargetId:b.string().optional()}),response:b.object({sessions:b.array(e),total:b.number()})},getChildren:{request:b.object({sessionId:b.string()}),response:b.object({children:b.array(ee)})},search:{request:b.object({query:b.string(),limit:b.number().int().min(1).optional(),status:b.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),isImported:b.boolean().optional()}),response:b.object({sessions:b.array(W),total:b.number()})},update:Y,getByAdapterSessionId:{request:b.object({adapterSessionId:b.string(),source:b.string().optional(),adapterName:b.string().optional()}),response:b.object({session:i.nullable()})},getStatusCounts:{request:b.object({}),response:b.object({all:b.number(),active:b.number(),closed:b.number(),archived:b.number(),discovered:b.number()})},importUpsert:{request:Z,response:b.object({sessionId:b.string(),created:b.boolean()})},getByLogFilePath:{request:b.object({logFilePath:b.string()}),response:b.object({session:i.nullable()})},listImported:{request:b.object({source:b.string().optional(),importStatus:l.optional()}),response:b.object({sessions:b.array(i)})},countBySource:{request:b.object({source:b.string()}),response:b.object({total:b.number(),imported:b.number(),discovered:b.number(),tracking:b.number()})},updateImportStatus:{request:b.object({sessionId:b.string(),importStatus:l}),response:b.object({success:b.boolean()})}}}),ae=Q.subjects,$=`makaio:extraction-excluded`;function oe(e){return e?.[$]===!0}function se(){return{[$]:!0}}export{ne as A,E as C,C as D,T as E,te as M,w as O,j as S,O as T,F as _,Q as a,A as b,ae as c,U as d,L as f,P as g,ie as h,Z as i,S as j,re as k,Y as l,z as m,se as n,q as o,R as p,oe as r,K as s,$ as t,H as u,I as v,D as w,M as x,N as y};
1
+ import{B as e,G as t,J as n,K as r,L as i,M as a,N as o,R as s,dt as c,ft as l,lt as ee,pt as u,x as d,z as f}from"./schemas-CkOigLAT.mjs";import"./compression-C5JAWdgZ.mjs";import{t as p}from"./schemas-XeIBqwvE.mjs";import{i as m}from"./account-identity-C7Kx_ieU.mjs";import{CompressSessionLineageSchema as h,ForkSessionLineageSchema as g,RootSessionLineageSchema as _,SubagentSessionLineageSchema as v}from"./contracts/adapter/schemas/session-lineage.mjs";import{t as y}from"./storage-namespace-definition-CzXPW45M.mjs";import{z as b}from"zod";import{createBusNamespace as x}from"@makaio/framework/core";const S=x(`session`,d),te=S.subjects;function ne(e){return o.includes(e.type)}const re=`ui-warnings`,C=`connector-swap-warning-suppressed`,w=1440*60*1e3,T={cancel:`cancel`,edit:`edit`,continue:`continue`},E=`CONNECTOR_SWAP_CANCELLED`;var D=class extends Error{code=E;constructor(){super(`Connector swap cancelled by user`),this.name=`ConnectorSwapCancelledError`}};function O(e){return e instanceof D||e instanceof Error&&`code`in e&&e.code===`CONNECTOR_SWAP_CANCELLED`}const k={branch:{label:`branch`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},subagent:{label:`subagent`,staysInView:!0,navigatesToChild:!1,canMergeBack:!0},fork:{label:`fork`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},compress:{label:`compress`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},rewrite:{label:`rewrite`,staysInView:!1,navigatesToChild:!0,canMergeBack:!1},coordinator:{label:`coordinator`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1},aside:{label:`aside`,staysInView:!0,navigatesToChild:!1,canMergeBack:!1}};function A(e){return e!=null&&k[e].staysInView}function j(e){return e==null||k[e].navigatesToChild}function M(e){return e!=null&&k[e].canMergeBack}function N(e){return k[e]}const P=b.object({timestamp:b.number(),messageId:b.string()}),F=y(`message`,{schemas:{append:{request:b.object({message:n.omit({messageId:!0}).extend({messageId:b.string().optional()}),emitEvent:b.boolean().optional()}),response:b.object({message:n})},getBySession:{request:b.object({sessionId:b.string(),limit:b.number().int().min(1).optional(),after:P.optional(),includeAfter:b.boolean().optional(),order:b.enum([`asc`,`desc`]).optional()}),response:b.object({messages:b.array(n),nextCursor:P.nullable()})},getByTurn:{request:b.object({turnId:b.string()}),response:b.object({messages:b.array(n)})},get:{request:b.object({messageId:b.string()}),response:b.object({message:n.nullable()})},getByAdapterMessageId:{request:b.object({adapterMessageId:b.string()}),response:b.object({message:n.nullable()})},search:{request:b.object({query:b.string(),sessionId:b.string().optional(),limit:b.number().int().min(1).optional()}),response:b.object({messages:b.array(n),total:b.number()})},ftsSearch:{request:b.object({query:b.string(),sessionId:b.string().optional(),limit:b.number().int().min(1).optional().default(20)}),response:b.object({results:b.array(b.object({messageId:b.string(),sessionId:b.string(),score:b.number(),excerpt:b.string()})),total:b.number()})},upsertByAdapterMessageId:{request:b.object({sessionId:b.string(),turnId:b.string().nullable(),adapterMessageId:b.string(),role:b.enum([`user`,`assistant`]),contentText:b.string(),blocks:b.array(t),agentId:b.string().optional(),adapterSessionId:b.string().optional(),timestamp:b.number(),origin:r.optional()}),response:b.object({messageId:b.string(),created:b.boolean()})},stored:b.object({message:n})}}),I=F.subjects;function L(e,t){return e.timestamp===t.timestamp?e.messageId.localeCompare(t.messageId):e.timestamp-t.timestamp}function R(e,t){return L(t,e)}function ie(e){return{timestamp:e.timestamp,messageId:e.messageId}}function z(e){return`${e.timestamp}:${e.messageId}`}const B=b.object({after:b.string().optional(),limit:b.number().int().min(1).optional(),types:b.array(b.string()).optional(),includeReasoning:b.boolean().optional(),order:b.enum([`asc`,`desc`]).optional()}),V=b.object({events:b.array(a),nextCursor:b.string().nullable(),totalCount:b.number().optional()}),H=y(`sessionEvent`,{schemas:{append:{request:b.object({event:a}),response:b.object({success:b.boolean()})},getEvents:{request:b.object({sessionId:b.string(),options:B.optional()}),response:V},getByIds:{request:b.object({sessionId:b.string(),eventIds:b.array(b.string())}),response:b.object({events:b.array(a)})},deleteBySession:{request:b.object({sessionId:b.string()}),response:b.object({success:b.boolean(),deletedCount:b.number().optional()})},getEventsBySessions:{request:b.object({sessionIds:b.array(b.string()),types:b.array(b.string()),limitPerSession:b.number().int().min(1).optional()}),response:b.object({eventsBySession:b.record(b.string(),b.array(a))})}}}),U=H.subjects,W=i.extend({preview:s});function G(e,t){e.clientAccountId!==void 0&&e.lastClientIdentityObservation===void 0&&t.addIssue({code:b.ZodIssueCode.custom,path:[`lastClientIdentityObservation`],message:`lastClientIdentityObservation is required when clientAccountId is provided`}),e.clientAccountId!==void 0&&e.clientId===void 0&&t.addIssue({code:b.ZodIssueCode.custom,path:[`clientId`],message:`clientId is required when clientAccountId is provided`})}const K=i.superRefine((e,t)=>{G(e,t)}),q=b.object({sessionId:b.string(),session:K,ifAbsent:b.boolean().optional()}).superRefine((e,t)=>{e.sessionId!==e.session.sessionId&&t.addIssue({code:b.ZodIssueCode.custom,path:[`session`,`sessionId`],message:`session.sessionId must match the top-level sessionId`})}),J=b.string().nullable().optional(),Y={request:b.object({sessionId:b.string(),status:b.enum([`active`,`closed`,`archived`,`discovered`]).optional(),parentSessionId:b.string().optional(),contextInheritance:u.optional(),rootSessionId:b.string().optional(),forkPointMessageId:b.string().optional(),branchKind:c.optional(),isOrchestrated:b.boolean().optional(),clientId:b.string().optional(),clientAccountId:b.string().optional(),lastClientIdentityObservation:m.optional(),executionTargetId:b.string().nullable().optional(),approvalPolicyOverride:p.nullable().optional(),title:b.string().optional(),targetWorkingDirectory:b.string().optional(),createdAt:b.number().finite().optional(),lastActivityAt:b.number().finite().optional(),metadata:f.nullable().optional(),spawningToolCallId:b.string().nullable().optional(),machineId:J}),response:b.object({success:b.boolean(),clientAccountChanged:b.boolean().optional()})},ae=b.enum([`live`]),X=b.object({externalSessionId:b.string(),source:b.string(),clientId:b.string().optional(),adapterId:b.string().optional(),cwd:b.string().nullable(),logFilePath:b.string().nullable().optional(),startedAt:b.number().finite().optional(),title:b.string().nullable().optional(),metadata:f.optional(),lastClientIdentityObservation:m.optional(),importStatus:b.enum([`discovered`,`tracking`]).optional(),activation:ae.optional(),isSidechain:b.boolean().optional(),machineId:J}),Z=b.discriminatedUnion(`kind`,[X.merge(_),X.merge(g),X.merge(v),X.merge(h)]),Q=y(`session`,{schemas:{get:{request:b.object({sessionId:b.string()}),response:b.object({session:i.nullable()})},set:{request:q,response:b.object({success:b.boolean(),clientAccountChanged:b.boolean().optional()})},delete:{request:b.object({sessionId:b.string()}),response:b.object({success:b.boolean()})},list:{request:b.object({status:b.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),limit:b.number().int().min(1).optional(),offset:b.number().int().min(0).optional(),includePreview:b.boolean().optional(),executionTargetId:b.string().optional()}),response:b.object({sessions:b.array(e),total:b.number()})},getChildren:{request:b.object({sessionId:b.string()}),response:b.object({children:b.array(ee)})},search:{request:b.object({query:b.string(),limit:b.number().int().min(1).optional(),status:b.enum([`active`,`closed`,`archived`,`discovered`,`all`]).optional(),isImported:b.boolean().optional()}),response:b.object({sessions:b.array(W),total:b.number()})},update:Y,getByAdapterSessionId:{request:b.object({adapterSessionId:b.string(),source:b.string().optional(),adapterName:b.string().optional()}),response:b.object({session:i.nullable()})},getStatusCounts:{request:b.object({}),response:b.object({all:b.number(),active:b.number(),closed:b.number(),archived:b.number(),discovered:b.number()})},importUpsert:{request:Z,response:b.object({sessionId:b.string(),created:b.boolean()})},getByLogFilePath:{request:b.object({logFilePath:b.string()}),response:b.object({session:i.nullable()})},listImported:{request:b.object({source:b.string().optional(),importStatus:l.optional()}),response:b.object({sessions:b.array(i)})},countBySource:{request:b.object({source:b.string()}),response:b.object({total:b.number(),imported:b.number(),discovered:b.number(),tracking:b.number()})},updateImportStatus:{request:b.object({sessionId:b.string(),importStatus:l}),response:b.object({success:b.boolean()})}}}),oe=Q.subjects,$=`makaio:extraction-excluded`;function se(e){return e?.[$]===!0}function ce(){return{[$]:!0}}export{ne as A,E as C,C as D,T as E,te as M,w as O,j as S,O as T,F as _,Q as a,A as b,oe as c,U as d,L as f,P as g,ie as h,Z as i,S as j,re as k,Y as l,z as m,ce as n,q as o,R as p,se as r,K as s,$ as t,H as u,I as v,D as w,M as x,N as y};
@@ -14,8 +14,8 @@ declare const COMPRESS_SESSION_LINEAGE_KIND: "compress";
14
14
  /** Discriminates the relationship of a session to its parent. */
15
15
  declare const SessionLineageKindSchema: z.ZodEnum<{
16
16
  fork: "fork";
17
- subagent: "subagent";
18
17
  root: "root";
18
+ subagent: "subagent";
19
19
  compress: "compress";
20
20
  }>;
21
21
  type SessionLineageKind = z.infer<typeof SessionLineageKindSchema>;
@@ -17,9 +17,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
17
17
  scope: _$zod.ZodString;
18
18
  context: _$zod.ZodOptional<_$zod.ZodString>;
19
19
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
20
- mobile: "mobile";
21
20
  desktop: "desktop";
22
21
  tablet: "tablet";
22
+ mobile: "mobile";
23
23
  }>>;
24
24
  }, _$zod_v4_core0.$strip>;
25
25
  category: _$zod.ZodString;
@@ -38,9 +38,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
38
38
  scope: _$zod.ZodString;
39
39
  context: _$zod.ZodOptional<_$zod.ZodString>;
40
40
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
41
- mobile: "mobile";
42
41
  desktop: "desktop";
43
42
  tablet: "tablet";
43
+ mobile: "mobile";
44
44
  }>>;
45
45
  }, _$zod_v4_core0.$strip>;
46
46
  category: _$zod.ZodString;
@@ -60,9 +60,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
60
60
  scope: _$zod.ZodString;
61
61
  context: _$zod.ZodOptional<_$zod.ZodString>;
62
62
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
63
- mobile: "mobile";
64
63
  desktop: "desktop";
65
64
  tablet: "tablet";
65
+ mobile: "mobile";
66
66
  }>>;
67
67
  }, _$zod_v4_core0.$strip>;
68
68
  category: _$zod.ZodString;
@@ -81,9 +81,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
81
81
  scope: _$zod.ZodOptional<_$zod.ZodString>;
82
82
  context: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodString>>;
83
83
  viewport: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodEnum<{
84
- mobile: "mobile";
85
84
  desktop: "desktop";
86
85
  tablet: "tablet";
86
+ mobile: "mobile";
87
87
  }>>>;
88
88
  }, _$zod_v4_core0.$strip>>;
89
89
  category: _$zod.ZodOptional<_$zod.ZodString>;
@@ -98,9 +98,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
98
98
  scope: _$zod.ZodString;
99
99
  context: _$zod.ZodOptional<_$zod.ZodString>;
100
100
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
101
- mobile: "mobile";
102
101
  desktop: "desktop";
103
102
  tablet: "tablet";
103
+ mobile: "mobile";
104
104
  }>>;
105
105
  }, _$zod_v4_core0.$strip>;
106
106
  category: _$zod.ZodString;
@@ -124,9 +124,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
124
124
  scope: _$zod.ZodString;
125
125
  context: _$zod.ZodOptional<_$zod.ZodString>;
126
126
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
127
- mobile: "mobile";
128
127
  desktop: "desktop";
129
128
  tablet: "tablet";
129
+ mobile: "mobile";
130
130
  }>>;
131
131
  }, _$zod_v4_core0.$strip>;
132
132
  category: _$zod.ZodString;
@@ -145,9 +145,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
145
145
  scope: _$zod.ZodString;
146
146
  context: _$zod.ZodOptional<_$zod.ZodString>;
147
147
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
148
- mobile: "mobile";
149
148
  desktop: "desktop";
150
149
  tablet: "tablet";
150
+ mobile: "mobile";
151
151
  }>>;
152
152
  }, _$zod_v4_core0.$strip>;
153
153
  category: _$zod.ZodString;
@@ -167,9 +167,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
167
167
  scope: _$zod.ZodString;
168
168
  context: _$zod.ZodOptional<_$zod.ZodString>;
169
169
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
170
- mobile: "mobile";
171
170
  desktop: "desktop";
172
171
  tablet: "tablet";
172
+ mobile: "mobile";
173
173
  }>>;
174
174
  }, _$zod_v4_core0.$strip>;
175
175
  category: _$zod.ZodString;
@@ -188,9 +188,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
188
188
  scope: _$zod.ZodOptional<_$zod.ZodString>;
189
189
  context: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodString>>;
190
190
  viewport: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodEnum<{
191
- mobile: "mobile";
192
191
  desktop: "desktop";
193
192
  tablet: "tablet";
193
+ mobile: "mobile";
194
194
  }>>>;
195
195
  }, _$zod_v4_core0.$strip>>;
196
196
  category: _$zod.ZodOptional<_$zod.ZodString>;
@@ -205,9 +205,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
205
205
  scope: _$zod.ZodString;
206
206
  context: _$zod.ZodOptional<_$zod.ZodString>;
207
207
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
208
- mobile: "mobile";
209
208
  desktop: "desktop";
210
209
  tablet: "tablet";
210
+ mobile: "mobile";
211
211
  }>>;
212
212
  }, _$zod_v4_core0.$strip>;
213
213
  category: _$zod.ZodString;
@@ -1 +1 @@
1
- import{I as e}from"./handlers-B74FvKlA.mjs";import{SessionStorageSubjects as t}from"./services/session/storage/namespace.mjs";import"./session-CZUrp7gC.mjs";import{AgentSubjects as n,ApprovalSubjects as r,HarnessSubjects as i,computeMetaTags as a}from"@makaio/framework/contracts";import{BaseService as o}from"@makaio/framework/service-base";import{extractToolFilePath as s}from"@makaio/framework/tools";const c={"full-access":0,"always-ask":1,reject:2};function l(){return`apr_${crypto.randomUUID()}`}function u(e){switch(e){case`allow`:return`full-access`;case`deny`:return`reject`;case`ask`:return`always-ask`}}function d(e){if(!e?.length)return`neutral`;let t=a(e);return t.includes(`destructive`)?`destructive`:t.includes(`read-only`)?`safe`:`neutral`}function f(e,t){if(e)return t&&e.toolApprovalOverrides?.[t]!==void 0?e.toolApprovalOverrides[t]:e.approvalPolicy}function p(e,t,n,r){let i=r[t];if(!i?.length)return e;let a=e;for(let e of i){let t=n[e];t&&c[t]>c[a]&&(a=t)}return a}function m(e,t,n){return n.handled?n.data.allowedDirectories??void 0:t?[]:void 0}function h(e,t,n){if(!n||!e?.cwd)return{};let r;return(e.personaId||e.profileId)&&t&&(r=m(e.personaId,e.profileId,t)),{cwd:e.cwd,...r&&{allowedDirectories:r}}}function g(e,t,n){if(!(!e&&!t))return!n||!n.handled?{policy:`always-ask`}:{policy:u(n.data.action),...n.data.personaName&&{personaName:n.data.personaName},...n.data.profileName&&{profileName:n.data.profileName}}}function _(e,t){let n=t.harness?.toolCapabilityMap&&e.toolName?t.harness.toolCapabilityMap[e.toolName]:void 0;return{requestId:l(),toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,agentId:e.agentId,sessionId:e.sessionId,adapterName:t.resolvedAdapterName,...t.personaName&&{personaName:t.personaName},...t.profileName&&{profileName:t.profileName},capabilities:n,riskLevel:d(n),reasoning:e.reasoning,createdAt:Date.now()}}var v=class extends o{logger=console;options;constructor(e,t={}){super(e),this.options=t}async onInit(){this.registerHandler(n.toolApprove,async e=>{let t=await this.getAgentMetadata(e.payload.agentId,e.payload.sessionId),n=(t?.personaId||t?.profileId)&&e.payload.toolName?await this.fetchRawEnrichedPolicy(t?.personaId,t?.profileId,e.payload.toolName):void 0,r=h(t,n,this.options.fileAccessRuleProvider),i=await this.checkFileAccessDenyReason(e.payload,r);if(i){e.setResult({action:`deny`,message:i,shouldAbort:!1});return}let a=await this.resolveSessionOverride(e.payload.sessionId);if(a===`full-access`){e.setResult({action:`allow`});return}if(a===`reject`){e.setResult({action:`deny`,message:`Tool use rejected by session approval policy override`,shouldAbort:!1});return}let o=await this.resolvePolicyWithContext({adapterName:e.payload.adapterName,toolName:e.payload.toolName},t,n);switch(a===`always-ask`?`always-ask`:o.policy){case`full-access`:e.setResult({action:`allow`});return;case`reject`:e.setResult({action:`deny`,message:`Tool use rejected by approval policy`,shouldAbort:!1});return;case`always-ask`:await this.dispatchAlwaysAskApproval(e.payload,e.setResult.bind(e),o);return}})}async dispatchAlwaysAskApproval(e,t,i){let a=_(e,i),o=new AbortController,s=this.bus.on(n.session.closed,()=>{o.abort()},{filter:{agentId:a.agentId,...e.adapterSessionId!==void 0&&{adapterSessionId:e.adapterSessionId}}});try{let e=await this.bus.requestOptional(r.request,a,{timeout:0,signal:o.signal});e.handled&&e.data.action===`allow`?t({action:`allow`,...e.data.updatedInput&&{updatedInput:e.data.updatedInput}}):t({action:`deny`,message:e.handled&&e.data.action===`deny`?e.data.message??`User denied tool execution`:`No approval handler available`,shouldAbort:!1})}catch{t({action:`deny`,message:o.signal.aborted?`Approval cancelled — agent session closed`:`Tool approval request failed`,shouldAbort:!1})}finally{s()}}async checkFileAccessDenyReason(e,t){if(!this.options.fileAccessRuleProvider||!t.cwd)return;let n=s(e.toolName,e.args,t.cwd);if(n)try{return(await this.options.fileAccessRuleProvider(t.cwd,t.allowedDirectories)).isDenied(n)?`Access denied: '${n}' is restricted by .makaioignore rules`:void 0}catch{return`Access denied: file access rules could not be evaluated`}}async fetchRawEnrichedPolicy(e,t,n){try{return await this.bus.requestOptional(r.resolveEnrichedPolicy,{toolName:n,personaId:e,profileId:t})}catch(r){return this.logger.error(`[ToolApprovalService] approval.resolveEnrichedPolicy failed; falling back to fail-closed`,{toolName:n,personaId:e,profileId:t,error:r}),{handled:!1}}}async resolvePolicyWithContext(e,t,n){let r=t?.adapterName??e.adapterName,i=g(t?.personaId,t?.profileId,n),a=await this.resolveHarnessPolicy(r,t?.harnessId,t?.clientId),o=f(a,e.toolName),s=i?.policy??o??`always-ask`,c=s;return a?.capabilityOverrides&&a.toolCapabilityMap&&e.toolName&&(c=p(s,e.toolName,a.capabilityOverrides,a.toolCapabilityMap)),{policy:c,harness:a,agent:t,resolvedAdapterName:r,...i?.personaName&&{personaName:i.personaName},...i?.profileName&&{profileName:i.profileName}}}async getAgentMetadata(t,n){try{if(n){let{agents:r}=await this.bus.request(e.listBySession,{sessionId:n});return r.find(e=>e.agentId===t)??null}let r=await this.bus.requestOptional(e.get,{agentId:t});return r.handled?r.data.agent:null}catch{return null}}async resolveSessionOverride(e){if(e)try{let n=await this.bus.requestOptional(t.get,{sessionId:e});return n.handled?n.data.session?.approvalPolicyOverride??void 0:void 0}catch{return}}async resolveHarnessPolicy(e,t,n){try{let r=await this.bus.request(i.resolve,{adapterName:e,...t&&{profileHarnessId:t},...n&&{clientId:n}});return{approvalPolicy:r.approvalPolicy,capabilityOverrides:r.capabilityOverrides,toolCapabilityMap:r.toolCapabilityMap,toolApprovalOverrides:r.toolApprovalOverrides}}catch{return}}};export{v as t};
1
+ import{I as e}from"./handlers-B74FvKlA.mjs";import{SessionStorageSubjects as t}from"./services/session/storage/namespace.mjs";import"./session-CX6QDhi2.mjs";import{AgentSubjects as n,ApprovalSubjects as r,HarnessSubjects as i,computeMetaTags as a}from"@makaio/framework/contracts";import{BaseService as o}from"@makaio/framework/service-base";import{extractToolFilePath as s}from"@makaio/framework/tools";const c={"full-access":0,"always-ask":1,reject:2};function l(){return`apr_${crypto.randomUUID()}`}function u(e){switch(e){case`allow`:return`full-access`;case`deny`:return`reject`;case`ask`:return`always-ask`}}function d(e){if(!e?.length)return`neutral`;let t=a(e);return t.includes(`destructive`)?`destructive`:t.includes(`read-only`)?`safe`:`neutral`}function f(e,t){if(e)return t&&e.toolApprovalOverrides?.[t]!==void 0?e.toolApprovalOverrides[t]:e.approvalPolicy}function p(e,t,n,r){let i=r[t];if(!i?.length)return e;let a=e;for(let e of i){let t=n[e];t&&c[t]>c[a]&&(a=t)}return a}function m(e,t,n){return n.handled?n.data.allowedDirectories??void 0:t?[]:void 0}function h(e,t,n){if(!n||!e?.cwd)return{};let r;return(e.personaId||e.profileId)&&t&&(r=m(e.personaId,e.profileId,t)),{cwd:e.cwd,...r&&{allowedDirectories:r}}}function g(e,t,n){if(!(!e&&!t))return!n||!n.handled?{policy:`always-ask`}:{policy:u(n.data.action),...n.data.personaName&&{personaName:n.data.personaName},...n.data.profileName&&{profileName:n.data.profileName}}}function _(e,t){let n=t.harness?.toolCapabilityMap&&e.toolName?t.harness.toolCapabilityMap[e.toolName]:void 0;return{requestId:l(),toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,agentId:e.agentId,sessionId:e.sessionId,adapterName:t.resolvedAdapterName,...t.personaName&&{personaName:t.personaName},...t.profileName&&{profileName:t.profileName},capabilities:n,riskLevel:d(n),reasoning:e.reasoning,createdAt:Date.now()}}var v=class extends o{logger=console;options;constructor(e,t={}){super(e),this.options=t}async onInit(){this.registerHandler(n.toolApprove,async e=>{let t=await this.getAgentMetadata(e.payload.agentId,e.payload.sessionId),n=(t?.personaId||t?.profileId)&&e.payload.toolName?await this.fetchRawEnrichedPolicy(t?.personaId,t?.profileId,e.payload.toolName):void 0,r=h(t,n,this.options.fileAccessRuleProvider),i=await this.checkFileAccessDenyReason(e.payload,r);if(i){e.setResult({action:`deny`,message:i,shouldAbort:!1});return}let a=await this.resolveSessionOverride(e.payload.sessionId);if(a===`full-access`){e.setResult({action:`allow`});return}if(a===`reject`){e.setResult({action:`deny`,message:`Tool use rejected by session approval policy override`,shouldAbort:!1});return}let o=await this.resolvePolicyWithContext({adapterName:e.payload.adapterName,toolName:e.payload.toolName},t,n);switch(a===`always-ask`?`always-ask`:o.policy){case`full-access`:e.setResult({action:`allow`});return;case`reject`:e.setResult({action:`deny`,message:`Tool use rejected by approval policy`,shouldAbort:!1});return;case`always-ask`:await this.dispatchAlwaysAskApproval(e.payload,e.setResult.bind(e),o);return}})}async dispatchAlwaysAskApproval(e,t,i){let a=_(e,i),o=new AbortController,s=this.bus.on(n.session.closed,()=>{o.abort()},{filter:{agentId:a.agentId,...e.adapterSessionId!==void 0&&{adapterSessionId:e.adapterSessionId}}});try{let e=await this.bus.requestOptional(r.request,a,{timeout:0,signal:o.signal});e.handled&&e.data.action===`allow`?t({action:`allow`,...e.data.updatedInput&&{updatedInput:e.data.updatedInput}}):t({action:`deny`,message:e.handled&&e.data.action===`deny`?e.data.message??`User denied tool execution`:`No approval handler available`,shouldAbort:!1})}catch{t({action:`deny`,message:o.signal.aborted?`Approval cancelled — agent session closed`:`Tool approval request failed`,shouldAbort:!1})}finally{s()}}async checkFileAccessDenyReason(e,t){if(!this.options.fileAccessRuleProvider||!t.cwd)return;let n=s(e.toolName,e.args,t.cwd);if(n)try{return(await this.options.fileAccessRuleProvider(t.cwd,t.allowedDirectories)).isDenied(n)?`Access denied: '${n}' is restricted by .makaioignore rules`:void 0}catch{return`Access denied: file access rules could not be evaluated`}}async fetchRawEnrichedPolicy(e,t,n){try{return await this.bus.requestOptional(r.resolveEnrichedPolicy,{toolName:n,personaId:e,profileId:t})}catch(r){return this.logger.error(`[ToolApprovalService] approval.resolveEnrichedPolicy failed; falling back to fail-closed`,{toolName:n,personaId:e,profileId:t,error:r}),{handled:!1}}}async resolvePolicyWithContext(e,t,n){let r=t?.adapterName??e.adapterName,i=g(t?.personaId,t?.profileId,n),a=await this.resolveHarnessPolicy(r,t?.harnessId,t?.clientId),o=f(a,e.toolName),s=i?.policy??o??`always-ask`,c=s;return a?.capabilityOverrides&&a.toolCapabilityMap&&e.toolName&&(c=p(s,e.toolName,a.capabilityOverrides,a.toolCapabilityMap)),{policy:c,harness:a,agent:t,resolvedAdapterName:r,...i?.personaName&&{personaName:i.personaName},...i?.profileName&&{profileName:i.profileName}}}async getAgentMetadata(t,n){try{if(n){let{agents:r}=await this.bus.request(e.listBySession,{sessionId:n});return r.find(e=>e.agentId===t)??null}let r=await this.bus.requestOptional(e.get,{agentId:t});return r.handled?r.data.agent:null}catch{return null}}async resolveSessionOverride(e){if(e)try{let n=await this.bus.requestOptional(t.get,{sessionId:e});return n.handled?n.data.session?.approvalPolicyOverride??void 0:void 0}catch{return}}async resolveHarnessPolicy(e,t,n){try{let r=await this.bus.request(i.resolve,{adapterName:e,...t&&{profileHarnessId:t},...n&&{clientId:n}});return{approvalPolicy:r.approvalPolicy,capabilityOverrides:r.capabilityOverrides,toolCapabilityMap:r.toolCapabilityMap,toolApprovalOverrides:r.toolApprovalOverrides}}catch{return}}};export{v as t};