@makaio/framework 1.0.0-dev-1781260968078 → 1.0.0-dev-1781354548379

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 (140) hide show
  1. package/dist/.makaio-build.json +2 -2
  2. package/dist/adapter-UpcpZDOv.mjs +1 -0
  3. package/dist/adapters/config/index.d.mts +1 -1
  4. package/dist/adapters/index.d.mts +11 -3
  5. package/dist/adapters/index.mjs +1 -1
  6. package/dist/bus/index.mjs +1 -1
  7. package/dist/clients/index.d.mts +4 -7
  8. package/dist/clients/index.mjs +1 -1
  9. package/dist/contracts/adapter/index.d.mts +2 -2
  10. package/dist/contracts/adapter/index.mjs +1 -1
  11. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  12. package/dist/contracts/artifact/index.d.mts +1 -1
  13. package/dist/contracts/client/index.d.mts +1 -1
  14. package/dist/contracts/extension/index.d.mts +2 -2
  15. package/dist/contracts/facet/index.d.mts +1 -1
  16. package/dist/contracts/index.d.mts +219 -54
  17. package/dist/contracts/index.mjs +1 -1
  18. package/dist/contracts/materialization/index.d.mts +3 -3
  19. package/dist/contracts/session/index.d.mts +3 -3
  20. package/dist/contracts/session/index.mjs +1 -1
  21. package/dist/{definition-SiimP25_.d.mts → definition-DqJOg6Lv.d.mts} +1 -1
  22. package/dist/drizzle/0015_m_mqbh8q5b.sql +1 -0
  23. package/dist/drizzle/0016_m_mqbmq8h7.sql +1 -0
  24. package/dist/drizzle/0017_m_mqbnf924.sql +1 -0
  25. package/dist/drizzle/meta/0015_snapshot.json +2966 -0
  26. package/dist/drizzle/meta/0016_snapshot.json +2973 -0
  27. package/dist/drizzle/meta/0017_snapshot.json +2980 -0
  28. package/dist/drizzle/meta/_journal.json +21 -0
  29. package/dist/{handler-DSfSAlxx.mjs → handler-DqpiV9eA.mjs} +1 -1
  30. package/dist/handlers-BAB4fQNH.mjs +41 -0
  31. package/dist/{index-B2xbnMZe.d.mts → index-BCKRUuI2.d.mts} +1 -1
  32. package/dist/{index-CARxIllg.d.mts → index-BHAOu6Hs.d.mts} +20 -20
  33. package/dist/{index-Cb64d5c5.d.mts → index-BHzgDuRE.d.mts} +20 -3
  34. package/dist/{index-BtztOqaF.d.mts → index-BheaEhyI.d.mts} +6 -6
  35. package/dist/{index-CZ_TcT6J.d.mts → index-Bibt5jAX.d.mts} +8 -8
  36. package/dist/{index-D5CI1V5d.d.mts → index-C3zfJg6s.d.mts} +16 -16
  37. package/dist/{index-DTdqGAfH2.d.mts → index-CH5U3zSA2.d.mts} +1 -1
  38. package/dist/{index-CgjslA5-.d.mts → index-CTn_Xi-p.d.mts} +4 -4
  39. package/dist/{index-DDQkhhRo.d.mts → index-DPIdX6kb.d.mts} +363 -123
  40. package/dist/{index-BQiHs8EF.d.mts → index-Da4ABgRq.d.mts} +12 -12
  41. package/dist/{index-BvSyOgTY.d.mts → index-DrGLAuZc.d.mts} +98 -29
  42. package/dist/{index-BKKNWqkP2.d.mts → index-zgm2j9V92.d.mts} +44 -2
  43. package/dist/kernel/extension/index.d.mts +1 -1
  44. package/dist/kernel/index.d.mts +2 -2
  45. package/dist/kernel/observability/index.d.mts +1 -1
  46. package/dist/mcp-http-server/index.d.mts +132 -19
  47. package/dist/mcp-http-server/index.mjs +1 -1
  48. package/dist/{namespace-D1Iw_d1P.d.mts → namespace--s0d86h-.d.mts} +144 -0
  49. package/dist/{namespace-7tsuJhQ9.d.mts → namespace-Boe6l5n9.d.mts} +78 -42
  50. package/dist/{namespace-Ba4bxtHQ.d.mts → namespace-BxxBhcV_.d.mts} +9 -9
  51. package/dist/{namespace-DwE2g8Wm.mjs → namespace-Dfq6MDN9.mjs} +1 -1
  52. package/dist/{namespace-DDCjoQUj.d.mts → namespace-aJJfBJU5.d.mts} +170 -0
  53. package/dist/{orchestrator-shared-Dt4WDse7.mjs → orchestrator-shared-BKFXaKPL.mjs} +1 -1
  54. package/dist/{package-BSnp1zOR.d.mts → package--RZnpN2J.d.mts} +2 -3
  55. package/dist/package-BzJvtM5O.mjs +1 -0
  56. package/dist/package-DzN_jdqd.mjs +1 -0
  57. package/dist/package.json +1 -1
  58. package/dist/primitive-runtime-CNC_bSac.mjs +1 -0
  59. package/dist/runtime-node/bus/runtime/namespace.d.mts +8 -8
  60. package/dist/runtime-node/bus/runtime/schemas.d.mts +11 -4
  61. package/dist/runtime-node/bus/runtime/schemas.mjs +1 -1
  62. package/dist/runtime-node/index.d.mts +19 -1
  63. package/dist/runtime-node/index.mjs +1 -1
  64. package/dist/{schema-BerZmr2q.mjs → schema-C3TgjrsV.mjs} +1 -1
  65. package/dist/{schema-BrnYlDwZ.mjs → schema-CzhOc7TV.mjs} +1 -1
  66. package/dist/{schema-BNrM9LWb.d.mts → schema-DGMLvVoQ.d.mts} +23 -3
  67. package/dist/schemas-CuKayWhA.mjs +1 -0
  68. package/dist/{schemas-DAFYpgHk2.d.mts → schemas-kVcJMjjn2.d.mts} +8 -8
  69. package/dist/{schemas-CkOSG2eJ.d.mts → schemas-t1VR6_b_.d.mts} +3 -3
  70. package/dist/services/filesystem/namespace.d.mts +6 -6
  71. package/dist/services/filesystem/schemas.d.mts +3 -3
  72. package/dist/services/git/namespace.d.mts +2 -2
  73. package/dist/services/git/schemas.d.mts +2 -2
  74. package/dist/services/harness/index.d.mts +3 -4
  75. package/dist/services/harness/index.mjs +1 -1
  76. package/dist/services/index.d.mts +112 -15
  77. package/dist/services/index.mjs +1 -1
  78. package/dist/services/log-import/browser.d.mts +2 -2
  79. package/dist/services/log-import/index.d.mts +4 -5
  80. package/dist/services/log-import/index.mjs +1 -1
  81. package/dist/services/log-import/log-import.d.mts +1 -1
  82. package/dist/services/log-import/namespace.d.mts +2 -2
  83. package/dist/services/log-import/schemas.d.mts +1 -1
  84. package/dist/services/provider-context/index.mjs +1 -1
  85. package/dist/services/session/handlers/index.mjs +1 -1
  86. package/dist/services/session/index.d.mts +6 -6
  87. package/dist/services/session/index.mjs +1 -1
  88. package/dist/services/session/messages/namespace.mjs +1 -1
  89. package/dist/services/session/orchestrator-testing/index.mjs +1 -1
  90. package/dist/services/session/session-events/namespace.d.mts +1 -1
  91. package/dist/services/session/session-events/namespace.mjs +1 -1
  92. package/dist/services/session/storage/namespace.d.mts +1 -1
  93. package/dist/services/session/storage/schema.d.mts +1 -1
  94. package/dist/services/session/storage/schema.mjs +1 -1
  95. package/dist/services/session/testing/index.mjs +5 -3
  96. package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
  97. package/dist/services/session/turns/namespace.d.mts +1 -1
  98. package/dist/services/session/turns/namespace.mjs +1 -1
  99. package/dist/services/settings/index.mjs +1 -1
  100. package/dist/services/settings/namespace.d.mts +8 -8
  101. package/dist/services/settings/storage/clients-namespace.mjs +1 -1
  102. package/dist/services/settings/storage/index.mjs +1 -1
  103. package/dist/services/settings/storage/providers-namespace.mjs +1 -1
  104. package/dist/services/subagent/index.d.mts +1 -1
  105. package/dist/services/subagent/index.mjs +1 -1
  106. package/dist/services/subagent-template/index.d.mts +1 -1
  107. package/dist/services/subagent-template/schemas.d.mts +1 -1
  108. package/dist/services/tool-approval/index.mjs +1 -1
  109. package/dist/services/tools/index.mjs +1 -1
  110. package/dist/services/turn/index.d.mts +1 -1
  111. package/dist/services/turn/namespace.d.mts +1 -1
  112. package/dist/services/turn/schemas.d.mts +72 -0
  113. package/dist/services/turn/schemas.mjs +1 -1
  114. package/dist/{session-C1Cami7U.mjs → session-BwX5_k47.mjs} +1 -1
  115. package/dist/session-P4nX60Xx.mjs +39 -0
  116. package/dist/{session-lineage-CXzV_hAP.d.mts → session-lineage-CKg6mErA.d.mts} +1 -1
  117. package/dist/storage/drizzle/index.d.mts +1 -1
  118. package/dist/storage/drizzle/index.mjs +1 -1
  119. package/dist/{tool-approval-service-Cb2F1yT6.mjs → tool-approval-service-DNHV5x0M.mjs} +1 -1
  120. package/dist/{tools-D5DVHC-R.mjs → tools-CQImrHAp.mjs} +1 -1
  121. package/dist/{types-DLVitCZP.d.mts → types-BpuLMR2m.d.mts} +626 -443
  122. package/dist/{types-D5IMwOkJ.d.mts → types-D0fPFh-D.d.mts} +1 -1
  123. package/dist/{types-BMpIa4fx.d.mts → types-D6jnDjP2.d.mts} +18 -5
  124. package/dist/ui-components/index.d.mts +36 -37
  125. package/dist/ui-views/index.d.mts +2 -2
  126. package/dist/workflow-engine/index.d.mts +58 -25
  127. package/dist/workflow-engine/index.mjs +1 -1
  128. package/dist/workflow-engine/package.d.mts +1 -1
  129. package/dist/workflow-engine/package.mjs +1 -1
  130. package/dist/workflow-engine/workflow-orchestrator.mjs +1 -1
  131. package/package.json +10 -1
  132. package/dist/adapter-Dt2FDMs4.mjs +0 -1
  133. package/dist/handlers-C8EtpSqK.mjs +0 -41
  134. package/dist/package-Be2Ez4vv.mjs +0 -1
  135. package/dist/package-OE9dMQsq.mjs +0 -1
  136. package/dist/primitive-runtime-Xrc9xh6p.mjs +0 -1
  137. package/dist/schemas-CSUwpaNm.mjs +0 -1
  138. package/dist/session-KnewDVxt.mjs +0 -39
  139. /package/dist/{provider-context-lfG0BpqX.mjs → provider-context-wp4VSJFI.mjs} +0 -0
  140. /package/dist/{shared-schemas-CKe2uN4-.mjs → shared-schemas-DYL7a-No.mjs} +0 -0
@@ -0,0 +1,39 @@
1
+ import{TurnStorageSubjects as e}from"./services/turn/namespace.mjs";import{agents as t,agentsDual as n,sessions as r,sessionsDual as i}from"./services/session/storage/schema.mjs";import"./schema-C3TgjrsV.mjs";import{a,i as o,n as s,o as c,r as l}from"./namespace-Dfq6MDN9.mjs";import{SessionStorageSubjects as u}from"./services/session/storage/namespace.mjs";import{D as d,F as f,T as p,_ as m,d as h,f as g,g as _,h as v,k as y,m as b,p as x,u as ee,v as te,y as S}from"./handlers-BAB4fQNH.mjs";import{r as ne,t as re}from"./provider-context-wp4VSJFI.mjs";import{AdapterRuntimeSubjects as ie}from"./services/adapter-runtime/namespace.mjs";import{MessageStorageSubjects as C}from"./services/session/messages/namespace.mjs";import{n as w}from"./namespace-D6X67cUk.mjs";import{z as T}from"zod";import{createHash as ae}from"node:crypto";import{MakaioBus as oe,NoHandlerError as se,TimeoutError as ce}from"@makaio/framework/bus";import{AdapterSubjects as E,AgentSubjects as D,CanonicalModelSubjects as le,CompressionModeSchema as ue,ForkTransformsSchema as de,MessageRoutingSchema as fe,SessionContextSchema as pe,SessionDiscoveredSchema as me,SessionStorageSetRequestSchema as he,SessionStorageUpdateSchema as ge,SessionSubjects as O,compareMessageCursorAsc as _e,compareMessageCursorDesc as ve,isCanonicalModelParseError as ye,messageToCursor as k,parseCanonicalModel as be}from"@makaio/framework/contracts";import{BaseService as xe}from"@makaio/framework/service-base";import{createStorageNamespaceDefinition as Se}from"@makaio/framework/storage";import{blob as Ce,index as we,integer as Te,primaryKey as Ee,sqliteTable as De,text as A,uniqueIndex as Oe}from"drizzle-orm/sqlite-core";import{index as ke,primaryKey as Ae}from"drizzle-orm/pg-core";import{defineDialectSchema as j,defineDualTable as je,didAffectRows as M,getRawSqlExecutor as Me,getStorageEngine as Ne,resolveSchema as N,resolveStorageEngine as P}from"@makaio/framework/storage/drizzle";import{and as F,asc as I,count as L,desc as R,eq as z,gt as Pe,gte as Fe,inArray as B,isNull as V,lt as Ie,lte as Le,or as Re,sql as H}from"drizzle-orm";import{ClientIdentityObservationSchema as ze}from"@makaio/framework/contracts/client";import{ImportCursorStorageSubjects as Be}from"@makaio/framework/adapters";function Ve(e){return e.on(O.agent.added,async t=>{let n=await e.requestOptional(u.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(u.set,{sessionId:t.payload.sessionId,session:r}))})}function He(e){return e.on(O.agent.removed,async t=>{let n=await e.requestOptional(u.get,{sessionId:t.payload.sessionId}),r=n.handled?n.data.session:void 0;r&&(await e.requestOptional(f.updateStatus,{agentId:t.payload.agentId,status:`disposed`}),r.leadAgentId===t.payload.agentId&&(r.leadAgentId=void 0),r.lastActivityAt=Date.now(),await e.request(u.set,{sessionId:t.payload.sessionId,session:r}))})}function Ue(e){return[Ke(e),qe(e),Je(e),We(e),Ye(e),Xe(e),Ze(e),Qe(e),$e(e),nt(e),Ve(e.bus),He(e.bus)]}function We(e){let{bus:t}=e;return t.on(O.turn.await,async e=>{let{sessionId:n,turnId:r,timeoutMs:i}=e.payload,a=new AbortController,o=t.once(O.turn.completed,{timeoutMs:i,filter:{sessionId:n,turnId:r},signal:a.signal});o.catch(()=>void 0);let s=await Ge(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 ce(`session.turn.await`,i):e}})}async function Ge(t,n,r){let i=await t.requestOptional(e.get,{turnId:r}),a=i.handled?i.data.turn:null;if(!(a?.sessionId!==n||a.status!==`completed`&&a.status!==`error`))return{sessionId:n,turnId:r,turnNumber:a.turnNumber,success:a.status===`completed`,...a.error!==void 0&&{error:a.error},...a.initiator!==void 0&&{initiator:a.initiator}}}function Ke(e){let{bus:t}=e;return t.on(O.create,async e=>{let{sessionId:n,parentSessionId:r,contextInheritance:i,forkPointMessageId:a,branchKind:o,forkTransforms:s,title:c,targetWorkingDirectory:l,executionTargetId:d,spawningToolCallId:f,originWindowId:p}=e.payload,m=n??crypto.randomUUID(),h=Date.now(),g={sessionId:m,createdAt:h,lastActivityAt:h,agents:[],status:`active`,title:c,parentSessionId:r,contextInheritance:i,forkPointMessageId:a,branchKind:o,forkTransforms:s,targetWorkingDirectory:l,executionTargetId:d,spawningToolCallId:f},_=await t.requestOptional(u.set,{sessionId:m,session:g,ifAbsent:!0});if(_.handled&&!_.data.success){e.setResult({sessionId:m});return}await t.emit(O.created,{sessionId:m,createdAt:g.createdAt,parentSessionId:r??null,branchKind:o??null,originWindowId:p??`server`}),e.setResult({sessionId:m})})}function qe(e){let{bus:t}=e;return t.on(O.get,async e=>{let n=await t.requestOptional(u.get,{sessionId:e.payload.sessionId}),r=n.handled?n.data.session:null;e.setResult({session:r})})}function Je(e){let{bus:t}=e;return t.on(O.list,async e=>{let{status:n,limit:r,offset:i,includePreview:a,executionTargetId:o}=e.payload,s=await t.requestOptional(u.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 Ye(e){let{bus:t}=e;return t.on(O.close,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(u.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(u.set,{sessionId:n,session:i}),await t.emit(O.closed,{sessionId:n}),e.setResult({success:!0})})}function Xe(e){let{bus:t}=e;return t.on(O.restartAgents,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(f.listBySession,{sessionId:n}),i=r.handled?r.data.agents:[],a=[];for(let e of i)try{let n=await p(t,e,{cwd:e.cwd,model:e.model});await t.requestOptional(f.updateRuntime,{agentId:n.agentId,adapterId:n.adapterId}),a.push({agentId:n.agentId,adapterId:n.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);a.push({agentId:e.agentId,adapterId:e.adapterId,success:!1,error:r})}e.setResult({sessionId:n,results:a})})}function Ze(e){let{bus:t}=e;return t.on(O.update,async e=>{let{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:a}=e.payload,o=await t.requestOptional(u.update,{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:a}),s=o.handled?o.data.success:!1;if(s){let e=[];r!==void 0&&e.push(`executionTargetId`),i!==void 0&&e.push(`approvalPolicyOverride`),a!==void 0&&e.push(`title`),e.length>0&&await t.emit(O.updated,{sessionId:n,changedProperties:e})}e.setResult({success:s})})}function Qe(e){let{bus:t}=e;return t.on(O.archive,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(u.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(u.set,{sessionId:n,session:i}),await t.emit(O.archived,{sessionId:n}),e.setResult({success:!0})})}function $e(e){let{bus:t}=e;return t.on(O.purge,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(u.get,{sessionId:n}),i=r.handled?r.data.session:null;if(!i){e.setResult({success:!1,error:`Session not found`});return}if(i.status!==`archived`){e.setResult({success:!1,error:`Cannot purge session unless archived. Call close then archive first.`});return}let a=await t.requestOptional(u.list,{status:`all`}),o=a.handled?a.data.sessions:[];for(let e of o)e.parentSessionId===n&&await t.requestOptional(u.set,{sessionId:e.sessionId,session:{...e,parentSessionId:void 0}});let c=await t.requestOptional(s.getEvents,{sessionId:n,options:{limit:1}}),l=c.handled?c.data.totalCount:0;await t.requestOptional(s.deleteBySession,{sessionId:n}),await t.requestOptional(u.delete,{sessionId:n}),await t.emit(O.purged,{sessionId:n}),e.setResult({success:!0,eventsDeleted:l})})}function et(e,t){let n=ae(`sha256`).update(`${e}\u0000${t}`).digest(`hex`);return`${n.slice(0,8)}-${n.slice(8,12)}-8${n.slice(13,16)}-9${n.slice(17,20)}-${n.slice(20,32)}`}async function tt(e,t,n,r){let i=await e.requestOptional(u.getByAdapterSessionId,{adapterSessionId:r,adapterName:n});if(i.handled&&i.data.session!==null){let e=i.data.session;if(e.adapterName===n)return{sessionId:e.sessionId,created:!1}}let a=await e.requestOptional(u.get,{sessionId:t}),o=a.handled?a.data.session:null;if(o!==null&&o.adapterName===n&&o.adapterSessionId===r)return{sessionId:o.sessionId,created:!1};throw Error(`session.registerExternal: session ID "${t}" already exists but does not carry adapter identity (${n}, ${r}); refusing to mis-attribute it`)}function nt(e){let{bus:t}=e;return t.on(O.registerExternal,async e=>{let{adapterName:n,adapterSessionId:r,lastClientIdentityObservation:i,sessionId:a,parentSessionId:o,contextInheritance:s,forkPointMessageId:c,branchKind:l,forkTransforms:d,title:f,targetWorkingDirectory:p,executionTargetId:m,spawningToolCallId:h,originWindowId:g}=e.payload,_=await t.requestOptional(u.getByAdapterSessionId,{adapterSessionId:r,adapterName:n});if(_.handled&&_.data.session!==null){let t=_.data.session;if(t.adapterName===n){e.setResult({sessionId:t.sessionId,created:!1});return}}let v=a??et(n,r),y=Date.now(),b={sessionId:v,createdAt:y,lastActivityAt:y,agents:[],status:`active`,adapterName:n,adapterSessionId:r,lastClientIdentityObservation:i,title:f,parentSessionId:o,contextInheritance:s,forkPointMessageId:c,branchKind:l,forkTransforms:d,targetWorkingDirectory:p,executionTargetId:m,spawningToolCallId:h},x=await t.requestOptional(u.set,{sessionId:v,session:b,ifAbsent:!0});if(x.handled&&!x.data.success){let i=await tt(t,v,n,r);e.setResult(i);return}await t.emit(O.created,{sessionId:v,createdAt:b.createdAt,parentSessionId:o??null,branchKind:l??null,originWindowId:g??`server`}),e.setResult({sessionId:v,created:!0})})}var rt=class extends xe{constructor(e=oe){super(e)}async onInit(){for(let e of Ue({bus:this.bus}))this.addCleanup(e);await this.reconcileOrphanedTurns()}async reconcileOrphanedTurns(){let t=await this.bus.requestOptional(e.listActive,{});if(!t.handled)return;let{turns:n}=t.data;for(let t of n)try{let{transitioned:n}=await this.bus.request(e.complete,{turnId:t.turnId,status:`error`,expectedStatus:`active`,error:`process-restart`});n&&await this.bus.emit(O.turn.completed,{sessionId:t.sessionId,turnId:t.turnId,turnNumber:t.turnNumber,success:!1,error:`process-restart`})}catch(e){console.error(`[MakaioSessionService] Failed to reconcile orphaned turn ${t.turnId}:`,e)}}};function it(e){return Error(`No adapter found for adapterName="${e}". Ensure adapter-runtime identity handlers are registered; adapter startup verifies live availability.`)}var at=class{bus;registry=new Map;cleanup;constructor(e){this.bus=e,this.cleanup=this.bus.on(E.initialized,e=>{this.registry.set(e.payload.adapterName,e.payload.adapterId)})}resolve(e){let t=this.registry.get(e);if(!t)throw it(e);return t}async resolveAvailable(e){try{let{adapterId:t}=await this.bus.request(ie.resolveId,{adapterName:e});return this.registry.set(e,t),t}catch{let t=this.registry.get(e);if(t)return t;throw it(e)}}destroy(){this.cleanup?.(),this.cleanup=void 0,this.registry.clear()}};function ot(e,t,n,r){return e.on(s.append,e=>{let{event:i}=e.payload,a=t.get(i.sessionId)??[];if(n.has(i.eventId)){e.setResult({success:!0});return}a.push(i),t.set(i.sessionId,a),n.set(i.eventId,r()),e.setResult({success:!0})})}function st(e,t,n){return e.on(s.getEvents,e=>{let{sessionId:r,options:i}=e.payload,a=t.get(r)??[],o=i?.order??`asc`,s=o===`desc`?[...a].reverse():a,c=0;if(i?.after&&/^\d+$/.test(i.after)){let t=Number(i.after),r=s.findIndex(e=>{let r=n.get(e.eventId)??-1;return o===`desc`?r<t:r>t});if(r===-1){e.setResult({events:[],nextCursor:null,totalCount:a.length});return}c=r}let l=s.slice(c);if(i?.types&&i.types.length>0){let e=new Set(i.types);l=l.filter(t=>e.has(t.type))}let u=i?.limit??100,d=l.length>u,f=l.slice(0,u),p=null;if(d&&f.length>0){let e=f[f.length-1],t=n.get(e.eventId);t!==void 0&&(p=t.toString())}e.setResult({events:f,nextCursor:p,totalCount:a.length})})}function ct(e,t){return e.on(s.getByIds,e=>{let{sessionId:n,eventIds:r}=e.payload,i=t.get(n)??[],a=new Set(r),o=i.filter(e=>a.has(e.eventId));e.setResult({events:o})})}function lt(e,t,n){return e.on(s.deleteBySession,e=>{let{sessionId:r}=e.payload,i=t.get(r);if(i)for(let e of i)n.delete(e.eventId);let a=i?.length??0;t.delete(r),e.setResult({success:!0,deletedCount:a})})}function ut(e,t){return e.on(s.getEventsBySessions,e=>{let{sessionIds:n,types:r,limitPerSession:i=50}=e.payload;if(n.length===0||r.length===0){e.setResult({eventsBySession:{}});return}let a=new Set(r),o={};for(let e of n){let n=(t.get(e)??[]).filter(e=>a.has(e.type)).reverse().slice(0,i);n.length>0&&(o[e]=n)}e.setResult({eventsBySession:o})})}function dt(e){let t=new Map,n=new Map,r=1,i=[ot(e,t,n,()=>r++),st(e,t,n),ct(e,t),lt(e,t,n),ut(e,t)];return()=>i.forEach(e=>e())}const ft=o.postgres,pt=j({sessionEvents:l},{sessionEvents:ft}),mt=[`sessionId`,`agentId`,`adapterId`,`messageId`,`turnId`];function ht(e){let t=e.payload,n={};for(let[e,r]of Object.entries(t))mt.includes(e)||(n[e]=r);return n}function gt(e){let t=JSON.parse(e.payload),n=e.type===`message`?e.messageId:e.originatingMessageId,r={...t,sessionId:e.sessionId,...e.agentId&&{agentId:e.agentId},...e.adapterId&&{adapterId:e.adapterId},...n&&{messageId:n},...e.type===`message`?{turnId:e.turnId??null}:e.turnId&&{turnId:e.turnId}};return{sessionId:e.sessionId,eventId:e.eventId,timestamp:e.timestamp,type:e.type,payload:r}}function _t(e){switch(e.type){case`user_message.sent`:{let t=e.payload.content;return typeof t==`string`?t:(Array.isArray(t.blocks)?t.blocks:[t.blocks]).filter(e=>e.type===`text`).map(e=>e.content).join(`
2
+ `)}case`agent.added`:case`user_message.acknowledged`:case`user_message.completed`:case`turn.started`:case`turn.completed`:case`message`:case`branch.created`:case`branch.merged`:case`squash`:return null;default:return vt(e.payload)}}function vt(e){let t=e.contentText;if(typeof t==`string`&&t.length>0)return t;let n=e.summary;return typeof n==`string`&&n.length>0?n:null}function yt({bus:e,db:t,sessionEvents:n}){return e.on(s.append,async e=>{let{event:r}=e.payload,i=`payload`in r&&`agentId`in r.payload?r.payload.agentId:null,a=`payload`in r&&`adapterId`in r.payload?r.payload.adapterId:null,o=`payload`in r&&`turnId`in r.payload?r.payload.turnId:null,s=`payload`in r&&`messageId`in r.payload?r.payload.messageId:null,c=r.type===`message`?s:null,l=r.type===`message`?null:s,u={sessionId:r.sessionId,eventId:r.eventId,timestamp:r.timestamp,type:r.type,agentId:i,adapterId:a,messageId:c,originatingMessageId:l,turnId:o,contentText:_t(r),payload:JSON.stringify(ht(r))};await t.insert(n).values(u).onConflictDoNothing(),e.setResult({success:!0})})}function bt({bus:e,db:t,sessionEvents:n}){return e.on(s.getEvents,async e=>{let{sessionId:r,options:i}=e.payload,a=[z(n.sessionId,r)],o=i?.order??`asc`;if(i?.after){let e=parseInt(i.after,10);!isNaN(e)&&e>0&&(o===`desc`?a.push(Ie(n.id,e)):a.push(Pe(n.id,e)))}i?.types&&i.types.length>0&&a.push(B(n.type,i.types));let s=i?.limit??100,c=o===`desc`?R:I,l=await t.select().from(n).where(F(...a)).orderBy(c(n.id)).limit(s+1),u=l.length>s,d=u?l.slice(0,s):l,f=d.map(gt),p=u&&d.length>0?d[d.length-1].id.toString():null;e.setResult({events:f,nextCursor:p})})}function xt({bus:e,db:t,sessionEvents:n}){return e.on(s.getByIds,async e=>{let{sessionId:r,eventIds:i}=e.payload,a=(await t.select().from(n).where(F(z(n.sessionId,r),B(n.eventId,i))).orderBy(I(n.timestamp))).map(gt);e.setResult({events:a})})}function St({bus:e,db:t,sessionEvents:n}){return e.on(s.deleteBySession,async e=>{let{sessionId:r}=e.payload,i=(await t.select().from(n).where(z(n.sessionId,r))).length;await t.delete(n).where(z(n.sessionId,r)),e.setResult({success:!0,deletedCount:i})})}function Ct({bus:e,db:t,sessionEvents:n}){return e.on(s.getEventsBySessions,async e=>{let{sessionIds:r,types:i,limitPerSession:a=50}=e.payload;if(r.length===0||i.length===0){e.setResult({eventsBySession:{}});return}let o={};for(let e of r){let r=await t.select().from(n).where(F(z(n.sessionId,e),B(n.type,i))).orderBy(R(n.timestamp)).limit(a);r.length>0&&(o[e]=r.map(gt))}e.setResult({eventsBySession:o})})}function wt(e,t){let{sessionEvents:n}=N(t,pt),r={bus:e,db:t,sessionEvents:n},i=[yt(r),bt(r),xt(r),St(r),Ct(r)];return()=>i.forEach(e=>e())}async function Tt(e,t){e.emit(C.stored,{message:structuredClone(t)});try{await e.request(s.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 U(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 Et(e){let{bus:t,db:n}=e,{messages:r}=N(n,c);return t.on(C.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 Tt(t,s)})}function Dt(e){let{bus:t,db:n}=e,{messages:r}=N(n,c);return t.on(C.getBySession,async e=>{let{sessionId:t,limit:i,after:a,includeAfter:o=!1,order:s=`asc`}=e.payload,c=s===`desc`?R:I,l=n.select().from(r).where(z(r.sessionId,t)).orderBy(c(r.timestamp),c(r.messageId));if(a){let e=s===`desc`?Re(Ie(r.timestamp,a.timestamp),F(z(r.timestamp,a.timestamp),o?Le(r.messageId,a.messageId):Ie(r.messageId,a.messageId))):Re(Pe(r.timestamp,a.timestamp),F(z(r.timestamp,a.timestamp),o?Fe(r.messageId,a.messageId):Pe(r.messageId,a.messageId)));l=n.select().from(r).where(F(z(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?k(p[p.length-1]):null;e.setResult({messages:p.map(U),nextCursor:m})})}function Ot(e){let{bus:t,db:n}=e,{messages:r}=N(n,c);return t.on(C.getByTurn,async e=>{let{turnId:t}=e.payload,i=await n.select().from(r).where(z(r.turnId,t)).orderBy(I(r.timestamp));e.setResult({messages:i.map(U)})})}function kt(e){let{bus:t,db:n}=e,{messages:r}=N(n,c);return t.on(C.get,async e=>{let{messageId:t}=e.payload,[i]=await n.select().from(r).where(z(r.messageId,t)).limit(1);e.setResult({message:i?U(i):null})})}function At(e){let{bus:t,db:n}=e,{messages:r}=N(n,c),i=P(n).fts;return t.on(C.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(U),total:l})})}function jt(e){let{bus:t,db:n}=e,{messages:r}=N(n,c),i=P(n).fts;return t.on(C.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 Mt(e){let{bus:t,db:n}=e,{messages:r}=N(n,c);return t.on(C.getByAdapterMessageId,async e=>{let{adapterMessageId:t}=e.payload,[i]=await n.select().from(r).where(z(r.adapterMessageId,t)).limit(1);e.setResult({message:i?U(i):null})})}function Nt(e){let{bus:t,db:n}=e,{messages:r}=N(n,c);return t.on(C.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}).from(r).where(z(r.adapterMessageId,i)).limit(1);if(m){e.setResult({messageId:m.messageId,created:!1});return}let h=crypto.randomUUID();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}),e.setResult({messageId:h,created:!0}),await Tt(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 Pt(e,t){let n={bus:e,db:t},r=[Et(n),Dt(n),Ot(n),kt(n),At(n),jt(n),Nt(n),Mt(n)];return()=>r.forEach(e=>e())}function Ft(e,t){return _e(k(e),k(t))}function It(e,t){return ve(k(e),k(t))}function Lt(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=Rt(t,n,r,i),o=[zt(e,t,a),Bt(e,t,n),Vt(e,t,r),Ht(e,t),Ut(e,t),Wt(e,i,a),Gt(e,t,n,r,i)];return()=>o.forEach(e=>e())}function Rt(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&&r.set(i.adapterMessageId,i.messageId)}}function zt(e,t,n){return e.on(C.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 Tt(e,o)})}function Bt(e,t,n){return e.on(C.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`?It:Ft,u=c.map(e=>t.get(e)).filter(e=>!!e).sort(l);a&&(u=u.filter(e=>{let t=s===`desc`?ve(k(e),a):_e(k(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?k(p[p.length-1]):null;e.setResult({messages:p,nextCursor:m})})}function Vt(e,t,n){return e.on(C.getByTurn,async e=>{let{turnId:r}=e.payload,i=(n.get(r)??[]).map(e=>t.get(e)).filter(e=>!!e).sort(Ft);e.setResult({messages:i})})}function Ht(e,t){return e.on(C.get,async e=>{e.setResult({message:t.get(e.payload.messageId)??null})})}function Ut(e,t){return e.on(C.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(Ft),e.setResult({messages:c.slice(0,a),total:c.length})})}function Wt(e,t,n){return e.on(C.upsertByAdapterMessageId,async r=>{let{adapterMessageId:i,sessionId:a,turnId:o,role:s,contentText:c,blocks:l,agentId:u,adapterSessionId:d,timestamp:f,origin:p}=r.payload,m=t.get(i);if(m){r.setResult({messageId:m,created:!1});return}let h=crypto.randomUUID(),g={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};n(g),r.setResult({messageId:h,created:!0}),await Tt(e,g)})}function Gt(e,t,n,r,i){return e.on(u.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)}n.adapterMessageId&&i.delete(n.adapterMessageId)}}n.delete(a)})}const Kt=je(`message_routing`,e=>({messageId:e.text(`message_id`).notNull().references(a,{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=>[Ee({columns:[e.messageId,e.agentId,e.status]}),we(`idx_routing_agent`).on(e.agentId,e.timestamp)],postgres:e=>[Ae({columns:[e.messageId,e.agentId,e.status]}),ke(`idx_routing_agent`).on(e.agentId,e.timestamp)]}),qt=Kt.sqlite,Jt=Se(`messageRouting`,{schemas:{record:{request:fe,response:T.object({success:T.boolean()})},getByMessage:{request:T.object({messageId:T.string()}),response:T.object({routing:T.array(fe)})},getCompleted:{request:T.object({messageId:T.string()}),response:T.object({agentIds:T.array(T.string())})},isComplete:{request:T.object({messageId:T.string(),targetAgentIds:T.array(T.string())}),response:T.object({complete:T.boolean(),pending:T.array(T.string())})}},extensions:{drizzle:{messageRouting:qt}}}),W=Jt.subjects,Yt=Kt.postgres,Xt=j({messageRouting:qt},{messageRouting:Yt});function Zt(e){return{messageId:e.messageId,agentId:e.agentId,status:e.status,timestamp:e.timestamp,error:e.error??void 0}}function Qt(e,t){let{messageRouting:n}=N(t,Xt),r=[];return r.push(e.on(W.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(W.getByMessage,async e=>{let{messageId:r}=e.payload,i=await t.select().from(n).where(z(n.messageId,r));e.setResult({routing:i.map(Zt)})})),r.push(e.on(W.getCompleted,async e=>{let{messageId:r}=e.payload,i=await t.select().from(n).where(F(z(n.messageId,r),z(n.status,`completed`)));e.setResult({agentIds:i.map(e=>e.agentId)})})),r.push(e.on(W.isComplete,async e=>{let{messageId:r,targetAgentIds:i}=e.payload,a=await t.select().from(n).where(F(z(n.messageId,r),z(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 $t=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()}},en=class{bus;activeTurns=new Map;usageAccumulators=new Map;completingSessions=new Set;bufferedUsageDuringCompletion=new Map;syntheticTurnCounters=new Map;cleanups=[];constructor(e){this.bus=e}async createTurn(t,n,r,i){let a=await this.bus.requestOptional(e.create,{sessionId:t,...i!==void 0&&{turnId:i},...r!==void 0&&{initiator:r}}),o,s;if(a.handled)o=a.data.turn.turnId,s=a.data.turn.turnNumber;else{o=i??crypto.randomUUID();let e=(this.syntheticTurnCounters.get(t)??0)+1;this.syntheticTurnCounters.set(t,e),s=e}let c=new S({sessionId:t,agentIds:n,turnId:o,turnNumber:s,initiator:r});return this.activeTurns.set(t,c),this.usageAccumulators.set(t,new $t),c}registerCompletionHandlers(e){this.cleanups.push(this.bus.on(D.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.findActiveTurnByTurnId(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.completingSessions.has(a.sessionId)){this.bufferUsageDuringCompletion(a.sessionId,{agentId:t,inputTokens:r,outputTokens:i});return}this.usageAccumulators.get(a.sessionId)?.add({agentId:t,inputTokens:r,outputTokens:i})})),this.cleanups.push(this.bus.on(D.complete,async t=>{let{agentId:n,outcome:r,error:i}=t.payload,a=r!==`error`;await this.handleAgentCompletion(n,a,a?void 0:i,e)}))}async completeTurn(t,n){if(this.completingSessions.has(t.sessionId))return;this.completingSessions.add(t.sessionId);let r=this.usageAccumulators.get(t.sessionId),i=r?.snapshot();try{await this.bus.requestOptional(e.complete,{turnId:t.turnId,status:n.success?`completed`:`error`,error:n.errors.length>0?n.errors.join(`; `):void 0,...i!==void 0&&{usage:i}});let a=this.bufferedUsageDuringCompletion.get(t.sessionId)??[];if(a.length>0){for(let e of a)r?.add(e);this.bufferedUsageDuringCompletion.delete(t.sessionId);let i=r?.snapshot();await this.bus.requestOptional(e.complete,{turnId:t.turnId,status:n.success?`completed`:`error`,error:n.errors.length>0?n.errors.join(`; `):void 0,...i!==void 0&&{usage:i}})}}catch(e){throw this.completingSessions.delete(t.sessionId),console.error(`[SessionTurnManager] Failed to persist completion for turn ${t.turnId}:`,e),e}r?.clear(),this.activeTurns.delete(t.sessionId),this.usageAccumulators.delete(t.sessionId),this.completingSessions.delete(t.sessionId),await this.bus.emit(O.turn.completed,{sessionId:t.sessionId,turnId:t.turnId,turnNumber:t.turnNumber,success:n.success,error:n.errors.length>0?n.errors.join(`; `):void 0,initiator:t.initiator})}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.completingSessions.clear(),this.bufferedUsageDuringCompletion.clear(),this.syntheticTurnCounters.clear()}async handleAgentCompletion(e,t,n,r){let i=b(this.activeTurns,e);if(!i)return;let a=t?i.markAgentCompleted(e):i.markAgentErrored(e,n??`Unknown error`);for(let r of i.messageIds)await this.bus.emit(O.user_message.completed,{sessionId:i.sessionId,turnId:i.turnId,turnNumber:i.turnNumber,messageId:r,agentId:e,outcome:t?`completed`:`error`,error:n});a.turnComplete&&await r(i,a.result)}bufferUsageDuringCompletion(e,t){let n=this.bufferedUsageDuringCompletion.get(e)??[];n.push(t),this.bufferedUsageDuringCompletion.set(e,n)}},tn=class{bus;turnManager;adapterRegistry;cleanups=[];constructor(e=oe,t){this.bus=e,this.turnManager=new en(e),this.adapterRegistry=new at(e),this.registerSendMessageHandler(),this.turnManager.registerCompletionHandlers(this.completeTurn.bind(this))}registerSendMessageHandler(){this.cleanups.push(this.bus.on(O.sendMessage,async e=>{let{sessionId:t,message:n,agentIds:r,deliveryMode:i,agent:a,source:o,origin:s}=e.payload,c=x(o,e.payload.extensionId),l=e.payload.sessionContext?pe.parse(e.payload.sessionContext):void 0,{sessionId:u,session:p}=await v(this.bus,t,l,e.payload.originWindowId);if(p.agents.length===0){let e=await this.resolveInitialAdapterSelection(a,u,n,l),t=await this.resolveAdapterName(e,u),r=h(e.adapterId)??await this.adapterRegistry.resolveAvailable(t),i=e.providerConfigId===void 0?void 0:await ne(this.bus,e.providerConfigId);i!==void 0&&await re(this.bus,i);let o=await this.bus.request(E.startAgent,{adapterId:r,sessionId:u,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},...l!==void 0&&{sessionContext:l}});if(!o.success)throw Error(`[SessionOrchestrator.sendMessage] Failed to start agent (sessionId=${u}, adapterName=${t}): ${o.message}`);let s=Date.now();p.agents.push({agentId:o.agentId,adapterId:o.adapterId,adapterName:t,sessionId:u,role:`lead`,status:`idle`,...e.providerConfigId!==void 0&&{providerConfigId:e.providerConfigId},createdAt:s,lastActivityAt:s}),p.leadAgentId=o.agentId,e.providerConfigId!==void 0&&await this.bus.requestOptional(f.updateRuntime,{agentId:o.agentId,providerConfigId:e.providerConfigId})}let g=_(p,r);if(g.length===0)throw Error(`[SessionOrchestrator.sendMessage] No valid target agents found (sessionId=${u})`);let y=new Set;for(let e of g){let t=await this.bus.requestOptional(E.getAgent,{agentId:e.agentId,adapterId:e.adapterId});t.handled&&t.data.agent===null&&y.add(e.agentId)}let b;if(y.size>0){b=await d(this.bus,p);for(let e of g)y.has(e.agentId)&&await this.bus.requestOptional(E.rehydrateAgent,{agentId:e.agentId,adapterId:e.adapterId})}let S=this.turnManager.getActiveTurn(u),ie=!S;S||=await this.turnManager.createTurn(u,g.map(e=>e.agentId),c,e.payload.turnId);let w=crypto.randomUUID();S.addMessage(w);let T=te(n);this.bus.requestOptional(C.append,{message:{messageId:w,turnId:S.turnId,sessionId:u,role:`user`,contentText:m(n),blocks:T,timestamp:Date.now(),...s!==void 0&&{origin:s}}}).catch(e=>{console.warn(`[SessionOrchestrator] Failed to store user message`,{sessionId:u,messageId:w,error:e instanceof Error?e.message:String(e)})});for(let e of g)this.bus.requestOptional(W.record,{messageId:w,agentId:e.agentId,status:`sent`,timestamp:Date.now()}).catch(t=>{console.warn(`[SessionOrchestrator] Failed to record message routing`,{sessionId:u,messageId:w,agentId:e.agentId,error:t instanceof Error?t.message:String(t)})});ie&&await this.bus.emit(O.turn.started,{sessionId:u,turnId:S.turnId,turnNumber:S.turnNumber,messageId:w,agentIds:[...S.agentIds],initiator:S.initiator}),await this.bus.emit(O.user_message.sent,{sessionId:u,turnId:S.turnId,turnNumber:S.turnNumber,messageId:w,content:n,agentIds:g.map(e=>e.agentId),...o!==void 0&&{source:o},...s!==void 0&&{origin:s}});let ae=b?{...l,...b}:l;await ee(this.bus,p,g,n,w,S,i,this.completeTurn.bind(this),ae,e.payload.responseSchema),e.setResult({messageId:w,turnId:S.turnId,sessionId:u})}))}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=be(e.model);if(ye(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(le.resolve,{parsed:i,context:{sessionId:t,promptText:m(n),...r===void 0?{}:{sessionContext:r}}});return{...e,...a,kind:`adapter`,providerConfigId:e.providerConfigId??a.providerConfigId}}},nn=class{bus;constructor(e){this.bus=e}async getTurnSoFarContext(e){try{let{messages:t}=await this.bus.request(C.getByTurn,{turnId:e});return this.convertSessionMessagesToMessages(t)}catch(e){return e instanceof se||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 rn(e){let{bus:t}=e;return t.on(O.getStatusCounts,async e=>{e.payload;let{all:n,active:r,closed:i,archived:a,discovered:o}=await t.request(u.getStatusCounts,{});e.setResult({all:n,active:r,closed:i,archived:a,discovered:o})})}function an(e){let{bus:t}=e;return t.on(O.resume,async e=>{let{sessionId:n}=e.payload,{session:r}=await t.request(u.get,{sessionId:n});if(!r||r.status!==`closed`){e.setResult({success:!1});return}r.status=`active`,r.lastActivityAt=Date.now(),await t.request(u.set,{sessionId:n,session:r}),await t.emit(O.resumed,{sessionId:n}),e.setResult({success:!0})})}function on(e){return e.on(w.listActions,e=>{let t=y.getAll().map(e=>({id:e.id,label:e.label,description:e.description,category:e.category}));e.setResult({actions:t})})}const sn=[{actionId:`strip-reasoning`},{actionId:`strip-tool-outputs`}];function cn(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 ln=class{bus;agentToSession=new Map;agentContext=new Map;agentBlocks=new Map;cleanups=[];constructor(e=oe){this.bus=e,this.registerHandlers()}registerHandlers(){this.registerMappingHandlers(),this.registerTurnTrackingHandlers(),this.registerBlockAccumulationHandlers()}registerMappingHandlers(){this.cleanups.push(this.bus.on(O.agent.added,e=>{this.agentToSession.set(e.payload.agentId,e.payload.sessionId)})),this.cleanups.push(this.bus.on(O.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(O.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(O.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(D.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(D.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(D.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(D.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(D.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(`
3
+ `),s=crypto.randomUUID();try{if(!(await this.bus.requestOptional(C.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(C.getByTurn,{turnId:i.turnId});if(r.handled){let t=r.data.messages.find(e=>e.role===`user`);t&&await this.bus.requestOptional(W.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()}},un=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(O.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(O.fork,{sourceSessionId:this._sessionId,name:e.reason})).sessionId}async merge(e,t){await this.bus.request(O.merge,{parentSessionId:this._sessionId,childSessionId:e,summary:t,source:`extension`,extensionId:this._extensionId})}async abandon(e){await this.bus.request(O.abandon,{parentSessionId:this._sessionId,childSessionId:e,source:`extension`,extensionId:this._extensionId})}async requestCompression(e){await this.bus.emit(O.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(O.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(O.getChildren,{sessionId:this._sessionId})).children.map(e=>e.sessionId)}};function dn(e,t,n,r,i,a){return new un(e,t,n,r,i,a)}function fn(e,t){let n=e?.clientAccountId??null,r=t.clientAccountId??null;return!r||n===r?null:{previousClientAccountId:n,clientAccountId:r}}function G(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 K(e,t,n){let r=fn(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(O.clientAccount.changed,a)).catch(e=>{console.error(`[SessionStorage] Failed to emit session.clientAccount.changed:`,e)})})}function pn(e){switch(e){case`fork`:return`fork`;case`subagent`:return`subagent`;case`compress`:return`compress`;case`root`:return;default:return}}function mn(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 hn(){let e=0;return()=>{let t=Date.now();return e=t>e?t:e+1,e}}const gn=hn();function _n(e,t,n){n!==void 0&&(e[t]=n)}function vn(e,t,n){let r=e.startedAt??n;return{sessionId:t,createdAt:r,lastActivityAt:r,agents:[],status:`discovered`,branchKind:pn(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:`discovered`,forkPointMessageId:e.forkPointMessageId??void 0}}function yn(e,t,n){let r=e.importStatus??`discovered`;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 bn(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),t.forkPointMessageId!==null&&(e.forkPointMessageId=t.forkPointMessageId),t.parentAdapterSessionId!==null&&(e.parentExternalSessionId=t.parentAdapterSessionId);let n=pn(t.kind);n!==void 0&&(e.branchKind=n),_n(e,`adapterId`,t.adapterId),_n(e,`clientId`,t.clientId)}function xn(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 Sn(e,t,n){let r=e.discoveredAt;yn(e,t,n),bn(e,t),xn(e,t,r)}function Cn(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 wn(e,t,n){if(n){e.emit(O.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(O.updated,{sessionId:t.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}function Tn(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 En(e,t,n){e.emit(O.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(O.import.completed,{sessionId:t.sessionId,adapterSessionId:t.adapterSessionId,source:r}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}function Dn(e){let{bus:t,store:n,cloneSession:r,populateAgents:i}=e;return[t.on(u.importUpsert,e=>{let r=e.payload,i=Array.from(n.values()).find(e=>e.adapterSessionId===r.externalSessionId&&e.source===r.source),a=gn(),o=i===void 0,s=i??vn(r,crypto.randomUUID(),a);i?(Sn(i,r,a),i.parentExternalSessionId!==void 0&&i.parentSessionId===void 0&&Cn(n,i)):(n.set(s.sessionId,s),Cn(n,s)),wn(t,s,o),e.setResult({sessionId:s.sessionId,created:o})}),t.on(u.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(u.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(u.countBySource,e=>{let t=Array.from(n.values()).filter(t=>t.isImported===!0&&t.source===e.payload.source);e.setResult(Tn(t))}),t.on(u.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}),En(t,r,i)})]}async function On(e,t){let n=await e.requestOptional(f.listBySession,{sessionId:t});return n.handled?n.data.agents:[]}function q(e){return structuredClone(e)}function J(e,t,n){n!==void 0&&(e[t]=n)}function kn(e,t,n){n!==void 0&&(e[t]=n??void 0)}function An(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 jn(e,t){J(e,`status`,t.status),J(e,`parentSessionId`,t.parentSessionId),J(e,`contextInheritance`,t.contextInheritance),J(e,`rootSessionId`,t.rootSessionId),J(e,`forkPointMessageId`,t.forkPointMessageId),J(e,`branchKind`,t.branchKind),J(e,`isOrchestrated`,t.isOrchestrated),J(e,`clientId`,t.clientId),J(e,`clientAccountId`,t.clientAccountId),J(e,`lastClientIdentityObservation`,t.lastClientIdentityObservation),J(e,`title`,t.title),J(e,`targetWorkingDirectory`,t.targetWorkingDirectory),J(e,`createdAt`,t.createdAt),J(e,`lastActivityAt`,t.lastActivityAt),kn(e,`executionTargetId`,t.executionTargetId),kn(e,`approvalPolicyOverride`,t.approvalPolicyOverride),t.spawningToolCallId===null?e.spawningToolCallId=void 0:t.spawningToolCallId!==void 0&&e.spawningToolCallId===void 0&&(e.spawningToolCallId=t.spawningToolCallId)}function Mn(e,t){return e.on(u.list,async n=>{let{status:r=`all`,limit:i,offset:a=0,includePreview:o=!1,executionTargetId:s}=n.payload,c=An(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=>({...q(t),agents:await On(e,t.sessionId)}))),d=o?u.map(e=>({...e,preview:{messageCount:0,firstUserMessage:null}})):u;n.setResult({sessions:d,total:l})})}function Nn(e,t){return e.on(u.update,async n=>{let r=structuredClone(ge.request.parse(n.payload)),i=t.get(r.sessionId);if(!i){n.setResult({success:!1,clientAccountChanged:!1});return}let a=q(i);G(a,{sessionId:i.sessionId,clientId:r.clientId??i.clientId,clientAccountId:r.clientAccountId??i.clientAccountId,lastClientIdentityObservation:r.lastClientIdentityObservation??i.lastClientIdentityObservation}),jn(i,r),n.setResult({success:!0,clientAccountChanged:(a.clientAccountId??null)!==(i.clientAccountId??null)}),K(e,a,q(i))})}function Pn(e){let t=new Map,n=[];return n.push(e.on(u.get,async n=>{let r=t.get(n.payload.sessionId);if(!r){n.setResult({session:null});return}let i=await On(e,n.payload.sessionId);n.setResult({session:{...q(r),agents:i}})})),n.push(e.on(u.set,async n=>{let{sessionId:r,session:i,ifAbsent:a}=he.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?q(s):null;G(s,o),t.set(r,o),n.setResult({success:!0,clientAccountChanged:(c?.clientAccountId??null)!==(o.clientAccountId??null)}),K(e,c,q(o))})),n.push(e.on(u.delete,async e=>{t.delete(e.payload.sessionId),e.setResult({success:!0}),await e.next()})),n.push(Mn(e,t)),n.push(e.on(u.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(u.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(Nn(e,t)),n.push(Fn(e,t)),n.push(...Dn({bus:e,store:t,populateAgents:On,cloneSession:q})),()=>n.forEach(e=>e())}function Fn(e,t){return e.on(u.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(f.listBySession,{sessionId:s.sessionId}),l=c.handled?c.data.agents:[];n.setResult({session:{...q(s),agents:l}})})}const In=i.postgres,Ln=n.postgres,Y=j({sessions:r,agents:t},{sessions:In,agents:Ln});function Rn(e,t){let n=e?.clientId??null,r=e?.clientAccountId??null,i=e?.lastClientIdentityObservation??null;return F(n===null?V(t.clientId):z(t.clientId,n),r===null?V(t.clientAccountId):z(t.clientAccountId,r),i===null?V(t.lastClientIdentityObservation):z(t.lastClientIdentityObservation,i))}function zn(e){return{agentId:e.agentId,adapterId:e.adapterId,adapterName:e.adapterName,sessionId:e.sessionId,role:e.role,status:e.status,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,model:e.model??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?ue.parse(e.compressionMode):void 0}}function Bn(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 Vn(e){let t;for(let n=e.length-1;n>=0;--n)try{e[n]?.()}catch(e){t??=e}if(t)throw t}function Hn(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.get,async e=>{let[t]=await n.select().from(r).where(z(r.agentId,e.payload.agentId)).limit(1);e.setResult({agent:t?zn(t):null})})}function Un(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.set,async e=>{let{agent:t}=e.payload,i=Bn(t),a=await n.insert(r).values(i).onConflictDoUpdate({target:r.agentId,set:i});e.setResult({success:M(a)})})}function Wn(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.delete,async e=>{let t=await n.delete(r).where(z(r.agentId,e.payload.agentId));e.setResult({success:M(t)})})}function Gn(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.listByAdapter,async e=>{let{adapterName:t,status:i}=e.payload,a=[z(r.adapterName,t)];i&&i!==`all`&&a.push(z(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(zn)})})}function Kn(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.listBySession,async e=>{let{sessionId:t}=e.payload,i=await n.select().from(r).where(z(r.sessionId,t));e.setResult({agents:i.map(zn)})})}function qn(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.updateStatus,async e=>{let{agentId:t,status:i}=e.payload,a=Date.now(),o=await n.update(r).set({status:i,lastActivityAt:a}).where(z(r.agentId,t));e.setResult({success:M(o)})})}function Jn(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.updateActivity,async e=>{let{agentId:t,lastActivityAt:i}=e.payload,a=await n.update(r).set({lastActivityAt:i}).where(z(r.agentId,t));e.setResult({success:M(a)})})}function Yn(e){let{bus:t,db:n}=e,{agents:r}=N(n,Y);return t.on(f.updateRuntime,async e=>{let{agentId:t,adapterId:i,cwd:a,model:o,allowedDirectories:s,providerConfigId:c}=e.payload,l={lastActivityAt:Date.now()};i!==void 0&&(l.adapterId=i),a!==void 0&&(l.cwd=a),o!==void 0&&(l.model=o),s!==void 0&&(l.allowedDirectories=s),c!==void 0&&(l.providerConfigId=c);let u=await n.update(r).set(l).where(z(r.agentId,t));e.setResult({success:M(u)})})}function Xn(e,t){let n={bus:e,db:t},r=[Hn(n),Un(n),Wn(n),Gn(n),Kn(n),qn(n),Jn(n),Yn(n)];return()=>Vn(r)}function X(e){return e??void 0}function Zn(e){if(e)try{let t=JSON.parse(e),n=ze.safeParse(t);return n.success?n.data:void 0}catch{return}}function Qn(e){if(e)try{let t=JSON.parse(e),n=de.safeParse(t);return n.success?n.data:void 0}catch{return}}function Z(e,t){let n=Qn(e.forkTransforms),r=Zn(e.lastClientIdentityObservation);return{sessionId:e.sessionId,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,status:e.status,leadAgentId:X(e.leadAgentId),parentSessionId:X(e.parentSessionId),contextInheritance:X(e.contextInheritance),rootSessionId:X(e.rootSessionId),forkPointMessageId:X(e.forkPointMessageId),branchKind:X(e.branchKind),adapterName:X(e.adapterName),adapterSessionId:X(e.adapterSessionId),adapterId:X(e.adapterId),clientId:X(e.clientId),clientAccountId:X(e.clientAccountId),lastClientIdentityObservation:r,isOrchestrated:X(e.isOrchestrated),isImported:X(e.isImported),title:X(e.title),summary:X(e.summary),summaryUpdatedAt:X(e.summaryUpdatedAt),forkTransforms:n,targetWorkingDirectory:X(e.targetWorkingDirectory),executionTargetId:X(e.executionTargetId),agents:t.map(zn),approvalPolicyOverride:X(e.approvalPolicyOverride),spawningToolCallId:X(e.spawningToolCallId),source:X(e.source),parentExternalSessionId:X(e.parentExternalSessionId),logFilePath:X(e.logFilePath),discoveredAt:X(e.discoveredAt),importStatus:X(e.importStatus)}}function $n(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 er(e,t,n){if(!n||t.length===0)return{};let{messages:r}=N(e,c),i=e.select({sessionId:r.sessionId,minTimestamp:H`MIN(${r.timestamp})`.as(`min_timestamp`)}).from(r).where(F(z(r.role,`user`),B(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(z(r.sessionId,i.sessionId),z(r.timestamp,i.minTimestamp))).where(z(r.role,`user`)),o=new Map;for(let e of a)o.has(e.sessionId)||o.set(e.sessionId,e.preview);let s=await e.select({sessionId:r.sessionId,count:L()}).from(r).where(B(r.sessionId,t)).groupBy(r.sessionId),l=new Map;for(let e of s)l.set(e.sessionId,e.count);return{previewBySession:o,countBySession:l}}function tr(e,t){return{sessionId:e.sessionId,clientId:t.clientId??e.clientId,clientAccountId:t.clientAccountId??e.clientAccountId,lastClientIdentityObservation:t.lastClientIdentityObservation??e.lastClientIdentityObservation}}function nr(e){return e.clientId!==void 0||e.clientAccountId!==void 0||e.lastClientIdentityObservation!==void 0}function rr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,Y);return t.on(u.getByAdapterSessionId,async e=>{let{adapterSessionId:t,source:a,adapterName:o}=e.payload,s=[z(r.adapterSessionId,t)];a!==void 0&&s.push(z(r.source,a)),o!==void 0&&s.push(z(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(z(i.sessionId,l.sessionId));e.setResult({session:Z(l,u)})})}function ir(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y),{messages:i}=N(n,c);return t.on(u.getChildren,async e=>{let{sessionId:t}=e.payload,a=await n.select().from(r).where(z(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:L()}).from(i).where(B(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:L()}).from(r).where(B(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(z(i.sessionId,t),B(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 ar=hn();function or(e,t,n){return t===void 0?H`${e}`:H`
4
+ CASE
5
+ WHEN ${n.discoveredAt} IS NULL OR ${e} = ${n.discoveredAt} THEN ${t}
6
+ ELSE ${e}
7
+ END
8
+ `}function sr(e,t){return{status:H`
9
+ CASE
10
+ WHEN COALESCE(${e.importStatus}, excluded.import_status) = 'discovered' THEN excluded.status
11
+ ELSE ${e.status}
12
+ END
13
+ `,isImported:!0,importStatus:H`COALESCE(${e.importStatus}, excluded.import_status)`,adapterName:H`COALESCE(${e.adapterName}, excluded.adapter_name)`,discoveredAt:H`COALESCE(${e.discoveredAt}, excluded.discovered_at)`,source:H`COALESCE(${e.source}, excluded.source)`,logFilePath:H`COALESCE(${e.logFilePath}, excluded.log_file_path)`,targetWorkingDirectory:H`COALESCE(excluded.target_working_directory, ${e.targetWorkingDirectory})`,title:H`COALESCE(excluded.title, ${e.title})`,forkPointMessageId:H`COALESCE(excluded.fork_point_message_id, ${e.forkPointMessageId})`,parentExternalSessionId:H`COALESCE(excluded.parent_external_session_id, ${e.parentExternalSessionId})`,branchKind:H`COALESCE(excluded.branch_kind, ${e.branchKind})`,adapterId:H`COALESCE(excluded.adapter_id, ${e.adapterId})`,clientId:H`COALESCE(excluded.client_id, ${e.clientId})`,createdAt:or(e.createdAt,t,e),lastActivityAt:or(e.lastActivityAt,t,e)}}function cr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y);return t.on(u.importUpsert,async e=>{let{externalSessionId:i,source:a,clientId:o,adapterId:s,cwd:c,logFilePath:l,startedAt:u,title:d,kind:f,parentAdapterSessionId:p,forkPointMessageId:m}=e.payload,h=ar(),g=crypto.randomUUID(),_=u??h,v=pn(f)??null,y=p??null,[b]=await n.insert(r).values({sessionId:g,status:`discovered`,isImported:!0,importStatus:`discovered`,adapterName:a,adapterSessionId:i,source:a??null,clientId:o??null,adapterId:s??null,targetWorkingDirectory:c??null,logFilePath:l??null,forkPointMessageId:m??null,branchKind:v,parentExternalSessionId:y,discoveredAt:h,title:d??null,createdAt:_,lastActivityAt:_}).onConflictDoUpdate({target:[r.source,r.adapterSessionId],set:sr(r,u)}).returning({sessionId:r.sessionId,discoveredAt:r.discoveredAt,parentExternalSessionId:r.parentExternalSessionId,parentSessionId:r.parentSessionId}),x=b.sessionId===g;await lr(t,n,b,x,v,_,a),e.setResult({sessionId:b.sessionId,created:x})})}async function lr(e,t,n,r,i,a,o){if(r){let r=await ur(t,n.sessionId,n.parentExternalSessionId,o);e.emit(O.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 ur(t,n.sessionId,n.parentExternalSessionId,o),e.emit(O.updated,{sessionId:n.sessionId,changedProperties:[`source`,`targetWorkingDirectory`,`title`]}).catch(e=>console.error(`[SessionStorage] Failed to emit session.updated:`,e))}async function ur(e,t,n,r){let{sessions:i}=N(e,Y);if(n===null)return null;let[a]=await e.select({sessionId:i.sessionId,rootSessionId:i.rootSessionId}).from(i).where(F(z(i.adapterSessionId,n),z(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(z(i.sessionId,t)),a.sessionId}function dr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,Y);return t.on(u.getByLogFilePath,async e=>{let{logFilePath:t}=e.payload,[a]=await n.select().from(r).where(z(r.logFilePath,t)).limit(1);if(!a){e.setResult({session:null});return}let o=await n.select().from(i).where(z(i.sessionId,a.sessionId));e.setResult({session:Z(a,o)})})}function fr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,Y);return t.on(u.listImported,async e=>{let{source:t,importStatus:a}=e.payload,o=[z(r.isImported,!0)];t!==void 0&&o.push(z(r.source,t)),a!==void 0&&o.push(z(r.importStatus,a));let s=F(...o),c=await n.select().from(r).where(s).orderBy(R(r.createdAt));if(c.length===0){e.setResult({sessions:[]});return}let l=c.map(e=>e.sessionId),u=$n(await n.select().from(i).where(B(i.sessionId,l)));e.setResult({sessions:c.map(e=>Z(e,u.get(e.sessionId)??[]))})})}function pr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y);return t.on(u.countBySource,async e=>{let{source:t}=e.payload,i=await n.select({importStatus:r.importStatus,count:H`count(*)`}).from(r).where(F(z(r.isImported,!0),z(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 mr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y);return t.on(u.updateImportStatus,async e=>{let{sessionId:i,importStatus:a}=e.payload,o=a===`imported`?{status:H`
14
+ CASE
15
+ WHEN ${r.status} = 'discovered' THEN 'active'
16
+ ELSE ${r.status}
17
+ END
18
+ `}:{},[s]=await n.update(r).set({importStatus:a,...o}).where(F(z(r.sessionId,i),Re(V(r.importStatus),H`${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(O.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(O.import.completed,{sessionId:i,adapterSessionId:s.adapterSessionId,source:e}).catch(e=>console.error(`[SessionStorage] Failed to emit session.import.completed:`,e))}})}function hr(e,t){let n={bus:e,db:t};return[cr(n),dr(n),fr(n),pr(n),mr(n)]}function Q(e){return e??null}function gr(e){return e?JSON.stringify(e):null}function _r(e){return{lastActivityAt:e.lastActivityAt,status:e.status,leadAgentId:Q(e.leadAgentId),parentSessionId:Q(e.parentSessionId),contextInheritance:Q(e.contextInheritance),rootSessionId:Q(e.rootSessionId),forkPointMessageId:Q(e.forkPointMessageId),branchKind:Q(e.branchKind),adapterName:Q(e.adapterName),adapterSessionId:Q(e.adapterSessionId),adapterId:Q(e.adapterId),clientId:Q(e.clientId),clientAccountId:Q(e.clientAccountId),lastClientIdentityObservation:vr(e.lastClientIdentityObservation),isOrchestrated:e.isOrchestrated??!1,isImported:e.isImported??!1,title:Q(e.title),summary:Q(e.summary),summaryUpdatedAt:Q(e.summaryUpdatedAt),forkTransforms:gr(e.forkTransforms),targetWorkingDirectory:Q(e.targetWorkingDirectory),executionTargetId:Q(e.executionTargetId),approvalPolicyOverride:Q(e.approvalPolicyOverride),spawningToolCallId:Q(e.spawningToolCallId),source:Q(e.source),parentExternalSessionId:Q(e.parentExternalSessionId),logFilePath:Q(e.logFilePath),discoveredAt:Q(e.discoveredAt),importStatus:Q(e.importStatus)}}function vr(e){return e?JSON.stringify(e):null}function $(e,t,n){n!==void 0&&(e[t]=n)}function yr(e,t,n){n!==void 0&&(e[t]=n??null)}function br(e,t){let n={};return $(n,`status`,e.status),$(n,`parentSessionId`,e.parentSessionId),$(n,`contextInheritance`,e.contextInheritance),$(n,`rootSessionId`,e.rootSessionId),$(n,`forkPointMessageId`,e.forkPointMessageId),$(n,`branchKind`,e.branchKind),$(n,`isOrchestrated`,e.isOrchestrated),$(n,`clientId`,e.clientId),$(n,`clientAccountId`,e.clientAccountId),$(n,`title`,e.title),$(n,`targetWorkingDirectory`,e.targetWorkingDirectory),$(n,`createdAt`,e.createdAt),$(n,`lastActivityAt`,e.lastActivityAt),yr(n,`executionTargetId`,e.executionTargetId),yr(n,`approvalPolicyOverride`,e.approvalPolicyOverride),e.spawningToolCallId===null?n.spawningToolCallId=null:e.spawningToolCallId!==void 0&&(n.spawningToolCallId=H`coalesce(${t.spawningToolCallId}, ${e.spawningToolCallId})`),e.lastClientIdentityObservation!==void 0&&(n.lastClientIdentityObservation=vr(e.lastClientIdentityObservation)),n}function xr(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,Y);return t.on(u.get,async e=>{let[t]=await n.select().from(r).where(z(r.sessionId,e.payload.sessionId)).limit(1);if(!t){e.setResult({session:null});return}let a=await n.select().from(i).where(z(i.sessionId,e.payload.sessionId));e.setResult({session:Z(t,a)})})}function Sr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y);return t.on(u.set,async e=>{let{sessionId:i,session:a,ifAbsent:o}=he.parse(e.payload),s=_r(a);if(o){G(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&&K(t,null,a);return}for(let o=0;o<3;o++){let[o]=await n.select().from(r).where(z(r.sessionId,i)).limit(1),c=o?Z(o,[]):null;if(G(c,a),M(await n.insert(r).values({sessionId:i,createdAt:a.createdAt,...s}).onConflictDoUpdate({target:r.sessionId,set:s,setWhere:Rn(o,r)}))){e.setResult({success:!0,clientAccountChanged:(c?.clientAccountId??null)!==(a.clientAccountId??null)}),K(t,c,a);return}}throw Error(`Failed to write session "${i}" with a stable client-account baseline`)})}function Cr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y);return t.on(u.delete,async e=>{await n.delete(r).where(z(r.sessionId,e.payload.sessionId)),e.setResult({success:!0})})}function wr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y);return t.on(u.update,async e=>{let i=ge.request.parse(e.payload),{sessionId:a}=i,o=br(i,r),s=nr(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(z(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(z(r.sessionId,a)).limit(1);if(!s){e.setResult({success:!1,clientAccountChanged:!1});return}let c=Z(s,[]),l=tr(c,i);if(G(c,l),M(await n.update(r).set(o).where(F(z(r.sessionId,a),Rn(s,r))))){e.setResult({success:!0,clientAccountChanged:(c.clientAccountId??null)!==(l.clientAccountId??null)}),K(t,c,l);return}}throw Error(`Failed to update session "${a}" with a stable client-account baseline`)})}function Tr(e,t){let n=[];return e.status!==`all`&&n.push(z(t.status,e.status)),e.executionTargetId!==void 0&&n.push(z(t.executionTargetId,e.executionTargetId)),F(...n)}function Er(e){let{bus:t,db:n}=e,{sessions:r,agents:i}=N(n,Y);return t.on(u.list,async e=>{let{status:t=`all`,limit:a,offset:o=0,includePreview:s=!1,executionTargetId:c}=e.payload,l=Tr({status:t,executionTargetId:c},r),u=l?n.select().from(r).where(l):n.select().from(r),d=a===void 0?await u.orderBy(R(r.lastActivityAt)):await u.orderBy(R(r.lastActivityAt)).limit(a).offset(o),[f]=await(l?n.select({count:L()}).from(r).where(l):n.select({count:L()}).from(r)),p=f?.count??0;if(d.length===0){e.setResult({sessions:[],total:p});return}let m=d.map(e=>e.sessionId),h=$n(await n.select().from(i).where(B(i.sessionId,m))),{previewBySession:g,countBySession:_}=await er(n,m,s),v=d.map(e=>{let t=Z(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 Dr(e){let{bus:t,db:n}=e,{sessions:r}=N(n,Y);return t.on(u.getStatusCounts,async e=>{e.payload;let t=await n.select({status:r.status,count:L()}).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 Or(e,t){let n={bus:e,db:t},r=[xr(n),Sr(n),Cr(n),wr(n),Er(n),ir(n),rr(n),Dr(n),...hr(e,t)];return()=>r.forEach(e=>e())}function kr(e,t,n,r,i,a){return t===void 0&&n===void 0&&r===void 0&&i===void 0&&a===void 0?!1:(t!==void 0&&(e.adapterId=t),n!==void 0&&(e.cwd=n),r!==void 0&&(e.model=r),i!==void 0&&(e.allowedDirectories=i),a!==void 0&&(e.providerConfigId=a),!0)}function Ar(e){let t=new Map,n=[];return n.push(e.on(f.get,e=>{let n=t.get(e.payload.agentId)??null;e.setResult({agent:n})})),n.push(e.on(f.set,e=>{t.set(e.payload.agentId,e.payload.agent),e.setResult({success:!0})})),n.push(e.on(f.delete,e=>{let n=t.delete(e.payload.agentId);e.setResult({success:n})})),n.push(e.on(f.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(f.listBySession,e=>{let n=Array.from(t.values()).filter(t=>t.sessionId===e.payload.sessionId);e.setResult({agents:n})})),n.push(e.on(f.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(f.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(f.updateRuntime,e=>{let n=t.get(e.payload.agentId);if(!n){e.setResult({success:!1});return}let{adapterId:r,cwd:i,model:a,allowedDirectories:o,providerConfigId:s}=e.payload;if(!kr(n,r,i,a,o,s)){e.setResult({success:!1});return}n.lastActivityAt=Date.now(),e.setResult({success:!0})})),()=>n.forEach(e=>e())}async function jr(e,t){if(t.length===0)return new Map;let{agents:n}=N(e,Y),r=[...new Set(t)],i=await e.select().from(n).where(B(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 Mr(e,t){return P(e).fts.fetchFirstUserMessagePreviews(e,t)}async function Nr(e,t){if(t.length===0)return new Map;let{messages:n}=N(e,c),r=[...new Set(t)],i=await e.select({sessionId:n.sessionId,count:L()}).from(n).where(B(n.sessionId,r)).groupBy(n.sessionId),a=new Map;for(let e of i)a.set(e.sessionId,e.count);return a}function Pr(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function Fr(e,t,n,r){return{sessionId:e.session_id,createdAt:e.created_at,lastActivityAt:e.last_activity_at,status:e.status,title:e.title??void 0,leadAgentId:e.lead_agent_id??void 0,parentSessionId:e.parent_session_id??void 0,rootSessionId:e.root_session_id??void 0,forkPointMessageId:e.fork_point_message_id??void 0,branchKind:e.branch_kind??void 0,adapterName:e.adapter_name??void 0,adapterSessionId:e.adapter_session_id??void 0,adapterId:e.adapter_id??void 0,isOrchestrated:e.is_orchestrated===null?void 0:!!e.is_orchestrated,isImported:e.is_imported===null?void 0:!!e.is_imported,summary:e.summary??void 0,summaryUpdatedAt:e.summary_updated_at??void 0,forkTransforms:Pr(e.fork_transforms),targetWorkingDirectory:e.target_working_directory??void 0,agents:t.map(e=>({agentId:e.agentId,adapterId:e.adapterId,adapterName:e.adapterName,sessionId:e.sessionId,role:e.role,status:e.status,createdAt:e.createdAt,lastActivityAt:e.lastActivityAt,model:e.model??void 0,adapterSessionId:e.adapterSessionId??void 0,cwd:e.cwd??void 0})),preview:{messageCount:r.get(e.session_id)??0,firstUserMessage:n.get(e.session_id)??null}}}function Ir(e,t){let n=P(t).fts,r=[];return r.push(e.on(u.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 jr(t,d),p=await Mr(t,d),m=await Nr(t,d),h=l.map(e=>Fr(e,f.get(e.session_id)??[],p,m));e.setResult({sessions:h,total:u})})),()=>r.forEach(e=>e())}async function Lr(e,t){return(await Me(e).all(H`
19
+ WITH RECURSIVE ancestors AS (
20
+ SELECT session_id, parent_session_id
21
+ FROM sessions
22
+ WHERE session_id = ${t}
23
+
24
+ UNION ALL
25
+
26
+ SELECT s.session_id, s.parent_session_id
27
+ FROM sessions s
28
+ JOIN ancestors a ON s.session_id = a.parent_session_id
29
+ )
30
+ SELECT session_id FROM ancestors
31
+ `)).map(e=>e.session_id)}var Rr=class{bus;options;cleanups=[];transform;constructor(e=oe,t={}){this.bus=e,this.options=t,this.transform=t.transform??(e=>e),this.registerHandlers()}async emitStorageEvent(e,t,n){let r={sessionId:t,eventId:crypto.randomUUID(),timestamp:Date.now(),type:e,payload:n},i=this.transform(r);i&&await this.bus.request(s.append,{event:i})}registerHandler(e,t){this.cleanups.push(this.bus.on(e,(async e=>{try{await this.emitStorageEvent(t,e.payload.sessionId,e.payload)}catch(e){console.error(`[SessionLogger] Failed to emit ${t} to storage:`,e)}})))}registerHandlers(){this.registerHandler(O.agent.added,`agent.added`),this.registerHandler(O.turn.started,`turn.started`),this.registerHandler(O.turn.completed,`turn.completed`),this.registerHandler(O.branch.created,`branch.created`)}destroy(){for(let e of this.cleanups)e();this.cleanups.length=0}};const zr=je(`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()})),Br=zr.sqlite,Vr=zr.postgres,Hr=j({importCursors:Br},{importCursors:Vr});function Ur(e,t){let{importCursors:n}=N(t,Hr),r=[];return r.push(e.on(Be.get,async e=>{let{filePath:r}=e.payload,i=(await t.select().from(n).where(z(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(Be.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(Be.delete,async e=>{let{filePath:r}=e.payload,i=await t.delete(n).where(z(n.filePath,r));e.setResult({success:M(i)})})),()=>{r.forEach(e=>e())}}De(`embeddings`,{id:Te(`id`).primaryKey({autoIncrement:!0}),entityType:A(`entity_type`).notNull(),entityId:A(`entity_id`).notNull(),model:A(`model`).notNull(),dimensions:Te(`dimensions`).notNull(),content:A(`content`),embedding:Ce(`embedding`,{mode:`buffer`}).notNull(),createdAt:Te(`created_at`).notNull()},e=>[we(`idx_embeddings_entity`).on(e.entityType,e.entityId),we(`idx_embeddings_model`).on(e.model),Oe(`idx_embeddings_unique`).on(e.entityType,e.entityId,e.model)]);function Wr(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 Gr=class{rawSql;engine;knownTables=new Set;constructor(e){this.rawSql=Me(e),this.engine=Ne(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=H.identifier(n),i=H.raw(this.engine.capabilities.binaryColumnType);return await this.rawSql.run(H`CREATE TABLE IF NOT EXISTS ${r} (
32
+ entity_type TEXT NOT NULL,
33
+ entity_id TEXT NOT NULL,
34
+ embedding ${i} NOT NULL,
35
+ PRIMARY KEY (entity_type, entity_id)
36
+ )`),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=H.identifier(a);await this.rawSql.run(H`INSERT INTO ${s} (entity_type, entity_id, embedding)
37
+ VALUES (${n}, ${r}, ${o})
38
+ ON CONFLICT(entity_type, entity_id) DO UPDATE SET
39
+ 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=H.identifier(r),a=await this.rawSql.all(H`SELECT entity_type, entity_id, embedding FROM ${i}`);return a.length===0?[]:a.map(e=>{let n=Wr(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=H.identifier(r);await this.rawSql.run(H`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)}},Kr=class{sessionId;parentSessionId;status=`active`;_turns=[];_completedTurnIds=new Set;bus;constructor(e){this.sessionId=e.sessionId??crypto.randomUUID(),this.parentSessionId=e.parentSessionId,this.bus=e.bus}get turns(){return this._turns}async startTurn(e){if(this.status!==`active`)throw Error(`Cannot start turn on non-active session`);let t=new S({sessionId:this.sessionId,agentIds:e.agentIds,turnNumber:e.turnNumber,turnId:e.turnId});return this._turns.push(t),t.addMessage(e.messageId),await this.emit(O.turn.started,{turnId:t.turnId,turnNumber:t.turnNumber,agentIds:[...t.agentIds],messageId:e.messageId}),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`);this._completedTurnIds.add(e.turnId);let t=e.getResult();await this.emit(O.turn.completed,{turnId:e.turnId,turnNumber:e.turnNumber,success:t.success,error:t.errors.length>0?t.errors.join(`; `):void 0})}async emit(e,t){await this.bus.emit(e,{...t,sessionId:this.sessionId})}};function qr(e,t){let{sessions:n}=N(t,Y);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(z(n.parentExternalSessionId,i),z(n.source,a)));for(let t of c)t.parentSessionId!==null&&await e.request(u.update,{sessionId:t.sessionId,rootSessionId:o}),t.adapterSessionId!==null&&await r(t.adapterSessionId,a,o,s+1)}return e.on(O.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(z(n.parentExternalSessionId,a),z(n.source,s),V(n.parentSessionId)));if(c.length===0)return;let{session:l}=await e.request(u.get,{sessionId:o}),d=l?.rootSessionId??o;for(let t of c)await e.request(u.update,{sessionId:t.sessionId,parentSessionId:o,rootSessionId:d,...t.branchKind===null?{}:{branchKind:t.branchKind}}),t.adapterSessionId!==null&&await r(t.adapterSessionId,s,d)})}const Jr=new Set([`Agent`,`spawn_subagent`]),Yr=`[^A-Za-z0-9_-]`;function Xr(e){return e.replaceAll(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Zr(e,t){return t.test(e)}async function Qr(e,t){let n=[],r,i=0;do{let a=await e.request(C.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 $r(e){let t=[];for(let n of e)for(let e of n.blocks)e.type===`tool_call`&&Jr.has(e.name)&&t.push({toolCallId:e.toolCallId});return t}function ei(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(Zr(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 ti(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 ni(e){return[...e].map(e=>{let t=Xr(e);return{id:e,pattern:RegExp(`(^|${Yr})${t}($|${Yr})`)}})}async function ri(e,t,n){let{children:r}=await e.request(u.getChildren,{sessionId:n}),i=r.filter(e=>e.branchKind===`compress`);if(i.length===0)return;let{session:a}=await e.request(u.get,{sessionId:t}),o=a?.adapterSessionId;if(!o)return;let s=ni(new Set([o])),c=(await Promise.all(i.map(async t=>{let n=await Qr(e,t.sessionId),r=$r(n);if(r.length===0)return null;let i=ei(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(u.update,{sessionId:t,parentSessionId:c[0].parentSessionId,spawningToolCallId:c[0].toolCallId})}async function ii(e,t,n){let r=t.parentExternalSessionId,i=t.source??n;if(!r||!i)return;let a=t.sessionId,{session:o}=await e.request(u.getByAdapterSessionId,{adapterSessionId:r,source:i}),s=o?.sessionId;if(!s)return;let{children:c}=await e.request(u.getChildren,{sessionId:s}),l=await ai(e,c);if(l.size===0)return;let d=await Qr(e,a),f=$r(d);if(f.length===0)return;let p=ei(d,ni(new Set(l.keys()))),m=new Map;for(let e of f){let t=p.get(e.toolCallId);t!==void 0&&m.set(t,(m.get(t)??0)+1)}let h=new Map;for(let e of f){let t=p.get(e.toolCallId),n=t===void 0?void 0:l.get(t);n!==void 0&&t!==void 0&&m.get(t)===1&&h.set(n,e.toolCallId)}if(h.size===0)return;let g=[...h].map(async([t,n])=>{try{await e.request(u.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(g)}async function ai(e,t){return ti(await Promise.all(t.filter(e=>e.branchKind===`subagent`).map(async t=>{let{session:n}=await e.request(u.get,{sessionId:t.sessionId});return n?.adapterSessionId?{sessionId:t.sessionId,adapterSessionId:n.adapterSessionId}:null})))}function oi(e){return e.on(O.import.completed,async t=>{try{let{sessionId:n,source:r}=t.payload,{session:i}=await e.request(u.get,{sessionId:n});if(!i)return;if(i.branchKind===`subagent`&&i.parentSessionId!==void 0){await ri(e,n,i.parentSessionId);return}if(i.branchKind!==`compress`)return;await ii(e,i,r)}catch(e){console.error(`[CompressLineageResolver] Failed to resolve compress lineage`,{payload:t.payload,error:e})}})}function si(e){return[...e].map(e=>{let t=Xr(e);return{id:e,pattern:RegExp(`(^|${Yr})${t}($|${Yr})`)}})}async function ci(e,t,n){return ti(await Promise.all(n.filter(e=>e.branchKind===`subagent`&&e.spawningToolCallId===void 0).map(async n=>{let{session:r}=await e.request(u.get,{sessionId:n.sessionId}),i=r?.source??r?.adapterName;return r?.adapterSessionId&&i===t?{sessionId:n.sessionId,adapterSessionId:r.adapterSessionId}:null})))}function li(e){return e.on(O.import.completed,async t=>{try{let{sessionId:n,source:r}=t.payload,{children:i}=await e.request(u.getChildren,{sessionId:n}),a=await ci(e,r,i),o=new Set(a.keys());if(o.size===0)return;let s=await Qr(e,n),c=$r(s);if(c.length===0)return;let l=ei(s,si(o)),d=new Map;for(let e of c){let t=l.get(e.toolCallId);t!==void 0&&d.set(t,(d.get(t)??0)+1)}let f=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&&d.get(t)===1&&f.set(n,e.toolCallId)}let p=[...f].map(async([t,r])=>{try{let{session:n}=await e.request(u.get,{sessionId:t});if(n?.spawningToolCallId!==void 0)return;await e.request(u.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(p)}catch(e){console.error(`Failed to backfill spawningToolCallId for imported session`,{payload:t.payload,error:e})}})}function ui(e){return e.on(E.session.discovered,async t=>{let n=me.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,kind:d,parentAdapterSessionId:f,forkPointMessageId:p}=n.data,m=mn({kind:d,parentAdapterSessionId:f??null,forkPointMessageId:p??null});await e.request(u.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},...m})})}var di=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(D.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{ln as A,Jt as B,Z as C,mn as D,pn as E,an as F,Pt as G,qt as H,nn as I,at as J,wt as K,tn as L,sn as M,on as N,un as O,rn as P,en as R,$n as S,Pn as T,Kt as U,W as V,Lt as W,Ue as X,rt as Y,Fr as _,qr as a,Or as b,Ur as c,Rr as d,Lr as f,Mr as g,Nr as h,oi as i,cn as j,dn as k,Br as l,jr as m,ui as n,Kr as o,Ir as p,dt as q,li as r,Gr as s,di as t,zr as u,Pr as v,Xn as w,er as x,Ar as y,Qt as z};
@@ -13,8 +13,8 @@ declare const SUBAGENT_SESSION_LINEAGE_KIND: "subagent";
13
13
  declare const COMPRESS_SESSION_LINEAGE_KIND: "compress";
14
14
  /** Discriminates the relationship of a session to its parent. */
15
15
  declare const SessionLineageKindSchema: z.ZodEnum<{
16
- root: "root";
17
16
  fork: "fork";
17
+ root: "root";
18
18
  subagent: "subagent";
19
19
  compress: "compress";
20
20
  }>;
@@ -1,13 +1,13 @@
1
1
  import { a as DATABASE_DIALECT, c as getDatabaseDialect, n as DatabaseClientConfig, o as MakaioDatabase, s as StorageDialect, t as DatabaseClient } from "../../client-BJVDImPV.mjs";
2
2
  import { IMakaioBus } from "@makaio/framework/bus";
3
3
  import { ExtensionContext } from "@makaio/framework/contracts";
4
+ import { StorageNamespace, StorageNamespaceConfig, StorageNamespaceExtensions, createStorageNamespace } from "@makaio/framework/storage";
4
5
  import * as _$drizzle_orm_sqlite_core0 from "drizzle-orm/sqlite-core";
5
6
  import { SQLiteColumn, SQLiteColumnBuilderBase, SQLiteTable, SQLiteTableExtraConfigValue, SQLiteTableWithColumns } from "drizzle-orm/sqlite-core";
6
7
  import * as _$drizzle_orm_pg_core0 from "drizzle-orm/pg-core";
7
8
  import { PgColumn, PgColumnBuilderBase, PgTable, PgTableExtraConfigValue, PgTableWithColumns } from "drizzle-orm/pg-core";
8
9
  import * as _$drizzle_orm0 from "drizzle-orm";
9
10
  import { $Type, BuildColumns, BuildExtraConfigColumns, ColumnBuilderBase, SQL, Table } from "drizzle-orm";
10
- import { StorageNamespace, StorageNamespaceConfig, StorageNamespaceExtensions, createStorageNamespace } from "@makaio/framework/storage";
11
11
 
12
12
  //#region storage/drizzle/src/raw-sql.d.ts
13
13
  /**
@@ -1 +1 @@
1
- import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x,y as S}from"../../registry-RG-bkw3c.mjs";import{autoPk as C,bool as w,epochMs as T,float8 as E,jsonCol as D}from"./columns/sqlite.mjs";import{autoPk as O,bool as k,epochMs as A,float8 as j,jsonCol as M}from"./columns/postgres.mjs";import{integer as N,sqliteTable as P,text as F}from"drizzle-orm/sqlite-core";import{bigint as I,integer as L,pgTable as R,text as z}from"drizzle-orm/pg-core";import{getTableColumns as B}from"drizzle-orm";import{createStorageNamespace as V}from"@makaio/framework/storage";const H=[{dialect:`postgres`,enginePackageName:`@makaio/storage-pg`,chainDirName:`drizzle-postgres`,drizzleConfigSpecifier:`drizzle.config.ts`,normalizeScriptSpecifier:`scripts/normalize-migrations.ts`}];function U(e){return H.find(t=>t.dialect===e)}async function W(e,t){let n=G.get(e)??Promise.resolve(),r=()=>{},i=new Promise(e=>{r=e}),a=n.catch(()=>void 0).then(()=>i);G.set(e,a),await n.catch(()=>void 0);try{return await e.transaction(t)}finally{r(),G.get(e)===a&&G.delete(e)}}const G=new WeakMap;function K(e){return(t,n,r)=>e(t,n,r)}function q(e,t){return{sqlite:e,postgres:t}}function J(t,n){return n[e(t)]}function Y(e,t){let n=(e,t)=>({sqlite:e,postgres:t,notNull:()=>n(e.notNull(),t.notNull()),default:r=>n(e.default(r),t.default(r)),primaryKey:()=>n(e.primaryKey(),t.primaryKey()),unique:r=>n(e.unique(r),t.unique(r)),$type:()=>n(e,t),references:(r,i)=>n(e.references(()=>r().sqlite,i),t.references(()=>r().postgres,i))});return n(e,t)}const X={text:e=>Y(F(e),z(e)),textEnum:(e,t)=>Y(F(e,t),z(e,t)),epochMs:e=>Y(T(e),A(e)),bool:e=>Y(w(e),k(e)),jsonCol:e=>Y(D(e),M(e)),autoPk:e=>Y(C(e),O(e)),float8:e=>Y(E(e),j(e)),int4:e=>Y(N(e),L(e)),int8:e=>Y(N(e),I(e,{mode:`number`}))};function Z(e,t,n){let r=t(X),i={},a={};for(let[e,t]of Object.entries(r))i[e]=t.sqlite,a[e]=t.postgres;let o=P(e,i,n?.sqlite),s=R(e,a,n?.postgres),c=B(o),l=B(s);return{sqlite:o,postgres:s,columnPair(e){return{sqlite:c[e],postgres:l[e]}}}}export{t as DATABASE_DIALECT,H as NON_BASELINE_GENERATION_LEGS,f as STORAGE_ENGINE_URL_HINTS,i as affectedRowCount,b as brandDatabase,d as buildFirstUserMessagePreviewQuery,V as createStorageNamespace,q as defineDialectSchema,Z as defineDualTable,l as describeMissingStorageEngine,x as didAffectRows,W as executeTransaction,U as findGenerationLegForDialect,v as findStorageEngine,e as getDatabaseDialect,S as getRawSqlExecutor,p as getStorageEngine,n as importRuntimeModule,y as isSqliteDuplicateObjectError,o as isSqliteUniqueViolationError,c as quoteSqlIdentifier,s as readErrorCode,K as registerDrizzleHandlers,g as registerStorageEngine,J as resolveSchema,u as resolveStorageEngine,r as resolveStorageEngineForUrl,a as sanitizeFtsQuery,h as someInCauseChain,_ as sqliteFtsSearchStrategy,m as sqliteStorageEngine};
1
+ import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x,y as S}from"../../registry-RG-bkw3c.mjs";import{autoPk as C,bool as w,epochMs as T,float8 as E,jsonCol as D}from"./columns/sqlite.mjs";import{autoPk as O,bool as k,epochMs as A,float8 as j,jsonCol as M}from"./columns/postgres.mjs";import{createStorageNamespace as N}from"@makaio/framework/storage";import{integer as P,sqliteTable as F,text as I}from"drizzle-orm/sqlite-core";import{bigint as L,integer as R,pgTable as z,text as B}from"drizzle-orm/pg-core";import{getTableColumns as V}from"drizzle-orm";const H=[{dialect:`postgres`,enginePackageName:`@makaio/storage-pg`,chainDirName:`drizzle-postgres`,drizzleConfigSpecifier:`drizzle.config.ts`,normalizeScriptSpecifier:`scripts/normalize-migrations.ts`}];function U(e){return H.find(t=>t.dialect===e)}async function W(e,t){let n=G.get(e)??Promise.resolve(),r=()=>{},i=new Promise(e=>{r=e}),a=n.catch(()=>void 0).then(()=>i);G.set(e,a),await n.catch(()=>void 0);try{return await e.transaction(t)}finally{r(),G.get(e)===a&&G.delete(e)}}const G=new WeakMap;function K(e){return(t,n,r)=>e(t,n,r)}function q(e,t){return{sqlite:e,postgres:t}}function J(t,n){return n[e(t)]}function Y(e,t){let n=(e,t)=>({sqlite:e,postgres:t,notNull:()=>n(e.notNull(),t.notNull()),default:r=>n(e.default(r),t.default(r)),primaryKey:()=>n(e.primaryKey(),t.primaryKey()),unique:r=>n(e.unique(r),t.unique(r)),$type:()=>n(e,t),references:(r,i)=>n(e.references(()=>r().sqlite,i),t.references(()=>r().postgres,i))});return n(e,t)}const X={text:e=>Y(I(e),B(e)),textEnum:(e,t)=>Y(I(e,t),B(e,t)),epochMs:e=>Y(T(e),A(e)),bool:e=>Y(w(e),k(e)),jsonCol:e=>Y(D(e),M(e)),autoPk:e=>Y(C(e),O(e)),float8:e=>Y(E(e),j(e)),int4:e=>Y(P(e),R(e)),int8:e=>Y(P(e),L(e,{mode:`number`}))};function Z(e,t,n){let r=t(X),i={},a={};for(let[e,t]of Object.entries(r))i[e]=t.sqlite,a[e]=t.postgres;let o=F(e,i,n?.sqlite),s=z(e,a,n?.postgres),c=V(o),l=V(s);return{sqlite:o,postgres:s,columnPair(e){return{sqlite:c[e],postgres:l[e]}}}}export{t as DATABASE_DIALECT,H as NON_BASELINE_GENERATION_LEGS,f as STORAGE_ENGINE_URL_HINTS,i as affectedRowCount,b as brandDatabase,d as buildFirstUserMessagePreviewQuery,N as createStorageNamespace,q as defineDialectSchema,Z as defineDualTable,l as describeMissingStorageEngine,x as didAffectRows,W as executeTransaction,U as findGenerationLegForDialect,v as findStorageEngine,e as getDatabaseDialect,S as getRawSqlExecutor,p as getStorageEngine,n as importRuntimeModule,y as isSqliteDuplicateObjectError,o as isSqliteUniqueViolationError,c as quoteSqlIdentifier,s as readErrorCode,K as registerDrizzleHandlers,g as registerStorageEngine,J as resolveSchema,u as resolveStorageEngine,r as resolveStorageEngineForUrl,a as sanitizeFtsQuery,h as someInCauseChain,_ as sqliteFtsSearchStrategy,m as sqliteStorageEngine};
@@ -1 +1 @@
1
- import{SessionStorageSubjects as e}from"./services/session/storage/namespace.mjs";import{F as t}from"./handlers-C8EtpSqK.mjs";import"./session-KnewDVxt.mjs";import{AgentSubjects as n,ApprovalSubjects as r,HarnessSubjects as i,computeMetaTags as a}from"@makaio/framework/contracts";import{BaseService as o}from"@makaio/framework/service-base";import{extractToolFilePath as s}from"@makaio/framework/tools";const c={"full-access":0,"always-ask":1,reject:2};function l(){return`apr_${crypto.randomUUID()}`}function u(e){switch(e){case`allow`:return`full-access`;case`deny`:return`reject`;case`ask`:return`always-ask`}}function d(e){if(!e?.length)return`neutral`;let t=a(e);return t.includes(`destructive`)?`destructive`:t.includes(`read-only`)?`safe`:`neutral`}function f(e,t){if(e)return t&&e.toolApprovalOverrides?.[t]!==void 0?e.toolApprovalOverrides[t]:e.approvalPolicy}function p(e,t,n,r){let i=r[t];if(!i?.length)return e;let a=e;for(let e of i){let t=n[e];t&&c[t]>c[a]&&(a=t)}return a}function m(e,t,n){return n.handled?n.data.allowedDirectories??void 0:t?[]:void 0}function h(e,t,n){if(!n||!e?.cwd)return{};let r;return(e.personaId||e.profileId)&&t&&(r=m(e.personaId,e.profileId,t)),{cwd:e.cwd,...r&&{allowedDirectories:r}}}function g(e,t,n){if(!(!e&&!t))return!n||!n.handled?{policy:`always-ask`}:{policy:u(n.data.action),...n.data.personaName&&{personaName:n.data.personaName},...n.data.profileName&&{profileName:n.data.profileName}}}function _(e,t){let n=t.harness?.toolCapabilityMap&&e.toolName?t.harness.toolCapabilityMap[e.toolName]:void 0;return{requestId:l(),toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,agentId:e.agentId,sessionId:e.sessionId,adapterName:t.resolvedAdapterName,...t.personaName&&{personaName:t.personaName},...t.profileName&&{profileName:t.profileName},capabilities:n,riskLevel:d(n),reasoning:e.reasoning,createdAt:Date.now()}}var v=class extends o{logger=console;options;constructor(e,t={}){super(e),this.options=t}async onInit(){this.registerHandler(n.toolApprove,async e=>{let t=await this.getAgentMetadata(e.payload.agentId,e.payload.sessionId),n=(t?.personaId||t?.profileId)&&e.payload.toolName?await this.fetchRawEnrichedPolicy(t?.personaId,t?.profileId,e.payload.toolName):void 0,r=h(t,n,this.options.fileAccessRuleProvider),i=await this.checkFileAccessDenyReason(e.payload,r);if(i){e.setResult({action:`deny`,message:i,shouldAbort:!1});return}let a=await this.resolveSessionOverride(e.payload.sessionId);if(a===`full-access`){e.setResult({action:`allow`});return}if(a===`reject`){e.setResult({action:`deny`,message:`Tool use rejected by session approval policy override`,shouldAbort:!1});return}let o=await this.resolvePolicyWithContext({adapterName:e.payload.adapterName,toolName:e.payload.toolName},t,n);switch(a===`always-ask`?`always-ask`:o.policy){case`full-access`:e.setResult({action:`allow`});return;case`reject`:e.setResult({action:`deny`,message:`Tool use rejected by approval policy`,shouldAbort:!1});return;case`always-ask`:await this.dispatchAlwaysAskApproval(e.payload,e.setResult.bind(e),o);return}})}async dispatchAlwaysAskApproval(e,t,i){let a=_(e,i),o=new AbortController,s=this.bus.on(n.session.closed,()=>{o.abort()},{filter:{agentId:a.agentId,adapterSessionId:e.adapterSessionId}});try{let e=await this.bus.requestOptional(r.request,a,{timeout:0,signal:o.signal});e.handled&&e.data.action===`allow`?t({action:`allow`,...e.data.updatedInput&&{updatedInput:e.data.updatedInput}}):t({action:`deny`,message:e.handled&&e.data.action===`deny`?e.data.message??`User denied tool execution`:`No approval handler available`,shouldAbort:!1})}catch{t({action:`deny`,message:o.signal.aborted?`Approval cancelled — agent session closed`:`Tool approval request failed`,shouldAbort:!1})}finally{s()}}async checkFileAccessDenyReason(e,t){if(!this.options.fileAccessRuleProvider||!t.cwd)return;let n=s(e.toolName,e.args,t.cwd);if(n)try{return(await this.options.fileAccessRuleProvider(t.cwd,t.allowedDirectories)).isDenied(n)?`Access denied: '${n}' is restricted by .makaioignore rules`:void 0}catch{return`Access denied: file access rules could not be evaluated`}}async fetchRawEnrichedPolicy(e,t,n){try{return await this.bus.requestOptional(r.resolveEnrichedPolicy,{toolName:n,personaId:e,profileId:t})}catch(r){return this.logger.error(`[ToolApprovalService] approval.resolveEnrichedPolicy failed; falling back to fail-closed`,{toolName:n,personaId:e,profileId:t,error:r}),{handled:!1}}}async resolvePolicyWithContext(e,t,n){let r=t?.adapterName??e.adapterName,i=g(t?.personaId,t?.profileId,n),a=await this.resolveHarnessPolicy(r,t?.harnessId,t?.clientId),o=f(a,e.toolName),s=i?.policy??o??`always-ask`,c=s;return a?.capabilityOverrides&&a.toolCapabilityMap&&e.toolName&&(c=p(s,e.toolName,a.capabilityOverrides,a.toolCapabilityMap)),{policy:c,harness:a,agent:t,resolvedAdapterName:r,...i?.personaName&&{personaName:i.personaName},...i?.profileName&&{profileName:i.profileName}}}async getAgentMetadata(e,n){try{if(n){let{agents:r}=await this.bus.request(t.listBySession,{sessionId:n});return r.find(t=>t.agentId===e)??null}let r=await this.bus.requestOptional(t.get,{agentId:e});return r.handled?r.data.agent:null}catch{return null}}async resolveSessionOverride(t){if(t)try{let n=await this.bus.requestOptional(e.get,{sessionId:t});return n.handled?n.data.session?.approvalPolicyOverride??void 0:void 0}catch{return}}async resolveHarnessPolicy(e,t,n){try{let r=await this.bus.request(i.resolve,{adapterName:e,...t&&{profileHarnessId:t},...n&&{clientId:n}});return{approvalPolicy:r.approvalPolicy,capabilityOverrides:r.capabilityOverrides,toolCapabilityMap:r.toolCapabilityMap,toolApprovalOverrides:r.toolApprovalOverrides}}catch{return}}};export{v as t};
1
+ import{SessionStorageSubjects as e}from"./services/session/storage/namespace.mjs";import{F as t}from"./handlers-BAB4fQNH.mjs";import"./session-P4nX60Xx.mjs";import{AgentSubjects as n,ApprovalSubjects as r,HarnessSubjects as i,computeMetaTags as a}from"@makaio/framework/contracts";import{BaseService as o}from"@makaio/framework/service-base";import{extractToolFilePath as s}from"@makaio/framework/tools";const c={"full-access":0,"always-ask":1,reject:2};function l(){return`apr_${crypto.randomUUID()}`}function u(e){switch(e){case`allow`:return`full-access`;case`deny`:return`reject`;case`ask`:return`always-ask`}}function d(e){if(!e?.length)return`neutral`;let t=a(e);return t.includes(`destructive`)?`destructive`:t.includes(`read-only`)?`safe`:`neutral`}function f(e,t){if(e)return t&&e.toolApprovalOverrides?.[t]!==void 0?e.toolApprovalOverrides[t]:e.approvalPolicy}function p(e,t,n,r){let i=r[t];if(!i?.length)return e;let a=e;for(let e of i){let t=n[e];t&&c[t]>c[a]&&(a=t)}return a}function m(e,t,n){return n.handled?n.data.allowedDirectories??void 0:t?[]:void 0}function h(e,t,n){if(!n||!e?.cwd)return{};let r;return(e.personaId||e.profileId)&&t&&(r=m(e.personaId,e.profileId,t)),{cwd:e.cwd,...r&&{allowedDirectories:r}}}function g(e,t,n){if(!(!e&&!t))return!n||!n.handled?{policy:`always-ask`}:{policy:u(n.data.action),...n.data.personaName&&{personaName:n.data.personaName},...n.data.profileName&&{profileName:n.data.profileName}}}function _(e,t){let n=t.harness?.toolCapabilityMap&&e.toolName?t.harness.toolCapabilityMap[e.toolName]:void 0;return{requestId:l(),toolCallId:e.toolCallId,toolName:e.toolName,args:e.args,agentId:e.agentId,sessionId:e.sessionId,adapterName:t.resolvedAdapterName,...t.personaName&&{personaName:t.personaName},...t.profileName&&{profileName:t.profileName},capabilities:n,riskLevel:d(n),reasoning:e.reasoning,createdAt:Date.now()}}var v=class extends o{logger=console;options;constructor(e,t={}){super(e),this.options=t}async onInit(){this.registerHandler(n.toolApprove,async e=>{let t=await this.getAgentMetadata(e.payload.agentId,e.payload.sessionId),n=(t?.personaId||t?.profileId)&&e.payload.toolName?await this.fetchRawEnrichedPolicy(t?.personaId,t?.profileId,e.payload.toolName):void 0,r=h(t,n,this.options.fileAccessRuleProvider),i=await this.checkFileAccessDenyReason(e.payload,r);if(i){e.setResult({action:`deny`,message:i,shouldAbort:!1});return}let a=await this.resolveSessionOverride(e.payload.sessionId);if(a===`full-access`){e.setResult({action:`allow`});return}if(a===`reject`){e.setResult({action:`deny`,message:`Tool use rejected by session approval policy override`,shouldAbort:!1});return}let o=await this.resolvePolicyWithContext({adapterName:e.payload.adapterName,toolName:e.payload.toolName},t,n);switch(a===`always-ask`?`always-ask`:o.policy){case`full-access`:e.setResult({action:`allow`});return;case`reject`:e.setResult({action:`deny`,message:`Tool use rejected by approval policy`,shouldAbort:!1});return;case`always-ask`:await this.dispatchAlwaysAskApproval(e.payload,e.setResult.bind(e),o);return}})}async dispatchAlwaysAskApproval(e,t,i){let a=_(e,i),o=new AbortController,s=this.bus.on(n.session.closed,()=>{o.abort()},{filter:{agentId:a.agentId,adapterSessionId:e.adapterSessionId}});try{let e=await this.bus.requestOptional(r.request,a,{timeout:0,signal:o.signal});e.handled&&e.data.action===`allow`?t({action:`allow`,...e.data.updatedInput&&{updatedInput:e.data.updatedInput}}):t({action:`deny`,message:e.handled&&e.data.action===`deny`?e.data.message??`User denied tool execution`:`No approval handler available`,shouldAbort:!1})}catch{t({action:`deny`,message:o.signal.aborted?`Approval cancelled — agent session closed`:`Tool approval request failed`,shouldAbort:!1})}finally{s()}}async checkFileAccessDenyReason(e,t){if(!this.options.fileAccessRuleProvider||!t.cwd)return;let n=s(e.toolName,e.args,t.cwd);if(n)try{return(await this.options.fileAccessRuleProvider(t.cwd,t.allowedDirectories)).isDenied(n)?`Access denied: '${n}' is restricted by .makaioignore rules`:void 0}catch{return`Access denied: file access rules could not be evaluated`}}async fetchRawEnrichedPolicy(e,t,n){try{return await this.bus.requestOptional(r.resolveEnrichedPolicy,{toolName:n,personaId:e,profileId:t})}catch(r){return this.logger.error(`[ToolApprovalService] approval.resolveEnrichedPolicy failed; falling back to fail-closed`,{toolName:n,personaId:e,profileId:t,error:r}),{handled:!1}}}async resolvePolicyWithContext(e,t,n){let r=t?.adapterName??e.adapterName,i=g(t?.personaId,t?.profileId,n),a=await this.resolveHarnessPolicy(r,t?.harnessId,t?.clientId),o=f(a,e.toolName),s=i?.policy??o??`always-ask`,c=s;return a?.capabilityOverrides&&a.toolCapabilityMap&&e.toolName&&(c=p(s,e.toolName,a.capabilityOverrides,a.toolCapabilityMap)),{policy:c,harness:a,agent:t,resolvedAdapterName:r,...i?.personaName&&{personaName:i.personaName},...i?.profileName&&{profileName:i.profileName}}}async getAgentMetadata(e,n){try{if(n){let{agents:r}=await this.bus.request(t.listBySession,{sessionId:n});return r.find(t=>t.agentId===e)??null}let r=await this.bus.requestOptional(t.get,{agentId:e});return r.handled?r.data.agent:null}catch{return null}}async resolveSessionOverride(t){if(t)try{let n=await this.bus.requestOptional(e.get,{sessionId:t});return n.handled?n.data.session?.approvalPolicyOverride??void 0:void 0}catch{return}}async resolveHarnessPolicy(e,t,n){try{let r=await this.bus.request(i.resolve,{adapterName:e,...t&&{profileHarnessId:t},...n&&{clientId:n}});return{approvalPolicy:r.approvalPolicy,capabilityOverrides:r.capabilityOverrides,toolCapabilityMap:r.toolCapabilityMap,toolApprovalOverrides:r.toolApprovalOverrides}}catch{return}}};export{v as t};
@@ -1 +1 @@
1
- import{SessionStorageSubjects as e}from"./services/session/storage/namespace.mjs";import{N as t}from"./handlers-C8EtpSqK.mjs";import{A as n,G as r,K as i,L as a,Y as o,a as s,b as c,c as l,i as u,n as d,p as f,r as ee,w as te,z as ne}from"./session-KnewDVxt.mjs";import{n as p}from"./namespace-ENv7H7Na.mjs";import{t as re}from"./capability-service-jjrFLM6r.mjs";import"./services/adapter-subsystem/index.mjs";import{i as ie,s as ae}from"./model-registry-B0AIdj7O.mjs";import{t as oe}from"./tool-approval-service-Cb2F1yT6.mjs";import{t as se}from"./tray-menu-service-B5YPK_YF.mjs";import{r as m,t as h}from"./handler-DSfSAlxx.mjs";import{n as ce}from"./package-OE9dMQsq.mjs";import{t as le}from"./filesystem-service-BjfrUmGS.mjs";import{z as g}from"zod";import{createHash as ue}from"node:crypto";import{MakaioError as de,createMakaioContext as fe}from"@makaio/framework/core";import{MakaioBus as _}from"@makaio/framework/bus";import{AdapterSubjects as pe,ArtifactSubjects as v,CanonicalModelSubjects as me,DEFAULT_HARNESSES as he,HarnessDefinitionCreateSchema as ge,HarnessSubjects as y,JsonValueSchema as _e,ToolSubjects as b,TransitionRuleDefinitionSchema as ve,WorkflowBlocksSubjects as ye,WorkflowSubjects as be,dep as x,extensionToken as S,validateToolAdapterIdentity as xe,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 Se}from"@makaio/framework/contracts/config";import{ClientAccountIdentifierSchema as Ce,ClientSessionAccountObserveSchema as we,ClientSubjects as E}from"@makaio/framework/contracts/client";import{FacetSubjects as D}from"@makaio/framework/contracts/facet";import{MaterializationSubjects as O}from"@makaio/framework/contracts/materialization";import{FILE_ACCESS_RULES_KEY as Te,FILE_ACCESS_RULES_KEY as Ee,ToolErrorCodes as k,errorToToolResult as De,extractToolFilePath as Oe,toolError as A,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`}],j={extension:0,"factory-repo":1,"target-repo":2},M={source:`extension`,ownerKey:`extension:bus`};function N(e){return`${e.source}:${e.ownerKey}`}function Fe(e,t){return e.source===t.source&&e.ownerKey===t.ownerKey}function P(e){return structuredClone(e)}function F(e,t){return`${e}@${t}`}var I=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(P);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(P);e.setResult({relationTypes:n})})}compareKindContributions(e,t){let n=j[e.owner.source]-j[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,P(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=M){let n=F(e.kind,e.schemaVersion),r=this.kindContributions.get(n)??new Map,i=N(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:P(e),order:t.source===`extension`||a===void 0?this.nextKindContributionOrder++:a.order}),this.kindContributions.set(n,r),this.recomputeKindWinner(n)}deregisterKind(e,t,n=M){let r=F(e,t),i=this.kindContributions.get(r);i!==void 0&&(i.delete(N(n)),this.recomputeKindWinner(r))}replaceKindRegistrationsForOwner(e,t){let n=new Set,r=N(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=F(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:P(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,P(e))}getKind(e,t){let n=this.kinds.get(F(e,t));return n?P(n):void 0}getRelationType(e){let t=this.relationTypes.get(e);return t?P(t):void 0}onDestroy(){this.kinds.clear(),this.kindContributions.clear(),this.relationTypes.clear(),this.nextKindContributionOrder=0}},L=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 R(e,t){return e?!(e.kind!==void 0&&e.kind!==`*`&&e.kind!==t.kind||e.schemaVersion!==void 0&&e.schemaVersion!==t.schemaVersion):!0}function z(e){return e.priority??0}function Ie(e,t,n){return e.filter(e=>e.event===t&&R(e.filter,n)).sort((e,t)=>z(t)-z(e))}function Le(e,t,n){return e.filter(e=>e.event===t&&R(e.filter,n)).sort((e,t)=>z(t)-z(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 B=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 L(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 V(e){return structuredClone(e)}var Be=class extends w{namespaces=new Map;constructor(e){super(e)}async onInit(){this.registerHandler(D.namespace.register,e=>{this.registerNamespace(e.payload),e.setResult({registered:!0})}),this.registerHandler(D.namespace.list,e=>{let{namespace:t}=e.payload,n=[...this.namespaces.values()].filter(e=>!t||e.namespace===t).map(V);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,V(e)),this.bus.emit(D.namespace.changed,{namespace:e.namespace})}deregisterNamespace(e){this.namespaces.delete(e)&&this.bus.emit(D.namespace.changed,{namespace:e})}getNamespace(e){let t=this.namespaces.get(e);return t?V(t):void 0}onDestroy(){this.namespaces.clear()}};function H(e){return structuredClone(e)}var Ve=class extends w{bindings=new Map;constructor(e){super(e)}async onInit(){this.registerHandler(O.surfaceBinding.register,e=>{this.registerBinding(e.payload),e.setResult({registered:!0})}),this.registerHandler(O.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(H);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,H(e)),this.bus.emit(O.surfaceBinding.changed,{id:e.id,provider:e.provider})}deregisterBinding(e){let t=this.bindings.get(e);t&&(this.bindings.delete(e),this.bus.emit(O.surfaceBinding.changed,{id:e,provider:t.provider}))}getBinding(e){let t=this.bindings.get(e);return t?H(t):void 0}onDestroy(){this.bindings.clear()}},U=class extends de{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 U(`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 U(`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 U(`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 U(`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 U(`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 U(`"${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 U(`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 U(`"${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 U(`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 U(`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(me.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=Se(t);return n.find(e=>Se(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(ae.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 W={name:`makaio.canonical-model`,displayName:`Canonical Model`,version:`0.1.0`,critical:!1,create:e=>new Ue(e.bus)};function We(e){let t=xe({adapterId:e?.adapterId,adapterName:e?.adapterName,contextOverrides:{adapterId:e?.contextOverrides?.adapterId,adapterName:e?.contextOverrides?.adapterName}}),n=t.issues[0];return n?A(k.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 A(k.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=A(k.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=fe({...e?.contextOverrides,constraints:n}),i=e?.contextOverrides;return{...r,bus:this.bus,sessionId:i?.sessionId,agentId:i?.agentId,adapterId:t.adapterId,adapterName:t.adapterName,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 A(k.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 A(k.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(ye.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(ye.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 G=`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(be.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=_e.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(G,$e(e)),this.factoriesBySource.set(`__builtin__`,[G])}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=ve.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(E.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(t,n){switch(n.locator.kind){case`session`:{let{session:r}=await t.request(e.get,{sessionId:n.locator.sessionId});return r?{sessionId:r.sessionId,session:r}:null}case`adapter-session`:{let{session:r}=await t.request(e.getByAdapterSessionId,{adapterSessionId:n.locator.adapterSessionId});return r?{sessionId:r.sessionId,session:r}:null}case`both`:{let[{session:r},{session:i}]=await Promise.all([t.request(e.get,{sessionId:n.locator.sessionId}),t.request(e.getByAdapterSessionId,{adapterSessionId:n.locator.adapterSessionId})]);if(!r&&!i)return null;if(!r||!i)throw Error(`Session locator mismatch: sessionId "${n.locator.sessionId}" and adapterSessionId "${n.locator.adapterSessionId}" must both resolve the same session`);if(r.sessionId!==i.sessionId)throw Error(`Session locator mismatch: sessionId "${n.locator.sessionId}" and adapterSessionId "${n.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 K(e.displayLabel)??K(t.displayLabel)??K(t.email)??K(t.label)}function ft(e){return structuredClone(e)}function pt(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function K(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}async function mt(t,n,r,i){let a=await t.request(e.update,{sessionId:n,clientId:r.clientId,clientAccountId:i,lastClientIdentityObservation:r});if(!a.success)throw Error(`Failed to update session "${n}" 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(E.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 he){if(n.has(t.id))continue;let r={...t};await e.request(m.set,{harness:r})}}function q(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(ge);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:q(t.description,n?.description,void 0),adapterName:t.adapterName,clientId:q(t.clientId,n?.clientId,void 0),env:q(t.env,n?.env,void 0),credentials:q(t.credentials,n?.credentials,void 0),cwd:q(t.cwd,n?.cwd,void 0),approvalPolicy:q(t.approvalPolicy,n?.approvalPolicy,`always-ask`),nativeTools:q(t.nativeTools,n?.nativeTools,r),registryTools:q(t.registryTools,n?.registryTools,r),skills:q(t.skills,n?.skills,void 0),toolCapabilityMap:t.toolCapabilityMap??n?.toolCapabilityMap,capabilityOverrides:t.capabilityOverrides??n?.capabilityOverrides,toolApprovalOverrides:t.toolApprovalOverrides??n?.toolApprovalOverrides,isDefault:q(t.isDefault,n?.isDefault,!1),enabled:q(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(pe.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-${ue(`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)},J=S(`session-storage`),Y=S(`session-bridge`),X=S(`session`),St=S(`session-orchestrator`),Z=S(`tool-registry`),Ct=S(`tool-approval`),wt=S(`tray-menu`),Tt=S(`capability`),Et=S(`model-registry`),Dt=S(`workflow-block-registry`),Ot=S(`transition-pipeline`),kt=S(`filesystem`),At=S(`git`),jt=S(`artifact-schema-registry`),Mt=S(`artifact-lifecycle-hook-registry`),Nt=S(`facet-namespace-registry`),Pt=S(`surface-binding-registry`),Ft={name:jt.name,displayName:`Artifact Schema Registry`,version:`0.1.0`,critical:!0,create:e=>new I(e.bus)},It={name:Mt.name,displayName:`Artifact Lifecycle Hook Registry`,version:`0.1.0`,critical:!0,create:e=>new B(e.bus)},Lt={name:Nt.name,displayName:`Facet Namespace Registry`,version:`0.1.0`,critical:!0,create:e=>new Be(e.bus)},Rt={name:Pt.name,displayName:`Surface Binding Registry`,version:`0.1.0`,critical:!0,create:e=>new Ve(e.bus)},zt={name:J.name,displayName:`Session Storage`,version:`0.1.0`,critical:!0,storage:{registerHandlers:T((e,n,a)=>{let o=[],p=e=>{for(let t=o.length-1;t>=0;--t)try{o[t]?.()}catch(t){console.warn(`[sessionStoragePackage] cleanup failed during ${e}:`,t)}o.length=0};try{o.push(c(e,n,a)),o.push(i(e,n,a)),o.push(r(e,n,a)),o.push(ne(e,n,a)),o.push(t(e,n,a)),o.push(te(e,n,a)),o.push(l(e,n,a)),o.push(f(e,n)),o.push(s(e,n)),o.push(u(e)),o.push(ee(e)),o.push(d(e))}catch(e){throw p(`rollback`),e}return()=>{p(`shutdown`)}})}},Bt={name:Y.name,displayName:`Session Bridge`,version:`0.1.0`,dependencies:[x(J.name)],critical:!0,create:e=>new n(e.bus)},Vt={name:X.name,displayName:`Session`,version:`0.1.0`,dependencies:[x(Y.name)],critical:!0,create:e=>new o(e.bus)},Q={name:St.name,displayName:`Session Orchestrator`,version:`0.1.0`,dependencies:[x(X.name),x(W.name)],critical:!0,runtimeOwnership:{sessionOrchestrator:!0},create:e=>new a(e.bus,e.machineId)},Ht={name:Z.name,displayName:`Tool Registry`,version:`0.1.0`,critical:!0,create:e=>new Je({bus:e.bus})},Ut={name:Ct.name,displayName:`Tool Approval`,version:`0.1.0`,dependencies:[x(Z.name)],critical:!0,create:e=>new oe(e.bus)},Wt={name:wt.name,displayName:`Tray Menu`,version:`0.1.0`,critical:!0,create:e=>new se(e.bus)},Gt={name:Tt.name,displayName:`Capability`,version:`0.1.0`,critical:!0,create:e=>new re(e.bus)},Kt={name:Dt.name,displayName:`Workflow Block Registry`,version:`0.1.0`,critical:!0,create:e=>new Ye(e.bus)},$={name:Ot.name,displayName:`Transition Pipeline`,version:`0.1.0`,critical:!0,create:e=>new it(e.bus)},qt={name:kt.name,displayName:`Filesystem`,version:`0.1.0`,critical:!0,create:e=>new le(e.bus,e.machineId)},Jt={name:At.name,displayName:`Git`,version:`0.1.0`,dependencies:[x(kt.name)],critical:!0,create:e=>new Ne(e.bus)};function Yt(e){return{name:Et.name,displayName:`Model Registry`,version:`0.1.0`,critical:!0,create:t=>new ie({bus:t.bus,fetcher:e})}}const Xt=[Ft,It,Lt,Rt,zt,Bt,_t,Vt,Q,ce,Ht,Ut,Wt,Gt,xt,W,vt,Kt,$,Jt,qt];function Zt(){let e=new Map;return{filter:e=>!!e.tools?.createToolsets,async processActivated(t,n,r){let i=r.getService(Z);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{Ut as A,Je as B,Lt as C,Vt as D,Q as E,it as F,Ve as G,Ue as H,rt as I,L as J,Be as K,nt as L,$ as M,Wt as N,zt as O,Kt as P,G as R,Yt as S,Bt as T,He as U,W as V,U as W,I as Y,wt as _,jt as a,Ft as b,Et as c,J as d,X as f,Ot as g,Z as h,Mt as i,Ht as j,Rt as k,Y as l,Ct as m,Oe as n,Tt as o,Pt as p,B as q,Zt as r,Nt as s,Ee as t,St as u,Dt as v,Xt as w,Gt as x,It as y,Ye as z};
1
+ import{SessionStorageSubjects as e}from"./services/session/storage/namespace.mjs";import{x as t}from"./handlers-BAB4fQNH.mjs";import{A as n,G as r,K as i,L as a,Y as o,a as s,b as c,c as l,i as u,n as d,p as f,r as ee,w as te,z as ne}from"./session-P4nX60Xx.mjs";import{n as p}from"./namespace-ENv7H7Na.mjs";import{t as re}from"./capability-service-jjrFLM6r.mjs";import"./services/adapter-subsystem/index.mjs";import{i as ie,s as ae}from"./model-registry-B0AIdj7O.mjs";import{t as oe}from"./tool-approval-service-DNHV5x0M.mjs";import{t as se}from"./tray-menu-service-B5YPK_YF.mjs";import{r as m,t as h}from"./handler-DqpiV9eA.mjs";import{n as ce}from"./package-BzJvtM5O.mjs";import{t as le}from"./filesystem-service-BjfrUmGS.mjs";import{z as g}from"zod";import{createHash as ue}from"node:crypto";import{MakaioError as de,createMakaioContext as fe}from"@makaio/framework/core";import{MakaioBus as _}from"@makaio/framework/bus";import{AdapterSubjects as pe,ArtifactSubjects as v,CanonicalModelSubjects as me,DEFAULT_HARNESSES as he,HarnessDefinitionCreateSchema as ge,HarnessSubjects as y,JsonValueSchema as _e,ToolSubjects as b,TransitionRuleDefinitionSchema as ve,WorkflowBlocksSubjects as ye,WorkflowSubjects as be,dep as x,extensionToken as S,validateToolAdapterIdentity as xe,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 Se}from"@makaio/framework/contracts/config";import{ClientAccountIdentifierSchema as Ce,ClientSessionAccountObserveSchema as we,ClientSubjects as E}from"@makaio/framework/contracts/client";import{FacetSubjects as D}from"@makaio/framework/contracts/facet";import{MaterializationSubjects as O}from"@makaio/framework/contracts/materialization";import{FILE_ACCESS_RULES_KEY as Te,FILE_ACCESS_RULES_KEY as Ee,ToolErrorCodes as k,errorToToolResult as De,extractToolFilePath as Oe,toolError as A,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`}],j={extension:0,"factory-repo":1,"target-repo":2},M={source:`extension`,ownerKey:`extension:bus`};function N(e){return`${e.source}:${e.ownerKey}`}function Fe(e,t){return e.source===t.source&&e.ownerKey===t.ownerKey}function P(e){return structuredClone(e)}function F(e,t){return`${e}@${t}`}var I=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(P);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(P);e.setResult({relationTypes:n})})}compareKindContributions(e,t){let n=j[e.owner.source]-j[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,P(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=M){let n=F(e.kind,e.schemaVersion),r=this.kindContributions.get(n)??new Map,i=N(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:P(e),order:t.source===`extension`||a===void 0?this.nextKindContributionOrder++:a.order}),this.kindContributions.set(n,r),this.recomputeKindWinner(n)}deregisterKind(e,t,n=M){let r=F(e,t),i=this.kindContributions.get(r);i!==void 0&&(i.delete(N(n)),this.recomputeKindWinner(r))}replaceKindRegistrationsForOwner(e,t){let n=new Set,r=N(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=F(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:P(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,P(e))}getKind(e,t){let n=this.kinds.get(F(e,t));return n?P(n):void 0}getRelationType(e){let t=this.relationTypes.get(e);return t?P(t):void 0}onDestroy(){this.kinds.clear(),this.kindContributions.clear(),this.relationTypes.clear(),this.nextKindContributionOrder=0}},L=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 R(e,t){return e?!(e.kind!==void 0&&e.kind!==`*`&&e.kind!==t.kind||e.schemaVersion!==void 0&&e.schemaVersion!==t.schemaVersion):!0}function z(e){return e.priority??0}function Ie(e,t,n){return e.filter(e=>e.event===t&&R(e.filter,n)).sort((e,t)=>z(t)-z(e))}function Le(e,t,n){return e.filter(e=>e.event===t&&R(e.filter,n)).sort((e,t)=>z(t)-z(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 B=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 L(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 V(e){return structuredClone(e)}var Be=class extends w{namespaces=new Map;constructor(e){super(e)}async onInit(){this.registerHandler(D.namespace.register,e=>{this.registerNamespace(e.payload),e.setResult({registered:!0})}),this.registerHandler(D.namespace.list,e=>{let{namespace:t}=e.payload,n=[...this.namespaces.values()].filter(e=>!t||e.namespace===t).map(V);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,V(e)),this.bus.emit(D.namespace.changed,{namespace:e.namespace})}deregisterNamespace(e){this.namespaces.delete(e)&&this.bus.emit(D.namespace.changed,{namespace:e})}getNamespace(e){let t=this.namespaces.get(e);return t?V(t):void 0}onDestroy(){this.namespaces.clear()}};function H(e){return structuredClone(e)}var Ve=class extends w{bindings=new Map;constructor(e){super(e)}async onInit(){this.registerHandler(O.surfaceBinding.register,e=>{this.registerBinding(e.payload),e.setResult({registered:!0})}),this.registerHandler(O.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(H);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,H(e)),this.bus.emit(O.surfaceBinding.changed,{id:e.id,provider:e.provider})}deregisterBinding(e){let t=this.bindings.get(e);t&&(this.bindings.delete(e),this.bus.emit(O.surfaceBinding.changed,{id:e,provider:t.provider}))}getBinding(e){let t=this.bindings.get(e);return t?H(t):void 0}onDestroy(){this.bindings.clear()}},U=class extends de{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 U(`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 U(`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 U(`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 U(`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 U(`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 U(`"${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 U(`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 U(`"${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 U(`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 U(`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(me.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=Se(t);return n.find(e=>Se(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(ae.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 W={name:`makaio.canonical-model`,displayName:`Canonical Model`,version:`0.1.0`,critical:!1,create:e=>new Ue(e.bus)};function We(e){let t=xe({adapterId:e?.adapterId,adapterName:e?.adapterName,contextOverrides:{adapterId:e?.contextOverrides?.adapterId,adapterName:e?.contextOverrides?.adapterName}}),n=t.issues[0];return n?A(k.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 A(k.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=A(k.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=fe({...e?.contextOverrides,constraints:n}),i=e?.contextOverrides;return{...r,bus:this.bus,sessionId:i?.sessionId,agentId:i?.agentId,adapterId:t.adapterId,adapterName:t.adapterName,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 A(k.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 A(k.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(ye.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(ye.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 G=`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(be.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=_e.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(G,$e(e)),this.factoriesBySource.set(`__builtin__`,[G])}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=ve.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(E.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(t,n){switch(n.locator.kind){case`session`:{let{session:r}=await t.request(e.get,{sessionId:n.locator.sessionId});return r?{sessionId:r.sessionId,session:r}:null}case`adapter-session`:{let{session:r}=await t.request(e.getByAdapterSessionId,{adapterSessionId:n.locator.adapterSessionId});return r?{sessionId:r.sessionId,session:r}:null}case`both`:{let[{session:r},{session:i}]=await Promise.all([t.request(e.get,{sessionId:n.locator.sessionId}),t.request(e.getByAdapterSessionId,{adapterSessionId:n.locator.adapterSessionId})]);if(!r&&!i)return null;if(!r||!i)throw Error(`Session locator mismatch: sessionId "${n.locator.sessionId}" and adapterSessionId "${n.locator.adapterSessionId}" must both resolve the same session`);if(r.sessionId!==i.sessionId)throw Error(`Session locator mismatch: sessionId "${n.locator.sessionId}" and adapterSessionId "${n.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 K(e.displayLabel)??K(t.displayLabel)??K(t.email)??K(t.label)}function ft(e){return structuredClone(e)}function pt(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function K(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}async function mt(t,n,r,i){let a=await t.request(e.update,{sessionId:n,clientId:r.clientId,clientAccountId:i,lastClientIdentityObservation:r});if(!a.success)throw Error(`Failed to update session "${n}" 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(E.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 he){if(n.has(t.id))continue;let r={...t};await e.request(m.set,{harness:r})}}function q(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(ge);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:q(t.description,n?.description,void 0),adapterName:t.adapterName,clientId:q(t.clientId,n?.clientId,void 0),env:q(t.env,n?.env,void 0),credentials:q(t.credentials,n?.credentials,void 0),cwd:q(t.cwd,n?.cwd,void 0),approvalPolicy:q(t.approvalPolicy,n?.approvalPolicy,`always-ask`),nativeTools:q(t.nativeTools,n?.nativeTools,r),registryTools:q(t.registryTools,n?.registryTools,r),skills:q(t.skills,n?.skills,void 0),toolCapabilityMap:t.toolCapabilityMap??n?.toolCapabilityMap,capabilityOverrides:t.capabilityOverrides??n?.capabilityOverrides,toolApprovalOverrides:t.toolApprovalOverrides??n?.toolApprovalOverrides,isDefault:q(t.isDefault,n?.isDefault,!1),enabled:q(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(pe.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-${ue(`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)},J=S(`session-storage`),Y=S(`session-bridge`),X=S(`session`),St=S(`session-orchestrator`),Z=S(`tool-registry`),Ct=S(`tool-approval`),wt=S(`tray-menu`),Tt=S(`capability`),Et=S(`model-registry`),Dt=S(`workflow-block-registry`),Ot=S(`transition-pipeline`),kt=S(`filesystem`),At=S(`git`),jt=S(`artifact-schema-registry`),Mt=S(`artifact-lifecycle-hook-registry`),Nt=S(`facet-namespace-registry`),Pt=S(`surface-binding-registry`),Ft={name:jt.name,displayName:`Artifact Schema Registry`,version:`0.1.0`,critical:!0,create:e=>new I(e.bus)},It={name:Mt.name,displayName:`Artifact Lifecycle Hook Registry`,version:`0.1.0`,critical:!0,create:e=>new B(e.bus)},Lt={name:Nt.name,displayName:`Facet Namespace Registry`,version:`0.1.0`,critical:!0,create:e=>new Be(e.bus)},Rt={name:Pt.name,displayName:`Surface Binding Registry`,version:`0.1.0`,critical:!0,create:e=>new Ve(e.bus)},zt={name:J.name,displayName:`Session Storage`,version:`0.1.0`,critical:!0,storage:{registerHandlers:T((e,n)=>{let a=[],o=e=>{for(let t=a.length-1;t>=0;--t)try{a[t]?.()}catch(t){console.warn(`[sessionStoragePackage] cleanup failed during ${e}:`,t)}a.length=0};try{a.push(c(e,n)),a.push(i(e,n)),a.push(r(e,n)),a.push(ne(e,n)),a.push(t(e,n)),a.push(te(e,n)),a.push(l(e,n)),a.push(f(e,n)),a.push(s(e,n)),a.push(u(e)),a.push(ee(e)),a.push(d(e))}catch(e){throw o(`rollback`),e}return()=>{o(`shutdown`)}})}},Bt={name:Y.name,displayName:`Session Bridge`,version:`0.1.0`,dependencies:[x(J.name)],critical:!0,create:e=>new n(e.bus)},Vt={name:X.name,displayName:`Session`,version:`0.1.0`,dependencies:[x(Y.name)],critical:!0,create:e=>new o(e.bus)},Q={name:St.name,displayName:`Session Orchestrator`,version:`0.1.0`,dependencies:[x(X.name),x(W.name)],critical:!0,runtimeOwnership:{sessionOrchestrator:!0},create:e=>new a(e.bus,e.machineId)},Ht={name:Z.name,displayName:`Tool Registry`,version:`0.1.0`,critical:!0,create:e=>new Je({bus:e.bus})},Ut={name:Ct.name,displayName:`Tool Approval`,version:`0.1.0`,dependencies:[x(Z.name)],critical:!0,create:e=>new oe(e.bus)},Wt={name:wt.name,displayName:`Tray Menu`,version:`0.1.0`,critical:!0,create:e=>new se(e.bus)},Gt={name:Tt.name,displayName:`Capability`,version:`0.1.0`,critical:!0,create:e=>new re(e.bus)},Kt={name:Dt.name,displayName:`Workflow Block Registry`,version:`0.1.0`,critical:!0,create:e=>new Ye(e.bus)},$={name:Ot.name,displayName:`Transition Pipeline`,version:`0.1.0`,critical:!0,create:e=>new it(e.bus)},qt={name:kt.name,displayName:`Filesystem`,version:`0.1.0`,critical:!0,create:e=>new le(e.bus,e.machineId)},Jt={name:At.name,displayName:`Git`,version:`0.1.0`,dependencies:[x(kt.name)],critical:!0,create:e=>new Ne(e.bus)};function Yt(e){return{name:Et.name,displayName:`Model Registry`,version:`0.1.0`,critical:!0,create:t=>new ie({bus:t.bus,fetcher:e})}}const Xt=[Ft,It,Lt,Rt,zt,Bt,_t,Vt,Q,ce,Ht,Ut,Wt,Gt,xt,W,vt,Kt,$,Jt,qt];function Zt(){let e=new Map;return{filter:e=>!!e.tools?.createToolsets,async processActivated(t,n,r){let i=r.getService(Z);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{Ut as A,Je as B,Lt as C,Vt as D,Q as E,it as F,Ve as G,Ue as H,rt as I,L as J,Be as K,nt as L,$ as M,Wt as N,zt as O,Kt as P,G as R,Yt as S,Bt as T,He as U,W as V,U as W,I as Y,wt as _,jt as a,Ft as b,Et as c,J as d,X as f,Ot as g,Z as h,Mt as i,Ht as j,Rt as k,Y as l,Ct as m,Oe as n,Tt as o,Pt as p,B as q,Zt as r,Nt as s,Ee as t,St as u,Dt as v,Xt as w,Gt as x,It as y,Ye as z};