@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
@@ -1,69 +0,0 @@
1
- import{agents as e,agentsDual as t,sessions as n,sessionsDual as r}from"./services/session/storage/schema.mjs";import"./schema-7aKBGB7S.mjs";import{a as i,n as a,o}from"./namespace-dFBD2ZmS.mjs";import{A as s,E as c,I as l,L as u,O as d,R as f,S as p,_ as m,d as h,f as g,g as _,h as v,l as ee,m as y,p as te,u as b,v as 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 ce,NoHandlerError as le,TimeoutError as ue}from"@makaio/framework/bus";import{AdapterSubjects as D,AgentSubjects as O,CanonicalModelSubjects as de,CapabilitySubjects as fe,ClientSubjects as pe,CompressionModeSchema as me,FORK_SESSION_LINEAGE_KIND as he,ForkTransformsSchema as ge,MessageRoutingSchema 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 k,TurnIngestionMarkerSchema as we,compareMessageCursorAsc as Te,compareMessageCursorDesc as Ee,isCanonicalModelParseError as De,messageToCursor as A,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 j,uniqueIndex as Fe}from"drizzle-orm/sqlite-core";import{index as Ie,primaryKey as Le}from"drizzle-orm/pg-core";import{defineDialectSchema as Re,defineDualTable as ze,didAffectRows as M,getRawSqlExecutor as Be,getStorageEngine as Ve,resolveSchema as N,resolveStorageEngine as P}from"@makaio/framework/storage/drizzle";import{and as F,asc as He,count as I,desc as Ue,eq as L,gt as We,gte as Ge,inArray as R,isNull as z,lt as Ke,lte as qe,or as Je,sql as B}from"drizzle-orm";import{createStorageNamespaceDefinition as Ye}from"@makaio/framework/storage";import{ClientIdentityObservationSchema as Xe}from"@makaio/framework/contracts/client";import{ImportCursorStorageSubjects as Ze}from"@makaio/framework/adapters";function Qe(e){return e.on(k.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 $e(e){return e.on(k.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 et(e){return e.on(O.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 tt(e){return[it(e),at(e),ot(e),nt(e),st(e),ut(e),dt(e),ft(e),pt(e),Qe(e.bus),$e(e.bus),et(e.bus)]}function nt(e){let{bus:t}=e;return t.on(k.turn.await,async e=>{let{sessionId:n,turnId:r,timeoutMs:i}=e.payload,a=new AbortController,o=t.once(k.turn.completed,{timeoutMs:i,filter:{sessionId:n,turnId:r},signal:a.signal});o.catch(()=>void 0);let s=await rt(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 ue(`session.turn.await`,i):e}})}async function rt(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 it(e){let{bus:t}=e;return t.on(k.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(k.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(k.created,{sessionId:h,createdAt:ee.createdAt,parentSessionId:r??null,branchKind:o??null,originWindowId:p??`server`}),e.setResult({sessionId:h})})}function at(e){let{bus:t}=e;return t.on(k.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 ot(e){let{bus:t}=e;return t.on(k.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 st(e){let{bus:t}=e;return t.on(k.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(k.closed,{sessionId:n}),e.setResult({success:!0})})}async function ct(e,t){try{let n=await e.requestOptional(D.getCapabilities,{adapterId:t});return n.handled?new Set(n.data.capabilities).has(`session:resume`):!1}catch{return!1}}async function lt(e,t){if(t!==void 0)return t;let n=await e.requestOptional(ae.getMachineId,{});return n.handled?n.data.machineId:void 0}function ut(e){let{bus:t}=e;return t.on(k.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 lt(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 ct(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 dt(e){let{bus:t}=e;return t.on(k.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(k.updated,{sessionId:n,changedProperties:e})}e.setResult({success:c})})}function ft(e){let{bus:t}=e;return t.on(k.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(k.archived,{sessionId:n}),e.setResult({success:!0})})}function pt(e){let{bus:t}=e;return t.on(k.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(k.purged,{sessionId:n}),e.setResult({success:!0,eventsDeleted:l})})}var mt=class extends ke{constructor(e=ce){super(e)}async onInit(){for(let e of tt({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(k.turn.completed,t)}}catch(t){console.error(`[MakaioSessionService] Failed to reconcile orphaned turn ${e.turnId}:`,t)}}};function ht(e){return Error(`No adapter found for adapterName="${e}". Ensure adapter-runtime identity handlers are registered; adapter startup verifies live availability.`)}var gt=class{bus;registry=new Map;cleanup;constructor(e){this.bus=e,this.cleanup=this.bus.on(D.initialized,e=>{this.registry.set(e.payload.adapterName,e.payload.adapterId)})}resolve(e){let t=this.registry.get(e);if(!t)throw ht(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 ht(e)}}destroy(){this.cleanup?.(),this.cleanup=void 0,this.registry.clear()}};async function _t(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 vt(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 _t(t,s)})}function yt(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`?Ue:He,l=n.select().from(r).where(L(r.sessionId,t)).orderBy(c(r.timestamp),c(r.messageId));if(a){let e=s===`desc`?Je(Ke(r.timestamp,a.timestamp),F(L(r.timestamp,a.timestamp),o?qe(r.messageId,a.messageId):Ke(r.messageId,a.messageId))):Je(We(r.timestamp,a.timestamp),F(L(r.timestamp,a.timestamp),o?Ge(r.messageId,a.messageId):We(r.messageId,a.messageId)));l=n.select().from(r).where(F(L(r.sessionId,t),e)).orderBy(c(r.timestamp),c(r.messageId))}let u=i??100,d=await l.limit(u+1),f=d.length>u,p=f?d.slice(0,u):d,m=f&&p.length>0?A(p[p.length-1]):null;e.setResult({messages:p.map(V),nextCursor:m})})}function bt(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(He(r.timestamp));e.setResult({messages:i.map(V)})})}function xt(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 St(e){let{bus:t,db:n}=e,{messages:r}=N(n,o),i=P(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 Ct(e){let{bus:t,db:n}=e,{messages:r}=N(n,o),i=P(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 wt(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 Tt(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(F(L(r.adapterMessageId,i),L(r.sessionId,a))).limit(1);if(m){m.turnId===null&&o!==null&&await n.update(r).set({turnId:o}).where(L(r.messageId,m.messageId)),e.setResult({messageId:m.messageId,created:!1});return}let h=crypto.randomUUID();if((await n.insert(r).values({messageId:h,turnId:o,sessionId:a,role:s,contentText:c,blocks:JSON.stringify(l),agentId:u??null,adapterSessionId:d??null,adapterMessageId:i,timestamp:f,editOf:null,origin:p??null}).onConflictDoNothing({target:[r.adapterMessageId,r.sessionId]}).returning({messageId:r.messageId})).length===0){let[t]=await n.select({messageId:r.messageId,turnId:r.turnId}).from(r).where(F(L(r.adapterMessageId,i),L(r.sessionId,a))).limit(1);if(t===void 0)throw Error(`Message upsert conflict winner disappeared before reread completed`);t.turnId===null&&o!==null&&await n.update(r).set({turnId:o}).where(L(r.messageId,t.messageId)),e.setResult({messageId:t.messageId,created:!1});return}e.setResult({messageId:h,created:!0}),await _t(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 Et(e,t){let n={bus:e,db:t},r=[vt(n),yt(n),bt(n),xt(n),St(n),Ct(n),Tt(n),wt(n)];return()=>r.forEach(e=>e())}function Dt(e,t){return Te(A(e),A(t))}function Ot(e,t){return Ee(A(e),A(t))}function kt(e,t){let n=e.get(t);if(n!==void 0)return n;let r=new Map;return e.set(t,r),r}function At(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 jt(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=Mt(t,n,r,i),o=[Nt(e,t,a),Pt(e,t,n),Ft(e,t,r),It(e,t),Lt(e,t),Rt(e,t,r,i,a),zt(e,t,n,r,i)];return()=>o.forEach(e=>e())}function Mt(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&&kt(r,i.sessionId).set(i.adapterMessageId,i.messageId)}}function Nt(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 _t(e,o)})}function Pt(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`?Ot:Dt,u=c.map(e=>t.get(e)).filter(e=>!!e).sort(l);a&&(u=u.filter(e=>{let t=s===`desc`?Ee(A(e),a):Te(A(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?A(p[p.length-1]):null;e.setResult({messages:p,nextCursor:m})})}function Ft(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(Dt);e.setResult({messages:i})})}function It(e,t){return e.on(T.get,async e=>{e.setResult({message:t.get(e.payload.messageId)??null})})}function Lt(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(Dt),e.setResult({messages:c.slice(0,a),total:c.length})})}function Rt(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){At(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 _t(e,v)})}function zt(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 Bt=ze(`message_routing`,e=>({messageId:e.text(`message_id`).notNull().references(i,{onDelete:`cascade`}),agentId:e.text(`agent_id`).notNull(),status:e.textEnum(`status`,{enum:[`sent`,`acknowledged`,`completed`]}).notNull(),timestamp:e.epochMs(`timestamp`).notNull(),error:e.text(`error`)}),{sqlite:e=>[Ne({columns:[e.messageId,e.agentId,e.status]}),je(`idx_routing_agent`).on(e.agentId,e.timestamp)],postgres:e=>[Le({columns:[e.messageId,e.agentId,e.status]}),Ie(`idx_routing_agent`).on(e.agentId,e.timestamp)]}),Vt=Bt.sqlite,Ht=Ye(`messageRouting`,{schemas:{record:{request:_e,response:E.object({success:E.boolean()})},getByMessage:{request:E.object({messageId:E.string()}),response:E.object({routing:E.array(_e)})},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:Vt}}}),H=Ht.subjects,Ut=Bt.postgres,Wt=Re({messageRouting:Vt},{messageRouting:Ut});function Gt(e){return{messageId:e.messageId,agentId:e.agentId,status:e.status,timestamp:e.timestamp,error:e.error??void 0}}function Kt(e,t){let{messageRouting:n}=N(t,Wt),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(Gt)})})),r.push(e.on(H.getCompleted,async e=>{let{messageId:r}=e.payload,i=await t.select().from(n).where(F(L(n.messageId,r),L(n.status,`completed`)));e.setResult({agentIds:i.map(e=>e.agentId)})})),r.push(e.on(H.isComplete,async e=>{let{messageId:r,targetAgentIds:i}=e.payload,a=await t.select().from(n).where(F(L(n.messageId,r),L(n.status,`completed`))),o=new Set(a.map(e=>e.agentId)),s=i.filter(e=>!o.has(e));e.setResult({complete:s.length===0,pending:s})})),()=>r.forEach(e=>e())}var qt=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()}},Jt=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 qt),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(O.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(O.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(k.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(k.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()}))}},Yt=class{bus;turnManager;adapterRegistry;machineId;cleanups=[];constructor(e=ce,t){this.bus=e,this.machineId=t,this.turnManager=new Jt(e),this.adapterRegistry=new gt(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(k.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(D.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(D.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(D.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(k.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(de.resolve,{parsed:i,context:{sessionId:t,promptText:m(n),...r===void 0?{}:{sessionContext:r}}});return{...e,...a,kind:`adapter`,providerConfigId:e.providerConfigId??a.providerConfigId}}},Xt=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 le||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 Zt(e){let{bus:t}=e;return t.on(k.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 Qt(e){let{bus:t}=e;return t.on(k.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(k.resumed,{sessionId:n}),e.setResult({success:!0})})}function $t(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 en=[{actionId:`strip-reasoning`},{actionId:`strip-tool-outputs`}];function tn(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 nn=class{bus;agentToSession=new Map;agentContext=new Map;agentBlocks=new Map;cleanups=[];constructor(e=ce){this.bus=e,this.registerHandlers()}registerHandlers(){this.registerMappingHandlers(),this.registerTurnTrackingHandlers(),this.registerBlockAccumulationHandlers()}registerMappingHandlers(){this.cleanups.push(this.bus.on(k.agent.added,e=>{this.agentToSession.set(e.payload.agentId,e.payload.sessionId)})),this.cleanups.push(this.bus.on(k.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(k.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(k.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(O.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(O.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(O.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(O.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(O.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()}},rn=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(k.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(k.fork,{sourceSessionId:this._sessionId,name:e.reason})).sessionId}async merge(e,t){await this.bus.request(k.merge,{parentSessionId:this._sessionId,childSessionId:e,summary:t,source:`extension`,extensionId:this._extensionId})}async abandon(e){await this.bus.request(k.abandon,{parentSessionId:this._sessionId,childSessionId:e,source:`extension`,extensionId:this._extensionId})}async requestCompression(e){await this.bus.emit(k.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(k.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(k.getChildren,{sessionId:this._sessionId})).children.map(e=>e.sessionId)}};function an(e,t,n,r,i,a){return new rn(e,t,n,r,i,a)}function on(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=on(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(k.clientAccount.changed,a)).catch(e=>{console.error(`[SessionStorage] Failed to emit session.clientAccount.changed:`,e)})})}function sn(e){switch(e){case`fork`:return`fork`;case`subagent`:return`subagent`;case`compress`:return`compress`;case`root`:return;default:return}}function cn(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 ln(){let e=0;return()=>{let t=Date.now();return e=t>e?t:e+1,e}}const un=ln();function dn(e,t){return e===`imported`||t===`imported`?`imported`:e===`tracking`||t===`tracking`?`tracking`:e??t??`discovered`}function fn(e,t,n){n!==void 0&&(e[t]=n)}function pn(e,t,n){let r=e.startedAt??n;return{sessionId:t,createdAt:r,lastActivityAt:r,agents:[],status:`discovered`,branchKind:sn(e.kind),adapterName:e.source,adapterSessionId:e.externalSessionId,adapterId:e.adapterId,clientId:e.clientId,isOrchestrated:!1,isImported:!0,title:e.title??void 0,targetWorkingDirectory:e.cwd??void 0,source:e.source,parentExternalSessionId:e.parentAdapterSessionId??void 0,logFilePath:e.logFilePath??void 0,discoveredAt:n,importStatus:e.importStatus??`discovered`,forkPointMessageId:e.forkPointMessageId??void 0,metadata:e.metadata,lastClientIdentityObservation:e.lastClientIdentityObservation,isSidechain:e.isSidechain,machineId:e.machineId??void 0}}function mn(e,t,n){let r=dn(e.importStatus,t.importStatus);r===`discovered`&&(e.status=`discovered`),e.isImported=!0,e.importStatus=r,e.adapterName??=t.source,e.adapterSessionId??=t.externalSessionId,e.source??=t.source,e.discoveredAt??=n}function hn(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=sn(t.kind);n!==void 0&&e.branchKind===void 0&&(e.branchKind=n),fn(e,`adapterId`,t.adapterId),fn(e,`clientId`,t.clientId),t.metadata!==void 0&&(e.metadata={...t.metadata,...e.metadata??{}}),fn(e,`isSidechain`,t.isSidechain),fn(e,`lastClientIdentityObservation`,t.lastClientIdentityObservation),t.machineId===null?e.machineId=void 0:t.machineId!==void 0&&(e.machineId??=t.machineId)}function gn(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 _n(e,t,n){let r=e.discoveredAt;mn(e,t,n),hn(e,t),gn(e,t,r)}function vn(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 yn(e,t,n){if(n){e.emit(k.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(k.updated,{sessionId:t.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}function bn(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 xn(e,t,n){e.emit(k.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(k.import.completed,{sessionId:t.sessionId,adapterSessionId:t.adapterSessionId,source:r}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}function Sn(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=un(),o=i===void 0,s=i??pn(r,crypto.randomUUID(),a);i?(_n(i,r,a),i.parentExternalSessionId!==void 0&&i.parentSessionId===void 0&&vn(n,i)):(n.set(s.sessionId,s),vn(n,s)),yn(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(bn(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}),xn(t,r,i)})]}async function Cn(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 wn(e,t,n){n!==void 0&&(e[t]=n??void 0)}function Tn(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 En(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),wn(e,`executionTargetId`,t.executionTargetId),wn(e,`approvalPolicyOverride`,t.approvalPolicyOverride),wn(e,`metadata`,t.metadata),t.spawningToolCallId===null?e.spawningToolCallId=void 0:t.spawningToolCallId!==void 0&&e.spawningToolCallId===void 0&&(e.spawningToolCallId=t.spawningToolCallId)}function Dn(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=Tn(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 Cn(e,t.sessionId)}))),d=o?u.map(e=>({...e,preview:{messageCount:0,firstUserMessage:null}})):u;n.setResult({sessions:d,total:l})})}function On(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}),En(i,r),n.setResult({success:!0,clientAccountChanged:(a.clientAccountId??null)!==(i.clientAccountId??null)}),W(e,a,G(i))})}function kn(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 Cn(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(Dn(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(On(e,t)),n.push(An(e,t)),n.push(...Sn({bus:e,store:t,populateAgents:Cn,cloneSession:G})),()=>n.forEach(e=>e())}function An(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 jn=r.postgres,Mn=t.postgres,q=Re({sessions:n,agents:e},{sessions:jn,agents:Mn});function Nn(e,t){let n=e?.clientId??null,r=e?.clientAccountId??null,i=e?.lastClientIdentityObservation??null;return F(n===null?z(t.clientId):L(t.clientId,n),r===null?z(t.clientAccountId):L(t.clientAccountId,r),i===null?z(t.lastClientIdentityObservation):L(t.lastClientIdentityObservation,i))}function Pn(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?me.parse(e.compressionMode):void 0}}function Fn(e){return{agentId:e.agentId,adapterId:e.adapterId,adapterName:e.adapterName,sessionId:e.sessionId,role:e.role,status:e.status,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,model:e.model??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 In(e){let t;for(let n=e.length-1;n>=0;--n)try{e[n]?.()}catch(e){t??=e}if(t)throw t}function Ln(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?Pn(t):null})})}function Rn(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=Fn(t),a=await n.insert(r).values(i).onConflictDoUpdate({target:r.agentId,set:i});e.setResult({success:M(a)})})}function zn(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 Bn(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?F(...a):a[0],s=await n.select().from(r).where(o);e.setResult({agents:s.map(Pn)})})}function Vn(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(Pn)})})}function Hn(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 Un(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 Wn(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 Gn(e,t){let n={bus:e,db:t},r=[Ln(n),Rn(n),zn(n),Bn(n),Vn(n),Hn(n),Un(n),Wn(n)];return()=>In(r)}function J(e){return e??void 0}function Kn(e){if(e)try{let t=JSON.parse(e),n=Xe.safeParse(t);return n.success?n.data:void 0}catch{return}}function qn(e){if(e)try{let t=JSON.parse(e),n=ge.safeParse(t);return n.success?n.data:void 0}catch{return}}function Y(e,t){let n=qn(e.forkTransforms),r=Kn(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(Pn),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 Jn(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 Yn(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(F(L(r.role,`user`),R(r.sessionId,t))).groupBy(r.sessionId).as(`first_user_message_by_session`),a=await e.select({sessionId:r.sessionId,preview:r.contentText}).from(r).innerJoin(i,F(L(r.sessionId,i.sessionId),L(r.timestamp,i.minTimestamp))).where(L(r.role,`user`)),s=new Map;for(let e of a)s.has(e.sessionId)||s.set(e.sessionId,e.preview);let c=await e.select({sessionId:r.sessionId,count:I()}).from(r).where(R(r.sessionId,t)).groupBy(r.sessionId),l=new Map;for(let e of c)l.set(e.sessionId,e.count);return{previewBySession:s,countBySession:l}}function Xn(e,t){return{sessionId:e.sessionId,clientId:t.clientId??e.clientId,clientAccountId:t.clientAccountId??e.clientAccountId,lastClientIdentityObservation:t.lastClientIdentityObservation??e.lastClientIdentityObservation}}function Zn(e){return e.clientId!==void 0||e.clientAccountId!==void 0||e.lastClientIdentityObservation!==void 0}function Qn(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(F(...s)).limit(2),l=c[0];if(c.length!==1||l===void 0){e.setResult({session:null});return}let u=await n.select().from(i).where(L(i.sessionId,l.sessionId));e.setResult({session:Y(l,u)})})}function $n(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:I()}).from(i).where(R(i.sessionId,o)).groupBy(i.sessionId),c=new Map;for(let e of s)c.set(e.sessionId,e.count);let l=await n.select({parentSessionId:r.parentSessionId,count:I()}).from(r).where(R(r.parentSessionId,o)).groupBy(r.parentSessionId),u=new Set;for(let e of l)e.parentSessionId&&u.add(e.parentSessionId);let d=a.map(e=>e.forkPointMessageId).filter(e=>e!==null),f=new Map;if(d.length>0){let e=await n.select({messageId:i.messageId,adapterMessageId:i.adapterMessageId}).from(i).where(F(L(i.sessionId,t),R(i.adapterMessageId,d)));for(let t of e)t.adapterMessageId&&f.set(t.adapterMessageId,t.messageId)}let p=a.map(e=>{let t=e.forkPointMessageId,n=t?f.get(t)??t:null;return{sessionId:e.sessionId,title:e.title??null,forkPointMessageId:n,branchKind:e.branchKind??null,messageCount:c.get(e.sessionId)??0,hasChildren:u.has(e.sessionId),spawningToolCallId:e.spawningToolCallId??void 0}});e.setResult({children:p})})}const er=ln();function tr(e){return e?JSON.stringify(e):null}function nr(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 rr(e,t){let n=t===`postgres`?B`excluded.metadata || ${e.metadata}`:B`(
15
- SELECT json_group_object(mk.key, json(mk.vjson)) FROM (
16
- ${nr(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
- ${nr(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 ir(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 ar(e,t,n,r){return{status:B`
33
- CASE
34
- WHEN COALESCE(${e.importStatus}, excluded.import_status) = 'discovered' THEN excluded.status
35
- ELSE ${e.status}
36
- END
37
- `,isImported:!0,importStatus:B`
38
- CASE
39
- WHEN ${e.importStatus} = 'imported' OR excluded.import_status = 'imported' THEN 'imported'
40
- WHEN ${e.importStatus} = 'tracking' OR excluded.import_status = 'tracking' THEN 'tracking'
41
- ELSE COALESCE(${e.importStatus}, excluded.import_status, 'discovered')
42
- END
43
- `,adapterName:B`COALESCE(${e.adapterName}, excluded.adapter_name)`,discoveredAt:B`COALESCE(${e.discoveredAt}, excluded.discovered_at)`,source:B`COALESCE(${e.source}, excluded.source)`,logFilePath:B`COALESCE(${e.logFilePath}, excluded.log_file_path)`,targetWorkingDirectory:B`COALESCE(excluded.target_working_directory, ${e.targetWorkingDirectory})`,title:B`COALESCE(excluded.title, ${e.title})`,forkPointMessageId:B`COALESCE(${e.forkPointMessageId}, excluded.fork_point_message_id)`,parentExternalSessionId:B`COALESCE(${e.parentExternalSessionId}, excluded.parent_external_session_id)`,branchKind:B`COALESCE(${e.branchKind}, excluded.branch_kind)`,adapterId:B`COALESCE(excluded.adapter_id, ${e.adapterId})`,clientId:B`COALESCE(excluded.client_id, ${e.clientId})`,isSidechain:B`COALESCE(excluded.is_sidechain, ${e.isSidechain})`,lastClientIdentityObservation:B`COALESCE(excluded.last_client_identity_observation, ${e.lastClientIdentityObservation})`,machineId:r===void 0?B`${e.machineId}`:r===null?B`NULL`:B`COALESCE(${e.machineId}, excluded.machine_id)`,metadata:rr(e,n),createdAt:ir(e.createdAt,t,e),lastActivityAt:ir(e.lastActivityAt,t,e)}}function or(e){let{bus:t,db:n}=e,{sessions:r}=N(n,q),{dialect:i}=Be(n);return t.on(w.importUpsert,async e=>{let{externalSessionId:a,source:o,clientId:s,adapterId:c,cwd:l,logFilePath:u,startedAt:d,title:f,kind:p,parentAdapterSessionId:m,forkPointMessageId:h,metadata:g,lastClientIdentityObservation:_,importStatus:v,isSidechain:ee,machineId:y}=e.payload,te=er(),b=crypto.randomUUID(),ne=d??te,x=sn(p)??null,S=m??null,[C]=await n.insert(r).values({sessionId:b,status:`discovered`,isImported:!0,importStatus:v??`discovered`,adapterName:o,adapterSessionId:a,source:o??null,clientId:s??null,adapterId:c??null,targetWorkingDirectory:l??null,logFilePath:u??null,forkPointMessageId:h??null,branchKind:x,parentExternalSessionId:S,discoveredAt:te,title:f??null,metadata:g??null,lastClientIdentityObservation:tr(_),isSidechain:ee??null,machineId:y??null,createdAt:ne,lastActivityAt:ne}).onConflictDoUpdate({target:[r.source,r.adapterSessionId],set:ar(r,d,i,y)}).returning({sessionId:r.sessionId,discoveredAt:r.discoveredAt,parentExternalSessionId:r.parentExternalSessionId,parentSessionId:r.parentSessionId}),w=C.sessionId===b;await sr(t,n,C,w,x,ne,o),e.setResult({sessionId:C.sessionId,created:w})})}async function sr(e,t,n,r,i,a,o){if(r){let r=await cr(t,n.sessionId,n.parentExternalSessionId,o);e.emit(k.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 cr(t,n.sessionId,n.parentExternalSessionId,o),e.emit(k.updated,{sessionId:n.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}async function cr(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(F(L(i.adapterSessionId,n),L(i.source,r))).limit(1);if(!a)return null;let o=a.rootSessionId??a.sessionId;return await e.update(i).set({parentSessionId:a.sessionId,rootSessionId:o}).where(L(i.sessionId,t)),a.sessionId}function lr(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 ur(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=F(...o),c=await n.select().from(r).where(s).orderBy(Ue(r.createdAt));if(c.length===0){e.setResult({sessions:[]});return}let l=c.map(e=>e.sessionId),u=Jn(await n.select().from(i).where(R(i.sessionId,l)));e.setResult({sessions:c.map(e=>Y(e,u.get(e.sessionId)??[]))})})}function dr(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(F(L(r.isImported,!0),L(r.source,t))).groupBy(r.importStatus),a=0,o=0,s=0,c=0;for(let e of i){let t=Number(e.count);a+=t,e.importStatus===`imported`&&(o+=t),e.importStatus===`tracking`&&(s+=t),e.importStatus===`discovered`&&(c=t)}e.setResult({total:a,imported:o,tracking:s,discovered:c})})}function fr(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`
44
- CASE
45
- WHEN ${r.status} = 'discovered' THEN 'active'
46
- ELSE ${r.status}
47
- END
48
- `}:{},[s]=await n.update(r).set({importStatus:a,...o}).where(F(L(r.sessionId,i),Je(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(k.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(k.import.completed,{sessionId:i,adapterSessionId:s.adapterSessionId,source:e}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}})}function pr(e,t){let n={bus:e,db:t};return[or(n),lr(n),ur(n),dr(n),fr(n)]}function X(e){return e??null}function mr(e){return e?JSON.stringify(e):null}function hr(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:gr(e.lastClientIdentityObservation),isOrchestrated:e.isOrchestrated??!1,isImported:e.isImported??!1,title:X(e.title),summary:X(e.summary),summaryUpdatedAt:X(e.summaryUpdatedAt),forkTransforms:mr(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 gr(e){return e?JSON.stringify(e):null}function Z(e,t,n){n!==void 0&&(e[t]=n)}function _r(e,t,n){n!==void 0&&(e[t]=n??null)}function vr(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),_r(n,`executionTargetId`,e.executionTargetId),_r(n,`approvalPolicyOverride`,e.approvalPolicyOverride),_r(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=gr(e.lastClientIdentityObservation)),n}function yr(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 br(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=hr(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:Nn(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 xr(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 Sr(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=vr(i,r),s=Zn(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=Xn(c,i);if(U(c,l),M(await n.update(r).set(o).where(F(L(r.sessionId,a),Nn(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 Cr(e,t){let n=[];return e.status!==`all`&&n.push(L(t.status,e.status)),e.executionTargetId!==void 0&&n.push(L(t.executionTargetId,e.executionTargetId)),F(...n)}function wr(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=Cr({status:t,executionTargetId:c},r),u=l?n.select().from(r).where(l):n.select().from(r),d=a===void 0?await u.orderBy(Ue(r.lastActivityAt)):await u.orderBy(Ue(r.lastActivityAt)).limit(a).offset(o),[f]=await(l?n.select({count:I()}).from(r).where(l):n.select({count:I()}).from(r)),p=f?.count??0;if(d.length===0){e.setResult({sessions:[],total:p});return}let m=d.map(e=>e.sessionId),h=Jn(await n.select().from(i).where(R(i.sessionId,m))),{previewBySession:g,countBySession:_}=await Yn(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 Tr(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:I()}).from(r).groupBy(r.status),i=0,a=0,o=0,s=0;for(let e of t)e.status===`active`?i=e.count:e.status===`closed`?a=e.count:e.status===`archived`?o=e.count:e.status===`discovered`&&(s=e.count);let c=i+a+o+s;e.setResult({all:c,active:i,closed:a,archived:o,discovered:s})})}function Er(e,t){let n={bus:e,db:t},r=[yr(n),br(n),xr(n),Sr(n),wr(n),$n(n),Qn(n),Tr(n),...pr(e,t)];return()=>r.forEach(e=>e())}function Dr(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 Or(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(!Dr(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 kr(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 Ar(e,t){return P(e).fts.fetchFirstUserMessagePreviews(e,t)}async function jr(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:I()}).from(n).where(R(n.sessionId,r)).groupBy(n.sessionId),a=new Map;for(let e of i)a.set(e.sessionId,e.count);return a}function Mr(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function Nr(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 Pr(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:Mr(e.fork_transforms),targetWorkingDirectory:e.target_working_directory??void 0,metadata:Nr(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 Fr(e,t){let n=P(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 kr(t,d),p=await Ar(t,d),m=await jr(t,d),h=l.map(e=>Pr(e,f.get(e.session_id)??[],p,m));e.setResult({sessions:h,total:u})})),()=>r.forEach(e=>e())}async function Ir(e,t){return(await Be(e).all(B`
49
- WITH RECURSIVE ancestors AS (
50
- SELECT session_id, parent_session_id
51
- FROM sessions
52
- WHERE session_id = ${t}
53
-
54
- UNION ALL
55
-
56
- SELECT s.session_id, s.parent_session_id
57
- FROM sessions s
58
- JOIN ancestors a ON s.session_id = a.parent_session_id
59
- )
60
- SELECT session_id FROM ancestors
61
- `)).map(e=>e.session_id)}const Lr=new Map;function Rr(e,t){let n=(Lr.get(e)??Promise.resolve()).then(t),r=n.then(()=>void 0,()=>void 0);return Lr.set(e,r),r.then(()=>{Lr.get(e)===r&&Lr.delete(e)}),n}function zr(e,t){return`${e}:${t}`}async function Br(e,t,n){let r=await e.requestOptional(a.getByIds,{sessionId:t,eventIds:[zr(`turn.completed`,n)]});if(r.handled)return r.data.events.length>0}function Vr(e,t){return Rr(`${t.sessionId}${t.turnAnchorId}`,()=>Hr(e,t))}async function Hr(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 Br(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 Ur(e,t,u,f??p)),{turnId:u.turnId,turnNumber:u.turnNumber,created:d}}async function Ur(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:zr(`turn.started`,n.turnId)}),await u(e,{type:`turn.completed`,sessionId:i,payload:f,eventId:zr(`turn.completed`,n.turnId)}),await e.emit(k.turn.started,d),await e.emit(k.turn.completed,f)}const Q=`observed-session-ingestion-policy`;function Wr(e,t){return e.emit(fe.register,{capabilityId:Q,provider:t})}function Gr(e,t){return e.emit(fe.unregister,{capabilityId:Q,providerId:t})}const Kr=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 qr(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 Jr(e){return e.importStatus===`discovered`&&e.clientId!==void 0}var Yr=class{bus;managedAdapterSessionIds=new Set;importerByClientId=new Map;unresolvedClientIds=new Set;policyProviders=new Map;cleanups=[];constructor(e=ce){this.bus=e,this.cleanups.push(this.bus.on(pe.runtime.started,e=>{this.handleRuntimeStarted(e.payload)}),this.bus.on(pe.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(pe.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(fe.register,e=>{let{provider:t}=e.payload;qr(t)&&this.policyProviders.set(t.id,t)},{filter:{capabilityId:Q}}),this.bus.on(fe.unregister,e=>{this.policyProviders.delete(e.payload.providerId)},{filter:{capabilityId:Q}}))}destroy(){for(let e of this.cleanups.splice(0))e()}handleRuntimeStarted(e){if(!(e.source.layer!==`adapter`||e.adapterSessionId===void 0)&&!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)}}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(Kr.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=Xr(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:he,parentAdapterSessionId:a,forkPointMessageId:null};(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,...r===void 0?{}:{metadata:r}})).handled||$(`Session storage unavailable; skipped observed-session registration`,{adapterSessionId: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(Kr.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(Kr.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(Jr(t.data.session))return!1;if(t.data.session.importStatus!==`discovered`)return!0}return await this.decideImportStatus(e)===`tracking`}};function Xr(e){if(e===void 0)return;let t=xe.safeParse(e);return t.success?t.data:void 0}const Zr=ze(`import_cursors`,e=>({filePath:e.text(`file_path`).primaryKey(),bytesRead:e.int8(`bytes_read`).notNull(),lastModified:e.text(`last_modified`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()})),Qr=Zr.sqlite,$r=Zr.postgres,ei=Re({importCursors:Qr},{importCursors:$r});function ti(e,t){let{importCursors:n}=N(t,ei),r=[];return r.push(e.on(Ze.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(Ze.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(Ze.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:j(`entity_type`).notNull(),entityId:j(`entity_id`).notNull(),model:j(`model`).notNull(),dimensions:Me(`dimensions`).notNull(),content:j(`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),Fe(`idx_embeddings_unique`).on(e.entityType,e.entityId,e.model)]);function ni(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 ri=class{rawSql;engine;knownTables=new Set;constructor(e){this.rawSql=Be(e),this.engine=Ve(this.rawSql.dialect)}slugify(e){return e.replace(/[^a-zA-Z0-9]/g,`_`).toLowerCase()}hashModel(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return t.toString(36)}getTableName(e){return`embeddings_idx_${this.slugify(e)}_${this.hashModel(e)}`}async ensureIndexTable(e,t){let n=this.getTableName(e);if(this.knownTables.has(n))return n;let r=B.identifier(n),i=B.raw(this.engine.capabilities.binaryColumnType);return await this.rawSql.run(B`CREATE TABLE IF NOT EXISTS ${r} (
62
- entity_type TEXT NOT NULL,
63
- entity_id TEXT NOT NULL,
64
- embedding ${i} NOT NULL,
65
- PRIMARY KEY (entity_type, entity_id)
66
- )`),this.knownTables.add(n),n}async upsertIndexed(e,t,n,r,i){let a=await this.ensureIndexTable(e,t),o=new Uint8Array(i.buffer,i.byteOffset,i.byteLength),s=B.identifier(a);await this.rawSql.run(B`INSERT INTO ${s} (entity_type, entity_id, embedding)
67
- VALUES (${n}, ${r}, ${o})
68
- ON CONFLICT(entity_type, entity_id) DO UPDATE SET
69
- embedding = excluded.embedding`)}async searchSimilar(e,t,n=10){let r=this.getTableName(e);if(!this.knownTables.has(r)){if(!await this.engine.capabilities.tableExists(this.rawSql,r))return[];this.knownTables.add(r)}let i=B.identifier(r),a=await this.rawSql.all(B`SELECT entity_type, entity_id, embedding FROM ${i}`);return a.length===0?[]:a.map(e=>{let n=ni(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)}},ii=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(k.turn.completed,n),this._completedTurnIds.add(e.turnId)}async emit(e,t){await this.bus.emit(e,{...t,sessionId:this.sessionId})}};function ai(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(F(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(k.import.completed,async i=>{let{adapterSessionId:a,sessionId:o,source:s}=i.payload,c=await t.select({sessionId:n.sessionId,adapterSessionId:n.adapterSessionId,branchKind:n.branchKind}).from(n).where(F(L(n.parentExternalSessionId,a),L(n.source,s),z(n.parentSessionId)));if(c.length===0)return;let{session:l}=await e.request(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 oi=new Set([`Agent`,`spawn_subagent`]),si=`[^A-Za-z0-9_-]`;function ci(e){return e.replaceAll(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function li(e,t){return t.test(e)}async function ui(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 di(e){let t=[];for(let n of e)for(let e of n.blocks)e.type===`tool_call`&&oi.has(e.name)&&t.push({toolCallId:e.toolCallId});return t}function fi(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(li(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 pi(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 mi(e){return[...e].map(e=>{let t=ci(e);return{id:e,pattern:RegExp(`(^|${si})${t}($|${si})`)}})}async function hi(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=mi(new Set([o])),c=(await Promise.all(i.map(async t=>{let n=await ui(e,t.sessionId),r=di(n);if(r.length===0)return null;let i=fi(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 gi(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 _i(e,c);if(l.size===0)return;let u=await ui(e,a),d=di(u);if(d.length===0)return;let f=fi(u,mi(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 _i(e,t){return pi(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 vi(e){return e.on(k.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 hi(e,n,i.parentSessionId);return}if(i.branchKind!==`compress`)return;await gi(e,i,r)}catch(e){console.error(`[CompressLineageResolver] Failed to resolve compress lineage`,{payload:t.payload,error:e})}})}function yi(e){return[...e].map(e=>{let t=ci(e);return{id:e,pattern:RegExp(`(^|${si})${t}($|${si})`)}})}async function bi(e,t,n){return pi(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 xi(e){return e.on(k.import.completed,async t=>{try{let{sessionId:n,source:r}=t.payload,{children:i}=await e.request(w.getChildren,{sessionId:n}),a=await bi(e,r,i),o=new Set(a.keys());if(o.size===0)return;let s=await ui(e,n),c=di(s);if(c.length===0)return;let l=fi(s,yi(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 Si(e){return e.on(D.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=cn({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 Ci=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(O.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{mt as $,Gn as A,Zt as B,Pr as C,Yn as D,Er as E,an as F,Kt as G,Xt as H,nn as I,Vt as J,Ht as K,tn as L,sn as M,cn as N,Jn as O,rn as P,gt as Q,en as R,Ar as S,Or as T,Yt as U,Qt as V,Jt as W,jt as X,Bt as Y,Et as Z,Vr as _,ai as a,kr as b,ti as c,Kr as d,tt as et,Yr as f,Gr as g,Wr as h,vi as i,kn as j,Y as k,Qr as l,Q as m,Si as n,ii as o,Jr as p,H as q,xi as r,ri as s,Ci as t,Zr as u,Ir as v,Mr as w,jr as x,Fr as y,$t as z};
@@ -1 +0,0 @@
1
- import{B as e,x as t}from"./handlers-B74FvKlA.mjs";import{SessionStorageSubjects as n}from"./services/session/storage/namespace.mjs";import{$ as r,A as i,E as a,G as o,I as s,U as c,Z as l,a as u,c as d,f,i as ee,n as te,r as ne,y as re}from"./session-CZUrp7gC.mjs";import{n as p}from"./namespace-DBHwyhME.mjs";import{t as ie}from"./capability-service-XlymTzz1.mjs";import"./services/adapter-subsystem/index.mjs";import{i as ae,s as oe}from"./model-registry-rYICIwyR.mjs";import{t as se}from"./tool-approval-service-BIbUSuqg.mjs";import{t as ce}from"./tray-menu-service-B2AxiQqL.mjs";import{r as m,t as h}from"./handler-BFNvtv5t.mjs";import{n as le}from"./package-CF_Zm2v4.mjs";import{t as ue}from"./filesystem-service-Bmyqo6po.mjs";import{z as g}from"zod";import{createHash as de}from"node:crypto";import{MakaioError as fe,createMakaioContext as pe}from"@makaio/framework/core";import{MakaioBus as _}from"@makaio/framework/bus";import{AdapterSubjects as me,ArtifactSubjects as v,CanonicalModelSubjects as he,DEFAULT_HARNESSES as ge,HarnessDefinitionCreateSchema as _e,HarnessSubjects as y,JsonValueSchema as ve,ToolSubjects as b,TransitionRuleDefinitionSchema as ye,WorkflowBlocksSubjects as be,WorkflowSubjects as xe,dep as x,extensionToken as S,validateToolAdapterIdentity as Se,zodSchemaToJsonRecord as C}from"@makaio/framework/contracts";import{BaseService as w}from"@makaio/framework/service-base";import{registerDrizzleHandlers as T}from"@makaio/framework/storage/drizzle";import{slugifyProviderConfigName as E}from"@makaio/framework/contracts/config";import{ClientAccountIdentifierSchema as Ce,ClientSessionAccountObserveSchema as we,ClientSubjects as D}from"@makaio/framework/contracts/client";import{FacetSubjects as O}from"@makaio/framework/contracts/facet";import{MaterializationSubjects as k}from"@makaio/framework/contracts/materialization";import{FILE_ACCESS_RULES_KEY as Te,FILE_ACCESS_RULES_KEY as Ee,ToolErrorCodes as A,errorToToolResult as De,extractToolFilePath as Oe,toolError as j,toolSuccess as ke}from"@makaio/framework/tools";import{ConditionSchema as Ae,evaluate as je}from"@makaio/framework/rules";import{evaluateSync as Me}from"@makaio/framework/expression";import{GitService as Ne}from"@makaio/framework/git";const Pe=[{type:`supersedes`,symmetry:`asymmetric`},{type:`contradicts`,symmetry:`symmetric`},{type:`derives_from`,symmetry:`asymmetric`},{type:`responds_to`,symmetry:`asymmetric`},{type:`contains`,symmetry:`asymmetric`},{type:`refines`,symmetry:`asymmetric`},{type:`scopes`,symmetry:`asymmetric`},{type:`references`,symmetry:`asymmetric`},{type:`evidenced_by`,symmetry:`asymmetric`}],M={extension:0,"factory-repo":1,"target-repo":2},N={source:`extension`,ownerKey:`extension:bus`};function P(e){return`${e.source}:${e.ownerKey}`}function Fe(e,t){return e.source===t.source&&e.ownerKey===t.ownerKey}function F(e){return structuredClone(e)}function I(e,t){return`${e}@${t}`}var L=class extends w{kinds=new Map;kindContributions=new Map;nextKindContributionOrder=0;relationTypes=new Map;constructor(e){super(e)}async onInit(){for(let e of Pe)this.relationTypes.set(e.type,e);this.registerHandler(v.kind.register,e=>{this.registerKind(e.payload),e.setResult({registered:!0})}),this.registerHandler(v.kind.list,e=>{let{kind:t}=e.payload,n=[...this.kinds.values()].filter(e=>!t||e.kind===t).map(F);e.setResult({kinds:n})}),this.registerHandler(v[`relation-type`].register,e=>{this.storeRelationType(e.payload),e.setResult({registered:!0})}),this.registerHandler(v[`relation-type`].list,e=>{let{type:t}=e.payload,n=[...this.relationTypes.values()].filter(e=>!t||e.type===t).map(F);e.setResult({relationTypes:n})})}compareKindContributions(e,t){let n=M[e.owner.source]-M[t.owner.source];return n===0?e.owner.source===`extension`?t.order-e.order:e.order-t.order:n}findSameTierRepoConflict(e,t,n){return[...e.values()].find(e=>!Fe(e.owner,t)&&e.owner.source===t.source&&t.source!==`extension`&&e.order<=n)}recomputeKindWinner(e){let t=this.kindContributions.get(e),n=this.kinds.get(e);if(t===void 0||t.size===0){this.kindContributions.delete(e),this.kinds.delete(e),this.emitKindChangedFromKey(e,n);return}let r;for(let e of t.values())(r===void 0||this.compareKindContributions(e,r)<0)&&(r=e);let i=r;this.kinds.set(e,F(i.registration)),JSON.stringify(n)!==JSON.stringify(i.registration)&&this.bus.emit(v.kind.changed,{kind:i.registration.kind,schemaVersion:i.registration.schemaVersion})}emitKindChangedFromKey(e,t){t!==void 0&&this.bus.emit(v.kind.changed,{kind:t.kind,schemaVersion:t.schemaVersion})}registerKind(e,t=N){let n=I(e.kind,e.schemaVersion),r=this.kindContributions.get(n)??new Map,i=P(t),a=r.get(i),o=t.source===`extension`?this.nextKindContributionOrder:a?.order??this.nextKindContributionOrder,s=this.findSameTierRepoConflict(r,t,o);if(s!==void 0){console.warn(`[ArtifactSchemaRegistry] Artifact kind '${n}' is already registered by '${s.owner.ownerKey}' at the same priority; keeping the existing owner.`);return}r.set(i,{owner:t,registration:F(e),order:t.source===`extension`||a===void 0?this.nextKindContributionOrder++:a.order}),this.kindContributions.set(n,r),this.recomputeKindWinner(n)}deregisterKind(e,t,n=N){let r=I(e,t),i=this.kindContributions.get(r);i!==void 0&&(i.delete(P(n)),this.recomputeKindWinner(r))}replaceKindRegistrationsForOwner(e,t){let n=new Set,r=P(e),i=new Map;for(let[e,t]of this.kindContributions.entries()){let a=t.get(r);a!==void 0&&(i.set(e,a.order),t.delete(r),n.add(e))}for(let a of t){let t=I(a.kind,a.schemaVersion),o=this.kindContributions.get(t)??new Map,s=e.source===`extension`?void 0:i.get(t),c=s??this.nextKindContributionOrder,l=this.findSameTierRepoConflict(o,e,c);if(l!==void 0){console.warn(`[ArtifactSchemaRegistry] Artifact kind '${t}' is already registered by '${l.owner.ownerKey}' at the same priority; keeping the existing owner.`);continue}o.set(r,{owner:e,registration:F(a),order:s??this.nextKindContributionOrder++}),this.kindContributions.set(t,o),n.add(t)}for(let e of n)this.recomputeKindWinner(e)}storeRelationType(e){let t=this.relationTypes.get(e.type);if(t){if(t.symmetry!==e.symmetry)throw Error(`Relation type '${e.type}' is already registered with different symmetry (existing: '${t.symmetry}', new: '${e.symmetry}')`);return}this.relationTypes.set(e.type,F(e))}getKind(e,t){let n=this.kinds.get(I(e,t));return n?F(n):void 0}getRelationType(e){let t=this.relationTypes.get(e);return t?F(t):void 0}onDestroy(){this.kinds.clear(),this.kindContributions.clear(),this.relationTypes.clear(),this.nextKindContributionOrder=0}},R=class extends Error{reason;hookId;constructor(e,t){super(`Artifact write rejected by hook '${t}': ${e}`),this.reason=e,this.hookId=t,this.name=`ArtifactLifecycleHookRejectedError`}};function z(e,t){return e?!(e.kind!==void 0&&e.kind!==`*`&&e.kind!==t.kind||e.schemaVersion!==void 0&&e.schemaVersion!==t.schemaVersion):!0}function B(e){return e.priority??0}function Ie(e,t,n){return e.filter(e=>e.event===t&&z(e.filter,n)).sort((e,t)=>B(t)-B(e))}function Le(e,t,n){return e.filter(e=>e.event===t&&z(e.filter,n)).sort((e,t)=>B(t)-B(e))}function Re(e,t){return{...e,...`data`in t?{data:t.data}:{},...`relations`in t?{relations:t.relations}:{},...`confidence`in t?{confidence:t.confidence}:{},...`representations`in t?{representations:t.representations}:{},...`actor`in t?{actor:t.actor}:{}}}function ze(e,t){let{confidence:n,representations:r,...i}=e;return{...i,data:t.data,relations:[...t.relations],...t.confidence===void 0?{}:{confidence:t.confidence},...t.representations===void 0?{}:{representations:t.representations},actor:t.actor}}var V=class extends w{registrations=new Map;constructor(e){super(e)}async onInit(){}onDestroy(){this.registrations.clear()}registerHooks(e,t){let n=[...t];this.registrations.set(e,n);let r=!1;return()=>{r||(r=!0,this.registrations.get(e)===n&&this.registrations.delete(e))}}allHooks(){let e=[];for(let t of this.registrations.values())e.push(...t);return e}async runBeforeCreate(e){return this.runBeforeHooks(`beforeCreate`,e)}async runBeforeRevise(e){return this.runBeforeHooks(`beforeRevise`,e)}async runBeforeHooks(e,t){let{draft:n,previous:r,kindRegistration:i}=t,a=Ie(this.allHooks(),e,n),o=new Map,s={kind:n.kind,schemaVersion:n.schemaVersion,scope:n.scope,data:n.data,relations:n.relations,...n.confidence===void 0?{}:{confidence:n.confidence},...n.representations===void 0?{}:{representations:n.representations},actor:n.actor},c=!1;for(let t of a){let n,a={event:e,get draft(){return s},previous:r,kindRegistration:i,bus:this.bus,meta:o,rejectCreation(e){n={reason:e}},skipMaterialization(){c=!0},updateDraft(e){s=Re(s,e)}};if(await t.handler(a),n)throw new R(n.reason,t.id)}return{draft:ze(n,s),skipMaterialization:c,meta:o}}async runAfterCreate(e){await this.runAfterHooks(`afterCreate`,`created`,e)}async runAfterRevise(e){await this.runAfterHooks(`afterRevise`,`revised`,e)}async runAfterStatusChanged(e){await this.runAfterHooks(`afterStatusChanged`,`status-changed`,e)}async runAfterObservationAdded(e){await this.runAfterHooks(`afterObservationAdded`,`observation-added`,e)}async runAfterHooks(e,t,n){let{artifact:r,previous:i,observation:a,kindRegistration:o,projectionPolicy:s,skipDefaultProjection:c,meta:l}=n,u=Le(this.allHooks(),e,r),d=this.bus,f=!1;for(let n of u){if(c&&(n.priority??0)<0||f&&(n.priority??0)<0)continue;let u={event:e,semanticEvent:t,artifact:r,previous:i?{refClass:`artifact`,id:i.id,revision:i.revision,kind:i.kind}:void 0,observation:a,kindRegistration:o,projectionPolicy:s,bus:d,meta:l,preventDefault(){f=!0},async resolveRelations(e){let t=r.relations.filter(t=>t.type===e).map(e=>e.target),n=[];for(let e of t){let t=e;if(t.refClass===`artifact`){let e=t,{artifact:r}=await d.request(v.resolve,{ref:e});r&&n.push(r)}}return n}};try{await n.handler(u)}catch(t){console.error(`[ArtifactLifecycleHookRegistry] Hook '${n.id}' threw during '${e}':`,t)}}}};function H(e){return structuredClone(e)}var Be=class extends w{namespaces=new Map;constructor(e){super(e)}async onInit(){this.registerHandler(O.namespace.register,e=>{this.registerNamespace(e.payload),e.setResult({registered:!0})}),this.registerHandler(O.namespace.list,e=>{let{namespace:t}=e.payload,n=[...this.namespaces.values()].filter(e=>!t||e.namespace===t).map(H);e.setResult({namespaces:n})})}registerNamespace(e){let t=this.namespaces.get(e.namespace);if(t){if(JSON.stringify(t)!==JSON.stringify(e))throw Error(`Facet namespace '${e.namespace}' is already registered with a different definition`);return}this.namespaces.set(e.namespace,H(e)),this.bus.emit(O.namespace.changed,{namespace:e.namespace})}deregisterNamespace(e){this.namespaces.delete(e)&&this.bus.emit(O.namespace.changed,{namespace:e})}getNamespace(e){let t=this.namespaces.get(e);return t?H(t):void 0}onDestroy(){this.namespaces.clear()}};function U(e){return structuredClone(e)}var Ve=class extends w{bindings=new Map;constructor(e){super(e)}async onInit(){this.registerHandler(k.surfaceBinding.register,e=>{this.registerBinding(e.payload),e.setResult({registered:!0})}),this.registerHandler(k.surfaceBinding.list,e=>{let{provider:t,namespace:n}=e.payload,r=[...this.bindings.values()].filter(e=>(!t||e.provider===t)&&(!n||e.namespace===n)).map(U);e.setResult({bindings:r})})}registerBinding(e){let t=this.bindings.get(e.id);if(t){if(JSON.stringify(t)!==JSON.stringify(e))throw Error(`Surface binding '${e.id}' is already registered with a different definition`);return}this.bindings.set(e.id,U(e)),this.bus.emit(k.surfaceBinding.changed,{id:e.id,provider:e.provider})}deregisterBinding(e){let t=this.bindings.get(e);t&&(this.bindings.delete(e),this.bus.emit(k.surfaceBinding.changed,{id:e,provider:t.provider}))}getBinding(e){let t=this.bindings.get(e);return t?U(t):void 0}onDestroy(){this.bindings.clear()}},W=class extends fe{code;suggestions;constructor(e,t,n){super(e),this.code=t,this.suggestions=n}},He=class{deps;constructor(e){this.deps=e}async resolve(e,t){switch(e.kind){case`bare`:return this.resolveBare(e.model);case`qualified`:return this.resolveQualified(e.segment1,e.segment2,e.model)}}async resolveBare(e){let t=await this.deps.resolveDefaultModelTarget(e);switch(t.kind){case`resolved`:return{kind:`adapter`,adapterName:t.target.adapterName,providerConfigId:t.target.providerConfigId,model:t.target.model};case`ambiguous`:throw new W(`Model "${e}" is available via multiple providers. Use a qualified reference to select one.`,`ambiguous-model`,t.matches.map(e=>e.qualifiedName));case`not-found`:throw new W(`Model "${e}" was not found in any enabled adapter's registry.`,`model-not-found`)}}async resolveQualified(e,t,n){return t===void 0?this.resolveQualifiedOneSegment(e,n):this.resolveQualifiedTwoSegments(e,t,n)}async resolveQualifiedTwoSegments(e,t,n){let r=await this.deps.listEnabledAdapterNames();if(!r.includes(e))throw new W(`Adapter "${e}" is not enabled or does not exist.`,`adapter-not-found`);return{kind:`adapter`,adapterName:e,providerConfigId:await this.resolveProviderSegment(t,e,r),model:n}}async resolveQualifiedOneSegment(e,t){let n=await this.deps.listEnabledAdapterNames();if(n.includes(e)){let n=await this.deps.getDefaultBinding(e);if(!n)throw new W(`Adapter "${e}" has no enabled provider binding. Configure or enable a provider binding first.`,`no-binding`);return{kind:`adapter`,adapterName:e,providerConfigId:n.providerConfigId,model:t}}let r=await this.deps.findProviderConfigByName(e);if(r)return{kind:`adapter`,adapterName:(await this.pickBindingForConfig(r.id,n)).adapterName,providerConfigId:r.id,model:t};let i=await this.deps.findProviderDefinition(e,n);if(i){let r=await this.deps.findDefaultConfigForDefinition(i.id);if(!r)throw new W(`Provider definition "${e}" exists but has no configured provider config. Create a provider config first.`,`provider-not-found`);return{kind:`adapter`,adapterName:(await this.pickBindingForConfig(r.id,n)).adapterName,providerConfigId:r.id,model:t}}throw new W(`"${e}" does not match any enabled adapter name, provider config name, or provider definition ID.`,`adapter-not-found`)}async resolveProviderSegment(e,t,n){let r=await this.deps.findProviderConfigByName(e);if(r)return await this.requireBindingForAdapterAndConfig(t,r.id,e),r.id;let i=await this.deps.findProviderDefinition(e,n);if(i){let n=await this.deps.findConfigForDefinitionAndAdapter(i.id,t);if(!n)throw new W(`Provider definition "${e}" has no enabled config bound to adapter "${t}". Create a provider config and binding first.`,`no-binding`);return n.id}throw new W(`"${e}" does not match any provider config name or provider definition ID.`,`provider-not-found`)}async requireBindingForAdapterAndConfig(e,t,n){if(!(await this.deps.listBindingsForConfig(t)).some(t=>t.adapterName===e))throw new W(`No binding exists between adapter "${e}" and provider "${n}". Create a binding first.`,`no-binding`)}async pickBindingForConfig(e,t){let n=(await this.deps.listBindingsForConfig(e)).filter(e=>t.includes(e.adapterName));if(n.length===0)throw new W(`Provider config "${e}" has no bindings to enabled adapters. Bind it to an enabled adapter first.`,`no-binding`);return n.find(e=>e.isDefault)??n[0]}},Ue=class e extends w{constructor(e=_){super(e)}async onInit(){await this.bus.request(p.ensureReady,{});let e=new He(this.createDeps());this.registerHandler(he.resolve,async t=>{let n=await e.resolve(t.payload.parsed,t.payload.context);t.setResult(n)})}createDeps(){let e=this.bus,t=async()=>{let{adapters:t}=await e.request(p.listAdapters,{});return t.filter(e=>e.enabled).map(e=>e.name)},n=async t=>{let[n,r]=await Promise.all([e.request(p.getDefaultBinding,{adapterName:t}),this.listEnabledProviderConfigIds()]);if(n.binding&&r.has(n.binding.providerConfigId))return n.binding;let{bindings:i}=await e.request(p.listBindings,{adapterName:t}),a=i.filter(e=>r.has(e.providerConfigId));return a.find(e=>e.isDefault)??a[0]},r=async t=>{let{definitions:n}=await e.request(p.getProviderDefinitionsByAdapter,{adapterName:t});return n},i=async t=>{let{bindings:n}=await e.request(p.listBindingsByConfig,{providerConfigId:t});return n},a=async t=>{let{configs:n}=await e.request(p.listProviderConfigs,{enabled:!0}),r=E(t);return n.find(e=>E(e.name)===r)},o=this.buildFindProviderDefinition(t,r),s=async t=>{let{configs:n}=await e.request(p.listProviderConfigsByDefinition,{definitionId:t}),r=n.filter(e=>e.enabled);return r.find(e=>e.isDefault)??r[0]},c=async(t,n)=>{let{config:r}=await e.request(p.findConfigForDefinitionAndAdapter,{definitionId:t,adapterName:n});return r?{id:r.id}:void 0};return{listEnabledAdapterNames:t,getDefaultBinding:n,findProviderConfigByName:a,findProviderDefinition:o,listBindingsForConfig:i,findDefaultConfigForDefinition:s,findConfigForDefinitionAndAdapter:c,resolveDefaultModelTarget:this.buildResolveDefaultModelTarget(t,r,c)}}buildFindProviderDefinition(e,t){return async(n,r)=>{let i=r??await e();for(let e of i){let r=(await t(e)).find(e=>e.id===n);if(r)return r}}}buildResolveDefaultModelTarget(t,n,r){let i=this.bus;return async a=>{let o=await t(),s=await Promise.all(o.map(async e=>({adapterName:e,definitions:await n(e)}))),c=Array.from(new Set(s.flatMap(({definitions:e})=>e.map(e=>e.id))));if(c.length===0)return{kind:`not-found`};let{matches:l}=await i.request(oe.checkModelInProviders,{providerIds:c,model:a}),u=(await Promise.all(s.map(({adapterName:e,definitions:t})=>this.collectAdapterCandidates(e,t,a,l,r)))).flat();return e.buildResolution(u)}}async collectAdapterCandidates(e,t,n,r,i){let a=t.filter(e=>e.id in r),o=await Promise.all(a.map(t=>i(t.id,e)));return a.flatMap((t,r)=>{let i=o[r];return i?[{adapterName:e,definitionId:t.id,providerConfigId:i.id,qualifiedName:`${e}/${t.id}::${n}`,model:n}]:[]})}static buildResolution(e){let t=Array.from(new Map(e.map(e=>[this.routeKey(e),e])).values());if(t.length===0)return{kind:`not-found`};if(t.length>1)return{kind:`ambiguous`,matches:t.map(({adapterName:e,definitionId:t,qualifiedName:n})=>({adapterName:e,definitionId:t,qualifiedName:n}))};let[n]=t;return{kind:`resolved`,target:{adapterName:n.adapterName,providerConfigId:n.providerConfigId,definitionId:n.definitionId,model:n.model}}}static routeKey(e){return`${e.adapterName}\0${e.definitionId}\0${e.providerConfigId}`}async listEnabledProviderConfigIds(){let{configs:e}=await this.bus.request(p.listProviderConfigs,{enabled:!0});return new Set(e.map(e=>e.id))}};const G={name:`makaio.canonical-model`,displayName:`Canonical Model`,version:`0.1.0`,critical:!1,create:e=>new Ue(e.bus)};function We(e){let t=Se({adapterId:e?.adapterId,adapterName:e?.adapterName,contextOverrides:{adapterId:e?.contextOverrides?.adapterId,adapterName:e?.contextOverrides?.adapterName}}),n=t.issues[0];return n?j(A.VALIDATION_FAILED,n.message):ke(t.effectiveIdentity)}function Ge(e){let t=e?.allowedDirectories;if(Array.isArray(t))return t.filter(e=>typeof e==`string`)}async function Ke(e,t,n,r){let i=new Map;for(let e of t)i.set(e.name,await r(e.name));let a=t.filter(e=>{let t=i.get(e.name);return!t?.allowedAdapters||t.allowedAdapters.length===0?!0:t.allowedAdapters.includes(n)}),o=new Set(a.map(e=>e.name));return{filteredTools:e.filter(e=>!(!o.has(e.toolsetName)||i.get(e.toolsetName)?.disabledTools?.includes(e.name))),filteredToolsets:a}}function qe(){return`exec_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}var Je=class{bus;toolsets=new Map;tools=new Map;cleanupHandlers=[];handlerPriority;policyProvider;fileAccessRuleProvider;revision=0;constructor(e){this.bus=e?.bus??_,this.handlerPriority=e?.handlerPriority??0,this.policyProvider=e?.policyProvider,this.fileAccessRuleProvider=e?.fileAccessRuleProvider,this.registerHandlers()}registerHandlers(){let e=this.bus.on(b.list,async e=>{let{toolsetName:t,adapterId:n,adapterName:r}=e.payload,{tools:i,toolsets:a}=await this.listToolsWithToolsets({toolsetName:t,adapterId:n,adapterName:r});e.setResult({tools:i,toolsets:a})},{priority:this.handlerPriority});this.cleanupHandlers.push(e);let t=this.bus.on(b.execute,async e=>{let{toolName:t,input:n,adapterId:r,adapterName:i,contextOverrides:a}=e.payload,o=await this.execute(t,n,{contextOverrides:a,adapterId:r,adapterName:i});e.setResult(o)},{priority:this.handlerPriority});this.cleanupHandlers.push(t)}async register(e){if(this.toolsets.has(e.metadata.name))throw Error(`Toolset '${e.metadata.name}' is already registered`);let t=[],n=[];for(let[,r]of Object.entries(e.tools)){let i=r.metadata.name;if(this.tools.has(i))throw Error(`Tool '${i}' is already registered (from toolset '${this.tools.get(i).toolsetName}')`);n.push({tool:r,toolsetName:e.metadata.name}),t.push(i)}this.toolsets.set(e.metadata.name,e);for(let e=0;e<n.length;e+=1)this.tools.set(t[e],n[e]);await this.emitRegistryChanged(`toolset-registered`,e.metadata.name).catch(t=>console.warn(`[ToolRegistry] Failed to emit ${b.registryChanged.subject} for '${e.metadata.name}':`,t)),await this.bus.emit(b.registered,{toolsetName:e.metadata.name,toolsetVersion:e.metadata.version,toolNames:t}).catch(t=>console.warn(`[ToolRegistry] Failed to emit ${b.registered.subject} for '${e.metadata.name}':`,t))}async deregister(e){let t=this.toolsets.get(e);if(!t)throw Error(`Toolset '${e}' is not registered`);for(let e of Object.values(t.tools))this.tools.delete(e.metadata.name);this.toolsets.delete(e),await this.emitRegistryChanged(`toolset-unregistered`,e).catch(t=>console.warn(`[ToolRegistry] Failed to emit ${b.registryChanged.subject} for '${e}':`,t))}async emitRegistryChanged(e,t){this.revision+=1,await this.bus.emit(b.registryChanged,{revision:this.revision,reason:e,toolsetName:t})}async execute(e,t,n){let r=this.tools.get(e);if(!r)return j(A.TOOL_NOT_FOUND,`Tool '${e}' not found`);let i=We(n);if(!i.success)return i;let{tool:a,toolsetName:o}=r,s=await this.checkPolicy(o,e,i.data.adapterId,i.data.adapterName);if(s)return s;let c=qe(),l=Date.now();await this.bus.emit(b.started,{toolName:e,toolsetName:o,executionId:c,timestamp:l});try{let r=a.inputSchema.safeParse(t);if(!r.success){let t=j(A.VALIDATION_FAILED,`Input validation failed`,{issues:r.error.issues});return await this.bus.emit(b.error,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),error:t.error}),t}let s=await this.buildExecutionContext(n,i.data),u=await a.execute(r.data,s);return u.success?await this.bus.emit(b.completed,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),durationMs:Date.now()-l}):await this.bus.emit(b.error,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),error:u.error}),u}catch(t){let n=De(t);return await this.bus.emit(b.error,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),error:n.error}),n}}async buildExecutionContext(e,t){let n=e?.contextOverrides?.constraints;if(this.fileAccessRuleProvider){let t=e?.contextOverrides?.cwd??process.cwd(),r=Ge(n),i=await this.fileAccessRuleProvider(t,r);n={...n,[Te]:i}}let r=pe({...e?.contextOverrides,constraints:n}),i=e?.contextOverrides;return{...r,bus:this.bus,sessionId:i?.sessionId,agentId:i?.agentId,adapterId:t.adapterId,adapterName:t.adapterName,adapterSessionId:i?.adapterSessionId,turnId:i?.turnId,turnContext:i?.turnContext,toolCallId:i?.toolCallId}}async checkPolicy(e,t,n,r){if(!this.policyProvider)return null;let i=await this.policyProvider(e);if(!i)return null;if(i.disabledTools?.includes(t))return j(A.PERMISSION_DENIED,`Tool '${t}' is disabled`,{toolsetName:e,toolName:t});if(i.allowedAdapters&&i.allowedAdapters.length>0){let t=r??n;if(!t||!i.allowedAdapters.includes(t))return j(A.PERMISSION_DENIED,`Adapter not allowed for toolset '${e}'`,{toolsetName:e,adapterId:n,adapterName:r,allowedAdapters:i.allowedAdapters})}return null}listTools(e){let t=[];for(let[,n]of this.tools){if(e?.toolsetName&&n.toolsetName!==e.toolsetName)continue;let{$schema:r,...i}=g.toJSONSchema(n.tool.inputSchema);t.push({name:n.tool.metadata.name,description:n.tool.metadata.description,toolsetName:n.toolsetName,annotations:n.tool.metadata.annotations,inputSchema:i})}return t}listToolsets(){let e=[];for(let[,t]of this.toolsets){let n={name:t.metadata.name,description:t.metadata.description,version:t.metadata.version,toolCount:Object.keys(t.tools).length};if(t.configSchema){let{$schema:e,...r}=g.toJSONSchema(t.configSchema);n.configSchema=r}e.push(n)}return e}async listToolsWithToolsets(e){let t=this.listTools(e),n=this.listToolsets(),r=e?.toolsetName?n.filter(t=>t.name===e.toolsetName):n,i=e?.adapterName??e?.adapterId;if(this.policyProvider&&i){let{filteredTools:e,filteredToolsets:n}=await Ke(t,r,i,this.policyProvider);return{tools:e,toolsets:n}}return{tools:t,toolsets:r}}getTool(e){return this.tools.get(e)?.tool}getToolset(e){return this.toolsets.get(e)}dispose(){for(let e of this.cleanupHandlers)e();this.cleanupHandlers.length=0}destroy(){this.dispose()}},Ye=class extends w{triggersByExtension=new Map;stepsByExtension=new Map;revision=0;cache=null;constructor(e){super(e)}onInit(){this.registerHandler(be.list,e=>{e.setResult({triggers:this.listTriggers(),steps:this.listSteps()})})}async register(e,t){let n=[],r=[],i=this.snapshotExtensionState(e),a=new Set;for(let e of this.triggersByExtension.values())for(let t of e)a.add(t.metadata.name);for(let e of this.stepsByExtension.values())for(let t of e)a.add(t.metadata.name);if(t.triggers)for(let r of t.triggers)this.assertExtensionNamespace(e,r.metadata),this.assertNoCollision(r.metadata,a),a.add(r.metadata.name),n.push({metadata:{...r.metadata,extensionName:e},configSchema:C(r.configSchema),outputSchema:C(r.outputSchema)});if(t.steps)for(let n of t.steps)this.assertExtensionNamespace(e,n.metadata),this.assertNoCollision(n.metadata,a),a.add(n.metadata.name),r.push({metadata:{...n.metadata,extensionName:e},configSchema:C(n.configSchema),inputSchema:C(n.inputSchema),outputSchema:C(n.outputSchema),runs:structuredClone(n.runs)});if(n.length>0&&this.triggersByExtension.set(e,n),r.length>0&&this.stepsByExtension.set(e,r),n.length>0||r.length>0){this.revision+=1;try{await this.emitChanged(e,`registered`)}catch(t){throw this.restoreExtensionState(e,i),t}}}async deregister(e){let t=this.snapshotExtensionState(e),n=this.triggersByExtension.delete(e),r=this.stepsByExtension.delete(e);if(n||r){this.revision+=1;try{await this.emitChanged(e,`deregistered`)}catch(n){throw this.restoreExtensionState(e,t),n}}}listTriggers(){return this.getCache().triggers.map(Xe)}listSteps(){return this.getCache().steps.map(Ze)}async emitChanged(e,t){await this.bus.emit(be.changed,{extensionName:e,revision:this.revision,reason:t})}getCache(){return(!this.cache||this.cache.revision!==this.revision)&&(this.cache={revision:this.revision,triggers:[...this.triggersByExtension.values()].flat(),steps:[...this.stepsByExtension.values()].flat()}),this.cache}snapshotExtensionState(e){return{triggers:this.triggersByExtension.get(e),steps:this.stepsByExtension.get(e),revision:this.revision,cache:this.cache}}restoreExtensionState(e,t){t.triggers?this.triggersByExtension.set(e,t.triggers):this.triggersByExtension.delete(e),t.steps?this.stepsByExtension.set(e,t.steps):this.stepsByExtension.delete(e),this.revision=t.revision,this.cache=t.cache}assertNoCollision(e,t){if(t.has(e.name))throw Error(`Workflow block name collision: '${e.name}' is already registered`)}assertExtensionNamespace(e,t){let n=`${e}.`;if(!t.name.startsWith(n))throw Error(`Workflow block '${t.name}' must be namespaced by extension '${n}'`)}};function Xe(e){return{metadata:Qe(e.metadata),configSchema:structuredClone(e.configSchema),outputSchema:structuredClone(e.outputSchema)}}function Ze(e){return{metadata:Qe(e.metadata),configSchema:structuredClone(e.configSchema),inputSchema:structuredClone(e.inputSchema),outputSchema:structuredClone(e.outputSchema),runs:structuredClone(e.runs)}}function Qe(e){return e.categories?{...e,categories:[...e.categories]}:{...e}}const K=`workflow.start`;function $e(e){return()=>({async execute(t,n){let{input:r={},executionHints:i}=t,{workflowId:a}=r;if(typeof a!=`string`||a.length===0)throw Error(`[TransitionActionRegistry] 'workflow.start' action requires a non-empty 'input.workflowId' string`);await e.request(xe.start,{workflowId:a,input:et(r,n),config:r.config,artifactRef:r.artifactRef,scope:r.scope,triggerPayload:{_transitionRuleId:n._transition.ruleId,_transitionDepth:n._transition.depth,_transitionEventType:n._transition.eventType},executionHints:i})}})}function et(e,t){let n=e.inputExpression;if(typeof n!=`string`)return e.input;let r=Me(n,tt(t)),i=ve.safeParse(r);if(!i.success)throw Error(`[TransitionActionRegistry] 'workflow.start' inputExpression for rule '${t._transition.ruleId}' must resolve to a JSON value`);return i.data}function tt(e){let t={...e};return{...t,ctx:t}}var nt=class{factories=new Map;factoriesBySource=new Map;constructor(e){this.factories.set(K,$e(e)),this.factoriesBySource.set(`__builtin__`,[K])}register(e,t){let n=Object.keys(t);if(n.length!==0){if(this.factoriesBySource.has(e))throw Error(`TransitionActionRegistry: duplicate source '${e}'`);for(let t of n)if(this.factories.has(t))throw Error(`TransitionActionRegistry: duplicate action type '${t}' from source '${e}'`);for(let e of n)this.factories.set(e,t[e]);this.factoriesBySource.set(e,n)}}deregister(e){if(e===`__builtin__`)return;let t=this.factoriesBySource.get(e);if(t){for(let e of t)this.factories.delete(e);this.factoriesBySource.delete(e)}}async dispatch(e,t){let n=this.factories.get(e.type);if(!n)throw Error(`TransitionActionRegistry: unknown action type '${e.type}'. Registered types: ${[...this.factories.keys()].join(`, `)}`);await n().execute(e,t)}has(e){return this.factories.has(e)}listTypes(){return[...this.factories.keys()]}},rt=class{rulesBySource=new Map;rulesByEventType=new Map;ruleIdSet=new Set;register(e,t){if(t.length===0)return;if(this.rulesBySource.has(e))throw Error(`TransitionRuleRegistry: duplicate source '${e}'`);let n=new Set,r=[];for(let i of t){let t=ye.parse(i);if(n.has(t.id))throw Error(`TransitionRuleRegistry: duplicate rule ID '${t.id}' within source '${e}'`);if(this.ruleIdSet.has(t.id))throw Error(`TransitionRuleRegistry: duplicate rule ID '${t.id}' from source '${e}'`);n.add(t.id),r.push({rule:t,condition:t.when===void 0?void 0:Ae.parse(t.when)})}for(let e of r){let{rule:t}=e;this.ruleIdSet.add(t.id);let n=this.rulesByEventType.get(t.on)??[];n.push(e),this.rulesByEventType.set(t.on,n)}this.rulesBySource.set(e,r)}deregister(e){let t=this.rulesBySource.get(e);if(t){for(let{rule:e}of t){this.ruleIdSet.delete(e.id);let t=this.rulesByEventType.get(e.on);if(t){let n=t.filter(t=>t.rule.id!==e.id);n.length>0?this.rulesByEventType.set(e.on,n):this.rulesByEventType.delete(e.on)}}this.rulesBySource.delete(e)}}getRulesForEvent(e){let t=this.rulesByEventType.get(e);return t?t.filter(e=>e.rule.enabled):[]}snapshotSource(e){let t=this.rulesBySource.get(e);if(t)return{ruleIds:t.map(e=>e.rule.id)}}},it=class extends w{ruleRegistry;actionRegistry;depthMap=new Map;constructor(e){super(e),this.ruleRegistry=new rt,this.actionRegistry=new nt(e)}onInit(){this.registerHandler(v.created,async e=>{await this.handleArtifactEvent(`artifact.created`,{artifact:e.payload.artifact})}),this.registerHandler(v.revised,async e=>{let t=await this.resolvePreviousRevisedArtifact(e.payload.previous);await this.handleArtifactEvent(`artifact.revised`,{artifact:e.payload.artifact,previous:e.payload.previous,...t===void 0?{}:{previousArtifact:t}})}),this.registerHandler(v.status.changed,async e=>{let t=await this.resolveStatusChangedArtifact(e.payload.artifact);t!==void 0&&await this.handleArtifactEvent(`artifact.status.changed`,{artifact:t,path:e.payload.path,previous:e.payload.previous,current:e.payload.current})})}async handleArtifactEvent(e,t){let n=this.artifactKey(t.artifact),r=this.readDepth(n);if(r>=10){console.warn(`[TransitionPipelineService] Transition depth limit (10) reached for event '${e}' on artifact '${n}'. Loop protection active — skipping rule evaluation.`);return}let i=this.ruleRegistry.getRulesForEvent(e);if(i.length!==0)for(let a of i)await this.evaluateAndDispatch(a,e,t,n,r)}async resolveStatusChangedArtifact(e){let t=await this.bus.requestOptional(v.resolve,{ref:e});if(!t.handled){console.warn(`[TransitionPipelineService] No artifact resolver is registered for status transition on artifact '${this.artifactKey(e)}'. Skipping rule evaluation.`);return}if(t.data.artifact===null){console.warn(`[TransitionPipelineService] Could not resolve status transition artifact '${this.artifactKey(e)}'. Skipping rule evaluation.`);return}return t.data.artifact}async resolvePreviousRevisedArtifact(e){let t=await this.bus.requestOptional(v.resolve,{ref:e});if(!(!t.handled||t.data.artifact===null))return t.data.artifact}async evaluateAndDispatch(e,t,n,r,i){let{rule:a,condition:o}=e,s={...n,_transition:{ruleId:a.id,eventType:t,depth:i+1}};if(o!==void 0){let e={...s},t;try{t=je(o,e)}catch(e){console.error(`[TransitionPipelineService] Condition evaluation error for rule '${a.id}':`,e);return}if(!t)return}try{await this.actionRegistry.dispatch(a.action,s),a.action.type===`workflow.start`&&this.incrementDepth(r)}catch(e){console.error(`[TransitionPipelineService] Action dispatch error for rule '${a.id}' (action type '${a.action.type}'):`,e)}}artifactKey(e){return`${typeof e.kind==`string`?e.kind:`unknown`}:${typeof e.id==`string`?e.id:`unknown`}`}readDepth(e){let t=this.depthMap.get(e);return t===void 0?0:Date.now()>t.expiresAt?(this.depthMap.delete(e),0):t.count}incrementDepth(e){let t=this.depthMap.get(e);this.depthMap.set(e,{count:t===void 0?1:t.count+1,expiresAt:Date.now()+6e4})}};function at(e){return async t=>{let n=await ot(e,t);if(!n)return{handled:!1,sessionId:null,clientAccountId:null,changed:!1};let{sessionId:r}=n,{observation:i,accountObserveRequest:a}=st(t),o=await e.requestOptional(D.account.observe,a);if(!o.handled)return{handled:!1,sessionId:r,clientAccountId:null,changed:!1};let{clientAccountId:s}=o.data;return{handled:!0,sessionId:r,clientAccountId:s,changed:await mt(e,r,i,s)}}}async function ot(e,t){switch(t.locator.kind){case`session`:{let{session:r}=await e.request(n.get,{sessionId:t.locator.sessionId});return r?{sessionId:r.sessionId,session:r}:null}case`adapter-session`:{let{session:r}=await e.request(n.getByAdapterSessionId,{adapterSessionId:t.locator.adapterSessionId});return r?{sessionId:r.sessionId,session:r}:null}case`both`:{let[{session:r},{session:i}]=await Promise.all([e.request(n.get,{sessionId:t.locator.sessionId}),e.request(n.getByAdapterSessionId,{adapterSessionId:t.locator.adapterSessionId})]);if(!r&&!i)return null;if(!r||!i)throw Error(`Session locator mismatch: sessionId "${t.locator.sessionId}" and adapterSessionId "${t.locator.adapterSessionId}" must both resolve the same session`);if(r.sessionId!==i.sessionId)throw Error(`Session locator mismatch: sessionId "${t.locator.sessionId}" and adapterSessionId "${t.locator.adapterSessionId}" resolve to different sessions`);return{sessionId:r.sessionId,session:r}}}}function st(e){let t={clientId:e.clientId,source:e.source,kind:e.kind,observedAt:e.observedAt,payload:ft(e.payload)};return{observation:t,accountObserveRequest:ct(t)}}function ct(e){let t=e.payload,n=lt(t),r=ut(t);if(r.length>0)return{clientId:e.clientId,observedAt:e.observedAt,displayLabel:dt(t,n),identifiers:r};throw Error(`client.session.account.observe for "${e.clientId}" requires canonical client account identifiers`)}function lt(e){return pt(e.accountInfo)??e}function ut(e){let t=e.identifiers;if(!Array.isArray(t))return[];try{return g.array(Ce).min(1).parse(t)}catch(e){throw Error(`client.session.account.observe received malformed canonical client account identifiers`,{cause:e})}}function dt(e,t){return q(e.displayLabel)??q(t.displayLabel)??q(t.email)??q(t.label)}function ft(e){return structuredClone(e)}function pt(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function q(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}async function mt(e,t,r,i){let a=await e.request(n.update,{sessionId:t,clientId:r.clientId,clientAccountId:i,lastClientIdentityObservation:r});if(!a.success)throw Error(`Failed to update session "${t}" with client account linkage`);return a.clientAccountChanged??!1}const ht=S(`session-storage`).name;var gt=class extends w{constructor(e=_){super(e)}onInit(){let e=at(this.bus);this.registerHandler(D.session.account.observe,async t=>{t.setResult(await e(we.request.parse(t.payload)))})}};const _t={name:`makaio.session-client-account-linking`,displayName:`Session Client Account Linking`,version:`0.1.0`,dependencies:[x(ht),x(`makaio.clients-core`)],critical:!1,create:e=>new gt(e.bus)},vt={name:`framework-shell`,displayName:`Shell`,version:`0.1.0`,surface:`interactive`,windows:[{id:`main`,style:`utility`,width:1e3,height:700,singleton:!0}]};async function yt(e){let{harnesses:t}=await e.request(m.list,{}),n=new Set(t.map(e=>e.id));for(let t of ge){if(n.has(t.id))continue;let r={...t};await e.request(m.set,{harness:r})}}function J(e,t,n){return e??t??n}var bt=class extends w{static storage={drizzle:h};constructor(e=_){super(e)}async onInit(){await yt(this.bus),this.registerHandlers()}registerHandlers(){this.registerHandler(y.get,async e=>{let t=await this.loadHarness(e.payload);if(!t)throw Error(`Harness not found`);e.setResult(t)}),this.registerHandler(y.list,async e=>{let{harnesses:t}=await this.bus.request(m.list,e.payload);e.setResult({harnesses:t})}),this.registerHandler(y.set,async e=>{let t=await this.upsertHarness(e.payload);e.setResult({id:t})}),this.registerHandler(y.delete,async e=>{let{deleted:t}=await this.bus.request(m.delete,{id:e.payload.id});e.setResult({success:t})}),this.registerHandler(y.getDefault,async e=>{let t=await this.getDefaultHarness(e.payload.adapterName,e.payload.clientId);e.setResult(t)}),this.registerHandler(y.resolve,async e=>{let{adapterName:t,clientId:n,personaHarnessId:r,profileHarnessId:i}=e.payload;if(r){let i=await this.resolveAndValidateHarness(r,t,`persona`,n);e.setResult(i);return}if(i){let r=await this.resolveAndValidateHarness(i,t,`profile`,n);e.setResult(r);return}let a=await this.getDefaultHarness(t,n);e.setResult(a)}),this.registerHandler(y.getSchema,({setResult:e})=>{let{$schema:t,...n}=g.toJSONSchema(_e);e({schema:n,uiConfig:{editMode:`fullPage`,hiddenFields:[`isDefault`]}})})}async upsertHarness(e){let t=await this.resolveHarnessId(e.name,e.adapterName,e.clientId),n=await this.loadHarness({id:t,adapterName:e.adapterName,clientId:e.clientId}),r=this.mergeHarnessPayload(t,e,n);return r.adapterName&&await this.validateNativeTools(r.adapterName,r.nativeTools),await this.bus.request(m.set,{harness:r}),t}mergeHarnessPayload(e,t,n){let r={enabled:[],disabled:[]};return{id:e,name:t.name,description:J(t.description,n?.description,void 0),adapterName:t.adapterName,clientId:J(t.clientId,n?.clientId,void 0),env:J(t.env,n?.env,void 0),credentials:J(t.credentials,n?.credentials,void 0),cwd:J(t.cwd,n?.cwd,void 0),approvalPolicy:J(t.approvalPolicy,n?.approvalPolicy,`always-ask`),nativeTools:J(t.nativeTools,n?.nativeTools,r),registryTools:J(t.registryTools,n?.registryTools,r),skills:J(t.skills,n?.skills,void 0),toolCapabilityMap:t.toolCapabilityMap??n?.toolCapabilityMap,capabilityOverrides:t.capabilityOverrides??n?.capabilityOverrides,toolApprovalOverrides:t.toolApprovalOverrides??n?.toolApprovalOverrides,isDefault:J(t.isDefault,n?.isDefault,!1),enabled:J(t.enabled,n?.enabled,!0)}}async resolveHarnessId(e,t,n){let r=n??t,{harnesses:i}=await this.bus.request(m.list,{name:e}),a=i.find(t=>t.name===e&&(t.clientId??t.adapterName)===r);if(a)return a.id;let o=i.find(t=>t.name===e&&(t.clientId??t.adapterName)!==r);if(o){let t=o.clientId?`client '${o.clientId}'`:`adapter '${o.adapterName}'`;throw Error(`Harness "${e}" already exists with scope ${t}; cannot change scope to ${r??`(none)`}`)}return this.createStableHarnessId(e,r)}async loadHarness(e){if(e.id){let{harness:t}=await this.bus.request(m.get,{id:e.id});return t&&(!e.adapterName||t.adapterName===e.adapterName)&&(!e.clientId||t.clientId===e.clientId)?t:null}if(!e.name)return null;let{harnesses:t}=await this.bus.request(m.list,{name:e.name,adapterName:e.adapterName,clientId:e.clientId});return e.clientId?t.find(t=>t.clientId===e.clientId)??null:e.adapterName?t.find(t=>t.adapterName===e.adapterName)??null:t[0]??null}async getDefaultHarness(e,t){if(t){let{harnesses:e}=await this.bus.request(m.list,{clientId:t}),n=e.find(e=>e.isDefault&&e.enabled);if(n)return n;let r=e.find(e=>e.enabled);if(r)return r}if(e){let{harnesses:t}=await this.bus.request(m.list,{adapterName:e}),n=t.find(e=>e.isDefault&&e.enabled);if(n)return n;let r=t.find(e=>e.enabled);if(r)return r}let n=t?e?`client '${t}' or adapter '${e}'`:`client '${t}'`:`adapter '${e}'`;throw Error(`No harness available for ${n}`)}assertHarnessAdapterMatch(e,t,n,r){if(e.adapterName&&t&&e.adapterName!==t)throw Error(`Resolved ${n} harness adapter mismatch: expected "${t}", got "${e.adapterName}"`);if(e.clientId&&r&&e.clientId!==r)throw Error(`Resolved ${n} harness client mismatch: expected "${r}", got "${e.clientId}"`)}assertHarnessEnabled(e,t){if(!e.enabled)throw Error(`Resolved ${t} harness is disabled: ${e.id}`)}async validateNativeTools(e,t){let n=await this.bus.requestOptional(me.getCapabilities,{adapterName:e});if(!n.handled)return;let r=new Set(n.data.nativeTools),i=[...t.enabled,...t.disabled].filter(e=>!r.has(e));if(i.length>0)throw Error(`Tool '${i[0]}' not found in adapter '${e}' native tools. Declared tools: ${[...r].join(`, `)}`)}createStableHarnessId(e,t){return`harness-${de(`sha256`).update(`${t??``}\0${e}`).digest(`hex`).slice(0,24)}`}async resolveAndValidateHarness(e,t,n,r){let i=await this.loadHarness({id:e});if(!i)throw Error(`${n===`persona`?`Persona`:`Profile`} harness not found: ${e}`);return this.assertHarnessAdapterMatch(i,t,n,r),this.assertHarnessEnabled(i,n),i}};const xt={name:`makaio.harness`,displayName:`Harness`,version:`0.1.0`,critical:!0,storage:{registerHandlers:T(h)},create:e=>new bt(e.bus)},Y=S(`session-storage`),X=S(`session-bridge`),Z=S(`session`),St=S(`session-orchestrator`),Ct=S(`observed-session-ingestion`),Q=S(`tool-registry`),wt=S(`tool-approval`),Tt=S(`tray-menu`),Et=S(`capability`),Dt=S(`model-registry`),Ot=S(`workflow-block-registry`),kt=S(`transition-pipeline`),At=S(`filesystem`),jt=S(`git`),Mt=S(`artifact-schema-registry`),Nt=S(`artifact-lifecycle-hook-registry`),Pt=S(`facet-namespace-registry`),Ft=S(`surface-binding-registry`),It={name:Mt.name,displayName:`Artifact Schema Registry`,version:`0.1.0`,critical:!0,create:e=>new L(e.bus)},Lt={name:Nt.name,displayName:`Artifact Lifecycle Hook Registry`,version:`0.1.0`,critical:!0,create:e=>new V(e.bus)},Rt={name:Pt.name,displayName:`Facet Namespace Registry`,version:`0.1.0`,critical:!0,create:e=>new Be(e.bus)},zt={name:Ft.name,displayName:`Surface Binding Registry`,version:`0.1.0`,critical:!0,create:e=>new Ve(e.bus)},Bt={name:Y.name,displayName:`Session Storage`,version:`0.1.0`,critical:!0,storage:{registerHandlers:T((n,r)=>{let s=[],c=e=>{for(let t=s.length-1;t>=0;--t)try{s[t]?.()}catch(t){console.warn(`[sessionStoragePackage] cleanup failed during ${e}:`,t)}s.length=0};try{s.push(a(n,r)),s.push(e(n,r)),s.push(l(n,r)),s.push(o(n,r)),s.push(t(n,r)),s.push(i(n,r)),s.push(d(n,r)),s.push(re(n,r)),s.push(u(n,r)),s.push(ee(n)),s.push(ne(n)),s.push(te(n))}catch(e){throw c(`rollback`),e}return()=>{c(`shutdown`)}})}},$={name:X.name,displayName:`Session Bridge`,version:`0.1.0`,dependencies:[x(Y.name)],critical:!0,create:e=>new s(e.bus)},Vt={name:Z.name,displayName:`Session`,version:`0.1.0`,dependencies:[x(X.name)],critical:!0,create:e=>new r(e.bus)},Ht={name:St.name,displayName:`Session Orchestrator`,version:`0.1.0`,dependencies:[x(Z.name),x(G.name)],critical:!0,runtimeOwnership:{sessionOrchestrator:!0},create:e=>new c(e.bus,e.machineId)},Ut={name:Ct.name,displayName:`Observed-Session Ingestion`,version:`0.1.0`,dependencies:[x(X.name)],critical:!1,create:e=>new f(e.bus)},Wt={name:Q.name,displayName:`Tool Registry`,version:`0.1.0`,critical:!0,create:e=>new Je({bus:e.bus})},Gt={name:wt.name,displayName:`Tool Approval`,version:`0.1.0`,dependencies:[x(Q.name)],critical:!0,create:e=>new se(e.bus)},Kt={name:Tt.name,displayName:`Tray Menu`,version:`0.1.0`,critical:!0,create:e=>new ce(e.bus)},qt={name:Et.name,displayName:`Capability`,version:`0.1.0`,critical:!0,create:e=>new ie(e.bus)},Jt={name:Ot.name,displayName:`Workflow Block Registry`,version:`0.1.0`,critical:!0,create:e=>new Ye(e.bus)},Yt={name:kt.name,displayName:`Transition Pipeline`,version:`0.1.0`,critical:!0,create:e=>new it(e.bus)},Xt={name:At.name,displayName:`Filesystem`,version:`0.1.0`,critical:!0,create:e=>new ue(e.bus,e.machineId)},Zt={name:jt.name,displayName:`Git`,version:`0.1.0`,dependencies:[x(At.name)],critical:!0,create:e=>new Ne(e.bus)};function Qt(e){return{name:Dt.name,displayName:`Model Registry`,version:`0.1.0`,critical:!0,create:t=>new ae({bus:t.bus,fetcher:e})}}const $t=[It,Lt,Rt,zt,Bt,$,_t,Vt,Ht,Ut,le,Wt,Gt,Kt,qt,xt,G,vt,Jt,Yt,Zt,Xt];function en(){let e=new Map;return{filter:e=>!!e.tools?.createToolsets,async processActivated(t,n,r){let i=r.getService(Q);if(!i)throw Error(`ToolRegistry is not available. Ensure toolRegistryPackage is included in the composition root.`);let a=n.tools.createToolsets(r),o=[];try{for(let e of a)await i.register(e),o.push(()=>i.deregister(e.metadata.name))}catch(e){for(let e=o.length-1;e>=0;--e)try{await o[e]()}catch(e){console.error(`[ToolContributionProcessor] Rollback error for "${t}":`,e)}throw e}e.set(t,o)},async processStopped(t){let n=e.get(t);if(n){for(let e=n.length-1;e>=0;--e)try{await n[e]()}catch(e){console.error(`[ToolContributionProcessor] Deregister error for "${t}":`,e)}e.delete(t)}}}}export{Gt as A,Je as B,Rt as C,Vt as D,Ht as E,it as F,Ve as G,Ue as H,rt as I,R as J,Be as K,nt as L,Yt as M,Kt as N,Bt as O,Jt as P,K as R,Qt as S,$ as T,He as U,G as V,W,L as Y,Tt as _,Mt as a,It as b,Dt as c,Y as d,Z as f,kt as g,Q as h,Nt as i,Wt as j,zt as k,X as l,wt as m,Oe as n,Et as o,Ft as p,V as q,en as r,Pt as s,Ee as t,St as u,Ot as v,$t as w,qt as x,Lt as y,Ye as z};