@makaio/framework 1.0.0-dev-1789609124644 → 1.0.0-dev-1790066089222

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 (361) hide show
  1. package/dist/.makaio-build.json +2 -2
  2. package/dist/{adapter-C4v_gNTI.mjs → adapter-DSRgsh2d.mjs} +1 -1
  3. package/dist/adapter-subsystem/index.d.mts +15 -7
  4. package/dist/adapter-subsystem/index.mjs +1 -1
  5. package/dist/adapters/claude/index.mjs +3 -3
  6. package/dist/adapters/config/index.d.mts +1 -1
  7. package/dist/adapters/index.d.mts +2 -2
  8. package/dist/adapters/node.d.mts +1 -1
  9. package/dist/{attempt-record-codec-DaQ3WHUs.mjs → attempt-record-codec-DXpdMgyI.mjs} +1 -1
  10. package/dist/bus/index.d.mts +120 -8
  11. package/dist/bus/index.mjs +1 -1
  12. package/dist/bus-ceMF9rsq.mjs +9 -0
  13. package/dist/client-DWSwtFyI.mjs +1 -0
  14. package/dist/clients/index.d.mts +179 -12
  15. package/dist/clients/index.mjs +1 -1
  16. package/dist/clients/managed-install.d.mts +1 -1
  17. package/dist/code-execution/worker-entry.d.mts +1 -1
  18. package/dist/code-execution/worker-entry.mjs +1 -1
  19. package/dist/{code-execution-pUF4IO462.mjs → code-execution-DWSux6k1.mjs} +1 -1
  20. package/dist/contracts/adapter/index.d.mts +2 -2
  21. package/dist/contracts/adapter/index.mjs +1 -1
  22. package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
  23. package/dist/contracts/artifact/index.d.mts +2 -2
  24. package/dist/contracts/auth/index.d.mts +2 -2
  25. package/dist/contracts/automation-trigger/index.d.mts +3 -3
  26. package/dist/contracts/canonical-model/index.d.mts +1 -1
  27. package/dist/contracts/capabilities/index.d.mts +1 -1
  28. package/dist/contracts/client/index.d.mts +3 -3
  29. package/dist/contracts/client/index.mjs +1 -1
  30. package/dist/contracts/code-execution/index.d.mts +1 -1
  31. package/dist/contracts/common/index.d.mts +1 -1
  32. package/dist/contracts/config/index.d.mts +2 -47
  33. package/dist/contracts/context-projection/index.d.mts +232 -0
  34. package/dist/contracts/context-projection/index.mjs +1 -0
  35. package/dist/contracts/extension/index.d.mts +6 -6
  36. package/dist/contracts/extension/index.mjs +1 -1
  37. package/dist/contracts/facet/index.d.mts +1 -1
  38. package/dist/contracts/harness/index.d.mts +1 -1
  39. package/dist/contracts/host/index.d.mts +1 -1
  40. package/dist/contracts/index.d.mts +43 -43
  41. package/dist/contracts/index.mjs +1 -1
  42. package/dist/contracts/materialization/index.d.mts +2 -2
  43. package/dist/contracts/model-registry/index.d.mts +1 -1
  44. package/dist/contracts/native-session-supervisor/index.d.mts +1 -1
  45. package/dist/contracts/platform/index.d.mts +1 -1
  46. package/dist/contracts/provider/index.d.mts +2 -2
  47. package/dist/contracts/reaction/index.d.mts +1 -1
  48. package/dist/contracts/session/index.d.mts +3 -3
  49. package/dist/contracts/session/index.mjs +1 -1
  50. package/dist/contracts/shared/index.d.mts +2 -2
  51. package/dist/contracts/skill/index.d.mts +1 -1
  52. package/dist/contracts/telemetry/index.d.mts +1 -1
  53. package/dist/contracts/timeout/index.d.mts +1 -1
  54. package/dist/contracts/variant/index.d.mts +1 -1
  55. package/dist/contracts/worker/index.d.mts +2 -2
  56. package/dist/contracts/workflow/index.d.mts +2 -2
  57. package/dist/{contribution-DDbHzCPF.d.mts → contribution-1GL7Rjaq.d.mts} +2 -2
  58. package/dist/credential-ref-w4ZYpYW0.d.mts +49 -0
  59. package/dist/{definition-CuaBQyde.d.mts → definition-DeIGoROj.d.mts} +1 -1
  60. package/dist/{descriptor-to-package-Dw8dnl5E.mjs → descriptor-to-package-BPIArq6N.mjs} +1 -1
  61. package/dist/{detached-extension-handle-DN3aqLyq.mjs → detached-extension-handle-W5_yfCyE.mjs} +1 -1
  62. package/dist/drizzle/0040_session_generation.sql +1 -0
  63. package/dist/drizzle/0041_session_principal_owner.sql +1 -0
  64. package/dist/drizzle/meta/_journal.json +14 -0
  65. package/dist/{execution-attempt-owner-recovery-CE_rvHKE.mjs → execution-attempt-owner-recovery-BZOEVYFH.mjs} +1 -1
  66. package/dist/extension-C6ANjR33.mjs +1 -0
  67. package/dist/{extension-context-BH31eOMv.d.mts → extension-context-pQ7Uio_s.d.mts} +44 -1
  68. package/dist/{extension-discovery-CA2IhDRo.d.mts → extension-discovery-Rup-gANp.d.mts} +114 -15
  69. package/dist/extension-kOwzAMud.mjs +1 -0
  70. package/dist/extension-namespace-CeRpt6C8.mjs +1 -0
  71. package/dist/{framework-packages-Bg4edkkM.mjs → framework-packages-U4Xhouxe.mjs} +1 -1
  72. package/dist/{hook-responses-Dq16X3Cb.d.mts → hook-responses-B882RcQc.d.mts} +48 -5
  73. package/dist/{index-Dm3d490n.d.mts → index-B2bxgKiK.d.mts} +1 -1
  74. package/dist/{index-7CVumCjj.d.mts → index-BTpkpHIS.d.mts} +65 -9
  75. package/dist/{index-Bh57xARQ.d.mts → index-BUv9gfRT.d.mts} +3 -3
  76. package/dist/{index-C6e9cwAl2.d.mts → index-BjQtqMxP2.d.mts} +4 -4
  77. package/dist/{index-B-u0Tu8X.d.mts → index-Bqi44ODz.d.mts} +37 -37
  78. package/dist/{index-CIzvBH8O.d.mts → index-C8two8wz.d.mts} +1 -1
  79. package/dist/{index-oxZt93RL.d.mts → index-CESqYf8a.d.mts} +2 -2
  80. package/dist/{index-C87P0WpY2.d.mts → index-CmCLAMNs.d.mts} +1 -1
  81. package/dist/index-CyEE1RI5.d.mts +869 -0
  82. package/dist/{index-De_oh9M-2.d.mts → index-D6Uq1btG.d.mts} +87 -10
  83. package/dist/{index-CRZ1jrxp.d.mts → index-DDSt0uS2.d.mts} +160 -12
  84. package/dist/{index-B6WkHnCQ.d.mts → index-DRxgmrad.d.mts} +1 -1
  85. package/dist/{index-U--ajOHy.d.mts → index-DUYjTfHD.d.mts} +1 -1
  86. package/dist/{index-HJkz7i4E.d.mts → index-DdJKsdya.d.mts} +188 -10
  87. package/dist/{index-B4pPwpKk.d.mts → index-DfREUyAk.d.mts} +1 -1
  88. package/dist/{index-ClKwF6LE.d.mts → index-Di-R1gmo.d.mts} +2 -2
  89. package/dist/{index-DWANFpTG.d.mts → index-Jdju2W3y.d.mts} +1 -1
  90. package/dist/{index-DQKVQPUS.d.mts → index-L6mssyeZ.d.mts} +1 -1
  91. package/dist/{index-B8v1-2-V2.d.mts → index-anIxF_eT.d.mts} +1 -1
  92. package/dist/{index-iVisrVdC2.d.mts → index-bYBnDBl32.d.mts} +539 -4
  93. package/dist/{index-Bg3WVL8n.d.mts → index-gNdH1F6r.d.mts} +531 -26
  94. package/dist/{index-zmDRR8gv2.d.mts → index-m5ZQFglW2.d.mts} +1 -1
  95. package/dist/{index-mTaFX2HH2.d.mts → index-uk8icWON2.d.mts} +419 -19
  96. package/dist/kernel/cli/index.d.mts +2 -2
  97. package/dist/kernel/cli/register.d.mts +1 -1
  98. package/dist/kernel/extension/index.d.mts +3 -2
  99. package/dist/kernel/extension/index.mjs +1 -1
  100. package/dist/kernel/index.d.mts +6 -6
  101. package/dist/kernel/index.mjs +1 -1
  102. package/dist/kernel/namespace/index.d.mts +1 -1
  103. package/dist/kernel/observability/index.d.mts +2 -2
  104. package/dist/kernel/observability/index.mjs +1 -1
  105. package/dist/kernel/providers/index.d.mts +1 -1
  106. package/dist/kernel/window/index.d.mts +1 -1
  107. package/dist/{lib-BF5XBSfw.mjs → lib-BdyGVjpO.mjs} +1 -1
  108. package/dist/{lib-Dljw2Cqh.mjs → lib-DxP3tPm9.mjs} +1 -1
  109. package/dist/load-extensions-BGfSWW_R.mjs +1 -0
  110. package/dist/{load-extensions-DGstT4_p.d.mts → load-extensions-Be_lOjm_.d.mts} +27 -14
  111. package/dist/mcp-http-server/index.mjs +1 -1
  112. package/dist/{namespace-BMdYJN_t.mjs → namespace-CqJhR19O.mjs} +1 -1
  113. package/dist/{namespace-Cmu-5_P9.d.mts → namespace-DudchWPb.d.mts} +457 -0
  114. package/dist/{namespace-BEbQb19g.d.mts → namespace-Eir1wQ_r.d.mts} +2 -2
  115. package/dist/node/bus-server/index.d.mts +1 -1
  116. package/dist/node/bus-server/server-lifecycle.d.mts +1 -1
  117. package/dist/node/transports/index.d.mts +102 -4
  118. package/dist/node/transports/index.mjs +2 -2
  119. package/dist/{orchestrator-shared-CtPB6PAr.mjs → orchestrator-shared-CF-jPH91.mjs} +1 -1
  120. package/dist/ownership-memory-handler-C-y9zQf8.mjs +1 -0
  121. package/dist/package-AlsbnlSt.mjs +159 -0
  122. package/dist/{package-CDj3F-L3.d.mts → package-CwyC-Krg.d.mts} +1 -1
  123. package/dist/{package-DYScYC0D.mjs → package-kkPGlxMm.mjs} +1 -1
  124. package/dist/package.json +1 -1
  125. package/dist/{registry-DNMjJ-Oj.mjs → registry-DtaRGU8i.mjs} +1 -0
  126. package/dist/rules/index.d.mts +1 -1
  127. package/dist/rules/index.mjs +1 -1
  128. package/dist/rules/schemas.d.mts +1 -1
  129. package/dist/runtime-bun/index.d.mts +2 -2
  130. package/dist/runtime-bun/index.mjs +1 -1
  131. package/dist/runtime-node/boot-config.d.mts +45 -0
  132. package/dist/runtime-node/boot-config.mjs +1 -0
  133. package/dist/runtime-node/code-execution/index.d.mts +2 -2
  134. package/dist/runtime-node/code-execution/index.mjs +1 -1
  135. package/dist/runtime-node/extension-discovery.d.mts +2 -2
  136. package/dist/runtime-node/extension-discovery.mjs +1 -1
  137. package/dist/runtime-node/extension-validation.d.mts +1 -1
  138. package/dist/runtime-node/extension-validation.mjs +1 -1
  139. package/dist/runtime-node/index.d.mts +345 -27
  140. package/dist/runtime-node/index.mjs +21 -24
  141. package/dist/runtime-node/makaio-config.d.mts +1 -1
  142. package/dist/runtime-node/makaio-config.mjs +1 -1
  143. package/dist/runtime-node/workflow-worker/index.d.mts +1 -1
  144. package/dist/runtime-node/workflow-worker/index.mjs +1 -1
  145. package/dist/runtime-node/workflow-worker/worker-entry.mjs +1 -1
  146. package/dist/{schema-BA1cHBbc.d.mts → schema-FY0EakKe.d.mts} +56 -0
  147. package/dist/schemas-CkxAK13D.mjs +1 -0
  148. package/dist/{schemas-CaYEFzK_.d.mts → schemas-FgVQek-j.d.mts} +2 -2
  149. package/dist/services/adapter-runtime/index.d.mts +3 -3
  150. package/dist/services/adapter-runtime/namespace.d.mts +1 -1
  151. package/dist/services/adapter-runtime/schemas.d.mts +1 -1
  152. package/dist/services/adapter-subsystem/index.d.mts +3 -3
  153. package/dist/services/adapter-subsystem/namespace.d.mts +1 -1
  154. package/dist/services/agent-runtime/index.d.mts +2 -2
  155. package/dist/services/agent-runtime/namespace.d.mts +1 -1
  156. package/dist/services/agent-runtime/schemas.d.mts +1 -1
  157. package/dist/services/automation-trigger/index.d.mts +19 -0
  158. package/dist/services/capability/index.d.mts +2 -2
  159. package/dist/services/code-execution/index.d.mts +1 -1
  160. package/dist/services/codebase/index.d.mts +2 -2
  161. package/dist/services/codebase/namespace.d.mts +1 -1
  162. package/dist/services/codebase/schemas.d.mts +1 -1
  163. package/dist/services/compression/index.d.mts +2 -2
  164. package/dist/services/compression/namespace.d.mts +1 -1
  165. package/dist/services/compression/schemas.d.mts +1 -1
  166. package/dist/services/context-projection/index.d.mts +94 -0
  167. package/dist/services/context-projection/index.mjs +1 -0
  168. package/dist/services/context-rules/index.d.mts +1 -1
  169. package/dist/services/execution-target/index.d.mts +3 -3
  170. package/dist/services/execution-target/namespace.d.mts +1 -1
  171. package/dist/services/execution-target/schemas.d.mts +1 -1
  172. package/dist/services/filesystem/index.d.mts +1 -1
  173. package/dist/services/index.d.mts +45 -40
  174. package/dist/services/index.mjs +1 -1
  175. package/dist/services/log-import/browser.d.mts +2 -2
  176. package/dist/services/log-import/index.d.mts +2 -2
  177. package/dist/services/log-import/log-import.d.mts +1 -1
  178. package/dist/services/materialization/index.d.mts +1 -1
  179. package/dist/services/model-registry/index.d.mts +1 -1
  180. package/dist/services/preferences/index.d.mts +2 -2
  181. package/dist/services/preferences/schemas.d.mts +1 -1
  182. package/dist/services/preferences/storage-namespace.d.mts +2 -2
  183. package/dist/services/provider-context/index.d.mts +1 -1
  184. package/dist/services/session/handlers/index.d.mts +1 -1
  185. package/dist/services/session/index.d.mts +9 -9
  186. package/dist/services/session/index.mjs +1 -1
  187. package/dist/services/session/messages/namespace.d.mts +1 -1
  188. package/dist/services/session/orchestrator-testing/index.d.mts +1 -1
  189. package/dist/services/session/orchestrator-testing/index.mjs +1 -1
  190. package/dist/services/session/session-events/namespace.d.mts +1 -1
  191. package/dist/services/session/storage/namespace.d.mts +1 -1
  192. package/dist/services/session/storage/schema.d.mts +1 -1
  193. package/dist/services/session/storage/schema.mjs +1 -1
  194. package/dist/services/session/testing/index.mjs +4 -2
  195. package/dist/services/session/testing/orchestrator-shared.d.mts +1 -1
  196. package/dist/services/session/testing/orchestrator-shared.mjs +1 -1
  197. package/dist/services/session/turns/namespace.d.mts +1 -1
  198. package/dist/services/session-editor/index.d.mts +1 -1
  199. package/dist/services/settings/index.d.mts +3 -3
  200. package/dist/services/settings/namespace.d.mts +232 -3
  201. package/dist/services/settings/namespace.mjs +1 -1
  202. package/dist/services/settings/storage/clients-namespace.d.mts +1 -1
  203. package/dist/services/settings/storage/index.d.mts +3 -3
  204. package/dist/services/settings/storage/providers-namespace.d.mts +1 -1
  205. package/dist/services/subagent/index.d.mts +1 -1
  206. package/dist/services/subagent-template/index.d.mts +2 -2
  207. package/dist/services/subagent-template/namespace.d.mts +1 -1
  208. package/dist/services/subagent-template/schemas.d.mts +1 -1
  209. package/dist/services/tool-approval/index.d.mts +1 -1
  210. package/dist/services/tool-approval/index.mjs +1 -1
  211. package/dist/services/tools/index.d.mts +1 -1
  212. package/dist/services/tools/index.mjs +1 -1
  213. package/dist/services/tray-menu/index.d.mts +3 -3
  214. package/dist/services/tray-menu/namespace.d.mts +1 -1
  215. package/dist/services/tray-menu/schemas.d.mts +1 -1
  216. package/dist/services/turn/index.d.mts +1 -1
  217. package/dist/services/turn/namespace.d.mts +1 -1
  218. package/dist/services/workflow-transitions/index.d.mts +1 -1
  219. package/dist/services/workflow-transitions/index.mjs +1 -1
  220. package/dist/session-BNiMZnfF.mjs +1 -0
  221. package/dist/session-CMbztxNO.mjs +95 -0
  222. package/dist/src-BZdw54VU.mjs +1 -0
  223. package/dist/{src-CbAw9kjJ.mjs → src-C0sw_Vs_.mjs} +1 -1
  224. package/dist/{src-Xn6SS74f.mjs → src-CqQSqLQI.mjs} +1 -1
  225. package/dist/storage/drizzle/client.d.mts +1 -1
  226. package/dist/storage/drizzle/client.mjs +1 -1
  227. package/dist/storage/drizzle/index.d.mts +1 -1
  228. package/dist/storage/drizzle/index.mjs +1 -1
  229. package/dist/storage/handlers/drizzle/index.d.mts +1 -1
  230. package/dist/storage/handlers/index.d.mts +1 -1
  231. package/dist/{tool-approval-service-pbkGcAV8.mjs → tool-approval-service-CRo3fZRF.mjs} +1 -1
  232. package/dist/{tools-C5Gy0IQG.mjs → tools-CKaxi3Mb.mjs} +1 -1
  233. package/dist/{transition-D-Lgbp1j.d.mts → transition-DMv8cgEd.d.mts} +2 -2
  234. package/dist/{types-CjYcHDPo2.d.mts → types-7L3BrU9m2.d.mts} +1 -1
  235. package/dist/{types-DhbllltK.d.mts → types-DNYO_Rxj.d.mts} +12 -3
  236. package/dist/ui-hooks/index.d.mts +17 -24
  237. package/dist/ui-hooks/index.mjs +1 -1
  238. package/dist/ui-kernel/index.d.mts +11 -2
  239. package/dist/ui-kernel/index.mjs +1 -1
  240. package/dist/ui-kernel/pages/schemas.d.mts +1 -1
  241. package/dist/ui-views/index.mjs +1 -1
  242. package/dist/utils/index.d.mts +31 -1
  243. package/dist/utils/index.mjs +2 -2
  244. package/dist/{view-builder-CHUTXJDl.d.mts → view-builder-DJGz9I-u.d.mts} +2 -2
  245. package/dist/workflow-engine/execution-attempt-repository.d.mts +1 -1
  246. package/dist/workflow-engine/execution-attempt-repository.mjs +1 -1
  247. package/dist/workflow-engine/index.d.mts +2 -2
  248. package/dist/workflow-engine/index.mjs +1 -1
  249. package/dist/workflow-engine/package.d.mts +1 -1
  250. package/dist/workflow-engine/package.mjs +1 -1
  251. package/dist/workflow-engine/provider-operation.d.mts +1 -1
  252. package/dist/workflow-engine/testing/conformance.d.mts +1 -1
  253. package/dist/workflow-engine/testing/conformance.mjs +1 -1
  254. package/dist/workflow-engine/testing/index.d.mts +1 -1
  255. package/dist/workflow-engine/testing/index.mjs +1 -1
  256. package/dist/workflow-engine/testing/sqlite.d.mts +1 -1
  257. package/dist/workflow-engine/testing/sqlite.mjs +1 -1
  258. package/dist/workflow-engine/workflow-orchestrator.mjs +1 -1
  259. package/dist/{workflow-transitions-C0sg3kar.mjs → workflow-transitions-t0ORS1F5.mjs} +1 -1
  260. package/dist/workflow-worker-DXCXb3g-.mjs +3 -0
  261. package/package.json +9 -1
  262. package/dist/bus-BQ64i3DN.mjs +0 -9
  263. package/dist/client-Bg3_IdaF.mjs +0 -1
  264. package/dist/extension-CfrTp3rC.mjs +0 -1
  265. package/dist/extension-CnNcY1hR.mjs +0 -1
  266. package/dist/extension-namespace-Ct9L6SKr.mjs +0 -1
  267. package/dist/index-D_j_T3nS.d.mts +0 -435
  268. package/dist/load-extensions-BVgxTj_y.mjs +0 -1
  269. package/dist/ownership-memory-handler-xex7sLiX.mjs +0 -1
  270. package/dist/schemas-ClkcU_N5.mjs +0 -1
  271. package/dist/session-6UG5udTX.mjs +0 -95
  272. package/dist/session-BB0s7c2B.mjs +0 -1
  273. package/dist/workflow-worker-ChrMIcKm.mjs +0 -2
  274. /package/dist/{adapter-binding-BxjUfkOn.d.mts → adapter-binding-CaYBrIkL.d.mts} +0 -0
  275. /package/dist/{attempt-control-evidence-7lwRG73Y.mjs → attempt-control-evidence-CHBnJoqN.mjs} +0 -0
  276. /package/dist/{attempt-fixtures-DHdYmr3o.mjs → attempt-fixtures-D3IsP0KH.mjs} +0 -0
  277. /package/dist/{authority-state-bootstrap-CvuWPywM.mjs → authority-state-bootstrap-4F5Wc_6l.mjs} +0 -0
  278. /package/dist/{base-orchestrator-CrXiMJzf.d.mts → base-orchestrator-1ofFsqUz.d.mts} +0 -0
  279. /package/dist/{bootstrap-start-client-C1ZHbv6e.mjs → bootstrap-start-client-9nOdeDYl.mjs} +0 -0
  280. /package/dist/{capability-service-CQ1aw_p-.d.mts → capability-service-CUN0MIS7.d.mts} +0 -0
  281. /package/dist/{client-ByjHcS78.d.mts → client-BY3sBW2L.d.mts} +0 -0
  282. /package/dist/{client-binary-version-verifier-C4fEAUdo.d.mts → client-binary-version-verifier-BeO4Eptw.d.mts} +0 -0
  283. /package/dist/{clients-namespace-D4BxF2Nw.d.mts → clients-namespace-D92YsbKI.d.mts} +0 -0
  284. /package/dist/{config-namespace-B1zyOYwH.d.mts → config-namespace-OEckUfVE.d.mts} +0 -0
  285. /package/dist/{create-static-mount-Dgxgi4W3.mjs → create-static-mount-4B-mNtx1.mjs} +0 -0
  286. /package/dist/{cross-spawn-BMCAyqrN.mjs → cross-spawn-DGqEuNyT.mjs} +0 -0
  287. /package/dist/{definition-ClWxAKQ2.d.mts → definition-DLJg-P4G.d.mts} +0 -0
  288. /package/dist/{esm-Ccx-3z8E.mjs → esm-DwiWcwH0.mjs} +0 -0
  289. /package/dist/{execution-attempt-repository-aabFKcXN.mjs → execution-attempt-repository-CY289HlC.mjs} +0 -0
  290. /package/dist/{execution-attempt-repository-BUah8hma.d.mts → execution-attempt-repository-DOb5V4N2.d.mts} +0 -0
  291. /package/dist/{extension-package-provenance-C7oO5JAE.mjs → extension-package-provenance-ClpN3GHp.mjs} +0 -0
  292. /package/dist/{filesystem-service-CDYoiwWY.d.mts → filesystem-service-BmavE-uO.d.mts} +0 -0
  293. /package/dist/{index-BbkcbY6d.d.mts → index--gbsE1W0.d.mts} +0 -0
  294. /package/dist/{index-DdVpWkaI.d.mts → index-B36rL4gp.d.mts} +0 -0
  295. /package/dist/{index-DM72_93s.d.mts → index-BD1SbHpP.d.mts} +0 -0
  296. /package/dist/{index-KdlZRuTp.d.mts → index-BDcK7jqJ2.d.mts} +0 -0
  297. /package/dist/{index-DAaQ--ki.d.mts → index-BQYGOXY5.d.mts} +0 -0
  298. /package/dist/{index-gAyARaKS.d.mts → index-BneZFJ7x.d.mts} +0 -0
  299. /package/dist/{index-D8ELwT5y.d.mts → index-BujgCaKt.d.mts} +0 -0
  300. /package/dist/{index-DfU8s_xP.d.mts → index-C2StVLk4.d.mts} +0 -0
  301. /package/dist/{index-BGnQ0EyD.d.mts → index-CCTzitBA.d.mts} +0 -0
  302. /package/dist/{index-CVRT01082.d.mts → index-Cj_V1aRL.d.mts} +0 -0
  303. /package/dist/{index-nkix3hP7.d.mts → index-CpN2C9jq.d.mts} +0 -0
  304. /package/dist/{index-D6p17KPs.d.mts → index-CsRPJ9FV.d.mts} +0 -0
  305. /package/dist/{index-BPNfYEA22.d.mts → index-CvdvuhTL2.d.mts} +0 -0
  306. /package/dist/{index-DmX9W3xH2.d.mts → index-D3peNmHN2.d.mts} +0 -0
  307. /package/dist/{index-DiZ4LmyE.d.mts → index-D7smT-YD.d.mts} +0 -0
  308. /package/dist/{index-B78CRVi9.d.mts → index-DEx4ZFkz.d.mts} +0 -0
  309. /package/dist/{index-CjDQn6lw.d.mts → index-DGoJayJg.d.mts} +0 -0
  310. /package/dist/{index-F7cVpFJ9.d.mts → index-DTvYp2GT.d.mts} +0 -0
  311. /package/dist/{index-Htfr-K5U2.d.mts → index-DqliLe_D2.d.mts} +0 -0
  312. /package/dist/{index-BCU5oByg.d.mts → index-DubyRZD9.d.mts} +0 -0
  313. /package/dist/{index-DjSUOMlr.d.mts → index-DwOpaQAE.d.mts} +0 -0
  314. /package/dist/{index-BZoOYV-y.d.mts → index-DxkSkszz.d.mts} +0 -0
  315. /package/dist/{index-tbjIqwa3.d.mts → index-TBJ1kIGA.d.mts} +0 -0
  316. /package/dist/{index-DXQTkwLB.d.mts → index-YOXWpZAS.d.mts} +0 -0
  317. /package/dist/{index-CXpgL3gz2.d.mts → index-aIJ7A4DC2.d.mts} +0 -0
  318. /package/dist/{index-D6liU_KS.d.mts → index-fxh7TB0q.d.mts} +0 -0
  319. /package/dist/{index-xsaaa85T.d.mts → index-qczb9Yx3.d.mts} +0 -0
  320. /package/dist/{index-C_kOkO3E.d.mts → index-zqo2mX_Z.d.mts} +0 -0
  321. /package/dist/{json-value-Ymw2f8i_.d.mts → json-value-Bjl8jzom.d.mts} +0 -0
  322. /package/dist/{jsonl-transport-Bg033Ng0.mjs → jsonl-transport-Ct1RWs0h.mjs} +0 -0
  323. /package/dist/{lib-BizqbepU.mjs → lib-DomKag_k.mjs} +0 -0
  324. /package/dist/{namespace-rJ3ycPMg.d.mts → namespace-Bhx72V7S.d.mts} +0 -0
  325. /package/dist/{namespace-BCVKdu-U.d.mts → namespace-CxEQv9iZ.d.mts} +0 -0
  326. /package/dist/{namespace-COHHDh2I.d.mts → namespace-D09uQ231.d.mts} +0 -0
  327. /package/dist/{namespace-UFcDEBJB.d.mts → namespace-D5DkpaaN.d.mts} +0 -0
  328. /package/dist/{namespace-CvK86QFk.d.mts → namespace-DHLwz4o3.d.mts} +0 -0
  329. /package/dist/{namespace-B5IFLQc-.d.mts → namespace-DHbrNQYD.d.mts} +0 -0
  330. /package/dist/{namespace-s0e215xO.d.mts → namespace-DyD06b5-.d.mts} +0 -0
  331. /package/dist/{namespace-C1pPZKtI.d.mts → namespace-Dz5_Hrz7.d.mts} +0 -0
  332. /package/dist/{namespace-Phxf0Lep.d.mts → namespace-Lkv2nyzb.d.mts} +0 -0
  333. /package/dist/{namespace-DM5vykb7.d.mts → namespace-hlhPqSsw.d.mts} +0 -0
  334. /package/dist/{namespace-DlOQmhgX.d.mts → namespace-x-gk5SmK.d.mts} +0 -0
  335. /package/dist/{namespace-f6Kz5cwX.d.mts → namespace-zusFEJPh.d.mts} +0 -0
  336. /package/dist/{orchestrator-shared--srEeSaY.d.mts → orchestrator-shared-ChU5qRSe.d.mts} +0 -0
  337. /package/dist/{packages-B98-WETs.d.mts → packages-D2s51nGU.d.mts} +0 -0
  338. /package/dist/{providers-namespace-DRcl03bo.d.mts → providers-namespace-BLVt8OyP.d.mts} +0 -0
  339. /package/dist/{runtime-inputs-DBtVIy9h.d.mts → runtime-inputs-BU_kBrP7.d.mts} +0 -0
  340. /package/dist/{schemas-CEJe8O6P.d.mts → schemas-3KTmPuZg.d.mts} +0 -0
  341. /package/dist/{schemas-D_-iXLQ9.d.mts → schemas-B-5_Dp4_.d.mts} +0 -0
  342. /package/dist/{schemas-CeItAAQM.d.mts → schemas-BLxdGZkr.d.mts} +0 -0
  343. /package/dist/{schemas-Cj6Gbqch.d.mts → schemas-BegArpU_.d.mts} +0 -0
  344. /package/dist/{schemas-Ca5RILd-2.d.mts → schemas-BzB6z9oX2.d.mts} +0 -0
  345. /package/dist/{schemas-CtzZDp29.d.mts → schemas-CBBzvIh0.d.mts} +0 -0
  346. /package/dist/{schemas-Cq1d5tid.d.mts → schemas-CD3Mq-jC.d.mts} +0 -0
  347. /package/dist/{schemas-LiiyNNpr.d.mts → schemas-Cl7fPlRv.d.mts} +0 -0
  348. /package/dist/{schemas-DJ2vMsgm.d.mts → schemas-CqawCYTY.d.mts} +0 -0
  349. /package/dist/{schemas-2_D4iVbb.d.mts → schemas-DEg6R9ph.d.mts} +0 -0
  350. /package/dist/{schemas-JjyFxrC0.d.mts → schemas-rMUsvzeJ.d.mts} +0 -0
  351. /package/dist/{server-lifecycle-DUKp1Fbf.d.mts → server-lifecycle-CTJvpdeL.d.mts} +0 -0
  352. /package/dist/{session-lineage-C3myyt5x.d.mts → session-lineage-BuGN3RZs.d.mts} +0 -0
  353. /package/dist/{storage-namespace-IvLOIP7j.d.mts → storage-namespace-B5r_ScUz.d.mts} +0 -0
  354. /package/dist/{storage-namespace-definition-Cv0XiTXb.d.mts → storage-namespace-definition-DiYr8UNl.d.mts} +0 -0
  355. /package/dist/{types-hkExapGH.d.mts → types-BSx8YYlc.d.mts} +0 -0
  356. /package/dist/{types-BYEybzjX.d.mts → types-CpEoQapk.d.mts} +0 -0
  357. /package/dist/{types-QRSc2AUU.d.mts → types-Cuhnt15L.d.mts} +0 -0
  358. /package/dist/{types-QsyX4H21.d.mts → types-DEGuc-fn.d.mts} +0 -0
  359. /package/dist/{types-BRM1AZaP.d.mts → types-DciLiPMd.d.mts} +0 -0
  360. /package/dist/{types-CsmvIK25.mjs → types-wwuw7RkB.mjs} +0 -0
  361. /package/dist/{window-registry-DeG37kt8.d.mts → window-registry-C3W2wtlX.d.mts} +0 -0
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+
3
+ //#region core/contracts/src/config/credential-ref.d.ts
4
+ /**
5
+ * Scheme prefix of every supported credential-reference format.
6
+ *
7
+ * Credential references are resolved at runtime by the active credential
8
+ * provider. Supported formats:
9
+ * - `keychain:<service>:<account>` - OS-backed secure store
10
+ * - `env:<VAR_NAME>` - Environment variable
11
+ * - `file:<path>` - File path
12
+ * - `stored:providerConfig:<configId>:<key>` - ConfigId-keyed credential store
13
+ * (resolved via `CredentialSubjects.get({ configId })`)
14
+ *
15
+ * These prefixes are the format's public vocabulary, so consumers that have to
16
+ * name a scheme — diagnostics, resolvers, documentation — read them from here
17
+ * rather than restating them. {@link CredentialRefSchema} remains the sole
18
+ * authority on whether a given string is a valid reference.
19
+ */
20
+ declare const CREDENTIAL_REF_PREFIXES: {
21
+ /** Environment-variable reference prefix. */readonly env: "env:"; /** File-path reference prefix. */
22
+ readonly file: "file:"; /** OS keychain reference prefix. */
23
+ readonly keychain: "keychain:"; /** Provider-config-keyed credential store reference prefix. */
24
+ readonly stored: "stored:providerConfig:";
25
+ };
26
+ declare const CredentialRefSchema: z.core.$ZodBranded<z.ZodString, "CredentialRef", "out">;
27
+ type CredentialRef = z.infer<typeof CredentialRefSchema>;
28
+ /**
29
+ * Build a stored credential reference keyed by provider config ID.
30
+ *
31
+ * The format is `stored:providerConfig:<configId>:<key>`. The last colon in the
32
+ * string acts as the configId/key separator, so `configId` may contain colons
33
+ * (e.g. `github:oauth-default`) but `key` must be a colon-free identifier.
34
+ * @param configId - Provider config ID; may contain colons (e.g. `github:oauth-default`)
35
+ * @param key - Credential key — must not contain colons (e.g. `apiKey`, `pat`)
36
+ * @returns Stored credential reference string
37
+ */
38
+ declare function buildStoredCredentialRef(configId: string, key: string): CredentialRef;
39
+ /**
40
+ * Parse a stored credential reference into its parts.
41
+ * @param ref - Credential reference string
42
+ * @returns Parsed parts, or `null` when the ref is not a stored credential ref
43
+ */
44
+ declare function parseStoredCredentialRef(ref: CredentialRef): {
45
+ configId: string;
46
+ key: string;
47
+ } | null;
48
+ //#endregion
49
+ export { parseStoredCredentialRef as a, buildStoredCredentialRef as i, CredentialRef as n, CredentialRefSchema as r, CREDENTIAL_REF_PREFIXES as t };
@@ -1,4 +1,4 @@
1
- import { l as JsonValue$1 } from "./json-value-Ymw2f8i_.mjs";
1
+ import { l as JsonValue$1 } from "./json-value-Bjl8jzom.mjs";
2
2
  import { z } from "zod";
3
3
  import * as _$_makaio_contracts0 from "@makaio/framework/contracts";
4
4
 
@@ -1 +1 @@
1
- function e(e){return{name:e.name,displayName:e.displayName,version:e.version,...e.surface===void 0?{}:{surface:e.surface},...e.dependencies===void 0?{}:{dependencies:e.dependencies},...e.requires===void 0?{}:{requires:e.requires},...e.provides===void 0?{}:{provides:e.provides}}}export{e as t};
1
+ function e(e){return{name:e.name,displayName:e.displayName,version:e.version,...e.surface===void 0?{}:{surface:e.surface},...e.dependencies===void 0?{}:{dependencies:e.dependencies},...e.requires===void 0?{}:{requires:e.requires},...e.provides===void 0?{}:{provides:e.provides},...e.critical===void 0?{}:{critical:e.critical}}}export{e as t};
@@ -1 +1 @@
1
- import{t as e}from"./descriptor-to-package-Dw8dnl5E.mjs";import{t}from"./jsonl-transport-Bg033Ng0.mjs";import{z as n}from"zod";import{createBusNamespace as r}from"@makaio/framework/core";const i={idle:[`starting`],starting:[`running`,`crashed`,`stopping`],running:[`stopping`,`crashed`],stopping:[`stopped`],stopped:[`starting`],crashed:[`starting`,`stopped`]};function a(e,t){if(!i[e].includes(t))throw Error(`Invalid state transition: ${e} → ${t}`)}function o(e){return new Promise(t=>{if(e.exitCode!==null||e.signalCode!==null){t(!0);return}e.once(`exit`,()=>t(!0))})}function s(e){let{spawn:n,healthTimeoutMs:r=3e4,shutdownTimeoutMs:i=5e3,restartPolicy:s=`none`,onReady:c,onExit:l,onStateChange:u}=e,d=`idle`,f;function p(e){a(d,e),d=e,u?.(d)}function m(e){let t=f;if(f=void 0,t?.close(),d===`stopping`){p(`stopped`),l?.(e);return}if(d===`running`){if(e!==0){p(`crashed`),l?.(e),(s===`on-crash`||s===`always`)&&h().catch(e=>{console.error(`[ProcessLifecycle:${n.processName??n.command}] Restart failed:`,e instanceof Error?e.message:e)});return}p(`stopping`),p(`stopped`),l?.(e),s===`always`&&h().catch(e=>{console.error(`[ProcessLifecycle:${n.processName??n.command}] Restart failed:`,e instanceof Error?e.message:e)})}}async function h(){p(`starting`);let e=t(n);f=e;let i=e.process;await new Promise((t,a)=>{let o=!1;function s(e){o||(o=!0,clearTimeout(u),d(),i.off(`exit`,h),e())}let u=setTimeout(()=>{s(()=>{e.close(),f=void 0;try{p(`crashed`)}catch{}a(Error(`Process health timeout after ${r}ms: ${n.processName??n.command}`))})},r),d=e.onMessage(()=>{s(()=>{try{p(`running`)}catch(e){a(e);return}c?.(),i.once(`exit`,m),t()})});function h(e){s(()=>{f=void 0;try{p(`crashed`)}catch{}l?.(e),a(Error(`Process exited with code ${String(e)} before signaling readiness`))})}i.once(`exit`,h)})}async function g(){if(d===`stopped`||d===`idle`)return;if(d===`crashed`){f?.close(),f=void 0,p(`stopped`);return}if(d!==`stopping`&&p(`stopping`),!f){d===`stopping`&&p(`stopped`);return}let e=f,t=e.process;if(t.exitCode!==null){e.close(),f===e&&(f=void 0),d===`stopping`&&p(`stopped`);return}t.kill(`SIGTERM`);let n;await Promise.race([o(t).then(()=>(clearTimeout(n),!0)),new Promise(e=>{n=setTimeout(()=>e(!1),i)})])||(t.kill(`SIGKILL`),await o(t)),d===`stopping`&&p(`stopped`),e.close(),f===e&&(f=void 0)}return{get transport(){return f},get state(){return d},start:h,stop:g}}const c=n.object({dataDir:n.string().optional(),machineId:n.string().optional(),makaioHome:n.string().optional(),platform:n.string().optional(),username:n.string().optional()}),l={init:{request:n.object({config:n.unknown().optional(),context:c.optional()}),response:n.object({ready:n.boolean()})},ready:n.object({ready:n.boolean(),config:n.unknown().optional(),context:c.optional()}).passthrough(),destroy:{request:n.object({reason:n.string().optional()}),response:n.object({stopped:n.boolean()})},stopped:n.object({stopped:n.boolean()}).passthrough()};function u(e,t){return e.bus.registerNamespace(r(`extension.${t}`,l)).subjects}function d(e,t){let n;return()=>(n??=u(e,t),n)}function f(e){return{dataDir:e.dataDir,machineId:e.machineId,makaioHome:e.makaioHome,platform:e.platform,username:e.username}}var p=class{descriptor;ctx;extensionPath;getLifecycleSubjects;transport=null;unregister=null;constructor(e,t,n){this.descriptor=e,this.ctx=t,this.extensionPath=n,this.getLifecycleSubjects=d(t,e.name)}async init(){let{StdioServerTransport:e}=await import(`./src-CbAw9kjJ.mjs`),{transport:t}=this.descriptor,n=this.getLifecycleSubjects(),r=new e({name:this.descriptor.name,spawn:{command:t.command,args:t.args,cwd:this.extensionPath,env:t.env,processName:this.descriptor.name}}),i=null;try{let e=this.ctx.bus.registerTransport(r);i=e.unregister,await r.connect(),await r.ready,await e.ready,this.transport=r,this.unregister=i,await this.ctx.bus.request(n.init,{config:this.ctx.config??this.descriptor.config?.defaults,context:f(this.ctx)},{timeout:t.healthTimeoutMs})}catch(e){throw i?.(),await r.disconnect(),this.transport=null,this.unregister=null,e}}async destroy(){if(this.transport!==null){let e=this.getLifecycleSubjects();try{await this.ctx.bus.request(e.destroy,{reason:`runtime-shutdown`},{timeout:this.descriptor.transport.shutdownTimeoutMs})}catch(e){console.warn(`[extensions] ${this.descriptor.name}: detached destroy lifecycle request did not complete before disconnect:`,e instanceof Error?e.message:e)}}this.unregister?.(),this.unregister=null,await this.transport?.disconnect(),this.transport=null}},m=class{descriptor;ctx;extensionPath;getLifecycleSubjects;lifecycle=null;constructor(e,t,n){this.descriptor=e,this.ctx=t,this.extensionPath=n,this.getLifecycleSubjects=d(t,e.name)}async init(){let{transport:e}=this.descriptor;if(!this.ctx.busUrl)throw Error(`[extensions] ${this.descriptor.name}: bus-websocket transport requires NodeExtensionContext.busUrl`);let t=this.getLifecycleSubjects();this.lifecycle=s({spawn:{command:e.command,args:e.args,cwd:this.extensionPath,env:{...e.env,MAKAIO_BUS_TRANSPORT:`websocket`,MAKAIO_BUS_URL:this.ctx.busUrl,MAKAIO_EXTENSION_NAME:this.descriptor.name},processName:this.descriptor.name},healthTimeoutMs:e.healthTimeoutMs,shutdownTimeoutMs:e.shutdownTimeoutMs,restartPolicy:`restartPolicy`in e?e.restartPolicy:void 0});try{await this.lifecycle.start(),await this.ctx.bus.request(t.init,{config:this.ctx.config??this.descriptor.config?.defaults,context:f(this.ctx)},{timeout:e.healthTimeoutMs})}catch(e){throw await this.lifecycle.stop(),this.lifecycle=null,e}}async destroy(){if(this.lifecycle!==null){let e=this.getLifecycleSubjects();try{await this.ctx.bus.request(e.destroy,{reason:`runtime-shutdown`},{timeout:this.descriptor.transport.shutdownTimeoutMs})}catch(e){console.warn(`[extensions] ${this.descriptor.name}: detached destroy lifecycle request did not complete before process stop:`,e instanceof Error?e.message:e)}await this.lifecycle.stop(),this.lifecycle=null}}},h=class{descriptor;ctx;extensionPath;bridge=null;constructor(e,t,n){this.descriptor=e,this.ctx=t,this.extensionPath=n}async init(){let{startMcpClientBridge:e}=await import(`@makaio/framework/mcp-http-server`),{transport:t}=this.descriptor;this.bridge=await e({command:t.command,args:t.args,env:t.env,cwd:this.extensionPath,extensionName:this.descriptor.name,bus:this.ctx.bus})}async destroy(){this.bridge!==null&&(await this.bridge.close(),this.bridge=null)}};function g(t,n){return{...e(t),create(e){return t.transport.type===`bus-stdio`?new p(t,e,n):t.transport.type===`mcp-stdio`?new h(t,e,n):new m(t,e,n)}}}export{g as createDetachedExtensionPackage};
1
+ import{t as e}from"./descriptor-to-package-BPIArq6N.mjs";import{t}from"./jsonl-transport-Ct1RWs0h.mjs";import{z as n}from"zod";import{createBusNamespace as r}from"@makaio/framework/core";const i={idle:[`starting`],starting:[`running`,`crashed`,`stopping`],running:[`stopping`,`crashed`],stopping:[`stopped`],stopped:[`starting`],crashed:[`starting`,`stopped`]};function a(e,t){if(!i[e].includes(t))throw Error(`Invalid state transition: ${e} → ${t}`)}function o(e){return new Promise(t=>{if(e.exitCode!==null||e.signalCode!==null){t(!0);return}e.once(`exit`,()=>t(!0))})}function s(e){let{spawn:n,healthTimeoutMs:r=3e4,shutdownTimeoutMs:i=5e3,restartPolicy:s=`none`,onReady:c,onExit:l,onStateChange:u}=e,d=`idle`,f;function p(e){a(d,e),d=e,u?.(d)}function m(e){let t=f;if(f=void 0,t?.close(),d===`stopping`){p(`stopped`),l?.(e);return}if(d===`running`){if(e!==0){p(`crashed`),l?.(e),(s===`on-crash`||s===`always`)&&h().catch(e=>{console.error(`[ProcessLifecycle:${n.processName??n.command}] Restart failed:`,e instanceof Error?e.message:e)});return}p(`stopping`),p(`stopped`),l?.(e),s===`always`&&h().catch(e=>{console.error(`[ProcessLifecycle:${n.processName??n.command}] Restart failed:`,e instanceof Error?e.message:e)})}}async function h(){p(`starting`);let e=t(n);f=e;let i=e.process;await new Promise((t,a)=>{let o=!1;function s(e){o||(o=!0,clearTimeout(u),d(),i.off(`exit`,h),e())}let u=setTimeout(()=>{s(()=>{e.close(),f=void 0;try{p(`crashed`)}catch{}a(Error(`Process health timeout after ${r}ms: ${n.processName??n.command}`))})},r),d=e.onMessage(()=>{s(()=>{try{p(`running`)}catch(e){a(e);return}c?.(),i.once(`exit`,m),t()})});function h(e){s(()=>{f=void 0;try{p(`crashed`)}catch{}l?.(e),a(Error(`Process exited with code ${String(e)} before signaling readiness`))})}i.once(`exit`,h)})}async function g(){if(d===`stopped`||d===`idle`)return;if(d===`crashed`){f?.close(),f=void 0,p(`stopped`);return}if(d!==`stopping`&&p(`stopping`),!f){d===`stopping`&&p(`stopped`);return}let e=f,t=e.process;if(t.exitCode!==null){e.close(),f===e&&(f=void 0),d===`stopping`&&p(`stopped`);return}t.kill(`SIGTERM`);let n;await Promise.race([o(t).then(()=>(clearTimeout(n),!0)),new Promise(e=>{n=setTimeout(()=>e(!1),i)})])||(t.kill(`SIGKILL`),await o(t)),d===`stopping`&&p(`stopped`),e.close(),f===e&&(f=void 0)}return{get transport(){return f},get state(){return d},start:h,stop:g}}const c=n.object({dataDir:n.string().optional(),machineId:n.string().optional(),makaioHome:n.string().optional(),platform:n.string().optional(),username:n.string().optional()}),l={init:{request:n.object({config:n.unknown().optional(),context:c.optional()}),response:n.object({ready:n.boolean()})},ready:n.object({ready:n.boolean(),config:n.unknown().optional(),context:c.optional()}).passthrough(),destroy:{request:n.object({reason:n.string().optional()}),response:n.object({stopped:n.boolean()})},stopped:n.object({stopped:n.boolean()}).passthrough()};function u(e,t){return e.bus.registerNamespace(r(`extension.${t}`,l)).subjects}function d(e,t){let n;return()=>(n??=u(e,t),n)}function f(e){return{dataDir:e.dataDir,machineId:e.machineId,makaioHome:e.makaioHome,platform:e.platform,username:e.username}}var p=class{descriptor;ctx;extensionPath;getLifecycleSubjects;transport=null;unregister=null;constructor(e,t,n){this.descriptor=e,this.ctx=t,this.extensionPath=n,this.getLifecycleSubjects=d(t,e.name)}async init(){let{StdioServerTransport:e}=await import(`./src-C0sw_Vs_.mjs`),{transport:t}=this.descriptor,n=this.getLifecycleSubjects(),r=new e({name:this.descriptor.name,spawn:{command:t.command,args:t.args,cwd:this.extensionPath,env:t.env,processName:this.descriptor.name}}),i=null;try{let e=this.ctx.bus.registerTransport(r);i=e.unregister,await r.connect(),await r.ready,await e.ready,this.transport=r,this.unregister=i,await this.ctx.bus.request(n.init,{config:this.ctx.config??this.descriptor.config?.defaults,context:f(this.ctx)},{timeout:t.healthTimeoutMs})}catch(e){throw i?.(),await r.disconnect(),this.transport=null,this.unregister=null,e}}async destroy(){if(this.transport!==null){let e=this.getLifecycleSubjects();try{await this.ctx.bus.request(e.destroy,{reason:`runtime-shutdown`},{timeout:this.descriptor.transport.shutdownTimeoutMs})}catch(e){console.warn(`[extensions] ${this.descriptor.name}: detached destroy lifecycle request did not complete before disconnect:`,e instanceof Error?e.message:e)}}this.unregister?.(),this.unregister=null,await this.transport?.disconnect(),this.transport=null}},m=class{descriptor;ctx;extensionPath;getLifecycleSubjects;lifecycle=null;constructor(e,t,n){this.descriptor=e,this.ctx=t,this.extensionPath=n,this.getLifecycleSubjects=d(t,e.name)}async init(){let{transport:e}=this.descriptor;if(!this.ctx.busUrl)throw Error(`[extensions] ${this.descriptor.name}: bus-websocket transport requires NodeExtensionContext.busUrl`);let t=this.getLifecycleSubjects();this.lifecycle=s({spawn:{command:e.command,args:e.args,cwd:this.extensionPath,env:{...e.env,MAKAIO_BUS_TRANSPORT:`websocket`,MAKAIO_BUS_URL:this.ctx.busUrl,MAKAIO_EXTENSION_NAME:this.descriptor.name},processName:this.descriptor.name},healthTimeoutMs:e.healthTimeoutMs,shutdownTimeoutMs:e.shutdownTimeoutMs,restartPolicy:`restartPolicy`in e?e.restartPolicy:void 0});try{await this.lifecycle.start(),await this.ctx.bus.request(t.init,{config:this.ctx.config??this.descriptor.config?.defaults,context:f(this.ctx)},{timeout:e.healthTimeoutMs})}catch(e){throw await this.lifecycle.stop(),this.lifecycle=null,e}}async destroy(){if(this.lifecycle!==null){let e=this.getLifecycleSubjects();try{await this.ctx.bus.request(e.destroy,{reason:`runtime-shutdown`},{timeout:this.descriptor.transport.shutdownTimeoutMs})}catch(e){console.warn(`[extensions] ${this.descriptor.name}: detached destroy lifecycle request did not complete before process stop:`,e instanceof Error?e.message:e)}await this.lifecycle.stop(),this.lifecycle=null}}},h=class{descriptor;ctx;extensionPath;bridge=null;constructor(e,t,n){this.descriptor=e,this.ctx=t,this.extensionPath=n}async init(){let{startMcpClientBridge:e}=await import(`@makaio/framework/mcp-http-server`),{transport:t}=this.descriptor;this.bridge=await e({command:t.command,args:t.args,env:t.env,cwd:this.extensionPath,extensionName:this.descriptor.name,bus:this.ctx.bus})}async destroy(){this.bridge!==null&&(await this.bridge.close(),this.bridge=null)}};function g(t,n){return{...e(t),create(e){return t.transport.type===`bus-stdio`?new p(t,e,n):t.transport.type===`mcp-stdio`?new h(t,e,n):new m(t,e,n)}}}export{g as createDetachedExtensionPackage};
@@ -0,0 +1 @@
1
+ ALTER TABLE `sessions` ADD `generation` integer DEFAULT 0 NOT NULL;
@@ -0,0 +1 @@
1
+ ALTER TABLE `sessions` ADD `owner_principal_id` text;
@@ -281,6 +281,20 @@
281
281
  "when": 1789233151788,
282
282
  "tag": "0039_m_mtyn7x1q",
283
283
  "breakpoints": true
284
+ },
285
+ {
286
+ "idx": 40,
287
+ "version": "6",
288
+ "when": 1789612527781,
289
+ "tag": "0040_session_generation",
290
+ "breakpoints": true
291
+ },
292
+ {
293
+ "idx": 41,
294
+ "version": "6",
295
+ "when": 1790032065513,
296
+ "tag": "0041_session_principal_owner",
297
+ "breakpoints": true
284
298
  }
285
299
  ]
286
300
  }
@@ -1 +1 @@
1
- import{a as e}from"./execution-attempt-repository-aabFKcXN.mjs";import{canonicalStringify as t}from"@makaio/framework/utils";import{ExecutionAttemptInstructionSchema as n}from"@makaio/framework/contracts";function r(e){return typeof e==`object`&&!!e}function i(e){if(!(!r(e)||Object.isFrozen(e))){Object.freeze(e);for(let t of Object.values(e))i(t)}}function a(e,t){let n=t(structuredClone(e));return i(n),n}function o(e){return a(e,e=>n.parse(e))}function s(e,t){if(typeof e!=`string`||e.length===0)throw TypeError(`${t} must be a non-empty string`)}function c(e){let{executionId:t,requestKey:n}=e;return s(t,`executionId`),s(n,`requestKey`),{executionId:t,requestKey:n,instruction:o(e.instruction)}}function l(e){let{executionAttemptId:t,bootstrapTimeoutMs:n}=e;if(s(t,`executionAttemptId`),!Number.isSafeInteger(n)||n<=0)throw RangeError(`bootstrapTimeoutMs must be a positive safe integer`);return{...c(e),executionAttemptId:t,bootstrapTimeoutMs:n}}function u(e){let{executionId:t,executionAttemptId:n}=e;return s(t,`executionId`),s(n,`executionAttemptId`),{executionId:t,executionAttemptId:n}}function d(e,n){if(n===null||n.executionId!==e.executionId)throw Error(`Corrupt execution attempt request binding`);return t(n.instruction)===t(e.instruction)?{kind:`replayed`,attempt:structuredClone(n)}:{kind:`conflict`}}function f(t,n,r){let{attempt:i,activeAttemptId:a,outcomeText:o}=n;if(i===null||i.executionId!==t.executionId)return{kind:`not-found`};if(i.executionAttemptId!==t.executionAttemptId)throw Error(`Corrupt execution attempt settlement identity`);let s={attempt:structuredClone(i),isCurrentAttempt:a===i.executionAttemptId};if(i.status!==`settled`&&i.settlementKind==null&&o===null)return{kind:`unsettled`,...s};if(i.status===`settled`&&i.settlementKind===`outcome`&&o!==null)return{kind:`outcome`,...s,result:{text:o,outcome:e(r,o)},controlObservation:structuredClone(n.controlObservation)};if(i.status===`settled`&&(i.settlementKind===`abandoned`||i.settlementKind===`infrastructure-failure`)&&o===null)return{kind:`settled-without-outcome`,...s};throw Error(`Corrupt execution attempt settlement facts`)}export{u as a,l as i,d as n,o,c as r,a as s,f as t};
1
+ import{a as e}from"./execution-attempt-repository-CY289HlC.mjs";import{canonicalStringify as t}from"@makaio/framework/utils";import{ExecutionAttemptInstructionSchema as n}from"@makaio/framework/contracts";function r(e){return typeof e==`object`&&!!e}function i(e){if(!(!r(e)||Object.isFrozen(e))){Object.freeze(e);for(let t of Object.values(e))i(t)}}function a(e,t){let n=t(structuredClone(e));return i(n),n}function o(e){return a(e,e=>n.parse(e))}function s(e,t){if(typeof e!=`string`||e.length===0)throw TypeError(`${t} must be a non-empty string`)}function c(e){let{executionId:t,requestKey:n}=e;return s(t,`executionId`),s(n,`requestKey`),{executionId:t,requestKey:n,instruction:o(e.instruction)}}function l(e){let{executionAttemptId:t,bootstrapTimeoutMs:n}=e;if(s(t,`executionAttemptId`),!Number.isSafeInteger(n)||n<=0)throw RangeError(`bootstrapTimeoutMs must be a positive safe integer`);return{...c(e),executionAttemptId:t,bootstrapTimeoutMs:n}}function u(e){let{executionId:t,executionAttemptId:n}=e;return s(t,`executionId`),s(n,`executionAttemptId`),{executionId:t,executionAttemptId:n}}function d(e,n){if(n===null||n.executionId!==e.executionId)throw Error(`Corrupt execution attempt request binding`);return t(n.instruction)===t(e.instruction)?{kind:`replayed`,attempt:structuredClone(n)}:{kind:`conflict`}}function f(t,n,r){let{attempt:i,activeAttemptId:a,outcomeText:o}=n;if(i===null||i.executionId!==t.executionId)return{kind:`not-found`};if(i.executionAttemptId!==t.executionAttemptId)throw Error(`Corrupt execution attempt settlement identity`);let s={attempt:structuredClone(i),isCurrentAttempt:a===i.executionAttemptId};if(i.status!==`settled`&&i.settlementKind==null&&o===null)return{kind:`unsettled`,...s};if(i.status===`settled`&&i.settlementKind===`outcome`&&o!==null)return{kind:`outcome`,...s,result:{text:o,outcome:e(r,o)},controlObservation:structuredClone(n.controlObservation)};if(i.status===`settled`&&(i.settlementKind===`abandoned`||i.settlementKind===`infrastructure-failure`)&&o===null)return{kind:`settled-without-outcome`,...s};throw Error(`Corrupt execution attempt settlement facts`)}export{u as a,l as i,d as n,o,c as r,a as s,f as t};
@@ -0,0 +1 @@
1
+ import{u as e}from"./kind-registration-Dzfo6kyb.mjs";import{n as t}from"./definition-Dd7bDWpP.mjs";import{n,t as r}from"./version-PuU2KG3I.mjs";import{z as i}from"zod";const a=i.object({entrypoint:i.string().startsWith(`/`,{message:`Entrypoint must be a URL path starting with "/"`})}),o=i.object({endpoint:i.string().url().optional()}),s=i.union([t,i.object({anthropic:o.optional(),openai:o.optional()}).refine(e=>Object.keys(e).length>0,{message:`ProtocolRef config object must specify at least one protocol`})]),c=i.object({id:i.string().min(1),version:n,binaryVersion:n.optional()}),l=i.object({name:i.string().min(1),displayName:i.string().min(1).optional(),description:i.string().optional(),clients:i.array(c).readonly().optional(),protocols:i.array(s).readonly(),defaultProvider:i.string().min(1).optional()}),u=i.object({id:i.string().min(1),name:i.string().min(1),description:i.string().optional(),binary:i.object({name:i.string().min(1),managed:i.boolean().optional(),version:r.optional()}).strict().refine(e=>e.managed!==!0||e.version!==void 0,{message:`binary.version is required when binary.managed is true`,path:[`version`]}).refine(e=>e.version===void 0||e.managed===!0,{message:`binary.managed must be true when binary.version is provided`,path:[`managed`]}).optional()}).strict(),d=i.object({id:i.string().min(1),name:i.string().min(1),description:i.string().optional()}),f=i.object({prefix:i.string().min(1),description:i.string().optional(),stage:i.enum([`gather`,`transform`,`action`]).optional()}),p=i.object({adapterName:i.string().min(1),displayName:i.string().min(1),logFilePattern:i.string().min(1).optional()}),m=i.object({id:i.string().min(1),label:i.string().min(1),description:i.string().optional(),icon:i.string().min(1).optional(),selectionMode:i.enum([`single`,`multi`]),messageRoles:i.array(i.enum([`user`,`assistant`])).readonly().optional()}),h=i.enum([`beforeCreate`,`beforeRevise`,`afterCreate`,`afterRevise`,`afterStatusChanged`,`afterObservationAdded`]),g=i.object({id:i.string().min(1),event:h,kind:i.string().min(1).optional(),schemaVersion:e.optional()}),_=i.object({tiles:i.boolean().optional(),widgets:i.boolean().optional(),pages:i.boolean().optional(),routes:i.boolean().optional()}),v={adapters:`adapter`,clients:`client`,providers:`provider`,hashTriggers:`hash trigger`,logImporters:`log importer`,sessionEventActions:`session event action`,artifactLifecycleHooks:`artifact lifecycle hook`};function y(e,t,n){e.addIssue({code:i.ZodIssueCode.custom,path:[t],message:`Duplicate ${v[t]} contribution identifier "${n}"`})}function b(e,t){let n=new Set,r=new Set,i=[];for(let a of e??[]){let e=t(a);if(n.has(e)){r.has(e)||(r.add(e),i.push(e));continue}n.add(e)}return i}const x=i.object({adapters:i.array(l).readonly().optional(),clients:i.array(u).readonly().optional(),providers:i.array(d).readonly().optional(),hashTriggers:i.array(f).readonly().optional(),logImporters:i.array(p).readonly().optional(),sessionEventActions:i.array(m).readonly().optional(),artifactLifecycleHooks:i.array(g).readonly().optional(),create:i.boolean().optional(),tools:i.boolean().optional(),bootstrap:i.boolean().optional(),namespace:i.boolean().optional(),configSchema:i.boolean().optional(),uiConfig:i.boolean().optional(),ui:_.optional()}).strict().superRefine((e,t)=>{for(let n of b(e.adapters,e=>e.name))y(t,`adapters`,n);for(let n of b(e.clients,e=>e.id))y(t,`clients`,n);for(let n of b(e.providers,e=>e.id))y(t,`providers`,n);for(let n of b(e.hashTriggers,e=>e.prefix))y(t,`hashTriggers`,n);for(let n of b(e.logImporters,e=>e.adapterName))y(t,`logImporters`,n);for(let n of b(e.sessionEventActions,e=>e.id))y(t,`sessionEventActions`,n);for(let n of b(e.artifactLifecycleHooks,e=>e.id))y(t,`artifactLifecycleHooks`,n)}),S=i.string().trim().min(1).transform(e=>e),C=i.object({name:i.string().min(1),required:i.boolean().optional()}),w=i.object({id:i.string(),style:i.enum([`tray-popover`,`utility`,`panel`]),width:i.number().optional(),height:i.number().optional(),singleton:i.boolean().optional(),params:i.array(C).readonly().optional()}).superRefine((e,t)=>{let n=new Set;for(let[r,a]of e.params?.entries()??[]){if(!n.has(a.name)){n.add(a.name);continue}t.addIssue({code:i.ZodIssueCode.custom,message:`Duplicate window param "${a.name}"`,path:[`params`,r,`name`]})}}),T=i.object({label:i.string(),section:i.enum([`utilities`,`tools`,`views`]).optional(),opensWindow:i.string().optional(),action:i.string().optional()}),E=i.object({name:i.string().min(1),description:i.string(),required:i.boolean().optional(),positional:i.boolean().optional(),short:i.string().regex(/^-[A-Za-z0-9]$/,`Expected a short flag like -p`).optional(),type:i.enum([`string`,`boolean`,`number`]).optional()}),D=i.object({name:i.string().min(1),description:i.string(),args:i.array(E).readonly().optional()}),O=i.object({name:i.string().min(1),description:i.string(),subcommands:i.array(D).readonly().optional(),hasInteractive:i.boolean().optional(),canProvideBus:i.boolean().optional()}),k=[`sqlite`,`postgres`];function ee(e){if(e!==void 0)return typeof e==`string`?e:e.sqlite??Object.values(e).find(e=>e!==void 0)}function te(e){if(e===void 0)return[];if(typeof e==`string`)return[e];let t=new Set;for(let n of Object.values(e))n!==void 0&&t.add(n);return[...t]}const A=i.string().min(1).refine(e=>!/^(?:[\\/]|[A-Za-z]:)/.test(e),`Expected a relative path`).refine(e=>!e.split(/[\\/]/).some(e=>e===``||e===`.`||e===`..`),`Path must not contain empty or dot segments`),j=i.object({migrations:i.union([A,i.object({sqlite:A.optional(),postgres:A.optional()}).strict().refine(e=>Object.values(e).some(e=>e!==void 0),`Per-dialect storage.migrations must declare at least one chain`)]).optional(),migrationSourceId:i.string().min(1).optional()}),M=i.object({type:i.literal(`extension`),name:i.string().min(1),version:n,optional:i.boolean().optional()});function ne(e,t=`>=0.1.0`,n){return n===void 0?{type:`extension`,name:e,version:t}:{type:`extension`,name:e,version:t,optional:n}}const N=i.discriminatedUnion(`type`,[i.object({type:i.literal(`host`),id:i.string().min(1)}),i.object({type:i.literal(`capability`),id:i.string().min(1),version:n.optional()})]),P=i.object({name:i.string().min(1).regex(/^(@[^/\\]+\/)?[^/\\]+$/,`Extension name must be a plain identifier or an npm-scoped name (@scope/pkg)`).refine(e=>(e.startsWith(`@`)?e.split(`/`):[e]).every(e=>e!==`.`&&e!==`..`),`Extension name must not be a dot-segment`),displayName:i.string().min(1),version:r,surface:i.enum([`interactive`,`headless`,`any`]).optional(),dependencies:i.array(M).readonly().optional(),requires:i.array(N).readonly().optional(),provides:i.array(S).readonly().optional(),critical:i.boolean().optional(),windows:i.array(w).readonly().optional(),tray:T.optional(),cli:O.optional(),storage:j.optional(),browser:a.optional(),contributions:x.optional()});function F(e){return Object.freeze({name:e})}function I(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.name==`string`&&typeof t.displayName==`string`&&typeof t.version==`string`}function L(e,t,n){if(Array.isArray(e)){let r=[],i=new Set;for(let t of e){if(!I(t)){n(`default export array contains an invalid MakaioExtension, skipping`);return}if(i.has(t.name)){n(`default export array contains duplicate package name '${t.name}', skipping`);return}i.add(t.name),r.push(t)}if(!r.some(e=>e.name===t)){n(`default export array must include a package named '${t}' to match descriptor identity, skipping`);return}if(r.some(e=>e.name!==t&&!e.name.startsWith(`${t}.`))){n(`default export array contains package names outside descriptor namespace '${t}', skipping`);return}return r}if(!I(e)){n(`default export is not a valid MakaioExtension or MakaioExtension[], skipping`);return}if(e.name!==t){n(`imported package name '${e.name}' does not match descriptor name '${t}', skipping`);return}return[e]}function re(e,t){return e?.[t]===!0}const R=i.object({command:i.string().min(1),args:i.array(i.string()).optional(),env:i.record(i.string(),i.string()).optional(),healthTimeoutMs:i.number().int().positive().optional(),shutdownTimeoutMs:i.number().int().positive().optional()}),ie=i.enum([`none`,`on-crash`,`always`]),z=R.extend({restartPolicy:ie.optional()}),B=i.discriminatedUnion(`type`,[z.extend({type:i.literal(`bus-stdio`)}),z.extend({type:i.literal(`bus-websocket`)}),R.extend({type:i.literal(`mcp-stdio`)})]);function ae(e){if(e.includes(`\\`)||e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`))return!1;let t=e.split(`/`),n=t.at(-1);return!n||n.includes(`.`)?!1:t.every(e=>e!==``&&e!==`.`&&e!==`..`&&e!==`src`&&e!==`dist`)}const V=i.union([i.literal(!0),i.string().min(1).refine(ae,{message:`entrypoint stem must use forward-slash path stems, must not contain empty, . or .. segments, must not include a dotted final segment, and must not contain src or dist segments`})]),H=i.object({server:V.optional(),browser:V.optional(),cli:V.optional()}).refine(e=>e.server!==void 0||e.browser!==void 0||e.cli!==void 0,{message:`at least one entrypoint must be declared`});function U(e){return e.execution===`detached`}const W=P.extend({version:r,makaio:i.object({framework:n}).strict().readonly(),entrypoints:H.optional(),execution:i.enum([`embedded`,`detached`]).optional(),transport:B.optional(),prebundleDependencies:i.array(i.string().regex(/\S/,`prebundleDependencies entries must not be blank`)).readonly().optional(),config:i.object({defaults:i.record(i.string(),i.unknown()).optional()}).optional()}).superRefine((e,t)=>{e.prebundleDependencies!==void 0&&e.entrypoints?.browser===void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`prebundleDependencies requires a browser entrypoint`,path:[`prebundleDependencies`]}),e.critical!==void 0&&e.entrypoints?.server!==void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`'critical' must not be declared alongside a server entrypoint — declare it on the exported MakaioExtension package instead`,path:[`critical`]}),e.execution===`detached`?(e.transport===void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`detached extensions must declare a 'transport' config`,path:[`transport`]}),e.entrypoints!==void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`detached extensions must not declare entrypoints`,path:[`entrypoints`]})):(e.entrypoints===void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`embedded extensions must declare at least one entrypoint`,path:[`entrypoints`]}),e.transport!==void 0&&t.addIssue({code:i.ZodIssueCode.custom,message:`embedded extensions must not declare a transport config`,path:[`transport`]}))});function G(e){return e}function K(e){return G(W.parse(e))}function q(e){let t=W.safeParse(e);return t.success?{success:!0,data:G(t.data)}:t}const J=i.discriminatedUnion(`kind`,[i.object({kind:i.literal(`configure-integration`),clientId:i.string().min(1),bundle:i.string().min(1)}),i.object({kind:i.literal(`install-extension`),extensionName:i.string().min(1)}),i.object({kind:i.literal(`open-url`),url:i.string().url()}),i.object({kind:i.literal(`run-command`),command:i.string().min(1)})]),Y=i.enum([`info`,`recommended`,`degraded`]),X=i.object({severity:Y,title:i.string().min(1),message:i.string().min(1),action:J.optional()});function oe(e){switch(e.kind){case`configure-integration`:return`Configure`;case`install-extension`:return`Install`;case`open-url`:return`Open`;case`run-command`:return`Run`}}const se=i.object({extensionName:i.string().min(1),warnings:i.array(X)});function ce(e,t){return e.parse(t??{})}const Z=/^[a-z0-9._-]$/,le=`.json`,ue=255,de=`data`,fe=new Set([`.`,`..`]),pe=new Set([`CON`,`PRN`,`AUX`,`NUL`,`COM1`,`COM2`,`COM3`,`COM4`,`COM5`,`COM6`,`COM7`,`COM8`,`COM9`,`LPT1`,`LPT2`,`LPT3`,`LPT4`,`LPT5`,`LPT6`,`LPT7`,`LPT8`,`LPT9`]);function me(e){let t=e.indexOf(`.`),n=t===-1?e:e.slice(0,t);return pe.has(n.toUpperCase())}function Q(e){return e.length===0||fe.has(e)||me(e)?!1:e.isWellFormed()}function $(e){if(!Q(e))return;let t=new TextEncoder().encode(e),n=t.length-1,r=``;for(let[e,i]of t.entries()){let t=String.fromCharCode(i),a=e===0||e===n,o=Z.test(t)&&!(a&&t===`.`);r+=o?t:`%${i.toString(16).toUpperCase().padStart(2,`0`)}`}if(!(r.length+5>255))return r}function he(e){let t=ge(e);if(t===void 0)return;let n;try{n=new TextDecoder(`utf-8`,{fatal:!0,ignoreBOM:!0}).decode(new Uint8Array(t))}catch{return}return $(n)===e?n:void 0}function ge(e){let t=[],n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`%`){if(!Z.test(r))return;t.push(r.charCodeAt(0)),n+=1;continue}let i=e.slice(n+1,n+3);if(!/^[0-9A-Fa-f]{2}$/.test(i))return;t.push(Number.parseInt(i,16)),n+=3}return t}function _e(e){return JSON.stringify([e.extensionId,e.type,e.name,e.filename])}export{k as A,l as B,F as C,M as D,D as E,te as F,f as G,g as H,ne as I,s as J,p as K,ee as L,T as M,w as N,P as O,C as P,a as Q,S as R,L as S,O as T,u as U,h as V,x as W,m as X,d as Y,_ as Z,U as _,ue as a,re as b,ce as c,X as d,Y as f,H as g,W as h,le as i,j,N as k,J as l,B as m,de as n,he as o,oe as p,o as q,Z as r,$ as s,_e as t,se as u,K as v,E as w,I as x,q as y,c as z};
@@ -1,3 +1,4 @@
1
+ import { n as CredentialRef } from "./credential-ref-w4ZYpYW0.mjs";
1
2
  import { z } from "zod";
2
3
  import { MakaioBusLike } from "@makaio/framework/core";
3
4
 
@@ -193,6 +194,36 @@ interface ExtensionServiceLifecycle {
193
194
  type ExtensionService = ExtensionServiceLifecycle;
194
195
  //#endregion
195
196
  //#region core/contracts/src/extension/extension-context.d.ts
197
+ /**
198
+ * Host-supplied capability for resolving credential references at extension init time.
199
+ *
200
+ * Provided by the Node runtime on {@link NodeExtensionContext.credentials}. Extensions
201
+ * should call this instead of opening the credential channel directly so that the
202
+ * framework can degrade gracefully in headless hosts where the product-side credential
203
+ * service is not running.
204
+ *
205
+ * Resolution semantics by scheme:
206
+ * - `env:<VAR>` — reads the named environment variable from the current process.
207
+ * - `file:<path>` — reads the file at the given absolute path.
208
+ * - `keychain:<service>:<account>` — reads macOS Keychain (other platforms return null).
209
+ * - `stored:providerConfig:<configId>:<key>` — fetches through the host's credential
210
+ * service when one is registered; returns `null` with a warning when no handler is
211
+ * registered (bare headless hosts without the credential service).
212
+ *
213
+ * Extensions **must never log resolved values** — treat them as secrets at all times.
214
+ */
215
+ interface CredentialResolver {
216
+ /**
217
+ * Resolve a credential reference to its runtime value.
218
+ *
219
+ * Returns `null` when the referenced credential is unavailable (environment
220
+ * variable unset, file missing, keychain entry absent, or `stored:` service
221
+ * not registered).
222
+ * @param ref - Branded credential reference string.
223
+ * @returns Resolved plaintext value, or `null` when unavailable.
224
+ */
225
+ resolve(ref: CredentialRef): Promise<string | null>;
226
+ }
196
227
  /**
197
228
  * Generic context provided by a host runtime when creating an extension's service.
198
229
  *
@@ -290,6 +321,18 @@ interface NodeExtensionContext<TBus extends MakaioBusLike = MakaioBusLike> exten
290
321
  * Hosts without a WebSocket bus omit it.
291
322
  */
292
323
  readonly busUrl?: string;
324
+ /**
325
+ * Host-supplied credential resolver for resolving `CredentialRef` values.
326
+ *
327
+ * Resolves `env:`, `file:`, and `keychain:` references locally; resolves
328
+ * `stored:providerConfig:<configId>:<key>` through the host's credential
329
+ * service when one is registered, returning `null` with a warning when none
330
+ * is available (bare headless hosts).
331
+ *
332
+ * Absent when the host does not provide one (e.g., browser-only contexts).
333
+ * Extensions **must never log resolved values**.
334
+ */
335
+ readonly credentials?: CredentialResolver;
293
336
  }
294
337
  //#endregion
295
- export { ExtensionServiceLifecycle as a, ExtensionWarningActionSchema as c, ExtensionWarningSchema as d, ExtensionWarningSeverity as f, extensionToken as g, ExtensionToken as h, ExtensionService as i, ExtensionWarningEntry as l, getExtensionWarningActionLabel as m, NodeExtensionContext as n, ExtensionWarning as o, ExtensionWarningSeveritySchema as p, ExtensionIdentity as r, ExtensionWarningAction as s, ExtensionContext as t, ExtensionWarningEntrySchema as u };
338
+ export { extensionToken as _, ExtensionService as a, ExtensionWarningAction as c, ExtensionWarningEntrySchema as d, ExtensionWarningSchema as f, ExtensionToken as g, getExtensionWarningActionLabel as h, ExtensionIdentity as i, ExtensionWarningActionSchema as l, ExtensionWarningSeveritySchema as m, ExtensionContext as n, ExtensionServiceLifecycle as o, ExtensionWarningSeverity as p, NodeExtensionContext as r, ExtensionWarning as s, CredentialResolver as t, ExtensionWarningEntry as u };
@@ -58,7 +58,32 @@ interface FilesystemDescriptorDiscoveryOptions {
58
58
  interface ExtensionDiscovery {
59
59
  /** Scan for extensions and return validated discoveries. */
60
60
  discover(): Promise<DiscoveredExtension[]>;
61
+ /**
62
+ * Report this strategy's raw precedence layers, highest priority first, with
63
+ * no name collision resolved yet.
64
+ *
65
+ * {@link discover} answers what the runtime loads: exactly one extension per
66
+ * name, refusing outright where no precedence can decide the winner. An
67
+ * observer — a catalog listing every installed package, including ones no
68
+ * boot would load — needs the input to that decision instead, so it can
69
+ * describe a contest rather than abort on it.
70
+ *
71
+ * Optional: a strategy that has no internal layering is one precedence layer
72
+ * by definition, which {@link discoverExtensionTiers} supplies for it.
73
+ */
74
+ discoverTiers?(): Promise<DiscoveredExtension[][]>;
61
75
  }
76
+ /**
77
+ * Read a discovery strategy's precedence layers, whether or not it reports
78
+ * them itself.
79
+ *
80
+ * A strategy without {@link ExtensionDiscovery.discoverTiers} is a single
81
+ * precedence layer — the same status {@link MergedDescriptorDiscovery} already
82
+ * gives each strategy it merges — so its resolved result is that one layer.
83
+ * @param discovery - Strategy to read.
84
+ * @returns Its layers, highest priority first.
85
+ */
86
+ declare function discoverExtensionTiers(discovery: ExtensionDiscovery): Promise<DiscoveredExtension[][]>;
62
87
  /**
63
88
  * Enumerate descriptor files from one configured filesystem path without
64
89
  * parsing them. A package-root descriptor wins over nested descriptors, and a
@@ -78,7 +103,10 @@ declare function enumerateDescriptorPaths(discoveryPath: string): Promise<string
78
103
  * Each location supports both flat (`pkg/`) and scoped (`@scope/pkg/`) packages.
79
104
  * Validates each descriptor against {@link ExtensionDescriptorSchema}.
80
105
  * Malformed or invalid descriptors are skipped with a console warning.
81
- * On name collision, earlier tiers win (local \> installed \> global-npm).
106
+ * On a cross-tier name collision, earlier tiers win (local \> installed \>
107
+ * global-npm) and the shadowed copy is reported; a collision *within* one tier
108
+ * has no precedence to appeal to and throws — see
109
+ * {@link deduplicateByDescriptorName}.
82
110
  */
83
111
  declare class FilesystemDescriptorDiscovery implements ExtensionDiscovery {
84
112
  private readonly localNodeModulesDir;
@@ -95,10 +123,17 @@ declare class FilesystemDescriptorDiscovery implements ExtensionDiscovery {
95
123
  /**
96
124
  * Scan all three extension locations and return a deduplicated list.
97
125
  *
98
- * Priority: local → installed → global-npm. Earlier tiers win on name collision.
126
+ * Priority: local → installed → global-npm. Earlier tiers win a cross-tier
127
+ * name collision; a collision within one tier throws.
99
128
  * @returns Deduplicated list of discovered extensions ordered by priority.
129
+ * @throws ExtensionNameCollisionError when one tier declares the same descriptor name twice.
100
130
  */
101
131
  discover(): Promise<DiscoveredExtension[]>;
132
+ /**
133
+ * Scan all three extension locations without resolving any name collision.
134
+ * @returns One array per tier, ordered local → installed → global-npm.
135
+ */
136
+ discoverTiers(): Promise<DiscoveredExtension[][]>;
102
137
  /**
103
138
  * Scan project-local node_modules for descriptor.json files.
104
139
  * @returns Discovered extensions from node_modules.
@@ -122,14 +157,6 @@ declare class FilesystemDescriptorDiscovery implements ExtensionDiscovery {
122
157
  * @returns List of successfully parsed and validated extensions.
123
158
  */
124
159
  private scanPatterns;
125
- /**
126
- * Deduplicate by descriptor name across priority tiers.
127
- *
128
- * Tiers are processed in priority order — earlier tiers win on name collision.
129
- * @param tiers - Extension arrays ordered by descending priority.
130
- * @returns Merged list with no duplicate names.
131
- */
132
- private deduplicate;
133
160
  }
134
161
  /**
135
162
  * Returns a pre-defined list of extensions without filesystem scanning.
@@ -148,14 +175,52 @@ declare class ExplicitDescriptorDiscovery implements ExtensionDiscovery {
148
175
  * @returns The extension list passed to the constructor.
149
176
  */
150
177
  discover(): Promise<DiscoveredExtension[]>;
178
+ /**
179
+ * Report the fixed list as the single precedence layer it is.
180
+ * @returns One layer holding the extension list passed to the constructor.
181
+ */
182
+ discoverTiers(): Promise<DiscoveredExtension[][]>;
183
+ }
184
+ /**
185
+ * Two packages inside one discovery tier declare the same descriptor name.
186
+ *
187
+ * A descriptor name is an extension identity, and packages sitting side by side
188
+ * in one tier have no precedence over each other, so there is no deterministic
189
+ * winner to pick. Discovery refuses instead of loading an arbitrary copy, and
190
+ * boot propagates this refusal rather than starting without extensions — see
191
+ * {@link deduplicateByDescriptorName} for the full tier semantics.
192
+ */
193
+ declare class ExtensionNameCollisionError extends Error {
194
+ readonly descriptorName: string;
195
+ /**
196
+ * @param descriptorName - Descriptor name claimed by both packages.
197
+ * @param claimed - Package that already claimed the name in this tier.
198
+ * @param conflicting - Package that re-declared the already claimed name.
199
+ */
200
+ constructor(descriptorName: string, claimed: DiscoveredExtension, conflicting: DiscoveredExtension);
151
201
  }
202
+ /**
203
+ * Describe a descriptor name declared twice inside one discovery tier,
204
+ * including both packages' provenance.
205
+ *
206
+ * Shared with observers that report such a collision instead of refusing on it
207
+ * (an installed-package catalog, for example), so the diagnostic an operator
208
+ * has to act on reads identically wherever it surfaces.
209
+ * @param descriptorName - Descriptor name claimed by both packages.
210
+ * @param claimed - Package that already claimed the name in this tier.
211
+ * @param conflicting - Package that re-declared the already claimed name.
212
+ * @returns Operator-readable description of the collision.
213
+ */
214
+ declare function describeSameTierNameCollision(descriptorName: string, claimed: DiscoveredExtension, conflicting: DiscoveredExtension): string;
152
215
  /**
153
216
  * Merges multiple discovery strategies into one deduplicated result.
154
217
  *
155
218
  * Discoveries run concurrently via `Promise.all` and their results are
156
- * merged in constructor order. Earlier discoveries win on name collision,
157
- * which lets hosts layer explicit descriptor sets without changing the
158
- * existing tier semantics.
219
+ * merged in constructor order. Each discovery is one precedence layer: earlier
220
+ * discoveries win a name collision against later ones, which lets hosts layer
221
+ * explicit descriptor sets without changing the existing tier semantics. A
222
+ * name declared twice *by the same discovery* has no precedence to appeal to
223
+ * and throws — see {@link deduplicateByDescriptorName}.
159
224
  */
160
225
  declare class MergedDescriptorDiscovery implements ExtensionDiscovery {
161
226
  private readonly discoveries;
@@ -165,9 +230,43 @@ declare class MergedDescriptorDiscovery implements ExtensionDiscovery {
165
230
  constructor(discoveries: ReadonlyArray<ExtensionDiscovery>);
166
231
  /**
167
232
  * Run all discoveries and merge their results by descriptor name.
168
- * @returns Deduplicated list preserving the first occurrence of each name.
233
+ * @returns Deduplicated list preserving the highest-precedence discovery's
234
+ * result for each name.
235
+ * @throws ExtensionNameCollisionError when one discovery returns the same descriptor name twice.
169
236
  */
170
237
  discover(): Promise<DiscoveredExtension[]>;
238
+ /**
239
+ * Report every merged strategy's layers, concatenated in constructor order.
240
+ *
241
+ * A strategy that layers internally contributes its own layers rather than
242
+ * one flattened result, so the precedence an observer sees is the same one
243
+ * {@link discover} resolves.
244
+ * @returns Every layer, ordered by descending priority.
245
+ */
246
+ discoverTiers(): Promise<DiscoveredExtension[][]>;
171
247
  }
248
+ /**
249
+ * Resolve descriptor-name collisions across discovery tiers.
250
+ *
251
+ * A descriptor name is an extension identity, so exactly one discovery may
252
+ * hold it. Which discovery that is depends on where the collision happens:
253
+ *
254
+ * - **Across tiers** the answer is the declared tier precedence (local \>
255
+ * installed \> global-npm): the higher tier wins. The loser is not dropped
256
+ * silently — it is reported with both provenances so an operator can see
257
+ * which copy the runtime is actually going to load.
258
+ * - **Within one tier** there is no precedence to appeal to. Two packages
259
+ * sitting side by side in the same directory claiming one identity have no
260
+ * deterministic winner — the order is whatever the filesystem returned — so
261
+ * this throws instead of picking one. The managed install paths already
262
+ * prevent this (a symlink install is keyed by descriptor name, and an npm
263
+ * install is refused when another npm package already claims the name); a
264
+ * collision here therefore means packages were placed by hand and the
265
+ * operator has to resolve the ambiguity.
266
+ * @param tiers - Discovery tiers ordered from highest to lowest priority.
267
+ * @returns Merged discoveries with the winning tier's descriptor kept per name.
268
+ * @throws ExtensionNameCollisionError when one tier contains two descriptors declaring the same name.
269
+ */
270
+ declare function deduplicateByDescriptorName(tiers: ReadonlyArray<ReadonlyArray<DiscoveredExtension>>): DiscoveredExtension[];
172
271
  //#endregion
173
- export { FilesystemDescriptorDiscovery as a, enumerateDescriptorPaths as c, ExtensionEntrypointModule as i, ExplicitDescriptorDiscovery as n, FilesystemDescriptorDiscoveryOptions as o, ExtensionDiscovery as r, MergedDescriptorDiscovery as s, DiscoveredExtension as t };
272
+ export { ExtensionNameCollisionError as a, MergedDescriptorDiscovery as c, discoverExtensionTiers as d, enumerateDescriptorPaths as f, ExtensionEntrypointModule as i, deduplicateByDescriptorName as l, ExplicitDescriptorDiscovery as n, FilesystemDescriptorDiscovery as o, ExtensionDiscovery as r, FilesystemDescriptorDiscoveryOptions as s, DiscoveredExtension as t, describeSameTierNameCollision as u };
@@ -0,0 +1 @@
1
+ import{n as e}from"./window-registry-2MZdZPdA.mjs";import{n as t}from"./namespace-BPf6AbBO.mjs";import{n}from"./extension-namespace-CeRpt6C8.mjs";import{t as r}from"./schema-introspection-_Yw9L_mB.mjs";import{z as i}from"zod";import a from"node:path";import{getErrorString as o,summarizeDiagnosticText as s}from"@makaio/framework/utils";import{MakaioError as c,createBusNamespace as l}from"@makaio/framework/core";import{EXTENSION_DATA_DIR_SEGMENT as u,ProviderDefinitionSchema as d,encodeExtensionNameAsPathSegment as f,primaryMigrationsPath as p,versionSatisfies as m}from"@makaio/framework/contracts";import{ToastSubjects as h}from"@makaio/framework/contracts/toast";import{ExtensionWarningSchema as ee,getExtensionWarningActionLabel as te}from"@makaio/framework/contracts/extension";import{TrayMenuSubjects as g}from"@makaio/framework/services/tray-menu";const _=i.object({name:i.string(),displayName:i.string()}),v=l(`kernel:boot`,{getState:{request:i.object({}),response:i.object({complete:i.boolean(),completedCount:i.number(),totalCount:i.number(),currentService:i.string().optional(),failedServices:i.array(i.string()),skippedServices:i.array(i.string()).default([]),totalDurationMs:i.number().optional()})},"service.starting":_,"service.ready":_.extend({durationMs:i.number().int().nonnegative()}),"service.failed":_.extend({errorMessage:i.string()}),"service.skipped":_.extend({reason:i.string()}),progress:i.object({completedCount:i.number(),totalCount:i.number(),currentService:i.string().optional()}),complete:i.object({totalDurationMs:i.number(),failedServices:i.array(i.string())})}),y=v.subjects;var b=class extends Error{reason;constructor(e){super(e),this.name=`ServiceSkipError`,this.reason=e}};function x(e){return{name:e.name,displayName:e.displayName}}var ne=class{bus;state;cleanup;constructor(e,t){this.bus=e,this.state={complete:!1,completedCount:0,totalCount:t,failedServices:[],skippedServices:[],startedAt:Date.now()},this.cleanup=this.bus.on(y.getState,e=>{e.setResult({complete:this.state.complete,completedCount:this.state.completedCount,totalCount:this.state.totalCount,...this.state.currentService===void 0?{}:{currentService:this.state.currentService},failedServices:[...this.state.failedServices],skippedServices:[...this.state.skippedServices],...this.state.totalDurationMs===void 0?{}:{totalDurationMs:this.state.totalDurationMs}})})}dispose(){this.cleanup()}starting(e){let t=x(e);this.state.currentService=t.displayName,this.state.currentServiceStartedAt=Date.now(),this.bus.emit(y.service.starting,t).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.starting emit failed for "${t.name}":`,e)})}ready(e){let t=x(e);this.state.completedCount+=1;let n=this.state.currentServiceStartedAt===void 0?0:Math.max(0,Date.now()-this.state.currentServiceStartedAt);this.bus.emit(y.service.ready,{...t,durationMs:n}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.ready emit failed for "${t.name}":`,e)}),this.emitProgress()}failed(e,t){let n=x(e);this.state.completedCount+=1,this.state.failedServices.push(n.name),this.bus.emit(y.service.failed,{...n,errorMessage:t}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.failed emit failed for "${n.name}":`,e)}),this.emitProgress()}skipped(e,t){let n=x(e);this.state.completedCount+=1,this.state.skippedServices.push(n.name),this.bus.emit(y.service.skipped,{...n,reason:t}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.service.skipped emit failed for "${n.name}":`,e)}),this.emitProgress()}complete(){this.state.complete=!0,delete this.state.currentService,delete this.state.currentServiceStartedAt,this.state.totalDurationMs=Date.now()-this.state.startedAt,this.bus.emit(y.complete,{totalDurationMs:this.state.totalDurationMs,failedServices:[...this.state.failedServices]}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.complete emit failed:`,e)})}emitProgress(){this.bus.emit(y.progress,{completedCount:this.state.completedCount,totalCount:this.state.totalCount,...this.state.currentService===void 0?{}:{currentService:this.state.currentService}}).catch(e=>{console.warn(`[ExtensionCoordinator] boot.progress emit failed:`,e)})}};function re(e){return{subject:`wiring.apply`,$meta:{namespace:`client:${e}`,isRequest:!0,local:!1,channel:!1,payload:{request:{},response:{}}}}}const S=`action`;function C(e,t){return`${e}:${t}`}function ie(e,t,n){return e.on(h.interacted,r=>{let{toastId:i,actionId:a}=r.payload,o=C(i,a),s=t.get(o);s&&ae(e,s,i,n).catch(e=>{console.error(`[ExtensionCoordinator] Warning action dispatch failed for toast "${i}":`,e)})})}async function ae(e,t,n,r){switch(t.kind){case`configure-integration`:await se(e,t.clientId,n,r);break;case`open-url`:console.info(`[ExtensionCoordinator] Toast "${n}" open-url action not routable from runtime layer: ${t.url}`);break;case`run-command`:console.info(`[ExtensionCoordinator] Toast "${n}" run-command action not routable from runtime layer: ${t.command}`);break;case`install-extension`:console.info(`[ExtensionCoordinator] Toast "${n}" install-extension action not routable from runtime layer: ${t.extensionName}`);break;default:oe(t)}}function oe(e){throw Error(`[ExtensionCoordinator] Unsupported warning action: ${JSON.stringify(e)}`)}async function se(e,t,n,r){let i=re(t),a=await e.requestOptional(i,{scope:`user`,makaioCommand:r});if(!a.handled){console.warn(`[ExtensionCoordinator] Toast "${n}" configure-integration: no wiring handler for client "${t}". Is the client package loaded?`);return}let{applied:o,skipped:s}=a.data;console.info(`[ExtensionCoordinator] Toast "${n}" configure-integration: wired client "${t}" — ${o} applied, ${s} skipped.`)}function ce(e){return e.map(e=>({name:e.name,description:e.description,hasInteractive:!!e.interactive,subcommands:e.subcommands.map(e=>({name:e.name,description:e.description,args:r(e.schema)}))}))}async function le(e,t,n){let{command:r,subcommand:i,args:a}=e,o=t.find(e=>e.name===r);if(!o)return{exitCode:1,stdout:[],stderr:[`Unknown command: ${r}`]};let s=o.subcommands.find(e=>e.name===i);if(!s)return{exitCode:1,stdout:[],stderr:[`Unknown subcommand: ${i}`]};let c=s.schema.safeParse(a??{});if(!c.success)return{exitCode:1,stdout:[],stderr:[`Validation failed:`,...c.error.issues.map(e=>` ${e.path.join(`.`)||`(root)`}: ${e.message}`)]};if(o.beforeRun)try{let e=await o.beforeRun({subcommandName:i,args:c.data??{},bus:n});if(!e.proceed)return{exitCode:e.exitCode??1,stdout:[],stderr:[e.message]}}catch(e){return{exitCode:1,stdout:[],stderr:[`beforeRun hook failed: ${e instanceof Error?e.message:String(e)}`]}}let l=[],u=[],d={write:e=>l.push(e),error:e=>u.push(e)},f=0,p=new AbortController().signal;try{await s.handler({args:c.data,bus:n,output:d,signal:p,setExitCode:e=>{f=e}})}catch(e){f===0&&(f=1),u.push(e instanceof Error?e.message:String(e))}return{exitCode:f,stdout:l,stderr:u}}function w(e){let r=[];return r.push(e.bus.on(n.list,t=>{t.setResult({extensions:e.list()})})),r.push(e.bus.on(n.get,t=>{t.setResult({extension:e.getInfo(t.payload.name)})})),r.push(e.bus.on(n.setEnabled,async t=>{let{success:n,outcome:r,reason:i}=await e.handleSetEnabled(t.payload.name,t.payload.enabled);t.setResult({success:n,outcome:r,...i!==void 0&&{reason:i}})})),r.push(e.bus.on(n.catalog,async t=>{t.setResult({entries:await e.getInstalledCatalog()})})),r.push(e.bus.on(n.contributions.catalog,t=>{let n=[],r=[];for(let[t,i]of e.entries)if(i.state===`active`){for(let e of i.pkg.providers??[])n.push({packageName:t,definition:d.parse(e)});for(let e of i.pkg.clients??[])r.push({packageName:t,definition:e})}t.setResult({providers:n,clients:r})})),r.push(e.bus.on(t.listContributions,t=>{t.setResult({contributions:ce(e.cliContributions)})})),r.push(e.bus.on(t.execute,async t=>{t.setResult(await le(t.payload,e.cliContributions,e.bus))})),r.push(e.bus.on(n.warnings.list,t=>{let{extensionName:n}=t.payload;if(n!==void 0){let r=e.entries.get(n),i=r&&r.warnings.length>0?[{extensionName:n,warnings:[...r.warnings]}]:[];t.setResult({entries:i});return}let r=[];for(let[t,n]of e.entries)n.warnings.length>0&&r.push({extensionName:t,warnings:[...n.warnings]});t.setResult({entries:r})})),r}async function T(e){for(let[t,n]of e.entries)n.state===`active`&&await D(e,t,n)}function ue(e){if(e&&E(e))return[{id:S,label:te(e)}]}function E(e){return e.kind===`configure-integration`}function de(e,t){let n=`${t}:`;for(let t of e.keys())t.startsWith(n)&&e.delete(t)}async function D(e,t,n){de(e.warningActionMap,t);let r=n.warnings.filter(e=>e.severity===`degraded`);if(r.length!==0)for(let i=0;i<r.length;i++){let a=r[i];console.warn(`[${t}] ⚠ ${a.title}: ${a.message}`);let o=`${t}:${a.title}:${i}`,s=ue(a.action);try{await e.bus.emit(h.show,{level:`warning`,title:a.title,message:`${n.pkg.displayName}: ${a.message}`,toastId:o,durationMs:null,...s&&{actions:s}}),a.action&&E(a.action)&&e.warningActionMap.set(C(o,S),a.action)}catch(e){console.warn(`[${t}] toast emission failed for warning "${a.title}":`,e)}}}function O(e,t){let{pkg:n,state:r,error:i,enabled:a,extensionManaged:o}=e,s=o&&t?t(n.name)!==!1:void 0;return{name:n.name,displayName:n.displayName,state:r,...n.surface===void 0?{}:{surface:n.surface},enabled:a,extensionManaged:o,...s===void 0?{}:{persistedEnabled:s},critical:n.critical??!1,...n.browser===void 0?{}:{browser:n.browser},...i===void 0?{}:{error:i}}}function fe(e){return Object.freeze({extensionName:e})}var k=class extends c{extensionName;source;constructor(e){super(`Operator config for extension "${e.extensionName}" (source: ${e.source}) ${e.summary}`),this.extensionName=e.extensionName,this.source=e.source,e.cause!==void 0&&(this.cause=e.cause)}};const pe={unreadable:`could not be read`,"invalid-json":`is not valid JSON`,"not-an-object":`is not a JSON object`};function me(e){let{name:t,configSchema:n,configDefaults:r,storedConfig:i,operatorEntry:a,mode:c}=e,l=he(t,a,c);if(!n)return{config:void 0,usedSchemaDefaults:!1};let u={...r??{},...i??{},...l?.config??{}};try{return{config:n.parse(u),usedSchemaDefaults:!1}}catch(e){let r=s(o(e));if(c===`activate`&&l!==void 0)throw new k({extensionName:t,source:l.source,summary:`is part of a configuration rejected by the extension's config schema: ${r}`,cause:e});console.warn(`[ExtensionCoordinator] Config parse failed for "${t}", starting with schema defaults:`,r);try{return{config:n.parse({}),usedSchemaDefaults:!0}}catch{return console.warn(`[ExtensionCoordinator] Fallback config parse also failed for "${t}" — config will be absent`),{config:void 0,usedSchemaDefaults:!1}}}}function he(e,t,n){if(t===void 0)return;if(t.kind===`config`)return t;let r=new k({extensionName:e,source:t.source,summary:ge(t)});if(n===`activate`)throw r;console.warn(`[ExtensionCoordinator] ${r.message} — resolving without the operator layer`)}function ge(e){let t=pe[e.reason];if(e.detail===void 0)return t;let n=s(e.detail);return n.length===0?t:`${t}: ${n}`}function A(e,t,n,r){return j(e,t,n,r).config}function j(e,t,n,r){let i;if(n.pkg.configSchema)try{i=e.loadConfig?.(t)}catch(e){console.error(`[ExtensionCoordinator] loadConfig threw for "${t}":`,e)}return me({name:t,configSchema:n.pkg.configSchema,configDefaults:n.configDefaults,storedConfig:i,operatorEntry:e.operatorConfig?.get(t),mode:r})}function M(e){if(f(e)===void 0)return`Extension "${e}" cannot be encoded as a filesystem path segment and therefore has no addressable data directory. Valid extension names must be non-empty, must not be '.' or '..', must be well-formed Unicode, must not be a reserved Windows device basename (CON, NUL, COM1, etc.), and must encode within the filesystem component length limit.`}function N(e,t,n){if(!e.extensionContextBase)throw Error(`ExtensionCoordinator: extensionContextBase is required to start extensions with a create factory. Provide it via the constructor.`);let{extensionName:r}=t.identity,i=f(r);if(i===void 0)throw Error(`ExtensionCoordinator: extension "${r}" cannot be encoded as a filesystem path segment and therefore has no addressable data directory. Valid extension names must be non-empty, must not be '.' or '..', must be well-formed Unicode, must not be a reserved Windows device basename (CON, NUL, COM1, etc.), and must encode within the filesystem component length limit.`);return{...e.extensionContextBase,bus:e.bus,identity:t.identity,dataDir:a.join(e.extensionContextBase.makaioHome,u,i),getService:t=>e.getExtensionService(t.name),signal:e.signal,hasExtension:e.hasActiveExtension,...n===void 0?{}:{config:n}}}function _e(e){return{adapters:!!e.adapters?.length,tools:!!e.tools,hashTriggers:!!e.hashTriggers,providers:!!e.providers?.length,clients:!!e.clients?.length,ui:!!e.ui,storage:!!e.storage,sessionEventActions:!!e.sessionEventActions}}function P(e,t,r){let i=t.state;t.state=r,e.emit(n.stateChanged,{name:t.pkg.name,displayName:t.pkg.displayName,from:i,to:r,...t.error===void 0?{}:{error:t.error},contributes:_e(t.pkg)}).catch(e=>{console.error(`[ExtensionCoordinator] stateChanged emit failed for "${t.pkg.name}":`,e)})}async function F(e,t,n,r,i){return i===`activated`?(await I(e,t,n,r),[]):ve(e,n)}async function I(e,t,n,r){let i=[];try{for(let a of e){if(a.filter&&!a.filter(r.pkg))continue;let e=N(t,r,A(t,n,r,`activate`));await a.processActivated(n,r.pkg,e),i.push(a)}}catch(e){for(let e of i.reverse())if(e.processStopped)try{await e.processStopped(n)}catch(e){console.error(`[ExtensionCoordinator] Contribution processor rollback error for "${n}":`,e)}throw e}}async function ve(e,t){let n=[];for(let r of[...e].reverse())if(r.processStopped)try{await r.processStopped(t)}catch(e){n.push(e)}return n}async function L(e,t){if(!t.tray)return;let n=be(t);await e.request(g.register,{entry:n})}async function ye(e,t){t.tray&&await e.request(g.unregister,{packageName:t.name,entryId:R(t.tray)})}function be(e){let t=e.tray;if(!t)throw Error(`[tray-menu-entry-bridge] extension "${e.name}" does not declare a tray entry`);return{packageName:e.name,entryId:R(t),label:t.label,section:t.section??`views`,priority:50,enabled:!0,metadata:t.opensWindow?{registrationId:`${e.name}:${t.opensWindow}`}:t.action?{action:t.action}:void 0}}function R(e){return e.opensWindow??e.action??`default`}async function xe(e,t,r){let i=e.entries.get(t);if(!i)return`rejected`;let a=r?await Te(e,t,i):await De(e,t,i);return a===`rejected`||e.bus.emit(n.enabledChanged,{name:t,enabled:r}).catch(e=>{console.error(`[ExtensionCoordinator] enabledChanged emit failed for "${t}":`,e)}),a}async function Se(e,t,n,r){if(r.kind===`resolved`&&r.record?.collidesWith!==void 0)return{success:!1,outcome:`rejected`,reason:`name-collision`};let i=e.entries.get(t);return i?.extensionManaged?Ce(e,t,n,i):we(e,t,n,i!==void 0,r)}async function Ce(e,t,n,r){if(!e.persistEnabled)throw Error(`Cannot set enablement preference for "${t}": this runtime has no durable enablement store, so extension enablement is not persistable here.`);return!n&&r.pkg.critical?{success:!1,outcome:`rejected`,reason:`critical`}:(await e.persistEnabled(t,n),(r.state===`active`||r.state===`initializing`?!0:r.state===`discovered`?r.enabled:!1)===n?{success:!0,outcome:`applied`}:{success:!1,outcome:`restart-required`,reason:`runtime-state-diverges`})}async function we(e,t,n,r,i){if(!e.persistEnabled)throw Error(`Cannot set enablement preference for "${t}": this runtime has no durable enablement store, so extension enablement is not persistable here.`);if(i.kind!==`resolved`){if(r)throw Error(`Cannot set enablement preference for "${t}": framework packages are always loaded and have no operator enablement preference.`);return{success:!1,outcome:`rejected`,reason:`no-catalog`}}let a=i.record;if(!a)return{success:!1,outcome:`rejected`,reason:`not-installed`};if(!n&&a.critical)return{success:!1,outcome:`rejected`,reason:`critical`};if(!n&&a.criticalityUnknown)return{success:!1,outcome:`rejected`,reason:`criticality-unknown`};await e.persistEnabled(t,n);let o=r?`framework-package-shadowed`:`not-loaded`;return n?{success:!1,outcome:`restart-required`,reason:o}:{success:!0,outcome:`applied`,reason:o}}function z(e,t,n,r){return t.error=r,console.error(`[ExtensionCoordinator] Cannot re-enable "${n}":`,r),P(e.bus,t,`failed`),`rejected`}async function Te(e,t,n){if(n.state===`active`)return n.enabled=!0,`applied`;if(n.state!==`stopped`&&n.state!==`failed`&&n.state!==`skipped`)return`rejected`;if(n.state===`skipped`&&!n.surfacesCollected)return n.error=`Extension "${t}" was disabled at boot and never started this process; a restart is required to activate it.`,`rejected`;let{pkg:r}=n,i,a=(r.dependencies??[]).filter(t=>{if(t.optional)return!1;let n=e.entries.get(t.name);return!n||n.state!==`active`});if(a.length>0)return z(e,n,t,`Required dependencies not active: ${a.map(e=>e.name).join(`, `)}`);let s=M(n.identity.extensionName);if(s!==void 0)return z(e,n,t,s);n.enabled=!0,n.error=void 0,P(e.bus,n,`initializing`);let c;try{c=A(e,t,n,`activate`)}catch(r){return z(e,n,t,`Config resolution failed: ${o(r)}`)}if(r.storage?.registerHandlers&&e.db!==void 0)try{let t=N(e,n,c),a=r.storage.registerHandlers(e.bus,e.db,t);typeof a==`function`&&(i=a,n.storageCleanup=a)}catch(r){return n.error=o(r),console.error(`[ExtensionCoordinator] Extension "${t}" storage re-registration failed:`,r),P(e.bus,n,`failed`),`rejected`}if(!await Ee(e,t,n,c,i))return`rejected`;try{await F(e.contributionProcessors,e,t,n,`activated`)}catch(r){return await B(t,n.service,i,n),n.service=void 0,n.error=o(r),console.error(`[ExtensionCoordinator] Extension "${t}" contribution processing failed:`,r),P(e.bus,n,`failed`),`rejected`}P(e.bus,n,`active`);try{await L(e.bus,n.pkg)}catch(e){console.warn(`[ExtensionCoordinator] Failed to register tray entry for ${t}:`,e)}return await e.runHealthCheck(t),await e.emitWarningsForEntry(t,n),`applied`}async function Ee(e,t,n,r,i){let{create:a}=n.pkg;if(!a)return!0;let s;try{return s=await a(N(e,n,r)),await s.init?.(),n.service=s,!0}catch(r){return await B(t,s,i,n),r instanceof b?n.pkg.critical?(n.error=`Critical extension cannot skip startup: ${r.reason}`,console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,n.error),P(e.bus,n,`failed`),!1):(n.error=r.reason,P(e.bus,n,`skipped`),!1):(n.error=o(r),console.error(`[ExtensionCoordinator] Extension "${t}" failed to re-initialize:`,r),P(e.bus,n,`failed`),!1)}}async function De(e,t,r){if(r.state===`initializing`)return`rejected`;if(r.state!==`active`)return r.enabled=!1,`applied`;let i=Array.from(e.entries.entries()).filter(([e,n])=>e===t||n.state!==`active`?!1:n.pkg.dependencies?.some(e=>!e.optional&&e.name===t)??!1).map(([e])=>e);if(i.length>0)return r.error=`Cannot disable "${t}" while active dependents remain: ${i.join(`, `)}`,console.error(`[ExtensionCoordinator] ${r.error}`),`rejected`;r.enabled=!1,r.error=void 0;let a=[];try{a.push(...await F(e.contributionProcessors,e,t,r,`stopped`))}catch(e){a.push(e),console.error(`[ExtensionCoordinator] Contribution processor error during disable of "${t}":`,e)}if(r.service)try{await r.service.destroy?.()}catch(e){a.push(e),console.error(`[ExtensionCoordinator] Error during disable destroy of "${t}":`,e)}finally{r.service=void 0}if(r.storageCleanup)try{r.storageCleanup()}catch(e){a.push(e),console.error(`[ExtensionCoordinator] Storage cleanup error during disable of "${t}":`,e)}finally{r.storageCleanup=void 0}try{await ye(e.bus,r.pkg)}catch(e){a.push(e),console.error(`[ExtensionCoordinator] Failed to unregister tray entry for ${t}:`,e)}if(a.length>0){let e=a.map(e=>o(e)).join(`; `);r.error=o(AggregateError(a,`Extension "${t}" disabled with ${a.length} teardown failure(s): ${e}`))}P(e.bus,r,`stopped`),r.warnings=[];try{await e.bus.emit(n.warnings.changed,{extensionName:t,warnings:[]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}return`applied`}async function B(e,t,n,r){try{await t?.destroy?.()}catch(t){console.error(`[ExtensionCoordinator] Service cleanup error after failed enable of "${e}":`,t)}try{n?.()}catch(t){console.error(`[ExtensionCoordinator] Storage cleanup error after failed enable of "${e}":`,t)}finally{r.storageCleanup=void 0}}const Oe=new Set;function V(e,t=Oe){let n=new Map,r=new Set;for(let i of e){let e=n.get(i.name);if(e===void 0){n.set(i.name,i);continue}if(!t.has(i.name)||r.has(i.name))throw Error(ke(i.name,e,i));r.add(i.name),console.info(`[ExtensionCoordinator] Extension "${i.name}" overrides the framework package registered under the same name`),n.delete(i.name),n.set(i.name,i)}return[...n.values()]}function ke(e,t,n){return`Extension name collision: "${e}" is registered twice (${H(t)} and ${H(n)}). Extension package names are identities and cannot be shared — uninstall or rename one of them. Reaching load with two registrations under one name means discovery or boot selection admitted both, which they must not.`}function H(e){return`"${e.displayName}" v${e.version}`}function U(e,t,n){let r=new Set(e.map(e=>e.name)),i=e.filter(e=>Ae(e,t,n)),a=new Map(i.map(e=>[e.name,e])),o=new Set(a.keys()),s=!0;for(;s;){s=!1;for(let e of o)(a.get(e).dependencies??[]).some(e=>!e.optional&&r.has(e.name)&&!o.has(e.name))&&(o.delete(e),s=!0)}return i.filter(e=>o.has(e.name))}function Ae(e,t,n){if(!Me(e,t))return!1;let r=e.requires;return!r||r.length===0||!n?!0:r.every(e=>{switch(e.type){case`host`:return n.hosts.has(e.id);case`capability`:return n.capabilities.has(e.id)?e.version===void 0?!0:je(n,e.id,e.version):!1}})}function je(e,t,n){let r=e.capabilityVersions?.get(t);return r!==void 0&&m(r,n)}function Me(e,t){return e.surface===void 0||e.surface===`any`||e.surface===t}function Ne(e,t){let n=e.entries.get(t.name)?.extensionManaged??!0,r=n?e.loadEnabled?.(t.name):void 0;return{...t,extensionManaged:n,...r!==void 0&&{persistedEnabled:r}}}async function Pe(e){return e.installedCatalog?(await e.installedCatalog()).map(t=>Ne(e,t)):null}async function Fe(e,t){return e.installedCatalog?{kind:`resolved`,record:W(await e.installedCatalog(),t,e.surface)}:{kind:`unavailable`}}function W(e,t,n){let r=e.filter(e=>e.name===t),i=r.filter(e=>e.shadowedBy===void 0),a=i.length>0?i:r,o=a.filter(e=>e.surface===void 0||e.surface===n),s=i.length>0&&o.length>0,c=o.length>0?o:a,[l,...u]=c;if(l!==void 0)return Le(u.reduce(Re,l),Ie(r,c,s))}function Ie(e,t,n){let[r,...i]=t;if(r!==void 0)return e.length===1?r.collidesWith:n&&i.length>0?r.collidesWith??i[0]?.origin:t.find(e=>e.collisionIgnoresSurface===!0)?.collidesWith}function Le(e,t){let{collidesWith:n,collisionIgnoresSurface:r,...i}=e;return{...i,...t!==void 0&&{collidesWith:t}}}function Re(e,t){let n=e.critical===!0||t.critical===!0?!0:e.critical??t.critical,r=e.criticalityUnknown===!0||t.criticalityUnknown===!0?!0:e.criticalityUnknown??t.criticalityUnknown;return{...e,...n!==void 0&&{critical:n},...r!==void 0&&{criticalityUnknown:r}}}function ze(e,t={}){let n=Be(e);return Ve(e,n,new Map(e.map(e=>[e.name,e])),t),We(n,Ue(e,n),t)}function Be(e){let t=new Set;for(let n of e){if(t.has(n.name))throw Error(`ExtensionCoordinator: duplicate package name detected: "${n.name}"`);t.add(n.name)}return t}function Ve(e,t,n,r){for(let i of e)He(i,t,n,r)}function He(e,t,n,r){let i=r.enabledNames===void 0||r.enabledNames.has(e.name),a=e.dependencies??[],o=a.filter(e=>!e.optional&&!t.has(e.name));o.length>0&&G(r,i,e.name,`ExtensionCoordinator: package "${e.name}" declares missing dependencies: ${o.map(e=>e.name).join(`, `)}`);for(let t of a){let a=n.get(t.name);if(a===void 0)continue;let o=a.version;m(o,t.version)||G(r,i,e.name,`ExtensionCoordinator: package "${e.name}" dependency "${t.name}" version ${o} does not satisfy ${t.version}`)}}function G(e,t,n,r){if(t)throw Error(r);e.onSoftValidationWarning?.(n,r)}function Ue(e,t){let n=new Map;for(let r of e){let e=(r.dependencies??[]).filter(e=>t.has(e.name)).map(e=>e.name);n.set(r.name,new Set(e))}return n}function We(e,t,n){let r=[];for(let[e,n]of t)n.size===0&&r.push(e);let i=[],a=new Set;for(;r.length>0;){let e=r.shift();if(!a.has(e)){a.add(e),i.push(e);for(let[n,i]of t)i.has(e)&&(i.delete(e),i.size===0&&!a.has(n)&&r.push(n))}}if(i.length===e.size)return i;let o=[...e].filter(e=>!a.has(e));if((n.enabledNames===void 0?o:o.filter(e=>n.enabledNames.has(e))).length>0)throw Error(`ExtensionCoordinator: circular dependency detected among: ${o.join(`, `)}`);let s=`ExtensionCoordinator: circular dependency detected among disabled packages: ${o.join(`, `)}`;for(let e of o)n.onSoftValidationWarning?.(e,s),i.push(e);return i}function Ge(e,t,n){let r=new Set;for(let i of e){if(!(t?.has(i.name)??!0)){r.add(i.name);continue}let e=n?.(i.name)!==!1;(e||i.critical)&&r.add(i.name),!e&&i.critical&&console.warn(`[ExtensionCoordinator] Critical extension "${i.name}" is marked disabled in the enablement store but will start anyway to keep the runtime functional. Remove it from the disabled list in config/extensions.json to silence this warning.`)}return{enabled:r}}function K(e){let t=new Set(e.map(({name:e})=>e)),n=new Map(e.map(({name:e,entry:t})=>[e,t])),r=new Set(e.filter(({entry:e})=>e.enabled).map(({name:e})=>e)),i=[],a=!0;for(;a;){a=!1;for(let e of r){let o=(n.get(e).pkg.dependencies??[]).filter(e=>!e.optional&&t.has(e.name)&&!r.has(e.name)).map(e=>e.name);o.length!==0&&(r.delete(e),a=!0,i.push({name:e,missingDependencies:o}))}}return{closed:r,exclusions:i}}async function Ke(e){if(!e.runMigrations)return;let t=[];for(let n of e.loadOrder){let r=e.entries.get(n);if(!r)throw Error(`Extension "${n}" is in loadOrder but missing from entries`);t.push({name:n,entry:r})}let{closed:n,exclusions:r}=K(t);for(let{name:e,missingDependencies:t}of r)console.warn(`[ExtensionCoordinator] Excluding extension "%s" from migration collection: required dependency %s is disabled`,e,t.join(`, `));let i=[];for(let{name:e,entry:r}of t){if(!n.has(e))continue;let t=r.pkg.storage?.migrations;if(!t)continue;let a,o;if(typeof t==`string`)a=q(e,r.pkg,t);else{let n={};for(let[i,a]of Object.entries(t))a!==void 0&&(n[i]=q(e,r.pkg,a));let i=p(n);if(i===void 0)continue;a=i,o=n}i.push({name:e,migrationsPath:a,migrationSourceId:r.pkg.storage?.migrationSourceId??a,...o?{migrationsPathByDialect:o}:{}})}i.length!==0&&await e.runMigrations(i)}function q(e,t,n){if(a.isAbsolute(n))return n;let r=t.storage?.packageRoot;if(!r)throw Error(`Extension "${e}" declares relative storage.migrations "${n}" without storage.packageRoot`);let i=a.resolve(r),o=a.resolve(i,n),s=a.relative(i,o);if(s.startsWith(`..`)||a.isAbsolute(s))throw Error(`Extension "${e}" declares storage.migrations "${n}" outside storage.packageRoot`);return o}async function J(e,t){let r=e.entries.get(t);if(!r?.service||r.state!==`active`)return;let{checkHealth:i}=r.service;if(!i)return;let a;try{let e=await i.call(r.service),n=ee.array().safeParse(e);n.success?a=n.data:(console.error(`[ExtensionCoordinator] checkHealth for "${t}" returned invalid data:`,n.error),a=[])}catch(e){console.error(`[ExtensionCoordinator] checkHealth threw for "${t}":`,e),a=[]}r.warnings=a;try{await e.bus.emit(n.warnings.changed,{extensionName:t,warnings:[...a]})}catch(e){console.error(`[ExtensionCoordinator] warnings.changed emit failed for "${t}":`,e)}}function qe(e,t){if(t.windows)for(let n of t.windows)e.windowRegistry.register(t.name,t.displayName,n);if(t.tray&&e.trayEntries.push({...t.tray,packageName:t.name}),t.cli){let n=t.cli;`subcommands`in n&&e.cliContributions.push(n)}}function Je(e){return Array.from(e.values()).filter(e=>e.enabled).map(e=>e.pkg).filter(e=>!!e.http)}async function Ye(e){let t=[...e.loadOrder].reverse(),n=[],r=[];for(let i of t){let t=e.entries.get(i);if(!t)continue;let a=!1;if(t.state===`active`){let r=await F(e.contributionProcessors,e.contextHost,i,t,`stopped`);r.length>0&&(a=!0,n.push(...r))}if(t.service)try{await t.service.destroy?.()}catch(e){a=!0,n.push(e)}finally{t.service=void 0}if(t.storageCleanup)try{t.storageCleanup()}catch(e){a=!0,n.push(e)}finally{t.storageCleanup=void 0}a&&r.push(i),t.state===`active`&&P(e.contextHost.bus,t,`stopped`)}if(n.length>0)throw AggregateError(n,`Extensions failed to shut down cleanly: ${r.join(`, `)}`)}async function Xe(e,t,n){if(!n.enabled){P(e.bus,n,`skipped`),e.bootProgress.skipped(n.pkg,`disabled`);return}let r=(n.pkg.dependencies??[]).filter(t=>t.optional?!1:e.entries.get(t.name)?.state!==`active`);if(r.length>0){let i=`Required dependencies not active: ${r.map(e=>e.name).join(`, `)}`;if(Q(e,t,n,i),n.pkg.critical)throw Error(`Critical package "${t}" failed: ${i}`);return}let i=M(n.identity.extensionName);if(i!==void 0){if(Q(e,t,n,i),n.pkg.critical)throw Error(`Critical package "${t}" failed: ${i}`);return}e.bootProgress.starting(n.pkg),P(e.bus,n,`initializing`);let a;try{a=A(e.contextHost,t,n,`activate`)}catch(r){if(Q(e,t,n,o(r)),n.pkg.critical)throw r;return}if(Qe(e,t,n,a)){if(!n.pkg.create){await Ze(e,t,n);return}await Y(e,t,n,a)}}async function Ze(e,t,n){try{await F(e.contributionProcessors,e.contextHost,t,n,`activated`)}catch(r){if(Z(t,n),X(e,t,n,r))return;if(Q(e,t,n,r instanceof Error?r.message:String(r)),n.pkg.critical)throw r;return}P(e.bus,n,`active`),e.bootProgress.ready(n.pkg),await $(e.bus,t,n)}async function Y(e,t,n,r){let i;try{let a=N(e.contextHost,n,r);i=await n.pkg.create(a),await i.init?.(),n.service=i,await F(e.contributionProcessors,e.contextHost,t,n,`activated`),P(e.bus,n,`active`),e.bootProgress.ready(n.pkg),await $(e.bus,t,n)}catch(r){try{await i?.destroy?.()}catch(e){console.error(`[ExtensionCoordinator] Service cleanup error after failed start of "${t}":`,e)}if(n.service=void 0,Z(t,n),X(e,t,n,r))return;if(Q(e,t,n,r instanceof Error?r.message:String(r)),n.pkg.critical)throw r}}function X(e,t,n,r){if(!(r instanceof b))return!1;if(n.pkg.critical){let i=`Critical package cannot skip startup: ${r.reason}`;throw Q(e,t,n,i),Error(`Critical package "${t}" failed: ${i}`,{cause:r})}return n.error=r.reason,console.info(`[ExtensionCoordinator] Package "${t}" skipped: ${r.reason}`),P(e.bus,n,`skipped`),e.bootProgress.skipped(n.pkg,r.reason),!0}function Qe(e,t,n,r){if(!n.pkg.storage?.registerHandlers||e.db===void 0)return!0;try{let t=N(e.contextHost,n,r),i=n.pkg.storage.registerHandlers(e.bus,e.db,t);return i&&(n.storageCleanup=i),!0}catch(r){let i=r instanceof Error?r.message:String(r);if(console.error(`[ExtensionCoordinator] Package "${t}" storage registration failed:`,r),Q(e,t,n,i),n.pkg.critical)throw r;return!1}}function Z(e,t){if(t.storageCleanup)try{t.storageCleanup()}catch(t){console.error(`[ExtensionCoordinator] Storage cleanup error after failed start of "${e}":`,t)}finally{t.storageCleanup=void 0}}function Q(e,t,n,r){n.error=r,console.error(`[ExtensionCoordinator] Package "${t}" failed:`,r),P(e.bus,n,`failed`),e.bootProgress.failed(n.pkg,r)}async function $(e,t,n){try{await L(e,n.pkg)}catch(e){console.warn(`[ExtensionCoordinator] Failed to register tray entry for ${t}:`,e)}}var $e=class{bus;surface;db;extensionContextBase;runtimeEnvironment;shutdownController=new AbortController;entries=new Map;loadOrder=[];loaded=!1;started=!1;shutdownRequested=!1;shutdownPromise;lifecycleTail=Promise.resolve();rpcCleanups=[];contributionProcessors=[];warningActionMap=new Map;windowRegistry=new e;_trayEntries=[];_cliContributions=[];persistEnabled;loadEnabled;loadConfig;operatorConfig;runMigrations;extensionManagedNames;frameworkPackageNames;installedCatalog;constructor(e,t={}){this.bus=e,this.surface=t.surface??`headless`,this.db=t.db,this.extensionContextBase=t.extensionContextBase,this.runtimeEnvironment=t.runtimeEnvironment,this.persistEnabled=t.persistEnabled,this.loadEnabled=t.loadEnabled,this.loadConfig=t.loadConfig,this.operatorConfig=t.operatorConfig,this.runMigrations=t.runMigrations,this.extensionManagedNames=t.extensionManagedNames,this.frameworkPackageNames=t.frameworkPackageNames,this.installedCatalog=t.installedCatalog,this.rpcCleanups.push(ie(this.bus,this.warningActionMap,t.launcherCommand??`makaio`))}get trayEntries(){return this._trayEntries.map(e=>({...e}))}get cliContributions(){return this._cliContributions}extensionsWithHttp(){return Je(this.entries)}load(e,t){if(this.shutdownRequested)throw Error(`ExtensionCoordinator.load() called after shutdown(). The coordinator is terminal.`);if(this.loaded)throw Error(`ExtensionCoordinator.load() called twice. The coordinator is single-use; create a new instance if needed.`);let n=V(U(e,this.surface,this.runtimeEnvironment),this.frameworkPackageNames),{enabled:r}=Ge(n,this.extensionManagedNames,this.loadEnabled),i=new Map;this.loadOrder=ze(n,{enabledNames:r,onSoftValidationWarning:(e,t)=>{let n=i.get(e);n?n.push(t):i.set(e,[t])}});let a=[],o=[];for(let e of this.loadOrder){let s=n.find(t=>t.name===e);a.push(s);let c=i.get(e),l={pkg:s,identity:fe(s.name),state:`discovered`,enabled:r.has(e),extensionManaged:this.extensionManagedNames?.has(e)??!0,warnings:[],...c?{error:c.join(`; `)}:{}};if(t){let n=t.get(e);n&&(l.configDefaults=n)}this.entries.set(e,l),o.push({name:e,entry:l})}let{closed:s,exclusions:c}=K(o);for(let{name:e,missingDependencies:t}of c)console.warn(`[ExtensionCoordinator] Excluding extension "%s" from static surface collection and namespace registration: required dependency %s is disabled`,e,t.join(`, `));for(let{name:e,entry:t}of o)s.has(e)&&(t.pkg.namespaces&&this.bus.registerNamespaces(t.pkg.namespaces),qe({windowRegistry:this.windowRegistry,trayEntries:this._trayEntries,cliContributions:this._cliContributions},t.pkg),t.surfacesCollected=!0);return this.registerRpcHandlers(),this.loaded=!0,a}registerRpcHandlers(){this.rpcCleanups.push(...w({bus:this.bus,entries:this.entries,cliContributions:this._cliContributions,list:()=>this.list(),getInfo:e=>this.getInfo(e),handleSetEnabled:(e,t)=>this.handleSetEnabled(e,t),getInstalledCatalog:()=>Pe(this.createCatalogHost())}))}async startAll(){if(this.shutdownRequested)throw Error(`ExtensionCoordinator.startAll() called after shutdown(). The coordinator is terminal.`);if(!this.loaded)throw Error(`ExtensionCoordinator.startAll() called before load(). Call load() first.`);if(this.started)throw Error(`ExtensionCoordinator.startAll() called twice. The coordinator is single-use; create a new instance if needed.`);this.started=!0,await this.enqueueLifecycle(()=>this.startAllInLifecycleLane())}async startAllInLifecycleLane(){let e=new ne(this.bus,this.loadOrder.length);this.rpcCleanups.push(()=>e.dispose());try{await Ke({loadOrder:this.loadOrder,entries:this.entries,runMigrations:this.runMigrations});for(let t of this.loadOrder){let n=this.entries.get(t);n&&await Xe({bus:this.bus,db:this.db,entries:this.entries,contributionProcessors:this.contributionProcessors,contextHost:this.createExtensionContextHost(),bootProgress:e},t,n)}let t=this.createExtensionHealthHost();await Promise.all(this.loadOrder.map(e=>this.entries.get(e)?.state===`active`?J(t,e):void 0)),await T({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap})}finally{e.complete()}}shutdown(){if(this.shutdownPromise)return this.shutdownPromise;this.shutdownRequested=!0;let e=this.enqueueLifecycle(()=>this.shutdownInLifecycleLane());return this.shutdownPromise=e,this.shutdownController.abort(),e}async shutdownInLifecycleLane(){let e=[],t;for(let t of this.rpcCleanups)try{t()}catch(t){e.push(t)}this.rpcCleanups=[],this.warningActionMap.clear();try{await Ye({entries:this.entries,loadOrder:this.loadOrder,contributionProcessors:this.contributionProcessors,contextHost:this.createExtensionContextHost()})}catch(n){n instanceof AggregateError?(t=n.message,e.push(...n.errors)):e.push(n)}if(e.length>0){let n=t===void 0?``:`; ${t}`;throw AggregateError(e,`Extension coordinator shutdown failed with ${e.length} error(s)${n}`)}}list(){return[...this.entries.values()].map(e=>O(e,this.loadEnabled))}getInfo(e){let t=this.entries.get(e);return t?O(t,this.loadEnabled):null}getExtensionService(e){let t=typeof e==`string`?e:e.name;return this.entries.get(t)?.service}getExtension(e){return this.entries.get(e)?.pkg}getResolvedConfig(e){let t=this.entries.get(e);if(t)return j(this.createExtensionContextHost(),e,t,`observe`)}getLoadedProviderDefinitionIds(){let e=new Set;for(let t of this.entries.values())if(t.enabled&&!(t.state===`failed`||t.state===`skipped`||t.state===`stopped`))for(let n of t.pkg.providers??[])e.add(n.id);return e}forEachActiveExtension(e){let t=this.createExtensionContextHost();for(let n of this.loadOrder){let r=this.entries.get(n);if(!r||r.state!==`active`)continue;let i=N(t,r,A(t,n,r,`observe`));e(n,r.pkg,i)}}forExtension(e,t){let n=this.entries.get(e);if(!n||n.state!==`active`)return;let r=this.createExtensionContextHost(),i=N(r,n,A(r,e,n,`observe`));t(e,n.pkg,i)}registerContributionProcessor(e){return this.contributionProcessors.push(e),()=>{let t=this.contributionProcessors.indexOf(e);t>=0&&this.contributionProcessors.splice(t,1)}}async handleSetEnabled(e,t){let n={success:!1,outcome:`rejected`,reason:`shutting-down`};if(this.shutdownRequested)return n;let r=await Fe(this.createCatalogHost(),e);return await this.admitLifecycle(()=>Se(this.createToggleHost(),e,t,r),n)}createCatalogHost(){return{entries:this.entries,loadEnabled:this.loadEnabled,installedCatalog:this.installedCatalog,surface:this.surface}}async applyExtensionTransition(e,t){return await this.admitLifecycle(()=>xe(this.createToggleHost(),e,t),`rejected`)}createToggleHost(){return{...this.createExtensionContextHost(),db:this.db,entries:this.entries,persistEnabled:this.persistEnabled,contributionProcessors:this.contributionProcessors,runHealthCheck:e=>J(this.createExtensionHealthHost(),e),emitWarningsForEntry:(e,t)=>D({bus:this.bus,entries:this.entries,warningActionMap:this.warningActionMap},e,t)}}async admitLifecycle(e,t){return this.shutdownRequested?t:await this.enqueueLifecycle(e)}enqueueLifecycle(e){let t=this.lifecycleTail.then(()=>e(),()=>e());return this.lifecycleTail=t.then(()=>void 0,()=>void 0),t}createExtensionContextHost(){return{bus:this.bus,extensionContextBase:this.extensionContextBase,loadConfig:this.loadConfig,operatorConfig:this.operatorConfig,signal:this.shutdownController.signal,hasActiveExtension:e=>this.hasActiveExtension(e),getExtensionService:e=>this.getExtensionService(e)}}createExtensionHealthHost(){return{bus:this.bus,entries:this.entries}}hasActiveExtension(e){return this.entries.get(e)?.state===`active`}};export{k as a,y as c,U as i,W as n,b as o,V as r,v as s,$e as t};
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";import{createBusNamespace as t}from"@makaio/framework/core";import{BrowserEntrypointSchema as n,ClientDefinitionSchema as r,ProviderDefinitionSchema as i}from"@makaio/framework/contracts";import{ExtensionWarningEntrySchema as a}from"@makaio/framework/contracts/extension";const o=e.enum([`discovered`,`initializing`,`active`,`failed`,`skipped`,`stopped`]),s=e.object({name:e.string(),displayName:e.string()}),c=s.extend({state:o,error:e.string().optional()}),l=c.extend({critical:e.boolean()}),u=c.extend({surface:e.enum([`interactive`,`headless`,`any`]).optional(),enabled:e.boolean(),extensionManaged:e.boolean(),persistedEnabled:e.boolean().optional(),critical:e.boolean(),browser:n.optional()}),d=e.enum([`local`,`npm`,`project-local`]),f=e.object({name:e.string().min(1),version:e.string(),origin:d,critical:e.boolean().optional(),criticalityUnknown:e.boolean().optional(),declaresServerEntrypoint:e.boolean().optional(),npmName:e.string().min(1).optional(),surface:e.enum([`interactive`,`headless`]).optional(),shadowedBy:d.optional(),collidesWith:d.optional(),collisionIgnoresSurface:e.boolean().optional()}),p=f.extend({extensionManaged:e.boolean(),persistedEnabled:e.boolean().optional()}),m=e.object({packageName:e.string()}),h=m.extend({definition:i}),g=m.extend({definition:r}),_=e.enum([`applied`,`rejected`,`restart-required`]),v=e.enum([`critical`,`criticality-unknown`,`not-installed`,`no-catalog`,`name-collision`,`shutting-down`,`runtime-state-diverges`,`not-loaded`,`framework-package-shadowed`]),y=t(`kernel:extension`,{stateChanged:e.object({name:e.string(),displayName:e.string(),from:o,to:o,error:e.string().optional(),contributes:e.object({adapters:e.boolean(),tools:e.boolean(),hashTriggers:e.boolean(),providers:e.boolean(),clients:e.boolean(),ui:e.boolean(),storage:e.boolean(),sessionEventActions:e.boolean()}).optional()}),list:{request:e.object({}),response:e.object({extensions:e.array(u)})},get:{request:e.object({name:e.string()}),response:e.object({extension:u.nullable()})},setEnabled:{request:e.object({name:e.string(),enabled:e.boolean()}),response:e.object({success:e.boolean(),outcome:_,reason:v.optional()})},catalog:{request:e.object({}),response:e.object({entries:e.array(p).nullable()})},"contributions.catalog":{request:e.object({}),response:e.object({providers:e.array(h),clients:e.array(g)})},enabledChanged:e.object({name:e.string(),enabled:e.boolean()}),"warnings.list":{request:e.object({extensionName:e.string().optional()}),response:e.object({entries:e.array(a)})},"warnings.changed":a}),b=y.subjects;export{p as a,s as c,u as d,a as f,_ as i,c as l,b as n,d as o,l as p,v as r,f as s,y as t,o as u};