@makaio/framework 1.0.0-dev-1779046984397 → 1.0.0-dev-1779051654000

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 (216) hide show
  1. package/README.md +32 -315
  2. package/dist/{account-identity-Ce1Bwrqi.mjs → account-identity-Bg_vKkcs.mjs} +1 -1
  3. package/dist/{adapter-CbyjCE2d.mjs → adapter-CpF2aK_-.mjs} +1 -1
  4. package/dist/adapters/config/index.d.mts +1 -1
  5. package/dist/adapters/config/index.mjs +1 -1
  6. package/dist/adapters/index.d.mts +2 -2
  7. package/dist/adapters/index.mjs +1 -1
  8. package/dist/adapters/node.d.mts +1 -1
  9. package/dist/adapters/node.mjs +1 -1
  10. package/dist/client-DMWXCWhM.mjs +1 -0
  11. package/dist/clients/index.d.mts +122 -347
  12. package/dist/clients/index.mjs +2 -1
  13. package/dist/{clients-namespace-B0xAPZ6J.d.mts → clients-namespace-UHj5wt-l.d.mts} +7 -7
  14. package/dist/contracts/adapter/index.d.mts +2 -2
  15. package/dist/contracts/adapter/index.mjs +1 -1
  16. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  17. package/dist/contracts/client/index.d.mts +3 -3
  18. package/dist/contracts/client/index.mjs +1 -1
  19. package/dist/contracts/common/index.d.mts +1 -1
  20. package/dist/contracts/config/index.d.mts +6 -6
  21. package/dist/contracts/config/index.mjs +1 -1
  22. package/dist/contracts/extension/index.d.mts +2 -2
  23. package/dist/contracts/extension/index.mjs +1 -1
  24. package/dist/contracts/harness/index.d.mts +1 -1
  25. package/dist/contracts/harness/index.mjs +1 -1
  26. package/dist/contracts/host/index.mjs +1 -1
  27. package/dist/contracts/index.d.mts +64 -63
  28. package/dist/contracts/index.mjs +1 -1
  29. package/dist/contracts/model-registry/index.mjs +1 -1
  30. package/dist/contracts/native-session-supervisor/index.mjs +1 -1
  31. package/dist/contracts/platform/index.mjs +1 -1
  32. package/dist/contracts/session/index.d.mts +2 -2
  33. package/dist/contracts/session/index.mjs +1 -1
  34. package/dist/contracts/shared/index.d.mts +1 -1
  35. package/dist/contracts/shared/index.mjs +1 -1
  36. package/dist/contracts/skill/index.mjs +1 -1
  37. package/dist/contracts/timeout/index.d.mts +2 -0
  38. package/dist/contracts/timeout/index.mjs +1 -0
  39. package/dist/contracts/toast/index.mjs +1 -1
  40. package/dist/contracts/variant/index.mjs +1 -1
  41. package/dist/{definition-DxvZ9e22.d.mts → definition-DB7bbFSa.d.mts} +84 -91
  42. package/dist/{extension-COqwS-2Q.mjs → extension-53GerdGg.mjs} +1 -1
  43. package/dist/extension-fJmv8Yri.mjs +1 -0
  44. package/dist/{handlers-iGKUJ380.mjs → handlers-DR_4_rAT.mjs} +1 -1
  45. package/dist/{harness-CEq1Zkf9.mjs → harness-B6lGP9rm.mjs} +1 -1
  46. package/dist/{index-DBQtpFLE.d.mts → index-BnSQE7z7.d.mts} +3 -3
  47. package/dist/{index-CVA0m1g9.d.mts → index-CnmPtjnA.d.mts} +4 -4
  48. package/dist/{index-hapw9_En.d.mts → index-Cq8B7cwK.d.mts} +67 -67
  49. package/dist/{index-BJOfdtbw.d.mts → index-DGTFJB_8.d.mts} +3 -3
  50. package/dist/{index-DubqLGH8.d.mts → index-DaEp4UWW.d.mts} +56 -62
  51. package/dist/{index-C9F3Fc1A.d.mts → index-DwCA1HWa.d.mts} +133 -79
  52. package/dist/index-E8d_RwaF.d.mts +28 -0
  53. package/dist/{index-BB419vv-.d.mts → index-e5C62_M3.d.mts} +31 -11
  54. package/dist/{index-Bv15sNLn.d.mts → index-sBob9D25.d.mts} +1 -1
  55. package/dist/{index-BAKM2GMH2.d.mts → index-tKvu34DJ2.d.mts} +6 -6
  56. package/dist/{index-BdPwu6c0.d.mts → index-yvN8UcEH.d.mts} +110 -110
  57. package/dist/kernel/cli/index.mjs +1 -1
  58. package/dist/kernel/cli/schemas.mjs +1 -1
  59. package/dist/kernel/extension/index.d.mts +1 -1
  60. package/dist/kernel/extension/index.mjs +1 -1
  61. package/dist/kernel/index.d.mts +2 -2
  62. package/dist/kernel/index.mjs +1 -1
  63. package/dist/kernel/namespace/index.mjs +1 -1
  64. package/dist/kernel/observability/index.d.mts +1 -1
  65. package/dist/kernel/observability/index.mjs +1 -1
  66. package/dist/kernel/providers/index.mjs +1 -1
  67. package/dist/kernel/window/index.mjs +1 -1
  68. package/dist/{namespace-CkLUtc0g.d.mts → namespace-B1E57soL.d.mts} +22 -22
  69. package/dist/{namespace-bq4Prtzn.d.mts → namespace-B5ZCshBw.d.mts} +75 -75
  70. package/dist/{namespace-CCDEOwmW.d.mts → namespace-BCRNwPnw.d.mts} +6 -6
  71. package/dist/{namespace-ptv-pw_g.d.mts → namespace-BKrV_2gZ.d.mts} +9 -9
  72. package/dist/{namespace-O5SNY-LV.d.mts → namespace-BpIE-jQW.d.mts} +14 -14
  73. package/dist/{namespace-8cNguvIp.mjs → namespace-DGMO2E8f.mjs} +1 -1
  74. package/dist/{namespace-FWx6HxaW.d.mts → namespace-DXnMk3U8.d.mts} +14 -14
  75. package/dist/{namespace-xkvVw3hf2.d.mts → namespace-DwCyOaZn2.d.mts} +2 -2
  76. package/dist/{namespace-C2ufjgaQ.d.mts → namespace-Ysg1N6rR.d.mts} +24 -24
  77. package/dist/{native-session-supervisor-L-UIaEfd.mjs → native-session-supervisor-zPt624Tp.mjs} +1 -1
  78. package/dist/node/bus-server/index.d.mts +1 -1
  79. package/dist/node/bus-server/index.mjs +1 -1
  80. package/dist/node/bus-server/server-lifecycle.d.mts +1 -1
  81. package/dist/node/bus-server/server-lifecycle.mjs +1 -1
  82. package/dist/{orchestrator-shared-Wv1GI2mW.mjs → orchestrator-shared-D2txLAUs.mjs} +1 -1
  83. package/dist/profile-Cq4A7kQa.mjs +1 -0
  84. package/dist/{provider-context-CNRQ4d5m.mjs → provider-context-BB4eD8ON.mjs} +1 -1
  85. package/dist/{schema-BwzXEtT2.d.mts → schema-B295yplx.d.mts} +1 -1
  86. package/dist/{schema-CAw_BqaG.mjs → schema-C4iznV0q.mjs} +1 -1
  87. package/dist/{schema-introspection-D61TT_7b.mjs → schema-introspection-DCYC47_d.mjs} +1 -1
  88. package/dist/{schemas-BdMU-gew.d.mts → schemas-BWvuaL0w.d.mts} +4 -4
  89. package/dist/{schemas-D9108Iv1.d.mts → schemas-BfMZAwff.d.mts} +7 -7
  90. package/dist/{schemas-BXstpWVp.mjs → schemas-Bn8aqDIE.mjs} +1 -1
  91. package/dist/{schemas-qmn5SWPU.d.mts → schemas-C31qbb0s.d.mts} +4 -4
  92. package/dist/{schemas-DbWs_hj8.d.mts → schemas-DYqKRNju.d.mts} +3 -3
  93. package/dist/{schemas-DENVYyds.d.mts → schemas-Ra8pz5M-.d.mts} +14 -14
  94. package/dist/services/adapter-runtime/index.mjs +1 -1
  95. package/dist/services/adapter-subsystem/index.d.mts +2 -2
  96. package/dist/services/adapter-subsystem/index.mjs +1 -1
  97. package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
  98. package/dist/services/adapter-subsystem/namespace.mjs +1 -1
  99. package/dist/services/capability/index.mjs +1 -1
  100. package/dist/services/context-rules/index.mjs +1 -1
  101. package/dist/services/execution-target/index.d.mts +3 -3
  102. package/dist/services/execution-target/index.mjs +1 -1
  103. package/dist/services/execution-target/namespace.d.mts +1 -1
  104. package/dist/services/execution-target/schemas.d.mts +1 -1
  105. package/dist/services/filesystem/namespace.d.mts +6 -6
  106. package/dist/services/filesystem/schemas.d.mts +3 -3
  107. package/dist/services/harness/index.d.mts +34 -34
  108. package/dist/services/harness/index.mjs +1 -1
  109. package/dist/services/harness/storage/schema.d.mts +4 -4
  110. package/dist/services/index.d.mts +70 -71
  111. package/dist/services/index.mjs +1 -1
  112. package/dist/services/log-import/log-import.mjs +1 -1
  113. package/dist/services/log-import/namespace.mjs +1 -1
  114. package/dist/services/log-import/schemas.mjs +1 -1
  115. package/dist/services/model-registry/index.mjs +1 -1
  116. package/dist/services/preferences/index.d.mts +2 -2
  117. package/dist/services/preferences/schemas.d.mts +1 -1
  118. package/dist/services/preferences/storage-namespace.d.mts +2 -2
  119. package/dist/services/provider-context/index.mjs +1 -1
  120. package/dist/services/provider-runtime/index.mjs +1 -1
  121. package/dist/services/session/handlers/index.mjs +1 -1
  122. package/dist/services/session/index.d.mts +7 -7
  123. package/dist/services/session/index.mjs +1 -1
  124. package/dist/services/session/messages/namespace.d.mts +1 -1
  125. package/dist/services/session/messages/namespace.mjs +1 -1
  126. package/dist/services/session/orchestrator-testing/index.mjs +1 -1
  127. package/dist/services/session/session-events/namespace.d.mts +1 -1
  128. package/dist/services/session/session-events/namespace.mjs +1 -1
  129. package/dist/services/session/storage/namespace.d.mts +1 -1
  130. package/dist/services/session/storage/schema.d.mts +1 -1
  131. package/dist/services/session/testing/index.mjs +1 -1
  132. package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
  133. package/dist/services/session/turns/namespace.d.mts +1 -1
  134. package/dist/services/session/turns/namespace.mjs +1 -1
  135. package/dist/services/session-editor/index.mjs +1 -1
  136. package/dist/services/settings/index.d.mts +1 -1
  137. package/dist/services/settings/index.mjs +1 -1
  138. package/dist/services/settings/namespace.d.mts +9 -9
  139. package/dist/services/settings/namespace.mjs +1 -1
  140. package/dist/services/settings/storage/clients-namespace.d.mts +1 -1
  141. package/dist/services/settings/storage/clients-namespace.mjs +1 -1
  142. package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
  143. package/dist/services/settings/storage/index.d.mts +1 -1
  144. package/dist/services/settings/storage/index.mjs +1 -1
  145. package/dist/services/settings/storage/providers-namespace.mjs +1 -1
  146. package/dist/services/tool-approval/index.mjs +1 -1
  147. package/dist/services/tools/index.mjs +1 -1
  148. package/dist/services/tray-menu/index.d.mts +2 -2
  149. package/dist/services/tray-menu/index.mjs +1 -1
  150. package/dist/services/tray-menu/namespace.d.mts +1 -1
  151. package/dist/services/tray-menu/schemas.d.mts +1 -1
  152. package/dist/services/turn/index.d.mts +1 -1
  153. package/dist/services/turn/namespace.d.mts +1 -1
  154. package/dist/services/turn/schemas.d.mts +11 -11
  155. package/dist/services/worker/index.d.mts +1 -1
  156. package/dist/services/worker/schemas.d.mts +1 -1
  157. package/dist/{session-piI1R5rP.mjs → session-BCSf-Fgj.mjs} +1 -1
  158. package/dist/{session-Do6lDZM4.mjs → session-BNo_cIiz.mjs} +1 -1
  159. package/dist/{shared-DxHLl9UP.mjs → shared-BhuSHZXH.mjs} +1 -1
  160. package/dist/{skill-CB5h-ZFQ.mjs → skill-20_SBXaI.mjs} +1 -1
  161. package/dist/storage/handlers/drizzle/index.mjs +1 -1
  162. package/dist/storage/handlers/index.mjs +1 -1
  163. package/dist/{storage-namespace-DAm8iWEj.d.mts → storage-namespace-DoH-Wkjp.d.mts} +10 -10
  164. package/dist/timeout-D33CUZ0M.mjs +1 -0
  165. package/dist/{tool-approval-service-BcBSUZCO.mjs → tool-approval-service-CZCPfvVy.mjs} +1 -1
  166. package/dist/{tools-CDSgj0ee.mjs → tools-Cid9D99F.mjs} +1 -1
  167. package/dist/{types-BjToUrHp.d.mts → types--nrtGZ1V.d.mts} +24 -24
  168. package/dist/ui-kernel/index.d.mts +4 -4
  169. package/dist/ui-kernel/pages/namespace.d.mts +4 -4
  170. package/dist/ui-kernel/pages/schemas.d.mts +1 -1
  171. package/package.json +5 -1
  172. package/dist/client-Dh4x4GQN.mjs +0 -1
  173. package/dist/extension-Cbrl4YGX.mjs +0 -1
  174. package/dist/index-CNxS4Tlu.d.mts +0 -1
  175. package/dist/profile-4StaDQW0.mjs +0 -1
  176. package/dist/schemas-CGZy_rU6.d.mts +0 -13
  177. /package/dist/{base-orchestrator-9z8TuA5a.d.mts → base-orchestrator-BOAPgqF7.d.mts} +0 -0
  178. /package/dist/{capability-service-tnpR_TaB.mjs → capability-service-DV32ecwR.mjs} +0 -0
  179. /package/dist/{cleanEnvForAdapter-DvcIGXTG.mjs → cleanEnvForAdapter-hTPNvPU5.mjs} +0 -0
  180. /package/dist/{config-namespace-DLSs83zr.d.mts → config-namespace-ChZOpi1W.d.mts} +0 -0
  181. /package/dist/{config-namespace-MJT8P0Ud.mjs → config-namespace-wJ2CakDB.mjs} +0 -0
  182. /package/dist/{cursor-storage-DOQdvo9j.mjs → cursor-storage-BoNI7OAR.mjs} +0 -0
  183. /package/dist/{drizzle-CWVVw7Er.mjs → drizzle-Bn2GtW8c.mjs} +0 -0
  184. /package/dist/{execution-target-BW_uiBVe.mjs → execution-target-D6MgthYs.mjs} +0 -0
  185. /package/dist/{extension-namespace-zaGKi6Qj.mjs → extension-namespace-CTd9kOtt.mjs} +0 -0
  186. /package/dist/{host-CXAUGGN0.mjs → host-CvEht5RT.mjs} +0 -0
  187. /package/dist/{identity-B_A0mE63.mjs → identity-DBST3-XO.mjs} +0 -0
  188. /package/dist/{index-PdUSmPT2.d.mts → index-D2jejYlV.d.mts} +0 -0
  189. /package/dist/{index-T0471kWA.d.mts → index-DQWMu5fS.d.mts} +0 -0
  190. /package/dist/{model-registry-CIscwC52.mjs → model-registry-Dzpssh9j.mjs} +0 -0
  191. /package/dist/{model-registry-BNzpR6TU.mjs → model-registry-xINyxQUT.mjs} +0 -0
  192. /package/dist/{namespace-Bmc7AW4J2.mjs → namespace-C_h7scWx2.mjs} +0 -0
  193. /package/dist/{namespace-N0dfwSg6.mjs → namespace-DBw9BYr8.mjs} +0 -0
  194. /package/dist/{namespace-pNcSglBS.mjs → namespace-DUVgMfTR.mjs} +0 -0
  195. /package/dist/{namespace-0yuzAKlr.mjs → namespace-OwAf1Brw.mjs} +0 -0
  196. /package/dist/{namespace-CfEWMXBx.mjs → namespace-Zb8HAbyF.mjs} +0 -0
  197. /package/dist/{namespace-Db-p67Rg.mjs → namespace-aALq9tnE.mjs} +0 -0
  198. /package/dist/{namespace-D5Wrt7YU.mjs → namespace-yxIxUsjo.mjs} +0 -0
  199. /package/dist/{platform-BbSLVg5b.mjs → platform-BMFUpmTA.mjs} +0 -0
  200. /package/dist/{providers-Cr4Za8a1.mjs → providers-DhiW_fx4.mjs} +0 -0
  201. /package/dist/{schema-uSGW-6oM.mjs → schema-D3ZG13h9.mjs} +0 -0
  202. /package/dist/{schemas-C40ZAJ33.mjs → schemas-CEBe89yE.mjs} +0 -0
  203. /package/dist/{schemas-Co_sVhzz.mjs → schemas-COnLJnt_.mjs} +0 -0
  204. /package/dist/{schemas-CLxtoKFy.mjs → schemas-CrnlCRep.mjs} +0 -0
  205. /package/dist/{server-lifecycle-Cf_SZ27k.d.mts → server-lifecycle-BC6FRn86.d.mts} +0 -0
  206. /package/dist/{server-lifecycle-DbFwlrTW.mjs → server-lifecycle-Dx5WgfoS.mjs} +0 -0
  207. /package/dist/{session-lineage-Eev4uo4I.d.mts → session-lineage-B0cpHfuc.d.mts} +0 -0
  208. /package/dist/{shared-schemas-BgQv_tnu.mjs → shared-schemas-Byah36lG.mjs} +0 -0
  209. /package/dist/{storage-namespace-ADwyijoe.mjs → storage-namespace-BIDs9LPb.mjs} +0 -0
  210. /package/dist/{storage-namespace-definition-CHu2k14q.mjs → storage-namespace-definition-BjK9nZAN.mjs} +0 -0
  211. /package/dist/{tray-menu-service-CTXC1Elg.mjs → tray-menu-service-BAYtLdAg.mjs} +0 -0
  212. /package/dist/{types-CD1LJwPc.d.mts → types-C11LvekX.d.mts} +0 -0
  213. /package/dist/{ui-config-CXmbsqZV.mjs → ui-config-zawaoEfB.mjs} +0 -0
  214. /package/dist/{variant-D5kSrL3m.mjs → variant-BZWfmS0q.mjs} +0 -0
  215. /package/dist/{version-CjS20oXi.mjs → version-D8S4O22A.mjs} +0 -0
  216. /package/dist/{window-registry-CUftmDr3.mjs → window-registry-B_-hBEcV.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import{agents as e,sessions as t}from"./services/session/storage/schema.mjs";import{t as n}from"./schema-CAw_BqaG.mjs";import{n as r,r as i}from"./namespace-8cNguvIp.mjs";import{SessionStorageSubjects as a}from"./services/session/storage/namespace.mjs";import{A as o,D as s,E as c,F as l,O as u,P as d,T as f,b as p,d as m,f as h,j as g,k as _,u as v,v as ee}from"./handlers-iGKUJ380.mjs";import{TurnStorageSubjects as y}from"./services/turn/namespace.mjs";import{AdapterRuntimeSubjects as te}from"./services/adapter-runtime/namespace.mjs";import{MessageStorageSubjects as b}from"./services/session/messages/namespace.mjs";import{n as ne}from"./namespace-D5Wrt7YU.mjs";import{z as x}from"zod";import{MakaioBus as S,NoHandlerError as C}from"@makaio/framework/bus";import{AdapterSessionStatusSchema as re,AdapterSubjects as w,AgentSubjects as T,CanonicalModelSubjects as ie,CompressSessionLineageSchema as ae,CompressionModeSchema as oe,ForkSessionLineageSchema as se,ForkTransformsSchema as ce,MessageRoutingSchema as le,RootSessionLineageSchema as ue,SessionContextSchema as de,SessionDiscoveredSchema as fe,SessionLineageKindSchema as pe,SessionStorageSetRequestSchema as me,SessionStorageUpdateSchema as he,SessionSubjects as E,SubagentSessionLineageSchema as ge,compareMessageCursorAsc as _e,compareMessageCursorDesc as ve,isCanonicalModelParseError as ye,messageToCursor as D,parseCanonicalModel as be}from"@makaio/framework/contracts";import{BaseService as xe}from"@makaio/framework/service-base";import{index as Se,integer as O,primaryKey as Ce,sqliteTable as we,text as k,uniqueIndex as Te}from"drizzle-orm/sqlite-core";import{createStorageNamespaceDefinition as Ee}from"@makaio/framework/storage";import{and as A,asc as De,count as j,desc as M,eq as N,gt as Oe,gte as ke,inArray as P,isNull as Ae,lt as je,lte as Me,or as Ne,sql as F}from"drizzle-orm";import{sanitizeFtsQuery as Pe}from"@makaio/framework/storage/drizzle";import{ClientIdentityObservationSchema as Fe}from"@makaio/framework/contracts/client";import{ImportCursorStorageSubjects as Ie}from"@makaio/framework/adapters";import{ROOT_SESSION_LINEAGE_KIND as Le,SESSION_LINEAGE_KINDS as Re}from"@makaio/framework/contracts/adapter/schemas/session-lineage";function ze(e){return e.on(E.agent.added,async t=>{let n=await e.requestOptional(a.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(a.set,{sessionId:t.payload.sessionId,session:r}))})}function Be(e){return e.on(E.agent.removed,async t=>{let n=await e.requestOptional(a.get,{sessionId:t.payload.sessionId}),r=n.handled?n.data.session:void 0;r&&(await e.requestOptional(l.updateStatus,{agentId:t.payload.agentId,status:`disposed`}),r.leadAgentId===t.payload.agentId&&(r.leadAgentId=void 0),r.lastActivityAt=Date.now(),await e.request(a.set,{sessionId:t.payload.sessionId,session:r}))})}function Ve(e){return[He(e),Ue(e),We(e),Ge(e),Ke(e),qe(e),Je(e),ze(e.bus),Be(e.bus)]}function He(e){let{bus:t}=e;return t.on(E.create,async e=>{let{sessionId:n,title:r,originWindowId:i}=e.payload,o=n??crypto.randomUUID(),s=Date.now(),c={sessionId:o,createdAt:s,lastActivityAt:s,agents:[],status:`active`,title:r};if(n){let n=await t.requestOptional(a.set,{sessionId:o,session:c,ifAbsent:!0});if(n.handled&&!n.data.success){let n=await t.requestOptional(a.get,{sessionId:o});if(!(n.handled&&n.data.session))throw Error(`Session already exists but could not be loaded: ${o}`);e.setResult({sessionId:o});return}}else await t.requestOptional(a.set,{sessionId:o,session:c});await t.emit(E.created,{sessionId:o,createdAt:c.createdAt,parentSessionId:null,branchKind:null,originWindowId:i??`server`}),e.setResult({sessionId:o})})}function Ue(e){let{bus:t}=e;return t.on(E.get,async e=>{let n=await t.requestOptional(a.get,{sessionId:e.payload.sessionId}),r=n.handled?n.data.session:null;e.setResult({session:r})})}function We(e){let{bus:t}=e;return t.on(E.list,async e=>{let{status:n,limit:r,offset:i,includePreview:o,executionTargetId:s}=e.payload,c=await t.requestOptional(a.list,{status:n??`all`,limit:r,offset:i,includePreview:o,executionTargetId:s}),l=c.handled?c.data.sessions:[],u=c.handled?c.data.total:0;e.setResult({sessions:l,total:u})})}function Ge(e){let{bus:t}=e;return t.on(E.close,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(a.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(a.set,{sessionId:n,session:i}),await t.emit(E.closed,{sessionId:n}),e.setResult({success:!0})})}function Ke(e){let{bus:t}=e;return t.on(E.update,async e=>{let{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:o}=e.payload,s=await t.requestOptional(a.update,{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:o}),c=s.handled?s.data.success:!1;if(c){let e=[];r!==void 0&&e.push(`executionTargetId`),i!==void 0&&e.push(`approvalPolicyOverride`),o!==void 0&&e.push(`title`),e.length>0&&await t.emit(E.updated,{sessionId:n,changedProperties:e})}e.setResult({success:c})})}function qe(e){let{bus:t}=e;return t.on(E.archive,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(a.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(a.set,{sessionId:n,session:i}),await t.emit(E.archived,{sessionId:n}),e.setResult({success:!0})})}function Je(e){let{bus:t}=e;return t.on(E.purge,async e=>{let{sessionId:n}=e.payload,i=await t.requestOptional(a.get,{sessionId:n}),o=i.handled?i.data.session:null;if(!o){e.setResult({success:!1,error:`Session not found`});return}if(o.status!==`archived`){e.setResult({success:!1,error:`Cannot purge session unless archived. Call close then archive first.`});return}let s=await t.requestOptional(a.list,{status:`all`}),c=s.handled?s.data.sessions:[];for(let e of c)e.parentSessionId===n&&await t.requestOptional(a.set,{sessionId:e.sessionId,session:{...e,parentSessionId:void 0}});let l=await t.requestOptional(r.getEvents,{sessionId:n,options:{limit:1}}),u=l.handled?l.data.totalCount:0;await t.requestOptional(r.deleteBySession,{sessionId:n}),await t.requestOptional(a.delete,{sessionId:n}),await t.emit(E.purged,{sessionId:n}),e.setResult({success:!0,eventsDeleted:u})})}var Ye=class extends xe{constructor(e=S){super(e)}async onInit(){for(let e of Ve({bus:this.bus}))this.addCleanup(e);await this.reconcileOrphanedTurns()}async reconcileOrphanedTurns(){let e=await this.bus.requestOptional(y.listActive,{});if(!e.handled)return;let{turns:t}=e.data;for(let e of t)try{let{transitioned:t}=await this.bus.request(y.complete,{turnId:e.turnId,status:`error`,expectedStatus:`active`,error:`process-restart`});t&&await this.bus.emit(E.turn.completed,{sessionId:e.sessionId,turnId:e.turnId,turnNumber:e.turnNumber,success:!1,error:`process-restart`})}catch(t){console.error(`[MakaioSessionService] Failed to reconcile orphaned turn ${e.turnId}:`,t)}}};function Xe(e){return Error(`No adapter found for adapterName="${e}". Ensure adapter-runtime identity handlers are registered; adapter startup verifies live availability.`)}var Ze=class{bus;registry=new Map;cleanup;constructor(e){this.bus=e,this.cleanup=this.bus.on(w.initialized,e=>{this.registry.set(e.payload.adapterName,e.payload.adapterId)})}resolve(e){let t=this.registry.get(e);if(!t)throw Xe(e);return t}async resolveAvailable(e){try{let{adapterId:t}=await this.bus.request(te.resolveId,{adapterName:e});return this.registry.set(e,t),t}catch{let t=this.registry.get(e);if(t)return t;throw Xe(e)}}destroy(){this.cleanup?.(),this.cleanup=void 0,this.registry.clear()}};function Qe(e,t,n,i){return e.on(r.append,e=>{let{event:r}=e.payload,a=t.get(r.sessionId)??[];if(n.has(r.eventId)){e.setResult({success:!0});return}a.push(r),t.set(r.sessionId,a),n.set(r.eventId,i()),e.setResult({success:!0})})}function $e(e,t,n){return e.on(r.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 et(e,t){return e.on(r.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 tt(e,t,n){return e.on(r.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 nt(e,t){return e.on(r.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 rt(e){let t=new Map,n=new Map,r=1,i=[Qe(e,t,n,()=>r++),$e(e,t,n),et(e,t),tt(e,t,n),nt(e,t)];return()=>i.forEach(e=>e())}const it=[`sessionId`,`agentId`,`adapterId`,`messageId`,`turnId`];function at(e){let t=e.payload,n={};for(let[e,r]of Object.entries(t))it.includes(e)||(n[e]=r);return n}function ot(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 st(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(`
1
+ import{agents as e,sessions as t}from"./services/session/storage/schema.mjs";import{t as n}from"./schema-C4iznV0q.mjs";import{n as r,r as i}from"./namespace-DGMO2E8f.mjs";import{SessionStorageSubjects as a}from"./services/session/storage/namespace.mjs";import{A as o,D as s,E as c,F as l,O as u,P as d,T as f,b as p,d as m,f as h,j as g,k as _,u as v,v as ee}from"./handlers-DR_4_rAT.mjs";import{TurnStorageSubjects as y}from"./services/turn/namespace.mjs";import{AdapterRuntimeSubjects as te}from"./services/adapter-runtime/namespace.mjs";import{MessageStorageSubjects as b}from"./services/session/messages/namespace.mjs";import{n as ne}from"./namespace-yxIxUsjo.mjs";import{z as x}from"zod";import{MakaioBus as S,NoHandlerError as C}from"@makaio/framework/bus";import{AdapterSessionStatusSchema as re,AdapterSubjects as w,AgentSubjects as T,CanonicalModelSubjects as ie,CompressSessionLineageSchema as ae,CompressionModeSchema as oe,ForkSessionLineageSchema as se,ForkTransformsSchema as ce,MessageRoutingSchema as le,RootSessionLineageSchema as ue,SessionContextSchema as de,SessionDiscoveredSchema as fe,SessionLineageKindSchema as pe,SessionStorageSetRequestSchema as me,SessionStorageUpdateSchema as he,SessionSubjects as E,SubagentSessionLineageSchema as ge,compareMessageCursorAsc as _e,compareMessageCursorDesc as ve,isCanonicalModelParseError as ye,messageToCursor as D,parseCanonicalModel as be}from"@makaio/framework/contracts";import{BaseService as xe}from"@makaio/framework/service-base";import{index as Se,integer as O,primaryKey as Ce,sqliteTable as we,text as k,uniqueIndex as Te}from"drizzle-orm/sqlite-core";import{createStorageNamespaceDefinition as Ee}from"@makaio/framework/storage";import{and as A,asc as De,count as j,desc as M,eq as N,gt as Oe,gte as ke,inArray as P,isNull as Ae,lt as je,lte as Me,or as Ne,sql as F}from"drizzle-orm";import{sanitizeFtsQuery as Pe}from"@makaio/framework/storage/drizzle";import{ClientIdentityObservationSchema as Fe}from"@makaio/framework/contracts/client";import{ImportCursorStorageSubjects as Ie}from"@makaio/framework/adapters";import{ROOT_SESSION_LINEAGE_KIND as Le,SESSION_LINEAGE_KINDS as Re}from"@makaio/framework/contracts/adapter/schemas/session-lineage";function ze(e){return e.on(E.agent.added,async t=>{let n=await e.requestOptional(a.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(a.set,{sessionId:t.payload.sessionId,session:r}))})}function Be(e){return e.on(E.agent.removed,async t=>{let n=await e.requestOptional(a.get,{sessionId:t.payload.sessionId}),r=n.handled?n.data.session:void 0;r&&(await e.requestOptional(l.updateStatus,{agentId:t.payload.agentId,status:`disposed`}),r.leadAgentId===t.payload.agentId&&(r.leadAgentId=void 0),r.lastActivityAt=Date.now(),await e.request(a.set,{sessionId:t.payload.sessionId,session:r}))})}function Ve(e){return[He(e),Ue(e),We(e),Ge(e),Ke(e),qe(e),Je(e),ze(e.bus),Be(e.bus)]}function He(e){let{bus:t}=e;return t.on(E.create,async e=>{let{sessionId:n,title:r,originWindowId:i}=e.payload,o=n??crypto.randomUUID(),s=Date.now(),c={sessionId:o,createdAt:s,lastActivityAt:s,agents:[],status:`active`,title:r};if(n){let n=await t.requestOptional(a.set,{sessionId:o,session:c,ifAbsent:!0});if(n.handled&&!n.data.success){let n=await t.requestOptional(a.get,{sessionId:o});if(!(n.handled&&n.data.session))throw Error(`Session already exists but could not be loaded: ${o}`);e.setResult({sessionId:o});return}}else await t.requestOptional(a.set,{sessionId:o,session:c});await t.emit(E.created,{sessionId:o,createdAt:c.createdAt,parentSessionId:null,branchKind:null,originWindowId:i??`server`}),e.setResult({sessionId:o})})}function Ue(e){let{bus:t}=e;return t.on(E.get,async e=>{let n=await t.requestOptional(a.get,{sessionId:e.payload.sessionId}),r=n.handled?n.data.session:null;e.setResult({session:r})})}function We(e){let{bus:t}=e;return t.on(E.list,async e=>{let{status:n,limit:r,offset:i,includePreview:o,executionTargetId:s}=e.payload,c=await t.requestOptional(a.list,{status:n??`all`,limit:r,offset:i,includePreview:o,executionTargetId:s}),l=c.handled?c.data.sessions:[],u=c.handled?c.data.total:0;e.setResult({sessions:l,total:u})})}function Ge(e){let{bus:t}=e;return t.on(E.close,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(a.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(a.set,{sessionId:n,session:i}),await t.emit(E.closed,{sessionId:n}),e.setResult({success:!0})})}function Ke(e){let{bus:t}=e;return t.on(E.update,async e=>{let{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:o}=e.payload,s=await t.requestOptional(a.update,{sessionId:n,executionTargetId:r,approvalPolicyOverride:i,title:o}),c=s.handled?s.data.success:!1;if(c){let e=[];r!==void 0&&e.push(`executionTargetId`),i!==void 0&&e.push(`approvalPolicyOverride`),o!==void 0&&e.push(`title`),e.length>0&&await t.emit(E.updated,{sessionId:n,changedProperties:e})}e.setResult({success:c})})}function qe(e){let{bus:t}=e;return t.on(E.archive,async e=>{let{sessionId:n}=e.payload,r=await t.requestOptional(a.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(a.set,{sessionId:n,session:i}),await t.emit(E.archived,{sessionId:n}),e.setResult({success:!0})})}function Je(e){let{bus:t}=e;return t.on(E.purge,async e=>{let{sessionId:n}=e.payload,i=await t.requestOptional(a.get,{sessionId:n}),o=i.handled?i.data.session:null;if(!o){e.setResult({success:!1,error:`Session not found`});return}if(o.status!==`archived`){e.setResult({success:!1,error:`Cannot purge session unless archived. Call close then archive first.`});return}let s=await t.requestOptional(a.list,{status:`all`}),c=s.handled?s.data.sessions:[];for(let e of c)e.parentSessionId===n&&await t.requestOptional(a.set,{sessionId:e.sessionId,session:{...e,parentSessionId:void 0}});let l=await t.requestOptional(r.getEvents,{sessionId:n,options:{limit:1}}),u=l.handled?l.data.totalCount:0;await t.requestOptional(r.deleteBySession,{sessionId:n}),await t.requestOptional(a.delete,{sessionId:n}),await t.emit(E.purged,{sessionId:n}),e.setResult({success:!0,eventsDeleted:u})})}var Ye=class extends xe{constructor(e=S){super(e)}async onInit(){for(let e of Ve({bus:this.bus}))this.addCleanup(e);await this.reconcileOrphanedTurns()}async reconcileOrphanedTurns(){let e=await this.bus.requestOptional(y.listActive,{});if(!e.handled)return;let{turns:t}=e.data;for(let e of t)try{let{transitioned:t}=await this.bus.request(y.complete,{turnId:e.turnId,status:`error`,expectedStatus:`active`,error:`process-restart`});t&&await this.bus.emit(E.turn.completed,{sessionId:e.sessionId,turnId:e.turnId,turnNumber:e.turnNumber,success:!1,error:`process-restart`})}catch(t){console.error(`[MakaioSessionService] Failed to reconcile orphaned turn ${e.turnId}:`,t)}}};function Xe(e){return Error(`No adapter found for adapterName="${e}". Ensure adapter-runtime identity handlers are registered; adapter startup verifies live availability.`)}var Ze=class{bus;registry=new Map;cleanup;constructor(e){this.bus=e,this.cleanup=this.bus.on(w.initialized,e=>{this.registry.set(e.payload.adapterName,e.payload.adapterId)})}resolve(e){let t=this.registry.get(e);if(!t)throw Xe(e);return t}async resolveAvailable(e){try{let{adapterId:t}=await this.bus.request(te.resolveId,{adapterName:e});return this.registry.set(e,t),t}catch{let t=this.registry.get(e);if(t)return t;throw Xe(e)}}destroy(){this.cleanup?.(),this.cleanup=void 0,this.registry.clear()}};function Qe(e,t,n,i){return e.on(r.append,e=>{let{event:r}=e.payload,a=t.get(r.sessionId)??[];if(n.has(r.eventId)){e.setResult({success:!0});return}a.push(r),t.set(r.sessionId,a),n.set(r.eventId,i()),e.setResult({success:!0})})}function $e(e,t,n){return e.on(r.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 et(e,t){return e.on(r.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 tt(e,t,n){return e.on(r.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 nt(e,t){return e.on(r.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 rt(e){let t=new Map,n=new Map,r=1,i=[Qe(e,t,n,()=>r++),$e(e,t,n),et(e,t),tt(e,t,n),nt(e,t)];return()=>i.forEach(e=>e())}const it=[`sessionId`,`agentId`,`adapterId`,`messageId`,`turnId`];function at(e){let t=e.payload,n={};for(let[e,r]of Object.entries(t))it.includes(e)||(n[e]=r);return n}function ot(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 st(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
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 ct(e.payload)}}function ct(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 lt({bus:e,db:t}){return e.on(r.append,async e=>{let{event:n}=e.payload,r=`payload`in n&&`agentId`in n.payload?n.payload.agentId:null,a=`payload`in n&&`adapterId`in n.payload?n.payload.adapterId:null,o=`payload`in n&&`turnId`in n.payload?n.payload.turnId:null,s=`payload`in n&&`messageId`in n.payload?n.payload.messageId:null,c=n.type===`message`?s:null,l=n.type===`message`?null:s,u={sessionId:n.sessionId,eventId:n.eventId,timestamp:n.timestamp,type:n.type,agentId:r,adapterId:a,messageId:c,originatingMessageId:l,turnId:o,contentText:st(n),payload:JSON.stringify(at(n))};await t.insert(i).values(u).onConflictDoNothing(),e.setResult({success:!0})})}function ut({bus:e,db:t}){return e.on(r.getEvents,async e=>{let{sessionId:n,options:r}=e.payload,a=[N(i.sessionId,n)],o=r?.order??`asc`;if(r?.after){let e=parseInt(r.after,10);!isNaN(e)&&e>0&&(o===`desc`?a.push(je(i.id,e)):a.push(Oe(i.id,e)))}r?.types&&r.types.length>0&&a.push(P(i.type,r.types));let s=r?.limit??100,c=o===`desc`?M:De,l=await t.select().from(i).where(A(...a)).orderBy(c(i.id)).limit(s+1),u=l.length>s,d=u?l.slice(0,s):l,f=d.map(ot),p=u&&d.length>0?d[d.length-1].id.toString():null;e.setResult({events:f,nextCursor:p})})}function dt({bus:e,db:t}){return e.on(r.getByIds,async e=>{let{sessionId:n,eventIds:r}=e.payload,a=(await t.select().from(i).where(A(N(i.sessionId,n),P(i.eventId,r))).orderBy(De(i.timestamp))).map(ot);e.setResult({events:a})})}function ft({bus:e,db:t}){return e.on(r.deleteBySession,async e=>{let{sessionId:n}=e.payload,r=(await t.select().from(i).where(N(i.sessionId,n))).length;await t.delete(i).where(N(i.sessionId,n)),e.setResult({success:!0,deletedCount:r})})}function pt({bus:e,db:t}){return e.on(r.getEventsBySessions,async e=>{let{sessionIds:n,types:r,limitPerSession:a=50}=e.payload;if(n.length===0||r.length===0){e.setResult({eventsBySession:{}});return}let o={};for(let e of n){let n=await t.select().from(i).where(A(N(i.sessionId,e),P(i.type,r))).orderBy(M(i.timestamp)).limit(a);n.length>0&&(o[e]=n.map(ot))}e.setResult({eventsBySession:o})})}function mt(e,t,n){let r={bus:e,db:t},i=[lt(r),ut(r),dt(r),ft(r),pt(r)];return()=>i.forEach(e=>e())}async function I(e,t){e.emit(b.stored,{message:structuredClone(t)});try{await e.request(r.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 L(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 ht(e){let{bus:t,db:r}=e;return t.on(b.append,async e=>{let{message:i,emitEvent:a}=e.payload,o=i.messageId??crypto.randomUUID(),s={...i,messageId:o,blocks:i.blocks??[]};await r.insert(n).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 I(t,s)})}function gt(e){let{bus:t,db:r}=e;return t.on(b.getBySession,async e=>{let{sessionId:t,limit:i,after:a,includeAfter:o=!1,order:s=`asc`}=e.payload,c=s===`desc`?M:De,l=r.select().from(n).where(N(n.sessionId,t)).orderBy(c(n.timestamp),c(n.messageId));if(a){let e=s===`desc`?Ne(je(n.timestamp,a.timestamp),A(N(n.timestamp,a.timestamp),o?Me(n.messageId,a.messageId):je(n.messageId,a.messageId))):Ne(Oe(n.timestamp,a.timestamp),A(N(n.timestamp,a.timestamp),o?ke(n.messageId,a.messageId):Oe(n.messageId,a.messageId)));l=r.select().from(n).where(A(N(n.sessionId,t),e)).orderBy(c(n.timestamp),c(n.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?D(p[p.length-1]):null;e.setResult({messages:p.map(L),nextCursor:m})})}function _t(e){let{bus:t,db:r}=e;return t.on(b.getByTurn,async e=>{let{turnId:t}=e.payload,i=await r.select().from(n).where(N(n.turnId,t)).orderBy(De(n.timestamp));e.setResult({messages:i.map(L)})})}function vt(e){let{bus:t,db:r}=e;return t.on(b.get,async e=>{let{messageId:t}=e.payload,[i]=await r.select().from(n).where(N(n.messageId,t)).limit(1);e.setResult({message:i?L(i):null})})}function yt(e){let{bus:t,db:n}=e;return t.on(b.search,async e=>{let{query:t,sessionId:r,limit:i}=e.payload,a=i??50;if(!t.trim()){e.setResult({messages:[],total:0});return}let o=Pe(t),s=F`
3
3
  m.message_id AS messageId,
4
4
  m.turn_id AS turnId,
@@ -1 +1 @@
1
- import"./ui-config-CXmbsqZV.mjs";import{z as e}from"zod";const t=e.lazy(()=>e.union([e.string(),e.number().finite(),e.boolean(),e.null(),e.array(t),e.record(e.string(),t)])),n=e.record(e.string(),t),r=e.custom(e=>n.safeParse(e).success),i=e.discriminatedUnion(`type`,[e.object({type:e.literal(`base64`),data:e.string(),mimeType:e.string()}),e.object({type:e.literal(`url`),url:e.string(),mimeType:e.string().optional()})]),a=e.enum([`file`,`directory`]),o=e.discriminatedUnion(`type`,[e.object({type:e.literal(`text`),content:e.string()}),e.object({type:e.literal(`image`),source:i}),e.object({type:e.literal(`document`),source:i}),e.object({type:e.literal(`attachment`),fileName:e.string(),filePath:e.string(),source:i,displayName:e.string().optional(),attachmentType:a}),e.object({type:e.literal(`reasoning`),content:e.string(),metadata:e.record(e.string(),e.unknown()).optional()}),e.object({type:e.literal(`tool_call`),toolCallId:e.string(),name:e.string(),args:e.record(e.string(),e.unknown())}),e.object({type:e.literal(`tool_output`),toolCallId:e.string(),output:e.string(),isError:e.boolean().optional()})]),s=e.enum([`user`,`assistant`,`system`]),c=e.object({role:s.optional(),blocks:e.union([o,e.array(o)])}),l=e.union([e.string(),c]),u=e.object({message:e.string().optional()}),d=e.enum([`completed`,`superseded`,`merged`,`cancelled`,`error`,`rejected`]),f=e.object({messageId:e.string(),result:u.optional(),error:e.string().optional(),outcome:d}),p=e.enum([`enqueue`,`immediate`,`replace`]),m=e.union([e.string(),e.object({mode:e.literal(`append`),content:e.string()})]),h=e.object({role:e.enum([`user`,`assistant`,`system`]),blocks:e.array(o),message:e.string().optional()}),g=[`rate_limit`,`auth`,`model_unavailable`,`quota_exceeded`],_=e.enum(g);export{p as a,c,f as d,m as f,t as h,o as i,h as l,n as m,g as n,l as o,r as p,_ as r,d as s,i as t,u};
1
+ import"./ui-config-zawaoEfB.mjs";import{z as e}from"zod";const t=e.lazy(()=>e.union([e.string(),e.number().finite(),e.boolean(),e.null(),e.array(t),e.record(e.string(),t)])),n=e.record(e.string(),t),r=e.custom(e=>n.safeParse(e).success),i=e.discriminatedUnion(`type`,[e.object({type:e.literal(`base64`),data:e.string(),mimeType:e.string()}),e.object({type:e.literal(`url`),url:e.string(),mimeType:e.string().optional()})]),a=e.enum([`file`,`directory`]),o=e.discriminatedUnion(`type`,[e.object({type:e.literal(`text`),content:e.string()}),e.object({type:e.literal(`image`),source:i}),e.object({type:e.literal(`document`),source:i}),e.object({type:e.literal(`attachment`),fileName:e.string(),filePath:e.string(),source:i,displayName:e.string().optional(),attachmentType:a}),e.object({type:e.literal(`reasoning`),content:e.string(),metadata:e.record(e.string(),e.unknown()).optional()}),e.object({type:e.literal(`tool_call`),toolCallId:e.string(),name:e.string(),args:e.record(e.string(),e.unknown())}),e.object({type:e.literal(`tool_output`),toolCallId:e.string(),output:e.string(),isError:e.boolean().optional()})]),s=e.enum([`user`,`assistant`,`system`]),c=e.object({role:s.optional(),blocks:e.union([o,e.array(o)])}),l=e.union([e.string(),c]),u=e.object({message:e.string().optional()}),d=e.enum([`completed`,`superseded`,`merged`,`cancelled`,`error`,`rejected`]),f=e.object({messageId:e.string(),result:u.optional(),error:e.string().optional(),outcome:d}),p=e.enum([`enqueue`,`immediate`,`replace`]),m=e.union([e.string(),e.object({mode:e.literal(`append`),content:e.string()})]),h=e.object({role:e.enum([`user`,`assistant`,`system`]),blocks:e.array(o),message:e.string().optional()}),g=[`rate_limit`,`auth`,`model_unavailable`,`quota_exceeded`],_=e.enum(g);export{p as a,c,f as d,m as f,t as h,o as i,h as l,n as m,g as n,l as o,r as p,_ as r,d as s,i as t,u};
@@ -1 +1 @@
1
- import{t as e}from"./storage-namespace-definition-CHu2k14q.mjs";import{z as t}from"zod";import{createBusNamespace as n}from"@makaio/framework/core";const r=t.enum([`global`,`project`,`session`]),i=t.enum([`filesystem`,`database`]),a=t.enum([`manual`,`auto`]),o=t.enum([`model`,`user`,`auto`,`reinjection`]),s=t.enum([`cwd_changed`,`session_end`,`user`,`replaced`]),c=t.object({maxTurns:t.number().int().positive().optional()}),l=t.object({name:t.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(64),description:t.string().min(1).max(1024),license:t.string().optional(),compatibility:t.string().min(1).max(500).optional(),metadata:t.record(t.string(),t.string()).optional(),allowedTools:t.string().optional()}),u=t.object({category:t.string().optional(),tags:t.array(t.string()).optional(),adapters:t.array(t.string()).nullable().optional(),activationMode:a.default(`manual`),reinjection:c.optional(),enabled:t.boolean().default(!0)}),d=l.merge(u).extend({id:t.string(),source:i,scope:r,projectId:t.string().optional(),sessionId:t.string().optional(),location:t.string().optional(),baseDir:t.string().optional(),content:t.string(),createdAt:t.number(),updatedAt:t.number()}),f=t.object({name:l.shape.name,description:l.shape.description,compatibility:l.shape.compatibility,category:u.shape.category,tags:u.shape.tags,adapters:u.shape.adapters,activationMode:u.shape.activationMode,source:i,scope:r,location:t.string().optional(),baseDir:t.string().optional()}).strict(),p=t.object({license:l.shape.license,compatibility:l.shape.compatibility,allowedTools:l.shape.allowedTools,metadata:l.shape.metadata}).strict(),m=t.object({name:t.string(),description:t.string(),compatibility:t.string().optional()}),h=t.object({name:t.string(),content:t.string(),license:t.string().optional(),compatibility:t.string().optional(),allowedTools:t.string().optional(),metadata:t.record(t.string(),t.string()).optional()}),g=t.object({name:t.string(),content:t.string(),metadata:p.optional(),baseDir:t.string().optional(),resources:t.array(t.string()).optional(),trigger:o,activatedAt:t.number(),activatedAtTurn:t.number().int().positive().optional(),lastInjectedAtTurn:t.number().int().positive().optional(),reinjection:c.optional()}),_=l.merge(u).extend({id:t.string(),scope:r,projectId:t.string().optional(),sessionId:t.string().optional(),content:t.string(),source:t.literal(`database`).default(`database`)}).strict(),v=t.object({sessionId:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional(),category:t.string().optional(),tags:t.array(t.string()).optional(),enabledOnly:t.boolean().optional()}),y={"catalog.built":t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string(),adapterId:t.string().optional(),skillNames:t.array(t.string()),timestamp:t.number()}),activated:t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string(),adapterId:t.string().optional(),skillName:t.string(),trigger:o,turnNumber:t.number().int().positive().optional(),timestamp:t.number()}),deactivated:t.object({sessionId:t.string(),agentId:t.string(),skillName:t.string(),reason:s,timestamp:t.number()}),getCatalog:{request:t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional()}),response:t.object({entries:t.array(f),cwd:t.string()})},activate:{request:t.object({sessionId:t.string(),agentId:t.string(),skillName:t.string(),trigger:o,cwd:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional(),turnNumber:t.number().int().positive().optional()}),response:t.object({name:t.string(),content:t.string(),metadata:p.optional(),baseDir:t.string().optional(),resources:t.array(t.string()).optional(),alreadyActive:t.boolean().default(!1)})},getActiveSkills:{request:t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional()}),response:t.object({skills:t.array(g),cwd:t.string().optional()})}},b=n(`skill`,y),x=b.subjects,S=e(`skill`,{schemas:{get:{request:t.object({id:t.string()}),response:t.object({skill:d.nullable()})},set:{request:t.object({skill:_}),response:t.object({id:t.string()})},delete:{request:t.object({id:t.string()}),response:t.object({deleted:t.boolean()})},list:{request:v,response:t.object({skills:t.array(d)})},getEffective:{request:v,response:t.object({skills:t.array(d)})}}}),C=S.subjects;function w(e){if(e.scope===`global`){if(e.projectId||e.sessionId)throw Error(`Global scope skills must not have projectId or sessionId`);return}if(e.scope===`project`){if(!e.projectId)throw Error(`Project scope skills require projectId`);if(e.sessionId)throw Error(`Project scope skills must not have sessionId`);return}if(!e.sessionId)throw Error(`Session scope skills require sessionId`)}export{h as S,c as _,x as a,r as b,a as c,m as d,s as f,d as g,_ as h,b as i,o as l,v as m,C as n,p as o,l as p,w as r,g as s,S as t,f as u,u as v,i as x,y};
1
+ import{t as e}from"./storage-namespace-definition-BjK9nZAN.mjs";import{z as t}from"zod";import{createBusNamespace as n}from"@makaio/framework/core";const r=t.enum([`global`,`project`,`session`]),i=t.enum([`filesystem`,`database`]),a=t.enum([`manual`,`auto`]),o=t.enum([`model`,`user`,`auto`,`reinjection`]),s=t.enum([`cwd_changed`,`session_end`,`user`,`replaced`]),c=t.object({maxTurns:t.number().int().positive().optional()}),l=t.object({name:t.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(64),description:t.string().min(1).max(1024),license:t.string().optional(),compatibility:t.string().min(1).max(500).optional(),metadata:t.record(t.string(),t.string()).optional(),allowedTools:t.string().optional()}),u=t.object({category:t.string().optional(),tags:t.array(t.string()).optional(),adapters:t.array(t.string()).nullable().optional(),activationMode:a.default(`manual`),reinjection:c.optional(),enabled:t.boolean().default(!0)}),d=l.merge(u).extend({id:t.string(),source:i,scope:r,projectId:t.string().optional(),sessionId:t.string().optional(),location:t.string().optional(),baseDir:t.string().optional(),content:t.string(),createdAt:t.number(),updatedAt:t.number()}),f=t.object({name:l.shape.name,description:l.shape.description,compatibility:l.shape.compatibility,category:u.shape.category,tags:u.shape.tags,adapters:u.shape.adapters,activationMode:u.shape.activationMode,source:i,scope:r,location:t.string().optional(),baseDir:t.string().optional()}).strict(),p=t.object({license:l.shape.license,compatibility:l.shape.compatibility,allowedTools:l.shape.allowedTools,metadata:l.shape.metadata}).strict(),m=t.object({name:t.string(),description:t.string(),compatibility:t.string().optional()}),h=t.object({name:t.string(),content:t.string(),license:t.string().optional(),compatibility:t.string().optional(),allowedTools:t.string().optional(),metadata:t.record(t.string(),t.string()).optional()}),g=t.object({name:t.string(),content:t.string(),metadata:p.optional(),baseDir:t.string().optional(),resources:t.array(t.string()).optional(),trigger:o,activatedAt:t.number(),activatedAtTurn:t.number().int().positive().optional(),lastInjectedAtTurn:t.number().int().positive().optional(),reinjection:c.optional()}),_=l.merge(u).extend({id:t.string(),scope:r,projectId:t.string().optional(),sessionId:t.string().optional(),content:t.string(),source:t.literal(`database`).default(`database`)}).strict(),v=t.object({sessionId:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional(),category:t.string().optional(),tags:t.array(t.string()).optional(),enabledOnly:t.boolean().optional()}),y={"catalog.built":t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string(),adapterId:t.string().optional(),skillNames:t.array(t.string()),timestamp:t.number()}),activated:t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string(),adapterId:t.string().optional(),skillName:t.string(),trigger:o,turnNumber:t.number().int().positive().optional(),timestamp:t.number()}),deactivated:t.object({sessionId:t.string(),agentId:t.string(),skillName:t.string(),reason:s,timestamp:t.number()}),getCatalog:{request:t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional()}),response:t.object({entries:t.array(f),cwd:t.string()})},activate:{request:t.object({sessionId:t.string(),agentId:t.string(),skillName:t.string(),trigger:o,cwd:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional(),turnNumber:t.number().int().positive().optional()}),response:t.object({name:t.string(),content:t.string(),metadata:p.optional(),baseDir:t.string().optional(),resources:t.array(t.string()).optional(),alreadyActive:t.boolean().default(!1)})},getActiveSkills:{request:t.object({sessionId:t.string(),agentId:t.string(),cwd:t.string().optional(),projectId:t.string().optional(),adapterId:t.string().optional()}),response:t.object({skills:t.array(g),cwd:t.string().optional()})}},b=n(`skill`,y),x=b.subjects,S=e(`skill`,{schemas:{get:{request:t.object({id:t.string()}),response:t.object({skill:d.nullable()})},set:{request:t.object({skill:_}),response:t.object({id:t.string()})},delete:{request:t.object({id:t.string()}),response:t.object({deleted:t.boolean()})},list:{request:v,response:t.object({skills:t.array(d)})},getEffective:{request:v,response:t.object({skills:t.array(d)})}}}),C=S.subjects;function w(e){if(e.scope===`global`){if(e.projectId||e.sessionId)throw Error(`Global scope skills must not have projectId or sessionId`);return}if(e.scope===`project`){if(!e.projectId)throw Error(`Project scope skills require projectId`);if(e.sessionId)throw Error(`Project scope skills must not have sessionId`);return}if(!e.sessionId)throw Error(`Session scope skills require sessionId`)}export{h as S,c as _,x as a,r as b,a as c,m as d,s as f,d as g,_ as h,b as i,o as l,v as m,C as n,p as o,l as p,w as r,g as s,S as t,f as u,u as v,i as x,y};
@@ -1 +1 @@
1
- import{n as e,r as t,t as n}from"../../../drizzle-CWVVw7Er.mjs";export{n as buildScopePredicates,t as createDrizzleCrudHandlers,e as createDrizzleListHandler};
1
+ import{n as e,r as t,t as n}from"../../../drizzle-Bn2GtW8c.mjs";export{n as buildScopePredicates,t as createDrizzleCrudHandlers,e as createDrizzleListHandler};
@@ -1 +1 @@
1
- import{n as e,r as t,t as n}from"../../drizzle-CWVVw7Er.mjs";function r(e,t){let n={...e};for(let e of t)n[e]===null&&(n[e]=void 0);return n}function i(e,t){let n={...e};for(let e of t)n[e]===void 0&&(n[e]=null);return n}export{n as buildScopePredicates,t as createDrizzleCrudHandlers,e as createDrizzleListHandler,r as nullToUndefined,i as undefinedToNull};
1
+ import{n as e,r as t,t as n}from"../../drizzle-Bn2GtW8c.mjs";function r(e,t){let n={...e};for(let e of t)n[e]===null&&(n[e]=void 0);return n}function i(e,t){let n={...e};for(let e of t)n[e]===void 0&&(n[e]=null);return n}export{n as buildScopePredicates,t as createDrizzleCrudHandlers,e as createDrizzleListHandler,r as nullToUndefined,i as undefinedToNull};
@@ -17,9 +17,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
17
17
  scope: _$zod.ZodString;
18
18
  context: _$zod.ZodOptional<_$zod.ZodString>;
19
19
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
20
- mobile: "mobile";
21
20
  desktop: "desktop";
22
21
  tablet: "tablet";
22
+ mobile: "mobile";
23
23
  }>>;
24
24
  }, _$zod_v4_core0.$strip>;
25
25
  category: _$zod.ZodString;
@@ -38,9 +38,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
38
38
  scope: _$zod.ZodString;
39
39
  context: _$zod.ZodOptional<_$zod.ZodString>;
40
40
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
41
- mobile: "mobile";
42
41
  desktop: "desktop";
43
42
  tablet: "tablet";
43
+ mobile: "mobile";
44
44
  }>>;
45
45
  }, _$zod_v4_core0.$strip>;
46
46
  category: _$zod.ZodString;
@@ -60,9 +60,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
60
60
  scope: _$zod.ZodString;
61
61
  context: _$zod.ZodOptional<_$zod.ZodString>;
62
62
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
63
- mobile: "mobile";
64
63
  desktop: "desktop";
65
64
  tablet: "tablet";
65
+ mobile: "mobile";
66
66
  }>>;
67
67
  }, _$zod_v4_core0.$strip>;
68
68
  category: _$zod.ZodString;
@@ -81,9 +81,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
81
81
  scope: _$zod.ZodOptional<_$zod.ZodString>;
82
82
  context: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodString>>;
83
83
  viewport: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodEnum<{
84
- mobile: "mobile";
85
84
  desktop: "desktop";
86
85
  tablet: "tablet";
86
+ mobile: "mobile";
87
87
  }>>>;
88
88
  }, _$zod_v4_core0.$strip>>;
89
89
  category: _$zod.ZodOptional<_$zod.ZodString>;
@@ -98,9 +98,9 @@ declare const PreferencesNamespace: _$_makaio_core0.BusNamespaceDefinition<"pref
98
98
  scope: _$zod.ZodString;
99
99
  context: _$zod.ZodOptional<_$zod.ZodString>;
100
100
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
101
- mobile: "mobile";
102
101
  desktop: "desktop";
103
102
  tablet: "tablet";
103
+ mobile: "mobile";
104
104
  }>>;
105
105
  }, _$zod_v4_core0.$strip>;
106
106
  category: _$zod.ZodString;
@@ -124,9 +124,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
124
124
  scope: _$zod.ZodString;
125
125
  context: _$zod.ZodOptional<_$zod.ZodString>;
126
126
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
127
- mobile: "mobile";
128
127
  desktop: "desktop";
129
128
  tablet: "tablet";
129
+ mobile: "mobile";
130
130
  }>>;
131
131
  }, _$zod_v4_core0.$strip>;
132
132
  category: _$zod.ZodString;
@@ -145,9 +145,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
145
145
  scope: _$zod.ZodString;
146
146
  context: _$zod.ZodOptional<_$zod.ZodString>;
147
147
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
148
- mobile: "mobile";
149
148
  desktop: "desktop";
150
149
  tablet: "tablet";
150
+ mobile: "mobile";
151
151
  }>>;
152
152
  }, _$zod_v4_core0.$strip>;
153
153
  category: _$zod.ZodString;
@@ -167,9 +167,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
167
167
  scope: _$zod.ZodString;
168
168
  context: _$zod.ZodOptional<_$zod.ZodString>;
169
169
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
170
- mobile: "mobile";
171
170
  desktop: "desktop";
172
171
  tablet: "tablet";
172
+ mobile: "mobile";
173
173
  }>>;
174
174
  }, _$zod_v4_core0.$strip>;
175
175
  category: _$zod.ZodString;
@@ -188,9 +188,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
188
188
  scope: _$zod.ZodOptional<_$zod.ZodString>;
189
189
  context: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodString>>;
190
190
  viewport: _$zod.ZodOptional<_$zod.ZodOptional<_$zod.ZodEnum<{
191
- mobile: "mobile";
192
191
  desktop: "desktop";
193
192
  tablet: "tablet";
193
+ mobile: "mobile";
194
194
  }>>>;
195
195
  }, _$zod_v4_core0.$strip>>;
196
196
  category: _$zod.ZodOptional<_$zod.ZodString>;
@@ -205,9 +205,9 @@ declare const PreferencesSubjects: _$_makaio_core0.BusSubjects<_$_makaio_core0.F
205
205
  scope: _$zod.ZodString;
206
206
  context: _$zod.ZodOptional<_$zod.ZodString>;
207
207
  viewport: _$zod.ZodOptional<_$zod.ZodEnum<{
208
- mobile: "mobile";
209
208
  desktop: "desktop";
210
209
  tablet: "tablet";
210
+ mobile: "mobile";
211
211
  }>>;
212
212
  }, _$zod_v4_core0.$strip>;
213
213
  category: _$zod.ZodString;
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";const t=e.object({initialization:e.number().optional().describe(`Time allowed for adapter/session initialization (cold starts, auth). Defaults to 30000ms.`),acknowledgement:e.number().optional().describe(`Time allowed for acknowledgement that a message was received. Defaults to 30000ms.`),completion:e.number().optional().describe(`Time allowed for completion of complex reasoning operations. Defaults to 60000ms.`),toolApproval:e.number().optional().describe(`Time allowed for tool approval responses (user is waiting). Defaults to 5000ms.`),eventWait:e.number().optional().describe(`Default time for once() calls waiting for events. Defaults to 10000ms.`)});export{t};
@@ -1 +1 @@
1
- import{SessionStorageSubjects as e}from"./services/session/storage/namespace.mjs";import{F as t}from"./handlers-iGKUJ380.mjs";import"./session-Do6lDZM4.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-DR_4_rAT.mjs";import"./session-BNo_cIiz.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-iGKUJ380.mjs";import{B as n,H as r,J as i,M as a,O as o,Z as s,_ as c,i as l,l as u,m as ee,n as te,o as ne,q as re,r as ie,s as ae,w as oe}from"./session-Do6lDZM4.mjs";import{n as d}from"./namespace-Db-p67Rg.mjs";import{t as se}from"./capability-service-tnpR_TaB.mjs";import"./services/adapter-subsystem/index.mjs";import{i as ce,s as le}from"./model-registry-CIscwC52.mjs";import{t as ue}from"./tool-approval-service-BcBSUZCO.mjs";import{t as de}from"./tray-menu-service-CTXC1Elg.mjs";import{harnessDefinitions as f}from"./services/harness/storage/schema.mjs";import{n as p}from"./namespace-CfEWMXBx.mjs";import{z as m}from"zod";import{MakaioError as fe,createMakaioContext as pe}from"@makaio/framework/core";import{MakaioBus as h}from"@makaio/framework/bus";import{AdapterSubjects as me,ApprovalPolicySchema as g,CanonicalModelSubjects as he,DEFAULT_HARNESSES as ge,HarnessDefinitionCreateSchema as _e,HarnessSubjects as _,ToolCapabilitySchema as ve,ToolSubjects as v,dep as y,extensionToken as b,validateToolAdapterIdentity as ye}from"@makaio/framework/contracts";import{BaseService as x}from"@makaio/framework/service-base";import{eq as S}from"drizzle-orm";import{registerDrizzleHandlers as C}from"@makaio/framework/storage/drizzle";import{slugifyProviderConfigName as w}from"@makaio/framework/contracts/config";import{ClientAccountIdentifierSchema as be,ClientSessionAccountObserveSchema as xe,ClientSubjects as T}from"@makaio/framework/contracts/client";import{FILE_ACCESS_RULES_KEY as Se,FILE_ACCESS_RULES_KEY as Ce,ToolErrorCodes as E,errorToToolResult as we,extractToolFilePath as Te,toolError as D,toolSuccess as Ee}from"@makaio/framework/tools";import{createHash as De}from"node:crypto";import{createDrizzleCrudHandlers as Oe,createDrizzleListHandler as ke}from"@makaio/framework/storage/handlers";function Ae(e){let t=ye({adapterId:e?.adapterId,adapterName:e?.adapterName,contextOverrides:{adapterId:e?.contextOverrides?.adapterId,adapterName:e?.contextOverrides?.adapterName}}),n=t.issues[0];return n?D(E.VALIDATION_FAILED,n.message):Ee(t.effectiveIdentity)}function je(e){let t=e?.allowedDirectories;if(Array.isArray(t))return t.filter(e=>typeof e==`string`)}async function Me(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 Ne(){return`exec_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}var O=class{bus;toolsets=new Map;tools=new Map;cleanupHandlers=[];handlerPriority;policyProvider;fileAccessRuleProvider;revision=0;constructor(e){this.bus=e?.bus??h,this.handlerPriority=e?.handlerPriority??0,this.policyProvider=e?.policyProvider,this.fileAccessRuleProvider=e?.fileAccessRuleProvider,this.registerHandlers()}registerHandlers(){let e=this.bus.on(v.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(v.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 ${v.registryChanged.subject} for '${e.metadata.name}':`,t)),await this.bus.emit(v.registered,{toolsetName:e.metadata.name,toolsetVersion:e.metadata.version,toolNames:t}).catch(t=>console.warn(`[ToolRegistry] Failed to emit ${v.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 ${v.registryChanged.subject} for '${e}':`,t))}async emitRegistryChanged(e,t){this.revision+=1,await this.bus.emit(v.registryChanged,{revision:this.revision,reason:e,toolsetName:t})}async execute(e,t,n){let r=this.tools.get(e);if(!r)return D(E.TOOL_NOT_FOUND,`Tool '${e}' not found`);let i=Ae(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=Ne(),l=Date.now();await this.bus.emit(v.started,{toolName:e,toolsetName:o,executionId:c,timestamp:l});try{let r=a.inputSchema.safeParse(t);if(!r.success){let t=D(E.VALIDATION_FAILED,`Input validation failed`,{issues:r.error.issues});return await this.bus.emit(v.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(v.completed,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),durationMs:Date.now()-l}):await this.bus.emit(v.error,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),error:u.error}),u}catch(t){let n=we(t);return await this.bus.emit(v.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=je(n),i=await this.fileAccessRuleProvider(t,r);n={...n,[Se]:i}}let r=pe({...e?.contextOverrides,constraints:n}),i=e?.contextOverrides;return{...r,bus:this.bus,sessionId:i?.sessionId,agentId:i?.agentId,adapterId:t.adapterId,adapterName:t.adapterName,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 D(E.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 D(E.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}=m.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}=m.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 Me(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()}},k=class extends fe{code;suggestions;constructor(e,t,n){super(e),this.code=t,this.suggestions=n}},A=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 k(`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 k(`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 k(`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 k(`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 k(`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 k(`"${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 k(`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 k(`"${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 k(`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 k(`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]}},j=class e extends x{constructor(e=h){super(e)}async onInit(){await this.bus.request(d.ensureReady,{});let e=new A(this.createDeps());this.registerHandler(he.resolve,async t=>{let n=await e.resolve(t.payload.parsed,t.payload.context);t.setResult(n)})}createDeps(){let e=this.bus,t=async()=>{let{adapters:t}=await e.request(d.listAdapters,{});return t.filter(e=>e.enabled).map(e=>e.name)},n=async t=>{let[n,r]=await Promise.all([e.request(d.getDefaultBinding,{adapterName:t}),this.listEnabledProviderConfigIds()]);if(n.binding&&r.has(n.binding.providerConfigId))return n.binding;let{bindings:i}=await e.request(d.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(d.getProviderDefinitionsByAdapter,{adapterName:t});return n},i=async t=>{let{bindings:n}=await e.request(d.listBindingsByConfig,{providerConfigId:t});return n},a=async t=>{let{configs:n}=await e.request(d.listProviderConfigs,{enabled:!0}),r=w(t);return n.find(e=>w(e.name)===r)},o=this.buildFindProviderDefinition(t,r),s=async t=>{let{configs:n}=await e.request(d.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(d.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(le.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(d.listProviderConfigs,{enabled:!0});return new Set(e.map(e=>e.id))}};const M={name:`makaio.canonical-model`,displayName:`Canonical Model`,version:`0.1.0`,critical:!1,create:e=>new j(e.bus)};function Pe(e){return async t=>{let n=await Fe(e,t);if(!n)return{handled:!1,sessionId:null,clientAccountId:null,changed:!1};let{sessionId:r}=n,{observation:i,accountObserveRequest:a}=Ie(t),o=await e.requestOptional(T.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 Ue(e,r,i,s)}}}async function Fe(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 Ie(e){let t={clientId:e.clientId,source:e.source,kind:e.kind,observedAt:e.observedAt,payload:Ve(e.payload)};return{observation:t,accountObserveRequest:Le(t)}}function Le(e){let t=e.payload,n=Re(t),r=ze(t);if(r.length>0)return{clientId:e.clientId,observedAt:e.observedAt,displayLabel:Be(t,n),identifiers:r};throw Error(`client.session.account.observe for "${e.clientId}" requires canonical client account identifiers`)}function Re(e){return He(e.accountInfo)??e}function ze(e){let t=e.identifiers;if(!Array.isArray(t))return[];try{return m.array(be).min(1).parse(t)}catch(e){throw Error(`client.session.account.observe received malformed canonical client account identifiers`,{cause:e})}}function Be(e,t){return N(e.displayLabel)??N(t.displayLabel)??N(t.email)??N(t.label)}function Ve(e){return structuredClone(e)}function He(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function N(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}async function Ue(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 We=b(`session-storage`).name;var Ge=class extends x{constructor(e=h){super(e)}onInit(){let e=Pe(this.bus);this.registerHandler(T.session.account.observe,async t=>{t.setResult(await e(xe.request.parse(t.payload)))})}};const Ke={name:`makaio.session-client-account-linking`,displayName:`Session Client Account Linking`,version:`0.1.0`,dependencies:[y(We),y(`makaio.clients-core`)],critical:!1,create:e=>new Ge(e.bus)},qe={name:`framework-shell`,displayName:`Shell`,version:`0.1.0`,surface:`interactive`,windows:[{id:`main`,style:`utility`,width:1e3,height:700,singleton:!0}]};async function Je(e){let{harnesses:t}=await e.request(p.list,{}),n=new Set(t.map(e=>e.id));for(let t of ge){if(n.has(t.id))continue;let r={...t};await e.request(p.set,{harness:r})}}function P(e){return{id:e.id,name:e.name,description:e.description??void 0,adapterName:e.adapterName??void 0,clientId:e.clientId??void 0,env:e.env??void 0,credentials:e.credentials??void 0,cwd:e.cwd??void 0,approvalPolicy:g.parse(e.approvalPolicy),nativeTools:{enabled:e.nativeToolsEnabled,disabled:e.nativeToolsDisabled},registryTools:{enabled:e.registryToolsEnabled,disabled:e.registryToolsDisabled},skills:e.skillsEnabled||e.skillsDisabled?{enabled:e.skillsEnabled??[],disabled:e.skillsDisabled??[]}:void 0,toolCapabilityMap:e.toolCapabilityMap?m.record(m.string(),m.array(ve)).parse(e.toolCapabilityMap):void 0,capabilityOverrides:e.capabilityOverrides?m.record(m.string(),g).parse(e.capabilityOverrides):void 0,toolApprovalOverrides:e.toolApprovalOverrides?m.record(m.string(),g).parse(e.toolApprovalOverrides):void 0,isDefault:e.isDefault,enabled:e.enabled,createdAt:e.createdAt,updatedAt:e.updatedAt}}function Ye(e){return{id:e.id,name:e.name,description:e.description??null,adapterName:e.adapterName??null,clientId:e.clientId??null,env:e.env??null,credentials:e.credentials??null,cwd:e.cwd??null,approvalPolicy:e.approvalPolicy,nativeToolsEnabled:e.nativeTools.enabled,nativeToolsDisabled:e.nativeTools.disabled,registryToolsEnabled:e.registryTools.enabled,registryToolsDisabled:e.registryTools.disabled,skillsEnabled:e.skills?.enabled??null,skillsDisabled:e.skills?.disabled??null,toolCapabilityMap:e.toolCapabilityMap??null,capabilityOverrides:e.capabilityOverrides??null,toolApprovalOverrides:e.toolApprovalOverrides??null,isDefault:e.isDefault,enabled:e.enabled}}const Xe=Oe({table:f,subjects:{get:p.get,set:p.set,delete:p.delete},idField:`id`,singularKey:`harness`,mapper:P,toDbValues:Ye,lifecycle:{created:_.created,updated:_.updated,deleted:_.deleted}}),Ze=ke({table:f,subject:p.list,pluralKey:`harnesses`,mapper:P,buildPredicates:(e,t)=>{let n=[];return e.adapterName&&n.push(S(t.adapterName,e.adapterName)),e.clientId&&n.push(S(t.clientId,e.clientId)),e.name&&n.push(S(t.name,e.name)),n}});function F(e,t,n){let r=Xe(e,t),i=Ze(e,t);return()=>{r(),i()}}function I(e,t,n){return e??t??n}var Qe=class extends x{static storage={drizzle:F};constructor(e=h){super(e)}async onInit(){await Je(this.bus),this.registerHandlers()}registerHandlers(){this.registerHandler(_.get,async e=>{let t=await this.loadHarness(e.payload);if(!t)throw Error(`Harness not found`);e.setResult(t)}),this.registerHandler(_.list,async e=>{let{harnesses:t}=await this.bus.request(p.list,e.payload);e.setResult({harnesses:t})}),this.registerHandler(_.set,async e=>{let t=await this.upsertHarness(e.payload);e.setResult({id:t})}),this.registerHandler(_.delete,async e=>{let{deleted:t}=await this.bus.request(p.delete,{id:e.payload.id});e.setResult({success:t})}),this.registerHandler(_.getDefault,async e=>{let t=await this.getDefaultHarness(e.payload.adapterName,e.payload.clientId);e.setResult(t)}),this.registerHandler(_.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(_.getSchema,({setResult:e})=>{let{$schema:t,...n}=m.toJSONSchema(_e);e({schema:n,uiConfig:{editMode:`fullPage`,hiddenFields:[`isDefault`]}})})}async upsertHarness(e){let t=await this.resolveHarnessId(e.name,e.adapterName,e.clientId),n=await this.loadHarness({id:t,adapterName:e.adapterName,clientId:e.clientId}),r=this.mergeHarnessPayload(t,e,n);return r.adapterName&&await this.validateNativeTools(r.adapterName,r.nativeTools),await this.bus.request(p.set,{harness:r}),t}mergeHarnessPayload(e,t,n){let r={enabled:[],disabled:[]};return{id:e,name:t.name,description:I(t.description,n?.description,void 0),adapterName:t.adapterName,clientId:I(t.clientId,n?.clientId,void 0),env:I(t.env,n?.env,void 0),credentials:I(t.credentials,n?.credentials,void 0),cwd:I(t.cwd,n?.cwd,void 0),approvalPolicy:I(t.approvalPolicy,n?.approvalPolicy,`always-ask`),nativeTools:I(t.nativeTools,n?.nativeTools,r),registryTools:I(t.registryTools,n?.registryTools,r),skills:I(t.skills,n?.skills,void 0),toolCapabilityMap:t.toolCapabilityMap??n?.toolCapabilityMap,capabilityOverrides:t.capabilityOverrides??n?.capabilityOverrides,toolApprovalOverrides:t.toolApprovalOverrides??n?.toolApprovalOverrides,isDefault:I(t.isDefault,n?.isDefault,!1),enabled:I(t.enabled,n?.enabled,!0)}}async resolveHarnessId(e,t,n){let r=n??t,{harnesses:i}=await this.bus.request(p.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(p.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(p.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(p.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(p.list,{adapterName:e}),n=t.find(e=>e.isDefault&&e.enabled);if(n)return n;let r=t.find(e=>e.enabled);if(r)return r}let n=t?e?`client '${t}' or adapter '${e}'`:`client '${t}'`:`adapter '${e}'`;throw Error(`No harness available for ${n}`)}assertHarnessAdapterMatch(e,t,n,r){if(e.adapterName&&t&&e.adapterName!==t)throw Error(`Resolved ${n} harness adapter mismatch: expected "${t}", got "${e.adapterName}"`);if(e.clientId&&r&&e.clientId!==r)throw Error(`Resolved ${n} harness client mismatch: expected "${r}", got "${e.clientId}"`)}assertHarnessEnabled(e,t){if(!e.enabled)throw Error(`Resolved ${t} harness is disabled: ${e.id}`)}async validateNativeTools(e,t){let n=await this.bus.requestOptional(me.getCapabilities,{adapterName:e});if(!n.handled)return;let r=new Set(n.data.nativeTools),i=[...t.enabled,...t.disabled].filter(e=>!r.has(e));if(i.length>0)throw Error(`Tool '${i[0]}' not found in adapter '${e}' native tools. Declared tools: ${[...r].join(`, `)}`)}createStableHarnessId(e,t){return`harness-${De(`sha256`).update(`${t??``}\0${e}`).digest(`hex`).slice(0,24)}`}async resolveAndValidateHarness(e,t,n,r){let i=await this.loadHarness({id:e});if(!i)throw Error(`${n===`persona`?`Persona`:`Profile`} harness not found: ${e}`);return this.assertHarnessAdapterMatch(i,t,n,r),this.assertHarnessEnabled(i,n),i}};const $e={name:`makaio.harness`,displayName:`Harness`,version:`0.1.0`,critical:!0,storage:{registerHandlers:C(F)},create:e=>new Qe(e.bus)},L=b(`session-storage`),R=b(`session-bridge`),z=b(`session`),B=b(`session-orchestrator`),V=b(`tool-registry`),H=b(`tool-approval`),U=b(`tray-menu`),W=b(`capability`),G=b(`model-registry`),K={name:L.name,displayName:`Session Storage`,version:`0.1.0`,critical:!0,storage:{registerHandlers:C((e,n,a)=>{let s=[],d=e=>{for(let t=s.length-1;t>=0;--t)try{s[t]?.()}catch(t){console.warn(`[sessionStoragePackage] cleanup failed during ${e}:`,t)}s.length=0};try{s.push(oe(e,n,a)),s.push(i(e,n,a)),s.push(re(e,n,a)),s.push(r(e,n,a)),s.push(t(e,n,a)),s.push(o(e,n,a)),s.push(ee(e,n,a)),s.push(c(e,n)),s.push(u(e,n,a)),s.push(l(e,n)),s.push(ie(e)),s.push(te(e)),s.push(ae(e)),s.push(ne(e))}catch(e){throw d(`rollback`),e}return()=>{d(`shutdown`)}})}},q={name:R.name,displayName:`Session Bridge`,version:`0.1.0`,dependencies:[y(L.name)],critical:!0,create:e=>new a(e.bus)},J={name:z.name,displayName:`Session`,version:`0.1.0`,dependencies:[y(R.name)],critical:!0,create:e=>new s(e.bus)},Y={name:B.name,displayName:`Session Orchestrator`,version:`0.1.0`,dependencies:[y(z.name),y(M.name)],critical:!0,runtimeOwnership:{sessionOrchestrator:!0},create:e=>new n(e.bus,e.machineId)},X={name:V.name,displayName:`Tool Registry`,version:`0.1.0`,critical:!0,create:e=>new O({bus:e.bus})},Z={name:H.name,displayName:`Tool Approval`,version:`0.1.0`,dependencies:[y(V.name)],critical:!0,create:e=>new ue(e.bus)},Q={name:U.name,displayName:`Tray Menu`,version:`0.1.0`,critical:!0,create:e=>new de(e.bus)},$={name:W.name,displayName:`Capability`,version:`0.1.0`,critical:!0,create:e=>new se(e.bus)};function et(e){return{name:G.name,displayName:`Model Registry`,version:`0.1.0`,critical:!0,create:t=>new ce({bus:t.bus,fetcher:e})}}const tt=[K,q,Ke,J,Y,X,Z,Q,$,$e,M,qe];function nt(){let e=new Map;return{filter:e=>!!e.tools?.createToolsets,async processActivated(t,n,r){let i=r.getService(V);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{M as C,O as D,k as E,Q as S,A as T,Y as _,G as a,Z as b,L as c,V as d,U as f,q as g,tt as h,W as i,z as l,et as m,Te as n,R as o,$ as p,nt as r,B as s,Ce as t,H as u,J as v,j as w,X as x,K as y};
1
+ import{SessionStorageSubjects as e}from"./services/session/storage/namespace.mjs";import{N as t}from"./handlers-DR_4_rAT.mjs";import{B as n,H as r,J as i,M as a,O as o,Z as s,_ as c,i as l,l as u,m as ee,n as te,o as ne,q as re,r as ie,s as ae,w as oe}from"./session-BNo_cIiz.mjs";import{n as d}from"./namespace-aALq9tnE.mjs";import{t as se}from"./capability-service-DV32ecwR.mjs";import"./services/adapter-subsystem/index.mjs";import{i as ce,s as le}from"./model-registry-Dzpssh9j.mjs";import{t as ue}from"./tool-approval-service-CZCPfvVy.mjs";import{t as de}from"./tray-menu-service-BAYtLdAg.mjs";import{harnessDefinitions as f}from"./services/harness/storage/schema.mjs";import{n as p}from"./namespace-Zb8HAbyF.mjs";import{z as m}from"zod";import{MakaioError as fe,createMakaioContext as pe}from"@makaio/framework/core";import{MakaioBus as h}from"@makaio/framework/bus";import{AdapterSubjects as me,ApprovalPolicySchema as g,CanonicalModelSubjects as he,DEFAULT_HARNESSES as ge,HarnessDefinitionCreateSchema as _e,HarnessSubjects as _,ToolCapabilitySchema as ve,ToolSubjects as v,dep as y,extensionToken as b,validateToolAdapterIdentity as ye}from"@makaio/framework/contracts";import{BaseService as x}from"@makaio/framework/service-base";import{eq as S}from"drizzle-orm";import{registerDrizzleHandlers as C}from"@makaio/framework/storage/drizzle";import{slugifyProviderConfigName as w}from"@makaio/framework/contracts/config";import{ClientAccountIdentifierSchema as be,ClientSessionAccountObserveSchema as xe,ClientSubjects as T}from"@makaio/framework/contracts/client";import{FILE_ACCESS_RULES_KEY as Se,FILE_ACCESS_RULES_KEY as Ce,ToolErrorCodes as E,errorToToolResult as we,extractToolFilePath as Te,toolError as D,toolSuccess as Ee}from"@makaio/framework/tools";import{createHash as De}from"node:crypto";import{createDrizzleCrudHandlers as Oe,createDrizzleListHandler as ke}from"@makaio/framework/storage/handlers";function Ae(e){let t=ye({adapterId:e?.adapterId,adapterName:e?.adapterName,contextOverrides:{adapterId:e?.contextOverrides?.adapterId,adapterName:e?.contextOverrides?.adapterName}}),n=t.issues[0];return n?D(E.VALIDATION_FAILED,n.message):Ee(t.effectiveIdentity)}function je(e){let t=e?.allowedDirectories;if(Array.isArray(t))return t.filter(e=>typeof e==`string`)}async function Me(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 Ne(){return`exec_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}var O=class{bus;toolsets=new Map;tools=new Map;cleanupHandlers=[];handlerPriority;policyProvider;fileAccessRuleProvider;revision=0;constructor(e){this.bus=e?.bus??h,this.handlerPriority=e?.handlerPriority??0,this.policyProvider=e?.policyProvider,this.fileAccessRuleProvider=e?.fileAccessRuleProvider,this.registerHandlers()}registerHandlers(){let e=this.bus.on(v.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(v.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 ${v.registryChanged.subject} for '${e.metadata.name}':`,t)),await this.bus.emit(v.registered,{toolsetName:e.metadata.name,toolsetVersion:e.metadata.version,toolNames:t}).catch(t=>console.warn(`[ToolRegistry] Failed to emit ${v.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 ${v.registryChanged.subject} for '${e}':`,t))}async emitRegistryChanged(e,t){this.revision+=1,await this.bus.emit(v.registryChanged,{revision:this.revision,reason:e,toolsetName:t})}async execute(e,t,n){let r=this.tools.get(e);if(!r)return D(E.TOOL_NOT_FOUND,`Tool '${e}' not found`);let i=Ae(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=Ne(),l=Date.now();await this.bus.emit(v.started,{toolName:e,toolsetName:o,executionId:c,timestamp:l});try{let r=a.inputSchema.safeParse(t);if(!r.success){let t=D(E.VALIDATION_FAILED,`Input validation failed`,{issues:r.error.issues});return await this.bus.emit(v.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(v.completed,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),durationMs:Date.now()-l}):await this.bus.emit(v.error,{toolName:e,toolsetName:o,executionId:c,timestamp:Date.now(),error:u.error}),u}catch(t){let n=we(t);return await this.bus.emit(v.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=je(n),i=await this.fileAccessRuleProvider(t,r);n={...n,[Se]:i}}let r=pe({...e?.contextOverrides,constraints:n}),i=e?.contextOverrides;return{...r,bus:this.bus,sessionId:i?.sessionId,agentId:i?.agentId,adapterId:t.adapterId,adapterName:t.adapterName,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 D(E.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 D(E.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}=m.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}=m.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 Me(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()}},k=class extends fe{code;suggestions;constructor(e,t,n){super(e),this.code=t,this.suggestions=n}},A=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 k(`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 k(`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 k(`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 k(`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 k(`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 k(`"${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 k(`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 k(`"${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 k(`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 k(`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]}},j=class e extends x{constructor(e=h){super(e)}async onInit(){await this.bus.request(d.ensureReady,{});let e=new A(this.createDeps());this.registerHandler(he.resolve,async t=>{let n=await e.resolve(t.payload.parsed,t.payload.context);t.setResult(n)})}createDeps(){let e=this.bus,t=async()=>{let{adapters:t}=await e.request(d.listAdapters,{});return t.filter(e=>e.enabled).map(e=>e.name)},n=async t=>{let[n,r]=await Promise.all([e.request(d.getDefaultBinding,{adapterName:t}),this.listEnabledProviderConfigIds()]);if(n.binding&&r.has(n.binding.providerConfigId))return n.binding;let{bindings:i}=await e.request(d.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(d.getProviderDefinitionsByAdapter,{adapterName:t});return n},i=async t=>{let{bindings:n}=await e.request(d.listBindingsByConfig,{providerConfigId:t});return n},a=async t=>{let{configs:n}=await e.request(d.listProviderConfigs,{enabled:!0}),r=w(t);return n.find(e=>w(e.name)===r)},o=this.buildFindProviderDefinition(t,r),s=async t=>{let{configs:n}=await e.request(d.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(d.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(le.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(d.listProviderConfigs,{enabled:!0});return new Set(e.map(e=>e.id))}};const M={name:`makaio.canonical-model`,displayName:`Canonical Model`,version:`0.1.0`,critical:!1,create:e=>new j(e.bus)};function Pe(e){return async t=>{let n=await Fe(e,t);if(!n)return{handled:!1,sessionId:null,clientAccountId:null,changed:!1};let{sessionId:r}=n,{observation:i,accountObserveRequest:a}=Ie(t),o=await e.requestOptional(T.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 Ue(e,r,i,s)}}}async function Fe(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 Ie(e){let t={clientId:e.clientId,source:e.source,kind:e.kind,observedAt:e.observedAt,payload:Ve(e.payload)};return{observation:t,accountObserveRequest:Le(t)}}function Le(e){let t=e.payload,n=Re(t),r=ze(t);if(r.length>0)return{clientId:e.clientId,observedAt:e.observedAt,displayLabel:Be(t,n),identifiers:r};throw Error(`client.session.account.observe for "${e.clientId}" requires canonical client account identifiers`)}function Re(e){return He(e.accountInfo)??e}function ze(e){let t=e.identifiers;if(!Array.isArray(t))return[];try{return m.array(be).min(1).parse(t)}catch(e){throw Error(`client.session.account.observe received malformed canonical client account identifiers`,{cause:e})}}function Be(e,t){return N(e.displayLabel)??N(t.displayLabel)??N(t.email)??N(t.label)}function Ve(e){return structuredClone(e)}function He(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function N(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}async function Ue(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 We=b(`session-storage`).name;var Ge=class extends x{constructor(e=h){super(e)}onInit(){let e=Pe(this.bus);this.registerHandler(T.session.account.observe,async t=>{t.setResult(await e(xe.request.parse(t.payload)))})}};const Ke={name:`makaio.session-client-account-linking`,displayName:`Session Client Account Linking`,version:`0.1.0`,dependencies:[y(We),y(`makaio.clients-core`)],critical:!1,create:e=>new Ge(e.bus)},qe={name:`framework-shell`,displayName:`Shell`,version:`0.1.0`,surface:`interactive`,windows:[{id:`main`,style:`utility`,width:1e3,height:700,singleton:!0}]};async function Je(e){let{harnesses:t}=await e.request(p.list,{}),n=new Set(t.map(e=>e.id));for(let t of ge){if(n.has(t.id))continue;let r={...t};await e.request(p.set,{harness:r})}}function P(e){return{id:e.id,name:e.name,description:e.description??void 0,adapterName:e.adapterName??void 0,clientId:e.clientId??void 0,env:e.env??void 0,credentials:e.credentials??void 0,cwd:e.cwd??void 0,approvalPolicy:g.parse(e.approvalPolicy),nativeTools:{enabled:e.nativeToolsEnabled,disabled:e.nativeToolsDisabled},registryTools:{enabled:e.registryToolsEnabled,disabled:e.registryToolsDisabled},skills:e.skillsEnabled||e.skillsDisabled?{enabled:e.skillsEnabled??[],disabled:e.skillsDisabled??[]}:void 0,toolCapabilityMap:e.toolCapabilityMap?m.record(m.string(),m.array(ve)).parse(e.toolCapabilityMap):void 0,capabilityOverrides:e.capabilityOverrides?m.record(m.string(),g).parse(e.capabilityOverrides):void 0,toolApprovalOverrides:e.toolApprovalOverrides?m.record(m.string(),g).parse(e.toolApprovalOverrides):void 0,isDefault:e.isDefault,enabled:e.enabled,createdAt:e.createdAt,updatedAt:e.updatedAt}}function Ye(e){return{id:e.id,name:e.name,description:e.description??null,adapterName:e.adapterName??null,clientId:e.clientId??null,env:e.env??null,credentials:e.credentials??null,cwd:e.cwd??null,approvalPolicy:e.approvalPolicy,nativeToolsEnabled:e.nativeTools.enabled,nativeToolsDisabled:e.nativeTools.disabled,registryToolsEnabled:e.registryTools.enabled,registryToolsDisabled:e.registryTools.disabled,skillsEnabled:e.skills?.enabled??null,skillsDisabled:e.skills?.disabled??null,toolCapabilityMap:e.toolCapabilityMap??null,capabilityOverrides:e.capabilityOverrides??null,toolApprovalOverrides:e.toolApprovalOverrides??null,isDefault:e.isDefault,enabled:e.enabled}}const Xe=Oe({table:f,subjects:{get:p.get,set:p.set,delete:p.delete},idField:`id`,singularKey:`harness`,mapper:P,toDbValues:Ye,lifecycle:{created:_.created,updated:_.updated,deleted:_.deleted}}),Ze=ke({table:f,subject:p.list,pluralKey:`harnesses`,mapper:P,buildPredicates:(e,t)=>{let n=[];return e.adapterName&&n.push(S(t.adapterName,e.adapterName)),e.clientId&&n.push(S(t.clientId,e.clientId)),e.name&&n.push(S(t.name,e.name)),n}});function F(e,t,n){let r=Xe(e,t),i=Ze(e,t);return()=>{r(),i()}}function I(e,t,n){return e??t??n}var Qe=class extends x{static storage={drizzle:F};constructor(e=h){super(e)}async onInit(){await Je(this.bus),this.registerHandlers()}registerHandlers(){this.registerHandler(_.get,async e=>{let t=await this.loadHarness(e.payload);if(!t)throw Error(`Harness not found`);e.setResult(t)}),this.registerHandler(_.list,async e=>{let{harnesses:t}=await this.bus.request(p.list,e.payload);e.setResult({harnesses:t})}),this.registerHandler(_.set,async e=>{let t=await this.upsertHarness(e.payload);e.setResult({id:t})}),this.registerHandler(_.delete,async e=>{let{deleted:t}=await this.bus.request(p.delete,{id:e.payload.id});e.setResult({success:t})}),this.registerHandler(_.getDefault,async e=>{let t=await this.getDefaultHarness(e.payload.adapterName,e.payload.clientId);e.setResult(t)}),this.registerHandler(_.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(_.getSchema,({setResult:e})=>{let{$schema:t,...n}=m.toJSONSchema(_e);e({schema:n,uiConfig:{editMode:`fullPage`,hiddenFields:[`isDefault`]}})})}async upsertHarness(e){let t=await this.resolveHarnessId(e.name,e.adapterName,e.clientId),n=await this.loadHarness({id:t,adapterName:e.adapterName,clientId:e.clientId}),r=this.mergeHarnessPayload(t,e,n);return r.adapterName&&await this.validateNativeTools(r.adapterName,r.nativeTools),await this.bus.request(p.set,{harness:r}),t}mergeHarnessPayload(e,t,n){let r={enabled:[],disabled:[]};return{id:e,name:t.name,description:I(t.description,n?.description,void 0),adapterName:t.adapterName,clientId:I(t.clientId,n?.clientId,void 0),env:I(t.env,n?.env,void 0),credentials:I(t.credentials,n?.credentials,void 0),cwd:I(t.cwd,n?.cwd,void 0),approvalPolicy:I(t.approvalPolicy,n?.approvalPolicy,`always-ask`),nativeTools:I(t.nativeTools,n?.nativeTools,r),registryTools:I(t.registryTools,n?.registryTools,r),skills:I(t.skills,n?.skills,void 0),toolCapabilityMap:t.toolCapabilityMap??n?.toolCapabilityMap,capabilityOverrides:t.capabilityOverrides??n?.capabilityOverrides,toolApprovalOverrides:t.toolApprovalOverrides??n?.toolApprovalOverrides,isDefault:I(t.isDefault,n?.isDefault,!1),enabled:I(t.enabled,n?.enabled,!0)}}async resolveHarnessId(e,t,n){let r=n??t,{harnesses:i}=await this.bus.request(p.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(p.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(p.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(p.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(p.list,{adapterName:e}),n=t.find(e=>e.isDefault&&e.enabled);if(n)return n;let r=t.find(e=>e.enabled);if(r)return r}let n=t?e?`client '${t}' or adapter '${e}'`:`client '${t}'`:`adapter '${e}'`;throw Error(`No harness available for ${n}`)}assertHarnessAdapterMatch(e,t,n,r){if(e.adapterName&&t&&e.adapterName!==t)throw Error(`Resolved ${n} harness adapter mismatch: expected "${t}", got "${e.adapterName}"`);if(e.clientId&&r&&e.clientId!==r)throw Error(`Resolved ${n} harness client mismatch: expected "${r}", got "${e.clientId}"`)}assertHarnessEnabled(e,t){if(!e.enabled)throw Error(`Resolved ${t} harness is disabled: ${e.id}`)}async validateNativeTools(e,t){let n=await this.bus.requestOptional(me.getCapabilities,{adapterName:e});if(!n.handled)return;let r=new Set(n.data.nativeTools),i=[...t.enabled,...t.disabled].filter(e=>!r.has(e));if(i.length>0)throw Error(`Tool '${i[0]}' not found in adapter '${e}' native tools. Declared tools: ${[...r].join(`, `)}`)}createStableHarnessId(e,t){return`harness-${De(`sha256`).update(`${t??``}\0${e}`).digest(`hex`).slice(0,24)}`}async resolveAndValidateHarness(e,t,n,r){let i=await this.loadHarness({id:e});if(!i)throw Error(`${n===`persona`?`Persona`:`Profile`} harness not found: ${e}`);return this.assertHarnessAdapterMatch(i,t,n,r),this.assertHarnessEnabled(i,n),i}};const $e={name:`makaio.harness`,displayName:`Harness`,version:`0.1.0`,critical:!0,storage:{registerHandlers:C(F)},create:e=>new Qe(e.bus)},L=b(`session-storage`),R=b(`session-bridge`),z=b(`session`),B=b(`session-orchestrator`),V=b(`tool-registry`),H=b(`tool-approval`),U=b(`tray-menu`),W=b(`capability`),G=b(`model-registry`),K={name:L.name,displayName:`Session Storage`,version:`0.1.0`,critical:!0,storage:{registerHandlers:C((e,n,a)=>{let s=[],d=e=>{for(let t=s.length-1;t>=0;--t)try{s[t]?.()}catch(t){console.warn(`[sessionStoragePackage] cleanup failed during ${e}:`,t)}s.length=0};try{s.push(oe(e,n,a)),s.push(i(e,n,a)),s.push(re(e,n,a)),s.push(r(e,n,a)),s.push(t(e,n,a)),s.push(o(e,n,a)),s.push(ee(e,n,a)),s.push(c(e,n)),s.push(u(e,n,a)),s.push(l(e,n)),s.push(ie(e)),s.push(te(e)),s.push(ae(e)),s.push(ne(e))}catch(e){throw d(`rollback`),e}return()=>{d(`shutdown`)}})}},q={name:R.name,displayName:`Session Bridge`,version:`0.1.0`,dependencies:[y(L.name)],critical:!0,create:e=>new a(e.bus)},J={name:z.name,displayName:`Session`,version:`0.1.0`,dependencies:[y(R.name)],critical:!0,create:e=>new s(e.bus)},Y={name:B.name,displayName:`Session Orchestrator`,version:`0.1.0`,dependencies:[y(z.name),y(M.name)],critical:!0,runtimeOwnership:{sessionOrchestrator:!0},create:e=>new n(e.bus,e.machineId)},X={name:V.name,displayName:`Tool Registry`,version:`0.1.0`,critical:!0,create:e=>new O({bus:e.bus})},Z={name:H.name,displayName:`Tool Approval`,version:`0.1.0`,dependencies:[y(V.name)],critical:!0,create:e=>new ue(e.bus)},Q={name:U.name,displayName:`Tray Menu`,version:`0.1.0`,critical:!0,create:e=>new de(e.bus)},$={name:W.name,displayName:`Capability`,version:`0.1.0`,critical:!0,create:e=>new se(e.bus)};function et(e){return{name:G.name,displayName:`Model Registry`,version:`0.1.0`,critical:!0,create:t=>new ce({bus:t.bus,fetcher:e})}}const tt=[K,q,Ke,J,Y,X,Z,Q,$,$e,M,qe];function nt(){let e=new Map;return{filter:e=>!!e.tools?.createToolsets,async processActivated(t,n,r){let i=r.getService(V);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{M as C,O as D,k as E,Q as S,A as T,Y as _,G as a,Z as b,L as c,V as d,U as f,q as g,tt as h,W as i,z as l,et as m,Te as n,R as o,$ as p,nt as r,B as s,Ce as t,H as u,J as v,j as w,X as x,K as y};