@axiom-lattice/gateway 4.1.7 → 4.2.1

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 (1184) hide show
  1. package/dist/{A2AAuthService-DK5X6VIL.mjs → A2AAuthService-7UGQ7GMW.mjs} +3 -2
  2. package/dist/{WechatChannelAdapter-WSDKR4OA.mjs → WechatChannelAdapter-7WHE5UGY.mjs} +2 -1
  3. package/dist/{WechatChannelAdapter-WSDKR4OA.mjs.map → WechatChannelAdapter-7WHE5UGY.mjs.map} +1 -1
  4. package/dist/{a2a-7N3WDAOP.mjs → a2a-FGYX2HH3.mjs} +71 -32
  5. package/dist/a2a-FGYX2HH3.mjs.map +1 -0
  6. package/dist/{a2a-standard-WC2BSOFV.mjs → a2a-standard-VEQBXBMM.mjs} +93 -115
  7. package/dist/a2a-standard-VEQBXBMM.mjs.map +1 -0
  8. package/dist/agentProvider-X4FVQPKW.mjs +88 -0
  9. package/dist/agentProvider-X4FVQPKW.mjs.map +1 -0
  10. package/dist/chunk-2POW27EI.mjs +27 -0
  11. package/dist/chunk-2POW27EI.mjs.map +1 -0
  12. package/dist/chunk-52SUWMOX.mjs +121 -0
  13. package/dist/chunk-52SUWMOX.mjs.map +1 -0
  14. package/dist/chunk-GF4GGTWJ.mjs +164 -0
  15. package/dist/chunk-GF4GGTWJ.mjs.map +1 -0
  16. package/dist/{chunk-2HOCF46L.mjs → chunk-GPHOYR3X.mjs} +33 -11
  17. package/dist/chunk-GPHOYR3X.mjs.map +1 -0
  18. package/dist/chunk-K32XEQLH.mjs +28 -0
  19. package/dist/chunk-K32XEQLH.mjs.map +1 -0
  20. package/dist/chunk-NFEGQTCC.mjs +27 -0
  21. package/dist/chunk-PWHUWFXL.mjs +173 -0
  22. package/dist/chunk-PWHUWFXL.mjs.map +1 -0
  23. package/dist/{chunk-K4XELOSO.mjs → chunk-QKPZWWHH.mjs} +3 -2
  24. package/dist/{chunk-K4XELOSO.mjs.map → chunk-QKPZWWHH.mjs.map} +1 -1
  25. package/dist/chunk-QUT2DS4R.mjs +50 -0
  26. package/dist/chunk-QUT2DS4R.mjs.map +1 -0
  27. package/dist/chunk-TJAUXMYJ.mjs +109 -0
  28. package/dist/chunk-TJAUXMYJ.mjs.map +1 -0
  29. package/dist/chunk-WKNZ7GBC.mjs +56 -0
  30. package/dist/chunk-WKNZ7GBC.mjs.map +1 -0
  31. package/dist/collection_service-RTRJEQFL.mjs +8 -0
  32. package/dist/collection_service-RTRJEQFL.mjs.map +1 -0
  33. package/dist/embed/agent-chat-loader.js +1 -0
  34. package/dist/embed/embed-page-1c-75E4QIWF.js +1 -0
  35. package/dist/embed/embed-page-AgentDetailSideApp-KGYKTMZR.js +1 -0
  36. package/dist/embed/embed-page-AgentDetailSideApp-O6G4NJ7I.css +1 -0
  37. package/dist/embed/embed-page-AgentGovernanceWorkbench-F42AJH77.js +5 -0
  38. package/dist/embed/embed-page-AgentGovernanceWorkbench-SFZNVMUH.css +1 -0
  39. package/dist/embed/embed-page-MessageGraph-ACHQORG7.js +6 -0
  40. package/dist/embed/embed-page-MessageGraph-TYOOATYV.css +1 -0
  41. package/dist/embed/embed-page-ReactChart-FGUHXBED.js +1 -0
  42. package/dist/embed/embed-page-ReactChart-VBM467ER.css +1 -0
  43. package/dist/embed/embed-page-ReactInfographic-IABAC7DO.js +574 -0
  44. package/dist/embed/embed-page-SkillFlow-SFZ5HLMK.js +1 -0
  45. package/dist/embed/embed-page-SkillFlow-VDPP5DFL.css +1 -0
  46. package/dist/embed/embed-page-TasksSideApp-4GY5YBTN.js +241 -0
  47. package/dist/embed/embed-page-TasksSideApp-F4XUHPTG.css +1 -0
  48. package/dist/embed/embed-page-TeamWorkspace-DXKGNQ3C.css +1 -0
  49. package/dist/embed/embed-page-TeamWorkspace-YWE6ZTLB.js +748 -0
  50. package/dist/embed/embed-page-TopologyRuntimeView-2NQ3OOYI.css +1 -0
  51. package/dist/embed/embed-page-TopologyRuntimeView-MKFPCHT3.js +6 -0
  52. package/dist/embed/embed-page-WorkflowAutomationView-MAYS27YJ.css +1 -0
  53. package/dist/embed/embed-page-WorkflowAutomationView-WT6VH5HD.js +3 -0
  54. package/dist/embed/embed-page-abap-QKV7XZRP.js +1 -0
  55. package/dist/embed/embed-page-abnf-534KGIL5.js +1 -0
  56. package/dist/embed/embed-page-abnf-NNWX7KPS.js +1 -0
  57. package/dist/embed/embed-page-accesslog-K5DAETBI.js +1 -0
  58. package/dist/embed/embed-page-actionscript-MLTGVDIY.js +1 -0
  59. package/dist/embed/embed-page-actionscript-YXZSI3FP.js +1 -0
  60. package/dist/embed/embed-page-ada-SMIJQ6T7.js +1 -0
  61. package/dist/embed/embed-page-ada-Z5BYNU6B.js +1 -0
  62. package/dist/embed/embed-page-agda-WCRTGDJB.js +1 -0
  63. package/dist/embed/embed-page-al-2LSX2G2U.js +1 -0
  64. package/dist/embed/embed-page-all-RTJLYZHS.js +1 -0
  65. package/dist/embed/embed-page-angelscript-4S3XC2EJ.js +1 -0
  66. package/dist/embed/embed-page-antlr4-OLOPZLHD.js +1 -0
  67. package/dist/embed/embed-page-apache-RGO2UM6T.js +1 -0
  68. package/dist/embed/embed-page-apacheconf-EKQ6F4ZQ.js +1 -0
  69. package/dist/embed/embed-page-apex-ZJTOIW4M.js +1 -0
  70. package/dist/embed/embed-page-apl-W7YETB5L.js +1 -0
  71. package/dist/embed/embed-page-applescript-I4PV6U4X.js +1 -0
  72. package/dist/embed/embed-page-applescript-M2D2KKDY.js +1 -0
  73. package/dist/embed/embed-page-aql-V6TCDQAH.js +1 -0
  74. package/dist/embed/embed-page-arcade-TSPLEDM5.js +1 -0
  75. package/dist/embed/embed-page-architecture-U656AL7Q-55BYHO3H.js +1 -0
  76. package/dist/embed/embed-page-architectureDiagram-VXUJARFQ-GDHKRBZH.js +36 -0
  77. package/dist/embed/embed-page-arduino-7N264XVW.js +1 -0
  78. package/dist/embed/embed-page-arduino-XUEUIP7S.js +1 -0
  79. package/dist/embed/embed-page-arff-M7PKJV7Y.js +1 -0
  80. package/dist/embed/embed-page-armasm-OAQGLAMS.js +1 -0
  81. package/dist/embed/embed-page-armasm-PTMJUNBD.js +1 -0
  82. package/dist/embed/embed-page-arturo-VYVR5YRA.js +1 -0
  83. package/dist/embed/embed-page-asciidoc-6GDV5NP4.js +1 -0
  84. package/dist/embed/embed-page-asciidoc-PDLRDQNM.js +1 -0
  85. package/dist/embed/embed-page-asm6502-LVC7KLV5.js +1 -0
  86. package/dist/embed/embed-page-asmatmel-B4D7TBZY.js +1 -0
  87. package/dist/embed/embed-page-aspectj-QZFNA4MK.js +1 -0
  88. package/dist/embed/embed-page-aspnet-4JJQ3PPT.js +1 -0
  89. package/dist/embed/embed-page-autohotkey-4QUCSDML.js +1 -0
  90. package/dist/embed/embed-page-autohotkey-SVPZNOL7.js +1 -0
  91. package/dist/embed/embed-page-autoit-IXYC6T6A.js +1 -0
  92. package/dist/embed/embed-page-autoit-PFZZYGX5.js +1 -0
  93. package/dist/embed/embed-page-avisynth-MVQJIFSP.js +1 -0
  94. package/dist/embed/embed-page-avrasm-XYNKWFKC.js +1 -0
  95. package/dist/embed/embed-page-avro-idl-4AA2QRRU.js +1 -0
  96. package/dist/embed/embed-page-awk-JNS3RERS.js +1 -0
  97. package/dist/embed/embed-page-awk-RMGF56MA.js +1 -0
  98. package/dist/embed/embed-page-axapta-6U5QN2JT.js +1 -0
  99. package/dist/embed/embed-page-bash-UJJ4GKW6.js +1 -0
  100. package/dist/embed/embed-page-bash-VYDNQBY7.js +1 -0
  101. package/dist/embed/embed-page-basic-6KLN4O27.js +1 -0
  102. package/dist/embed/embed-page-basic-EJRJ7W4E.js +1 -0
  103. package/dist/embed/embed-page-batch-AJOBLMJ2.js +1 -0
  104. package/dist/embed/embed-page-bbcode-CIP6MR7G.js +1 -0
  105. package/dist/embed/embed-page-bbj-OPFURIS3.js +1 -0
  106. package/dist/embed/embed-page-bicep-7BI3OTK4.js +1 -0
  107. package/dist/embed/embed-page-birb-LWSJQUWN.js +1 -0
  108. package/dist/embed/embed-page-bison-HDVOA2OF.js +1 -0
  109. package/dist/embed/embed-page-blockDiagram-VD42YOAC-6GQBPG3N.js +122 -0
  110. package/dist/embed/embed-page-bnf-7O24GKM6.js +1 -0
  111. package/dist/embed/embed-page-bnf-TCLPD45L.js +1 -0
  112. package/dist/embed/embed-page-bqn-LADFOREK.js +1 -0
  113. package/dist/embed/embed-page-brainfuck-B2QDW5Y5.js +1 -0
  114. package/dist/embed/embed-page-brainfuck-HUZY5LJA.js +1 -0
  115. package/dist/embed/embed-page-brightscript-4E54PL3L.js +1 -0
  116. package/dist/embed/embed-page-bro-DEBMJONL.js +1 -0
  117. package/dist/embed/embed-page-bsl-5HTEKAYP.js +1 -0
  118. package/dist/embed/embed-page-c-LFRMHVS4.js +1 -0
  119. package/dist/embed/embed-page-c-X5PJHL4T.js +1 -0
  120. package/dist/embed/embed-page-c-like-UPVRYRH5.js +1 -0
  121. package/dist/embed/embed-page-c4Diagram-YG6GDRKO-UBUOGTT3.js +10 -0
  122. package/dist/embed/embed-page-cal-MS5NKCDW.js +1 -0
  123. package/dist/embed/embed-page-capnproto-VVJPMDQX.js +1 -0
  124. package/dist/embed/embed-page-ceylon-TOPAPEAZ.js +1 -0
  125. package/dist/embed/embed-page-cfscript-P3X63VSB.js +1 -0
  126. package/dist/embed/embed-page-chaiscript-QZLDHGV3.js +1 -0
  127. package/dist/embed/embed-page-chunk-2AUFZBHG.js +1 -0
  128. package/dist/embed/embed-page-chunk-2AX46B4A.js +1 -0
  129. package/dist/embed/embed-page-chunk-2BEHY2KL.js +1 -0
  130. package/dist/embed/embed-page-chunk-2CM5KQAO.js +1 -0
  131. package/dist/embed/embed-page-chunk-2DKYYWQC.js +1 -0
  132. package/dist/embed/embed-page-chunk-2GFIRW6Z.js +1 -0
  133. package/dist/embed/embed-page-chunk-2GGHQJ6Z.js +1 -0
  134. package/dist/embed/embed-page-chunk-2IURSVR2.js +7 -0
  135. package/dist/embed/embed-page-chunk-2NLG2PBF.js +1 -0
  136. package/dist/embed/embed-page-chunk-2REOJOLY.js +1 -0
  137. package/dist/embed/embed-page-chunk-2SKSDKSN.js +1 -0
  138. package/dist/embed/embed-page-chunk-2V6IHON2.js +1 -0
  139. package/dist/embed/embed-page-chunk-2VJ7T35I.js +1 -0
  140. package/dist/embed/embed-page-chunk-2WL6TSEG.js +1 -0
  141. package/dist/embed/embed-page-chunk-2XLPEIWW.js +1 -0
  142. package/dist/embed/embed-page-chunk-2YRVPZIU.js +1 -0
  143. package/dist/embed/embed-page-chunk-33GTW5LX.js +1 -0
  144. package/dist/embed/embed-page-chunk-33LYY5FY.js +1 -0
  145. package/dist/embed/embed-page-chunk-342GWWY6.js +1 -0
  146. package/dist/embed/embed-page-chunk-34RH2U7Z.js +1 -0
  147. package/dist/embed/embed-page-chunk-37BFU4NL.js +1 -0
  148. package/dist/embed/embed-page-chunk-3C32LJTO.js +1 -0
  149. package/dist/embed/embed-page-chunk-3D3RUB6Q.js +1 -0
  150. package/dist/embed/embed-page-chunk-3DDNDQND.js +1 -0
  151. package/dist/embed/embed-page-chunk-3FQ3EELN.js +1 -0
  152. package/dist/embed/embed-page-chunk-3GRDXHWH.js +1 -0
  153. package/dist/embed/embed-page-chunk-3GTSDITA.js +1 -0
  154. package/dist/embed/embed-page-chunk-3IP6ESHH.js +1 -0
  155. package/dist/embed/embed-page-chunk-3J7LPOGR.js +1 -0
  156. package/dist/embed/embed-page-chunk-3KBA5YLX.js +1 -0
  157. package/dist/embed/embed-page-chunk-3MESXVLG.js +1 -0
  158. package/dist/embed/embed-page-chunk-3PY2YGBU.js +153 -0
  159. package/dist/embed/embed-page-chunk-3QOIYWK3.js +1 -0
  160. package/dist/embed/embed-page-chunk-3WBHNFJP.js +1 -0
  161. package/dist/embed/embed-page-chunk-3WXEO6CG.js +245 -0
  162. package/dist/embed/embed-page-chunk-3YID7Y73.js +1 -0
  163. package/dist/embed/embed-page-chunk-42S7N5Y5.js +4084 -0
  164. package/dist/embed/embed-page-chunk-43APLD2U.js +1 -0
  165. package/dist/embed/embed-page-chunk-447KJWVF.js +1 -0
  166. package/dist/embed/embed-page-chunk-47OYOFAD.js +1 -0
  167. package/dist/embed/embed-page-chunk-4APB7U5B.js +1 -0
  168. package/dist/embed/embed-page-chunk-4BKXE5ON.js +14 -0
  169. package/dist/embed/embed-page-chunk-4BRWUEYH.js +1 -0
  170. package/dist/embed/embed-page-chunk-4C2ZTZLC.js +1 -0
  171. package/dist/embed/embed-page-chunk-4DT3DP4G.js +3 -0
  172. package/dist/embed/embed-page-chunk-4FS42IYM.js +1 -0
  173. package/dist/embed/embed-page-chunk-4JZFQLML.js +1 -0
  174. package/dist/embed/embed-page-chunk-4LC4UT4R.js +1 -0
  175. package/dist/embed/embed-page-chunk-4MNX7JDW.js +2 -0
  176. package/dist/embed/embed-page-chunk-4NIWV5BC.js +1 -0
  177. package/dist/embed/embed-page-chunk-4O7YNJLI.js +1 -0
  178. package/dist/embed/embed-page-chunk-4OTU4CRR.js +1 -0
  179. package/dist/embed/embed-page-chunk-4PR66FMJ.js +1 -0
  180. package/dist/embed/embed-page-chunk-4R5F5OQK.js +1 -0
  181. package/dist/embed/embed-page-chunk-4SGVKO3D.js +1 -0
  182. package/dist/embed/embed-page-chunk-4TEJCUD5.js +1 -0
  183. package/dist/embed/embed-page-chunk-4WOTSHAW.js +1 -0
  184. package/dist/embed/embed-page-chunk-4XVBSVFM.js +1 -0
  185. package/dist/embed/embed-page-chunk-4ZIJQUGM.js +1 -0
  186. package/dist/embed/embed-page-chunk-53PYTL4U.js +1 -0
  187. package/dist/embed/embed-page-chunk-53QS4RRO.js +1 -0
  188. package/dist/embed/embed-page-chunk-54DGJLXZ.js +1 -0
  189. package/dist/embed/embed-page-chunk-57BJJSAV.js +1 -0
  190. package/dist/embed/embed-page-chunk-5DAOHO64.js +1 -0
  191. package/dist/embed/embed-page-chunk-5HA2MCVW.js +1 -0
  192. package/dist/embed/embed-page-chunk-5HNRARTT.js +1 -0
  193. package/dist/embed/embed-page-chunk-5IG7MZQF.js +1 -0
  194. package/dist/embed/embed-page-chunk-5JDQ456X.js +7 -0
  195. package/dist/embed/embed-page-chunk-5LKQWBUZ.js +339 -0
  196. package/dist/embed/embed-page-chunk-5LZHM64O.js +1 -0
  197. package/dist/embed/embed-page-chunk-5OTSEOBG.js +1 -0
  198. package/dist/embed/embed-page-chunk-5WMGNRUZ.js +79 -0
  199. package/dist/embed/embed-page-chunk-5YNTYDFR.js +1 -0
  200. package/dist/embed/embed-page-chunk-62XZFSLM.js +1 -0
  201. package/dist/embed/embed-page-chunk-6433URSF.js +1 -0
  202. package/dist/embed/embed-page-chunk-6633JIZI.js +1 -0
  203. package/dist/embed/embed-page-chunk-664ZGB66.js +1 -0
  204. package/dist/embed/embed-page-chunk-66JWK64A.js +1 -0
  205. package/dist/embed/embed-page-chunk-66PSFC5S.js +1 -0
  206. package/dist/embed/embed-page-chunk-67RFPBNS.js +1 -0
  207. package/dist/embed/embed-page-chunk-67U2KZFL.js +467 -0
  208. package/dist/embed/embed-page-chunk-6A6HYD7S.js +1 -0
  209. package/dist/embed/embed-page-chunk-6AF3OC6E.js +1 -0
  210. package/dist/embed/embed-page-chunk-6BL2XYV2.js +1 -0
  211. package/dist/embed/embed-page-chunk-6BUDTOPG.js +54 -0
  212. package/dist/embed/embed-page-chunk-6D23MLVG.js +1 -0
  213. package/dist/embed/embed-page-chunk-6DD7CBYV.js +1 -0
  214. package/dist/embed/embed-page-chunk-6DYN2PCR.js +1 -0
  215. package/dist/embed/embed-page-chunk-6E33CLHM.js +1 -0
  216. package/dist/embed/embed-page-chunk-6FFWZNBJ.js +1 -0
  217. package/dist/embed/embed-page-chunk-6G24DMH3.js +1 -0
  218. package/dist/embed/embed-page-chunk-6JFHQ7NQ.js +1 -0
  219. package/dist/embed/embed-page-chunk-6NWENUQ7.js +1 -0
  220. package/dist/embed/embed-page-chunk-6OKUWTCF.js +1 -0
  221. package/dist/embed/embed-page-chunk-6QTEF2NW.js +1 -0
  222. package/dist/embed/embed-page-chunk-6SFPT5PF.js +1 -0
  223. package/dist/embed/embed-page-chunk-6VRE3UPC.js +1 -0
  224. package/dist/embed/embed-page-chunk-6XNKALVC.js +1 -0
  225. package/dist/embed/embed-page-chunk-6XZZ6A3N.js +1 -0
  226. package/dist/embed/embed-page-chunk-6Y3UYJ6Z.js +1 -0
  227. package/dist/embed/embed-page-chunk-6ZXRL3VU.js +1 -0
  228. package/dist/embed/embed-page-chunk-72JNWX43.js +1 -0
  229. package/dist/embed/embed-page-chunk-734LUAPQ.js +1 -0
  230. package/dist/embed/embed-page-chunk-74BPRLSV.js +5 -0
  231. package/dist/embed/embed-page-chunk-74YMVV5T.js +1 -0
  232. package/dist/embed/embed-page-chunk-75BP54HX.js +1 -0
  233. package/dist/embed/embed-page-chunk-76S2KVCN.js +1 -0
  234. package/dist/embed/embed-page-chunk-77SKWVKH.js +1 -0
  235. package/dist/embed/embed-page-chunk-7AKQRM6L.js +1 -0
  236. package/dist/embed/embed-page-chunk-7ASML425.js +1 -0
  237. package/dist/embed/embed-page-chunk-7BEP247X.js +1 -0
  238. package/dist/embed/embed-page-chunk-7CW4T6JX.js +1 -0
  239. package/dist/embed/embed-page-chunk-7GLQRV3J.js +1 -0
  240. package/dist/embed/embed-page-chunk-7I5CUKLE.js +1 -0
  241. package/dist/embed/embed-page-chunk-7IYYKQJE.js +1 -0
  242. package/dist/embed/embed-page-chunk-7JBDPIC6.js +1 -0
  243. package/dist/embed/embed-page-chunk-7KSOII2E.js +1 -0
  244. package/dist/embed/embed-page-chunk-7MYHMZR7.js +1 -0
  245. package/dist/embed/embed-page-chunk-7OYMAA4V.js +1 -0
  246. package/dist/embed/embed-page-chunk-7Q3EEWYO.js +1 -0
  247. package/dist/embed/embed-page-chunk-7RPAJAU7.js +1 -0
  248. package/dist/embed/embed-page-chunk-7TH7FFVA.js +1 -0
  249. package/dist/embed/embed-page-chunk-7TMVQS3E.js +1 -0
  250. package/dist/embed/embed-page-chunk-7TY2R7O2.js +1 -0
  251. package/dist/embed/embed-page-chunk-7XMMIQFH.js +1 -0
  252. package/dist/embed/embed-page-chunk-A2QFCP3F.js +1 -0
  253. package/dist/embed/embed-page-chunk-A2XJ36CA.js +1 -0
  254. package/dist/embed/embed-page-chunk-A3QFY3IA.js +1 -0
  255. package/dist/embed/embed-page-chunk-A5CPK26D.js +1 -0
  256. package/dist/embed/embed-page-chunk-AAU4RSSU.js +1 -0
  257. package/dist/embed/embed-page-chunk-AB3Q2HOO.js +1 -0
  258. package/dist/embed/embed-page-chunk-ABFWMLOR.js +1 -0
  259. package/dist/embed/embed-page-chunk-ABIN3BPL.js +1 -0
  260. package/dist/embed/embed-page-chunk-AC6X2XRH.js +31 -0
  261. package/dist/embed/embed-page-chunk-ACIRZYZQ.js +1 -0
  262. package/dist/embed/embed-page-chunk-AEGLPY52.js +1 -0
  263. package/dist/embed/embed-page-chunk-AJPIJ5Q6.js +1 -0
  264. package/dist/embed/embed-page-chunk-AKPA6XS3.js +2 -0
  265. package/dist/embed/embed-page-chunk-ANZXYPYQ.js +1 -0
  266. package/dist/embed/embed-page-chunk-AO6KUNOD.js +1 -0
  267. package/dist/embed/embed-page-chunk-APIN6IE2.js +1 -0
  268. package/dist/embed/embed-page-chunk-AQ7P7MPQ.js +1 -0
  269. package/dist/embed/embed-page-chunk-AQLFD3FB.js +1 -0
  270. package/dist/embed/embed-page-chunk-AQTLXHTW.js +1 -0
  271. package/dist/embed/embed-page-chunk-ARHDAWDT.js +1 -0
  272. package/dist/embed/embed-page-chunk-ARM7QQNJ.js +1 -0
  273. package/dist/embed/embed-page-chunk-ARRA262W.js +1 -0
  274. package/dist/embed/embed-page-chunk-AWTS5ZYY.js +1 -0
  275. package/dist/embed/embed-page-chunk-B43OSKKN.js +1 -0
  276. package/dist/embed/embed-page-chunk-B537QK4H.js +1 -0
  277. package/dist/embed/embed-page-chunk-B6767LVL.js +1 -0
  278. package/dist/embed/embed-page-chunk-BBSIPZIJ.js +2 -0
  279. package/dist/embed/embed-page-chunk-BDE6VTZO.js +1 -0
  280. package/dist/embed/embed-page-chunk-BDR2AV4C.js +1 -0
  281. package/dist/embed/embed-page-chunk-BEZUVEQG.js +1 -0
  282. package/dist/embed/embed-page-chunk-BHFBNKCC.js +1 -0
  283. package/dist/embed/embed-page-chunk-BIXWOREM.js +1 -0
  284. package/dist/embed/embed-page-chunk-BO56ESC4.js +1 -0
  285. package/dist/embed/embed-page-chunk-BOBSU3BS.js +1 -0
  286. package/dist/embed/embed-page-chunk-BOEM7RR2.js +1 -0
  287. package/dist/embed/embed-page-chunk-BOGY5UJK.js +1 -0
  288. package/dist/embed/embed-page-chunk-BOQ4YJRC.js +1 -0
  289. package/dist/embed/embed-page-chunk-BR7RHIPR.js +1 -0
  290. package/dist/embed/embed-page-chunk-BRF3QA4U.js +1 -0
  291. package/dist/embed/embed-page-chunk-BSHGJSTY.js +1 -0
  292. package/dist/embed/embed-page-chunk-BTZ6QKA5.js +1 -0
  293. package/dist/embed/embed-page-chunk-BXUFKFRH.js +1 -0
  294. package/dist/embed/embed-page-chunk-BYGKM25Z.js +1 -0
  295. package/dist/embed/embed-page-chunk-CADGB443.js +1 -0
  296. package/dist/embed/embed-page-chunk-CCNLQNKX.js +1 -0
  297. package/dist/embed/embed-page-chunk-CDFDSWNI.js +1 -0
  298. package/dist/embed/embed-page-chunk-CGMYXHWK.js +1 -0
  299. package/dist/embed/embed-page-chunk-CIVBRTV6.js +1 -0
  300. package/dist/embed/embed-page-chunk-CN3CMET4.js +1 -0
  301. package/dist/embed/embed-page-chunk-CT5EIC3O.js +1 -0
  302. package/dist/embed/embed-page-chunk-CTA4NVOR.js +1 -0
  303. package/dist/embed/embed-page-chunk-CTC4RKCL.js +1 -0
  304. package/dist/embed/embed-page-chunk-CUEEKFI2.js +1 -0
  305. package/dist/embed/embed-page-chunk-CUHPLIQJ.js +1 -0
  306. package/dist/embed/embed-page-chunk-CV7IET55.js +1 -0
  307. package/dist/embed/embed-page-chunk-CYZTUSN2.js +1 -0
  308. package/dist/embed/embed-page-chunk-CZBGTBTK.js +1 -0
  309. package/dist/embed/embed-page-chunk-CZXPKAAI.js +1 -0
  310. package/dist/embed/embed-page-chunk-D2R2NSRR.js +1 -0
  311. package/dist/embed/embed-page-chunk-D5AJQJD5.js +2 -0
  312. package/dist/embed/embed-page-chunk-D63UWHSO.js +1 -0
  313. package/dist/embed/embed-page-chunk-D6DA3A6A.js +1 -0
  314. package/dist/embed/embed-page-chunk-D73UXOFT.js +1 -0
  315. package/dist/embed/embed-page-chunk-DCS7FNFS.js +1 -0
  316. package/dist/embed/embed-page-chunk-DDTPPBJY.js +1 -0
  317. package/dist/embed/embed-page-chunk-DE7BGENS.js +1 -0
  318. package/dist/embed/embed-page-chunk-DEHJLLKN.js +1 -0
  319. package/dist/embed/embed-page-chunk-DHGHAGLL.js +1 -0
  320. package/dist/embed/embed-page-chunk-DIE6AVGX.js +1 -0
  321. package/dist/embed/embed-page-chunk-DM5ESF6C.js +1 -0
  322. package/dist/embed/embed-page-chunk-DQ4UEELI.js +1 -0
  323. package/dist/embed/embed-page-chunk-DWJV4T7Q.js +1 -0
  324. package/dist/embed/embed-page-chunk-DXVMFTPC.js +1 -0
  325. package/dist/embed/embed-page-chunk-DYBQVRXS.js +1 -0
  326. package/dist/embed/embed-page-chunk-DYPHXOEP.js +1 -0
  327. package/dist/embed/embed-page-chunk-DZRJEWQO.js +1 -0
  328. package/dist/embed/embed-page-chunk-E4OFRMJJ.js +1 -0
  329. package/dist/embed/embed-page-chunk-E7ECPW5G.js +1 -0
  330. package/dist/embed/embed-page-chunk-E7MYEYS3.js +1 -0
  331. package/dist/embed/embed-page-chunk-EAFE4NIS.js +1 -0
  332. package/dist/embed/embed-page-chunk-EAUQPBSN.js +1 -0
  333. package/dist/embed/embed-page-chunk-EBXTVXZF.js +1 -0
  334. package/dist/embed/embed-page-chunk-EG5CLCWE.js +1 -0
  335. package/dist/embed/embed-page-chunk-EGTJFOFF.js +1 -0
  336. package/dist/embed/embed-page-chunk-EKYNYNIX.js +1 -0
  337. package/dist/embed/embed-page-chunk-ER4O2WLO.js +1 -0
  338. package/dist/embed/embed-page-chunk-ESAZNCCX.js +1 -0
  339. package/dist/embed/embed-page-chunk-ESCA5JCS.js +1 -0
  340. package/dist/embed/embed-page-chunk-ESJEHJ5L.js +140 -0
  341. package/dist/embed/embed-page-chunk-ETP6AXEM.js +1 -0
  342. package/dist/embed/embed-page-chunk-ETY7U4DI.js +1 -0
  343. package/dist/embed/embed-page-chunk-EUOOO2LS.js +1 -0
  344. package/dist/embed/embed-page-chunk-EWKLGZMO.js +1 -0
  345. package/dist/embed/embed-page-chunk-EY64QEHF.js +1 -0
  346. package/dist/embed/embed-page-chunk-EY7WOIDX.js +1 -0
  347. package/dist/embed/embed-page-chunk-EYRF75EG.js +1 -0
  348. package/dist/embed/embed-page-chunk-EYZS7M3F.js +1 -0
  349. package/dist/embed/embed-page-chunk-F45LQ3RS.js +1 -0
  350. package/dist/embed/embed-page-chunk-F7IBVBXT.js +1 -0
  351. package/dist/embed/embed-page-chunk-FBXKGHOH.js +1 -0
  352. package/dist/embed/embed-page-chunk-FDID7LZP.js +3 -0
  353. package/dist/embed/embed-page-chunk-FEEJAFK4.js +1 -0
  354. package/dist/embed/embed-page-chunk-FEOK4OPE.js +1 -0
  355. package/dist/embed/embed-page-chunk-FJ3EESJB.js +1 -0
  356. package/dist/embed/embed-page-chunk-FM5K6PQS.js +1 -0
  357. package/dist/embed/embed-page-chunk-FMMAQPSK.js +1 -0
  358. package/dist/embed/embed-page-chunk-FSDLV5QO.js +1 -0
  359. package/dist/embed/embed-page-chunk-FTXNVWT5.js +1 -0
  360. package/dist/embed/embed-page-chunk-FU2KMTSK.js +1 -0
  361. package/dist/embed/embed-page-chunk-FUIKRW55.js +1 -0
  362. package/dist/embed/embed-page-chunk-FVK265KY.js +1 -0
  363. package/dist/embed/embed-page-chunk-FWTICTEC.js +1 -0
  364. package/dist/embed/embed-page-chunk-FWXSX2W4.js +1 -0
  365. package/dist/embed/embed-page-chunk-FYBEULVS.js +1 -0
  366. package/dist/embed/embed-page-chunk-G5HXFDFC.js +1 -0
  367. package/dist/embed/embed-page-chunk-G5KW2SOV.js +1 -0
  368. package/dist/embed/embed-page-chunk-GAF3UVZE.js +1 -0
  369. package/dist/embed/embed-page-chunk-GFOWXZE5.js +1 -0
  370. package/dist/embed/embed-page-chunk-GH22I3LG.js +1 -0
  371. package/dist/embed/embed-page-chunk-GJCMO4YN.js +1 -0
  372. package/dist/embed/embed-page-chunk-GKA7H24K.js +1 -0
  373. package/dist/embed/embed-page-chunk-GL7A7IDD.js +1 -0
  374. package/dist/embed/embed-page-chunk-GNEIDEFX.js +1 -0
  375. package/dist/embed/embed-page-chunk-GPISFLXW.js +1 -0
  376. package/dist/embed/embed-page-chunk-GSWEZJ66.js +1 -0
  377. package/dist/embed/embed-page-chunk-GU7JLLYO.js +1 -0
  378. package/dist/embed/embed-page-chunk-GVZMVAXF.js +70 -0
  379. package/dist/embed/embed-page-chunk-GZBFDD4Y.js +1 -0
  380. package/dist/embed/embed-page-chunk-H3HFE6RK.js +1 -0
  381. package/dist/embed/embed-page-chunk-H3NYTZT4.js +3 -0
  382. package/dist/embed/embed-page-chunk-H7CZ6EXN.js +1 -0
  383. package/dist/embed/embed-page-chunk-H7HZ35QN.js +1 -0
  384. package/dist/embed/embed-page-chunk-H7XTOBKB.js +1 -0
  385. package/dist/embed/embed-page-chunk-HD5CA5Q2.js +1 -0
  386. package/dist/embed/embed-page-chunk-HDAHRUIT.js +1 -0
  387. package/dist/embed/embed-page-chunk-HGSQ4AUI.js +1 -0
  388. package/dist/embed/embed-page-chunk-HJJHFV6J.js +1 -0
  389. package/dist/embed/embed-page-chunk-HK4QMNL5.js +1 -0
  390. package/dist/embed/embed-page-chunk-HNWETJWB.js +1 -0
  391. package/dist/embed/embed-page-chunk-HQCMCYUS.js +1 -0
  392. package/dist/embed/embed-page-chunk-HQUXJKTG.js +1 -0
  393. package/dist/embed/embed-page-chunk-HS5VQFWH.js +37 -0
  394. package/dist/embed/embed-page-chunk-HTEALTO4.js +1 -0
  395. package/dist/embed/embed-page-chunk-HUKTQVZB.js +1 -0
  396. package/dist/embed/embed-page-chunk-HVN56UNP.js +1 -0
  397. package/dist/embed/embed-page-chunk-HVTV25TI.js +1 -0
  398. package/dist/embed/embed-page-chunk-HWNFA7PS.js +1 -0
  399. package/dist/embed/embed-page-chunk-I2JNPKJK.js +1 -0
  400. package/dist/embed/embed-page-chunk-I4BCBOUA.js +1 -0
  401. package/dist/embed/embed-page-chunk-I55FBKLU.js +3 -0
  402. package/dist/embed/embed-page-chunk-I5KTSZJX.js +1 -0
  403. package/dist/embed/embed-page-chunk-I7YQ2TGZ.js +1 -0
  404. package/dist/embed/embed-page-chunk-ICJOJGQ6.js +1 -0
  405. package/dist/embed/embed-page-chunk-IDJWNYLR.js +1 -0
  406. package/dist/embed/embed-page-chunk-IE6O7ZMQ.js +15 -0
  407. package/dist/embed/embed-page-chunk-IFCJLAOB.js +1 -0
  408. package/dist/embed/embed-page-chunk-IFEQPNI2.js +1 -0
  409. package/dist/embed/embed-page-chunk-IGBRMGDS.js +1 -0
  410. package/dist/embed/embed-page-chunk-IGIFLYCQ.js +1 -0
  411. package/dist/embed/embed-page-chunk-IGOT476M.js +1 -0
  412. package/dist/embed/embed-page-chunk-IHNNPY3P.js +1 -0
  413. package/dist/embed/embed-page-chunk-II6ODJLE.js +1 -0
  414. package/dist/embed/embed-page-chunk-IIIA5HUO.js +1 -0
  415. package/dist/embed/embed-page-chunk-IIYOOZDE.js +1 -0
  416. package/dist/embed/embed-page-chunk-IJPRKD63.js +1 -0
  417. package/dist/embed/embed-page-chunk-IK2TPQVX.js +1 -0
  418. package/dist/embed/embed-page-chunk-INGZ5SYE.js +1 -0
  419. package/dist/embed/embed-page-chunk-INUQ73SI.js +1 -0
  420. package/dist/embed/embed-page-chunk-IPI53MN3.js +1 -0
  421. package/dist/embed/embed-page-chunk-IPMWXKCK.js +1 -0
  422. package/dist/embed/embed-page-chunk-IRP2UOPH.js +1 -0
  423. package/dist/embed/embed-page-chunk-ISY7S7N6.js +1 -0
  424. package/dist/embed/embed-page-chunk-IT5VM3N7.js +1 -0
  425. package/dist/embed/embed-page-chunk-IV5C4DYL.js +5 -0
  426. package/dist/embed/embed-page-chunk-IX4WLWCY.js +28 -0
  427. package/dist/embed/embed-page-chunk-IYK5VAB3.js +1 -0
  428. package/dist/embed/embed-page-chunk-IZ6ZGFSG.js +1 -0
  429. package/dist/embed/embed-page-chunk-J4VBM2JB.js +1 -0
  430. package/dist/embed/embed-page-chunk-J7KNZGPV.js +1 -0
  431. package/dist/embed/embed-page-chunk-JADTV5YD.js +1 -0
  432. package/dist/embed/embed-page-chunk-JEW2Y2ED.js +1 -0
  433. package/dist/embed/embed-page-chunk-JFK56NZW.js +1 -0
  434. package/dist/embed/embed-page-chunk-JNXBKMN6.js +1 -0
  435. package/dist/embed/embed-page-chunk-JOJ4VSO5.js +1 -0
  436. package/dist/embed/embed-page-chunk-JQQ6C3ST.js +1 -0
  437. package/dist/embed/embed-page-chunk-JUZFORQA.js +1 -0
  438. package/dist/embed/embed-page-chunk-JYEMOI5G.js +1 -0
  439. package/dist/embed/embed-page-chunk-JYQTTU7F.js +1 -0
  440. package/dist/embed/embed-page-chunk-K2NBNWDK.js +1 -0
  441. package/dist/embed/embed-page-chunk-K7I5Z2RN.js +1 -0
  442. package/dist/embed/embed-page-chunk-K7JAB46X.js +1 -0
  443. package/dist/embed/embed-page-chunk-KE32OJIP.js +1 -0
  444. package/dist/embed/embed-page-chunk-KEKB3BUG.js +1 -0
  445. package/dist/embed/embed-page-chunk-KEL6XU6R.js +1 -0
  446. package/dist/embed/embed-page-chunk-KGP2RGEC.js +1 -0
  447. package/dist/embed/embed-page-chunk-KM5NL7BL.js +1 -0
  448. package/dist/embed/embed-page-chunk-KQNRWZKR.js +1 -0
  449. package/dist/embed/embed-page-chunk-KUTM5AGJ.js +1 -0
  450. package/dist/embed/embed-page-chunk-KW44NUT4.js +1 -0
  451. package/dist/embed/embed-page-chunk-KWRAXHKX.js +1 -0
  452. package/dist/embed/embed-page-chunk-KZWWYO7Z.js +1 -0
  453. package/dist/embed/embed-page-chunk-L2QFIJ4P.js +1 -0
  454. package/dist/embed/embed-page-chunk-L3RQ76LD.js +1 -0
  455. package/dist/embed/embed-page-chunk-L6GX525D.js +1 -0
  456. package/dist/embed/embed-page-chunk-LDFGGZC6.js +1 -0
  457. package/dist/embed/embed-page-chunk-LEAHYMKH.js +1 -0
  458. package/dist/embed/embed-page-chunk-LH2NUQ2C.js +1 -0
  459. package/dist/embed/embed-page-chunk-LIJVWBYO.js +1 -0
  460. package/dist/embed/embed-page-chunk-LJBLK3MD.js +1 -0
  461. package/dist/embed/embed-page-chunk-LJJJJZT7.js +1 -0
  462. package/dist/embed/embed-page-chunk-LJZ2VDC6.js +1 -0
  463. package/dist/embed/embed-page-chunk-LKBECLX2.js +1 -0
  464. package/dist/embed/embed-page-chunk-LL4XKLOG.js +1 -0
  465. package/dist/embed/embed-page-chunk-LLFEIUVK.js +1 -0
  466. package/dist/embed/embed-page-chunk-LMLHHN2B.js +1 -0
  467. package/dist/embed/embed-page-chunk-LOLMAI3V.js +1 -0
  468. package/dist/embed/embed-page-chunk-LPXAKW7Q.js +1 -0
  469. package/dist/embed/embed-page-chunk-LRB5IXLV.js +1 -0
  470. package/dist/embed/embed-page-chunk-LW3LUJEG.js +1 -0
  471. package/dist/embed/embed-page-chunk-LWERP7BS.js +1 -0
  472. package/dist/embed/embed-page-chunk-M4ACA43K.js +1 -0
  473. package/dist/embed/embed-page-chunk-M5HO3OG6.js +1 -0
  474. package/dist/embed/embed-page-chunk-M7F46E23.js +1 -0
  475. package/dist/embed/embed-page-chunk-MASNBRHM.js +1 -0
  476. package/dist/embed/embed-page-chunk-MB65DZAX.js +14 -0
  477. package/dist/embed/embed-page-chunk-MB77ZI4D.js +1 -0
  478. package/dist/embed/embed-page-chunk-MEC3JUW7.js +1 -0
  479. package/dist/embed/embed-page-chunk-MG5LALIS.js +1 -0
  480. package/dist/embed/embed-page-chunk-MGZK7ELC.js +2192 -0
  481. package/dist/embed/embed-page-chunk-MHSEFTKR.js +1 -0
  482. package/dist/embed/embed-page-chunk-MKV2QNSI.js +1 -0
  483. package/dist/embed/embed-page-chunk-MMHCEL7E.js +1 -0
  484. package/dist/embed/embed-page-chunk-MMXDBRLY.js +1 -0
  485. package/dist/embed/embed-page-chunk-MSYFW3OJ.js +1 -0
  486. package/dist/embed/embed-page-chunk-MVLHDASB.js +1 -0
  487. package/dist/embed/embed-page-chunk-N252QSMT.js +1 -0
  488. package/dist/embed/embed-page-chunk-N46WJ2FS.js +1 -0
  489. package/dist/embed/embed-page-chunk-N7NXBLSR.js +1 -0
  490. package/dist/embed/embed-page-chunk-NBNJGF7O.js +1 -0
  491. package/dist/embed/embed-page-chunk-NG7LKEPN.js +1 -0
  492. package/dist/embed/embed-page-chunk-NHOBB2JQ.js +1 -0
  493. package/dist/embed/embed-page-chunk-NIFSD4XH.js +1 -0
  494. package/dist/embed/embed-page-chunk-NJP7LGPJ.js +1 -0
  495. package/dist/embed/embed-page-chunk-NLMEH7HI.js +1 -0
  496. package/dist/embed/embed-page-chunk-NLZ6F3ON.js +1 -0
  497. package/dist/embed/embed-page-chunk-NMUKLFBY.js +1 -0
  498. package/dist/embed/embed-page-chunk-NMZP7U6I.js +1 -0
  499. package/dist/embed/embed-page-chunk-NN7VEJ2G.js +1 -0
  500. package/dist/embed/embed-page-chunk-NNNI4647.js +1 -0
  501. package/dist/embed/embed-page-chunk-NNZA747K.js +1 -0
  502. package/dist/embed/embed-page-chunk-NOMBKADH.js +1 -0
  503. package/dist/embed/embed-page-chunk-NQRVVPLU.js +1 -0
  504. package/dist/embed/embed-page-chunk-O2YMBFJK.js +1 -0
  505. package/dist/embed/embed-page-chunk-O4QK5LWZ.js +525 -0
  506. package/dist/embed/embed-page-chunk-O6DJHMEC.js +1 -0
  507. package/dist/embed/embed-page-chunk-OAUK7LXS.js +1 -0
  508. package/dist/embed/embed-page-chunk-OCFVEAMV.js +1 -0
  509. package/dist/embed/embed-page-chunk-OEC4EWNI.js +1 -0
  510. package/dist/embed/embed-page-chunk-OF6SGGWX.js +1 -0
  511. package/dist/embed/embed-page-chunk-OJ7436DP.js +1 -0
  512. package/dist/embed/embed-page-chunk-OK6DC5YX.js +1 -0
  513. package/dist/embed/embed-page-chunk-ONZ74YHS.js +1 -0
  514. package/dist/embed/embed-page-chunk-OOZDPBUK.js +69 -0
  515. package/dist/embed/embed-page-chunk-OPME5GF2.js +1 -0
  516. package/dist/embed/embed-page-chunk-ORPDSJ5S.js +1 -0
  517. package/dist/embed/embed-page-chunk-ORPUVSKY.js +1 -0
  518. package/dist/embed/embed-page-chunk-OWTE7YMF.js +1 -0
  519. package/dist/embed/embed-page-chunk-OZKVHTL6.js +1 -0
  520. package/dist/embed/embed-page-chunk-OZUIA6GJ.js +1 -0
  521. package/dist/embed/embed-page-chunk-P4MXODKA.js +1 -0
  522. package/dist/embed/embed-page-chunk-P56KTNVT.js +1 -0
  523. package/dist/embed/embed-page-chunk-PADSMXWH.js +3 -0
  524. package/dist/embed/embed-page-chunk-PEFXE5Y4.js +1 -0
  525. package/dist/embed/embed-page-chunk-PHVA2KHO.js +1 -0
  526. package/dist/embed/embed-page-chunk-PJJPSDVD.js +1 -0
  527. package/dist/embed/embed-page-chunk-PKNTJERD.js +1 -0
  528. package/dist/embed/embed-page-chunk-PLAF2Q2L.js +1 -0
  529. package/dist/embed/embed-page-chunk-PLNJRORR.js +1 -0
  530. package/dist/embed/embed-page-chunk-PO2WVZC2.js +1 -0
  531. package/dist/embed/embed-page-chunk-PRYNHKKK.js +1 -0
  532. package/dist/embed/embed-page-chunk-PSTS2K7H.js +1 -0
  533. package/dist/embed/embed-page-chunk-PVL27S2O.js +1 -0
  534. package/dist/embed/embed-page-chunk-PVOA7ARZ.js +1 -0
  535. package/dist/embed/embed-page-chunk-PXADN2PY.js +1 -0
  536. package/dist/embed/embed-page-chunk-Q2HL7S3R.js +41 -0
  537. package/dist/embed/embed-page-chunk-Q2LWO44N.js +1 -0
  538. package/dist/embed/embed-page-chunk-Q2YEQQJF.js +1 -0
  539. package/dist/embed/embed-page-chunk-Q3AOMIJ7.js +1 -0
  540. package/dist/embed/embed-page-chunk-Q4NFAO5G.js +1 -0
  541. package/dist/embed/embed-page-chunk-Q6ZPKMOZ.js +1 -0
  542. package/dist/embed/embed-page-chunk-QA2R2R55.js +165 -0
  543. package/dist/embed/embed-page-chunk-QANF3D34.js +1 -0
  544. package/dist/embed/embed-page-chunk-QBSFVKIB.js +1 -0
  545. package/dist/embed/embed-page-chunk-QCLLEPYT.js +1 -0
  546. package/dist/embed/embed-page-chunk-QDBK4ZDE.js +1 -0
  547. package/dist/embed/embed-page-chunk-QENDQ7H3.js +1 -0
  548. package/dist/embed/embed-page-chunk-QF7NBK3B.js +1 -0
  549. package/dist/embed/embed-page-chunk-QFTY233A.js +1 -0
  550. package/dist/embed/embed-page-chunk-QHV7PE5D.js +3 -0
  551. package/dist/embed/embed-page-chunk-QIJBDPZP.js +1 -0
  552. package/dist/embed/embed-page-chunk-QLA2XU73.js +1 -0
  553. package/dist/embed/embed-page-chunk-QNIB3Q7U.js +1 -0
  554. package/dist/embed/embed-page-chunk-QQLF4AV6.js +1 -0
  555. package/dist/embed/embed-page-chunk-QQUV5KZD.js +1 -0
  556. package/dist/embed/embed-page-chunk-QRKEL65F.js +1 -0
  557. package/dist/embed/embed-page-chunk-QRPDJVB7.js +1 -0
  558. package/dist/embed/embed-page-chunk-QVHTN5HT.js +1 -0
  559. package/dist/embed/embed-page-chunk-R2BGZIR7.js +1 -0
  560. package/dist/embed/embed-page-chunk-R2K4OIQO.js +1 -0
  561. package/dist/embed/embed-page-chunk-R4FTAO2H.js +1 -0
  562. package/dist/embed/embed-page-chunk-R54S6SKK.js +1 -0
  563. package/dist/embed/embed-page-chunk-R5I2GTYT.js +1 -0
  564. package/dist/embed/embed-page-chunk-R672RZXS.js +1 -0
  565. package/dist/embed/embed-page-chunk-RABAC5H3.js +1 -0
  566. package/dist/embed/embed-page-chunk-RG3BI65W.js +1 -0
  567. package/dist/embed/embed-page-chunk-RKPK7MLC.js +1 -0
  568. package/dist/embed/embed-page-chunk-RN7JLKLZ.js +1 -0
  569. package/dist/embed/embed-page-chunk-RNOETEGH.js +1 -0
  570. package/dist/embed/embed-page-chunk-RPK5SOLP.js +1 -0
  571. package/dist/embed/embed-page-chunk-RUOFG3OD.js +1 -0
  572. package/dist/embed/embed-page-chunk-RV2IAP52.js +1 -0
  573. package/dist/embed/embed-page-chunk-RXLB27EG.js +1 -0
  574. package/dist/embed/embed-page-chunk-S4XZPBRM.js +1 -0
  575. package/dist/embed/embed-page-chunk-SAML73QO.js +1 -0
  576. package/dist/embed/embed-page-chunk-SEH5ZYHX.js +1 -0
  577. package/dist/embed/embed-page-chunk-SL4X4KPS.js +1 -0
  578. package/dist/embed/embed-page-chunk-SMMEMIZS.js +1 -0
  579. package/dist/embed/embed-page-chunk-SMZUIXFD.js +1 -0
  580. package/dist/embed/embed-page-chunk-SQ4GANYE.js +1 -0
  581. package/dist/embed/embed-page-chunk-SRW4AAQ4.js +1 -0
  582. package/dist/embed/embed-page-chunk-SV2BM3WO.js +1 -0
  583. package/dist/embed/embed-page-chunk-SWGBMELE.js +1 -0
  584. package/dist/embed/embed-page-chunk-SYAPUMNM.js +1 -0
  585. package/dist/embed/embed-page-chunk-T4AZ556W.js +1 -0
  586. package/dist/embed/embed-page-chunk-T6QXBMXO.js +1 -0
  587. package/dist/embed/embed-page-chunk-TAOVZBLV.js +1 -0
  588. package/dist/embed/embed-page-chunk-TBRAGK3D.js +1 -0
  589. package/dist/embed/embed-page-chunk-TENLHB44.js +1 -0
  590. package/dist/embed/embed-page-chunk-TFSDCDJS.js +1 -0
  591. package/dist/embed/embed-page-chunk-TIGSOALR.js +1 -0
  592. package/dist/embed/embed-page-chunk-TKOSVUN2.js +1 -0
  593. package/dist/embed/embed-page-chunk-TLWGSINF.js +1 -0
  594. package/dist/embed/embed-page-chunk-TMUCZ7XO.js +1 -0
  595. package/dist/embed/embed-page-chunk-TP7772GL.js +1 -0
  596. package/dist/embed/embed-page-chunk-TPCI3CNJ.js +1 -0
  597. package/dist/embed/embed-page-chunk-TPGW6RUI.js +1 -0
  598. package/dist/embed/embed-page-chunk-TPQGFG2C.js +1 -0
  599. package/dist/embed/embed-page-chunk-TSZIWR3X.js +1 -0
  600. package/dist/embed/embed-page-chunk-TUFYJMMA.js +1 -0
  601. package/dist/embed/embed-page-chunk-TWDJUUXZ.js +1 -0
  602. package/dist/embed/embed-page-chunk-TWNAGURL.js +4 -0
  603. package/dist/embed/embed-page-chunk-TWU6UJLL.js +1 -0
  604. package/dist/embed/embed-page-chunk-TYA3PYZB.js +1 -0
  605. package/dist/embed/embed-page-chunk-U32PAI3Y.js +1 -0
  606. package/dist/embed/embed-page-chunk-U3B5KKSV.js +1 -0
  607. package/dist/embed/embed-page-chunk-U3YIXQYB.js +1 -0
  608. package/dist/embed/embed-page-chunk-U7OC25B3.js +1 -0
  609. package/dist/embed/embed-page-chunk-UBWHZLJN.js +1 -0
  610. package/dist/embed/embed-page-chunk-UCGT4CTV.js +1 -0
  611. package/dist/embed/embed-page-chunk-UCR4ZILJ.js +1 -0
  612. package/dist/embed/embed-page-chunk-UGBSF5HI.js +1 -0
  613. package/dist/embed/embed-page-chunk-UGCW7PZD.js +1 -0
  614. package/dist/embed/embed-page-chunk-UIZLGSJE.js +1 -0
  615. package/dist/embed/embed-page-chunk-UJODN4PG.js +1 -0
  616. package/dist/embed/embed-page-chunk-UPUUWWBK.js +1 -0
  617. package/dist/embed/embed-page-chunk-UR5VOXA3.js +1 -0
  618. package/dist/embed/embed-page-chunk-UZNSI2X3.js +1 -0
  619. package/dist/embed/embed-page-chunk-UZW2LQZV.js +1 -0
  620. package/dist/embed/embed-page-chunk-V2V73RFB.js +1 -0
  621. package/dist/embed/embed-page-chunk-V7R2Y72J.js +14 -0
  622. package/dist/embed/embed-page-chunk-VEYJHY36.js +1 -0
  623. package/dist/embed/embed-page-chunk-VNK6MED4.js +1 -0
  624. package/dist/embed/embed-page-chunk-VP2J7NES.js +1 -0
  625. package/dist/embed/embed-page-chunk-VRDH6A7Z.js +1 -0
  626. package/dist/embed/embed-page-chunk-VTUD3VPX.js +1 -0
  627. package/dist/embed/embed-page-chunk-VULBATQG.js +1 -0
  628. package/dist/embed/embed-page-chunk-VUOXEXHU.js +1 -0
  629. package/dist/embed/embed-page-chunk-VVTZ23LK.js +1 -0
  630. package/dist/embed/embed-page-chunk-VW3NF5NT.js +1 -0
  631. package/dist/embed/embed-page-chunk-VY6MAPHR.js +1 -0
  632. package/dist/embed/embed-page-chunk-WAANDEAQ.js +1 -0
  633. package/dist/embed/embed-page-chunk-WCKHIRD5.js +1 -0
  634. package/dist/embed/embed-page-chunk-WDS66MAN.js +1 -0
  635. package/dist/embed/embed-page-chunk-WLZW4FEZ.js +1 -0
  636. package/dist/embed/embed-page-chunk-WNEY2A2R.js +1 -0
  637. package/dist/embed/embed-page-chunk-WQOZWRIS.js +1 -0
  638. package/dist/embed/embed-page-chunk-WUYZIBLV.js +1 -0
  639. package/dist/embed/embed-page-chunk-WYJNNBFP.js +1 -0
  640. package/dist/embed/embed-page-chunk-X55NDWBH.js +1 -0
  641. package/dist/embed/embed-page-chunk-XA4KNRQW.js +1 -0
  642. package/dist/embed/embed-page-chunk-XAJFFWM3.js +1 -0
  643. package/dist/embed/embed-page-chunk-XIJHCNBW.js +1 -0
  644. package/dist/embed/embed-page-chunk-XNZ46IEF.js +1 -0
  645. package/dist/embed/embed-page-chunk-XO5WZF3D.js +1 -0
  646. package/dist/embed/embed-page-chunk-XPDEOKHX.js +1 -0
  647. package/dist/embed/embed-page-chunk-XQNO7AN3.js +1 -0
  648. package/dist/embed/embed-page-chunk-XR3Q4GDZ.js +1 -0
  649. package/dist/embed/embed-page-chunk-XRRCORI5.js +1 -0
  650. package/dist/embed/embed-page-chunk-XTMDFHMJ.js +1 -0
  651. package/dist/embed/embed-page-chunk-XUZKZF3V.js +1 -0
  652. package/dist/embed/embed-page-chunk-XWAJRAFC.js +1 -0
  653. package/dist/embed/embed-page-chunk-XWRBMESB.js +1 -0
  654. package/dist/embed/embed-page-chunk-XXT7RMBT.js +220 -0
  655. package/dist/embed/embed-page-chunk-XY5NGMFT.js +1 -0
  656. package/dist/embed/embed-page-chunk-XYCU2ZON.js +1 -0
  657. package/dist/embed/embed-page-chunk-XZ6CLWS2.js +1 -0
  658. package/dist/embed/embed-page-chunk-XZYJX7MY.js +1 -0
  659. package/dist/embed/embed-page-chunk-Y2JWLZJF.js +1 -0
  660. package/dist/embed/embed-page-chunk-Y4KTS6EE.js +1 -0
  661. package/dist/embed/embed-page-chunk-YBPVSBMU.js +1 -0
  662. package/dist/embed/embed-page-chunk-YEHTVTMO.js +1 -0
  663. package/dist/embed/embed-page-chunk-YFEUMUCL.js +1 -0
  664. package/dist/embed/embed-page-chunk-YFWCKZW7.js +1 -0
  665. package/dist/embed/embed-page-chunk-YHEFVON2.js +1 -0
  666. package/dist/embed/embed-page-chunk-YJBX3AFL.js +1 -0
  667. package/dist/embed/embed-page-chunk-YJZJFCLP.js +1 -0
  668. package/dist/embed/embed-page-chunk-YLUGLAWD.js +1 -0
  669. package/dist/embed/embed-page-chunk-YMMUR7L6.js +1 -0
  670. package/dist/embed/embed-page-chunk-YNIEMXW5.js +1 -0
  671. package/dist/embed/embed-page-chunk-YPK6G5D7.js +1 -0
  672. package/dist/embed/embed-page-chunk-Z26BSJ5Y.js +1 -0
  673. package/dist/embed/embed-page-chunk-Z2GE34ES.js +1 -0
  674. package/dist/embed/embed-page-chunk-Z6N3GKM5.js +1 -0
  675. package/dist/embed/embed-page-chunk-Z6PDLQOB.js +1 -0
  676. package/dist/embed/embed-page-chunk-Z7USDLHI.js +60 -0
  677. package/dist/embed/embed-page-chunk-ZESVZCWO.js +1 -0
  678. package/dist/embed/embed-page-chunk-ZITVGQ52.js +1 -0
  679. package/dist/embed/embed-page-chunk-ZNWEXQQ4.js +1 -0
  680. package/dist/embed/embed-page-chunk-ZQ6WYVOD.js +1 -0
  681. package/dist/embed/embed-page-chunk-ZR7ZLGLV.js +1 -0
  682. package/dist/embed/embed-page-chunk-ZT2EZUXI.js +1 -0
  683. package/dist/embed/embed-page-chunk-ZZCMWB6F.js +1 -0
  684. package/dist/embed/embed-page-cil-ZQIVHSN6.js +1 -0
  685. package/dist/embed/embed-page-cilkc-AJET62TW.js +1 -0
  686. package/dist/embed/embed-page-cilkcpp-FRBVBYEF.js +1 -0
  687. package/dist/embed/embed-page-classDiagram-2ON5EDUG-S5GEC2UC.js +1 -0
  688. package/dist/embed/embed-page-classDiagram-v2-WZHVMYZB-NL3HKXC3.js +1 -0
  689. package/dist/embed/embed-page-clean-OPHY52MY.js +1 -0
  690. package/dist/embed/embed-page-clike-5NRFTOCK.js +1 -0
  691. package/dist/embed/embed-page-clojure-4GC77VYK.js +1 -0
  692. package/dist/embed/embed-page-clojure-7B3FI7TH.js +1 -0
  693. package/dist/embed/embed-page-clojure-repl-56WG27Z3.js +1 -0
  694. package/dist/embed/embed-page-cmake-F3SKZMUJ.js +1 -0
  695. package/dist/embed/embed-page-cmake-UIBPQIVG.js +1 -0
  696. package/dist/embed/embed-page-cobol-7TW6OZHG.js +1 -0
  697. package/dist/embed/embed-page-code-highlighter-Y6CQA4CN.js +1 -0
  698. package/dist/embed/embed-page-coffeescript-BCKZ4N2E.js +1 -0
  699. package/dist/embed/embed-page-coffeescript-N2ENFNNR.js +1 -0
  700. package/dist/embed/embed-page-concurnas-MCN7VYPE.js +1 -0
  701. package/dist/embed/embed-page-cooklang-JSLOQBDM.js +1 -0
  702. package/dist/embed/embed-page-coq-WH3J7SKF.js +1 -0
  703. package/dist/embed/embed-page-coq-XRXAXI5X.js +1 -0
  704. package/dist/embed/embed-page-core-Q6IGWM4Q.js +1 -0
  705. package/dist/embed/embed-page-core-TQNBW2MM.js +1 -0
  706. package/dist/embed/embed-page-cos-MP7YM5FO.js +1 -0
  707. package/dist/embed/embed-page-cose-bilkent-S5V4N54A-KJMAAFJL.js +1 -0
  708. package/dist/embed/embed-page-cpp-FFAXKUCJ.js +1 -0
  709. package/dist/embed/embed-page-cpp-PRCT5QAC.js +1 -0
  710. package/dist/embed/embed-page-crmsh-PF5MF5PC.js +1 -0
  711. package/dist/embed/embed-page-crystal-GYFU35L2.js +1 -0
  712. package/dist/embed/embed-page-crystal-W2TOACW4.js +1 -0
  713. package/dist/embed/embed-page-csharp-DHR2XRZW.js +1 -0
  714. package/dist/embed/embed-page-csharp-UNF62ZBO.js +1 -0
  715. package/dist/embed/embed-page-cshtml-G7ML4LE3.js +1 -0
  716. package/dist/embed/embed-page-csp-UDQUZUZW.js +1 -0
  717. package/dist/embed/embed-page-csp-YPF3N7BE.js +1 -0
  718. package/dist/embed/embed-page-css-774MOM42.js +1 -0
  719. package/dist/embed/embed-page-css-EHGZALYG.js +1 -0
  720. package/dist/embed/embed-page-css-extras-SI7Q5IJ6.js +1 -0
  721. package/dist/embed/embed-page-csv-MT4GPPO7.js +1 -0
  722. package/dist/embed/embed-page-cue-BMTFVAKL.js +1 -0
  723. package/dist/embed/embed-page-cypher-QDHM3LFO.js +1 -0
  724. package/dist/embed/embed-page-d-KHBJT5ZU.js +1 -0
  725. package/dist/embed/embed-page-d-VF7XFFMN.js +1 -0
  726. package/dist/embed/embed-page-dagre-6UL2VRFP-QSIK5LGS.js +4 -0
  727. package/dist/embed/embed-page-dart-3L3U2DJ3.js +1 -0
  728. package/dist/embed/embed-page-dart-6AOCMAXR.js +1 -0
  729. package/dist/embed/embed-page-dataweave-LNNDNKWG.js +1 -0
  730. package/dist/embed/embed-page-dax-J2FYUNXR.js +1 -0
  731. package/dist/embed/embed-page-delphi-T3RKZ33G.js +1 -0
  732. package/dist/embed/embed-page-dhall-MGZ2X6D6.js +1 -0
  733. package/dist/embed/embed-page-diagram-PSM6KHXK-PLOM5KG7.js +24 -0
  734. package/dist/embed/embed-page-diagram-QEK2KX5R-RUNGK25X.js +43 -0
  735. package/dist/embed/embed-page-diagram-S2PKOQOG-LWDHM5TL.js +24 -0
  736. package/dist/embed/embed-page-diff-AZNWSOQ3.js +1 -0
  737. package/dist/embed/embed-page-diff-BYMKQAM5.js +1 -0
  738. package/dist/embed/embed-page-django-5BVMXLOO.js +1 -0
  739. package/dist/embed/embed-page-django-OLTKKRJC.js +1 -0
  740. package/dist/embed/embed-page-dns-LKEA7NVQ.js +1 -0
  741. package/dist/embed/embed-page-dns-zone-file-MLDJYBWW.js +1 -0
  742. package/dist/embed/embed-page-docker-7ZWVGIHF.js +1 -0
  743. package/dist/embed/embed-page-dockerfile-YJABIQ3Q.js +1 -0
  744. package/dist/embed/embed-page-dos-CZOUXBDN.js +1 -0
  745. package/dist/embed/embed-page-dot-USOBKZIN.js +1 -0
  746. package/dist/embed/embed-page-dsconfig-5E37MQM4.js +1 -0
  747. package/dist/embed/embed-page-dts-DPBFPVA5.js +1 -0
  748. package/dist/embed/embed-page-dust-OAZ4NEIP.js +1 -0
  749. package/dist/embed/embed-page-ebnf-XFC6NV6I.js +1 -0
  750. package/dist/embed/embed-page-ebnf-XSYP4JUB.js +1 -0
  751. package/dist/embed/embed-page-echarts-7KZDMH4F.js +1 -0
  752. package/dist/embed/embed-page-editorconfig-FQHUYGTR.js +1 -0
  753. package/dist/embed/embed-page-eiffel-Z22STSPG.js +1 -0
  754. package/dist/embed/embed-page-ejs-VHHMOK6Y.js +1 -0
  755. package/dist/embed/embed-page-elixir-BGO72I74.js +1 -0
  756. package/dist/embed/embed-page-elixir-H3KPRECP.js +1 -0
  757. package/dist/embed/embed-page-elm-HZWFYFUN.js +1 -0
  758. package/dist/embed/embed-page-elm-IZAWNYFC.js +1 -0
  759. package/dist/embed/embed-page-erDiagram-Q2GNP2WA-C6CZYEPF.js +60 -0
  760. package/dist/embed/embed-page-erb-AK646PXX.js +1 -0
  761. package/dist/embed/embed-page-erb-YBV2NO4W.js +1 -0
  762. package/dist/embed/embed-page-erlang-6LMYF4BN.js +1 -0
  763. package/dist/embed/embed-page-erlang-PXGHX7XB.js +1 -0
  764. package/dist/embed/embed-page-erlang-repl-UJPNMOCE.js +1 -0
  765. package/dist/embed/embed-page-etlua-XNKJ7UTQ.js +1 -0
  766. package/dist/embed/embed-page-excel-PCWQ5ZDK.js +1 -0
  767. package/dist/embed/embed-page-excel-formula-CEZ7KVDN.js +1 -0
  768. package/dist/embed/embed-page-factor-3PZO4CCJ.js +1 -0
  769. package/dist/embed/embed-page-false-OX3DNOF4.js +1 -0
  770. package/dist/embed/embed-page-firestore-security-rules-IQBOB7PZ.js +1 -0
  771. package/dist/embed/embed-page-fix-Q3F7Z2HQ.js +1 -0
  772. package/dist/embed/embed-page-flix-LVDGNPRS.js +1 -0
  773. package/dist/embed/embed-page-flow-4UPRJEF2.js +1 -0
  774. package/dist/embed/embed-page-flowDiagram-NV44I4VS-DLT3KEOP.js +162 -0
  775. package/dist/embed/embed-page-fortran-65P3TPQ7.js +1 -0
  776. package/dist/embed/embed-page-fortran-LWYFHCCB.js +1 -0
  777. package/dist/embed/embed-page-fsharp-BSA736XP.js +1 -0
  778. package/dist/embed/embed-page-fsharp-GDIVPYAB.js +1 -0
  779. package/dist/embed/embed-page-ftl-27Y3T2XT.js +1 -0
  780. package/dist/embed/embed-page-gams-7UM23CTD.js +1 -0
  781. package/dist/embed/embed-page-ganttDiagram-JELNMOA3-YXTLQI5X.js +267 -0
  782. package/dist/embed/embed-page-gap-JNDMTZYG.js +1 -0
  783. package/dist/embed/embed-page-gauss-4OCQQOQQ.js +1 -0
  784. package/dist/embed/embed-page-gcode-7ZDB2FDS.js +1 -0
  785. package/dist/embed/embed-page-gcode-U2UWK2IF.js +1 -0
  786. package/dist/embed/embed-page-gdscript-UOAGAMMO.js +1 -0
  787. package/dist/embed/embed-page-gedcom-WSTJUY6R.js +1 -0
  788. package/dist/embed/embed-page-gettext-BNGNGT6W.js +1 -0
  789. package/dist/embed/embed-page-gherkin-CPRNYA24.js +1 -0
  790. package/dist/embed/embed-page-gherkin-IVS5YUAH.js +1 -0
  791. package/dist/embed/embed-page-git-WWKMYMUR.js +1 -0
  792. package/dist/embed/embed-page-gitGraph-F6HP7TQM-AT36TKLZ.js +1 -0
  793. package/dist/embed/embed-page-gitGraphDiagram-NY62KEGX-U36ULO4Y.js +65 -0
  794. package/dist/embed/embed-page-glsl-2QJTMF6X.js +1 -0
  795. package/dist/embed/embed-page-glsl-6C6F26XK.js +1 -0
  796. package/dist/embed/embed-page-gml-67HHHYLB.js +1 -0
  797. package/dist/embed/embed-page-gml-ZFY32X23.js +1 -0
  798. package/dist/embed/embed-page-gn-KO2XPJDA.js +1 -0
  799. package/dist/embed/embed-page-go-HAQ77N2R.js +1 -0
  800. package/dist/embed/embed-page-go-SYFPAV4X.js +1 -0
  801. package/dist/embed/embed-page-go-module-XICPRQ5N.js +1 -0
  802. package/dist/embed/embed-page-golo-KQZ2PQG7.js +1 -0
  803. package/dist/embed/embed-page-gradle-7PN7DUJT.js +1 -0
  804. package/dist/embed/embed-page-gradle-GN34ZONG.js +1 -0
  805. package/dist/embed/embed-page-graphql-CVSK5MA2.js +1 -0
  806. package/dist/embed/embed-page-groovy-3R2X7GQD.js +1 -0
  807. package/dist/embed/embed-page-groovy-YCAJV7XB.js +1 -0
  808. package/dist/embed/embed-page-haml-6VEPXH2O.js +1 -0
  809. package/dist/embed/embed-page-haml-TYLXIXHD.js +1 -0
  810. package/dist/embed/embed-page-handlebars-7Y74ECRG.js +1 -0
  811. package/dist/embed/embed-page-handlebars-WVRARLIY.js +1 -0
  812. package/dist/embed/embed-page-haskell-7U743UEW.js +1 -0
  813. package/dist/embed/embed-page-haskell-BATAJHBH.js +1 -0
  814. package/dist/embed/embed-page-haxe-C234CZTQ.js +1 -0
  815. package/dist/embed/embed-page-haxe-PYBC3T4M.js +1 -0
  816. package/dist/embed/embed-page-hcl-BITT4ESF.js +1 -0
  817. package/dist/embed/embed-page-hlsl-KYOSJMB5.js +1 -0
  818. package/dist/embed/embed-page-hoon-NTFQ2YYJ.js +1 -0
  819. package/dist/embed/embed-page-hpkp-KN6XKLGI.js +1 -0
  820. package/dist/embed/embed-page-hsp-QFZDPSDA.js +1 -0
  821. package/dist/embed/embed-page-hsts-5COZ5S32.js +1 -0
  822. package/dist/embed/embed-page-html2canvas-HMTC4TFR.js +1 -0
  823. package/dist/embed/embed-page-htmlbars-L7NSSG62.js +1 -0
  824. package/dist/embed/embed-page-http-ALSJXSOJ.js +1 -0
  825. package/dist/embed/embed-page-http-E4UEITFW.js +1 -0
  826. package/dist/embed/embed-page-hy-5ROLZHNZ.js +1 -0
  827. package/dist/embed/embed-page-ichigojam-T6UG6OA7.js +1 -0
  828. package/dist/embed/embed-page-icon-74CJY73I.js +1 -0
  829. package/dist/embed/embed-page-icu-message-format-2RX6DV2B.js +1 -0
  830. package/dist/embed/embed-page-idris-OH6VYNRJ.js +1 -0
  831. package/dist/embed/embed-page-iecst-SJFFJ4PC.js +1 -0
  832. package/dist/embed/embed-page-ignore-QLXHF7QX.js +1 -0
  833. package/dist/embed/embed-page-index.es-N6YIYNKZ.js +23 -0
  834. package/dist/embed/embed-page-info-NVLQJR56-2XLQRFF4.js +1 -0
  835. package/dist/embed/embed-page-infoDiagram-WHAUD3N6-2U2VIHJP.js +2 -0
  836. package/dist/embed/embed-page-inform7-6Y7MAAME.js +1 -0
  837. package/dist/embed/embed-page-inform7-HZB3RNF4.js +1 -0
  838. package/dist/embed/embed-page-ini-7C2L4IDF.js +1 -0
  839. package/dist/embed/embed-page-ini-TMKFFGPD.js +1 -0
  840. package/dist/embed/embed-page-io-X5SCSO5G.js +1 -0
  841. package/dist/embed/embed-page-irpf90-A5FIGB26.js +1 -0
  842. package/dist/embed/embed-page-isbl-Q77V4FXF.js +1 -0
  843. package/dist/embed/embed-page-j-MA6BTTGA.js +1 -0
  844. package/dist/embed/embed-page-java-CYPVO64F.js +1 -0
  845. package/dist/embed/embed-page-java-O37XO6YL.js +1 -0
  846. package/dist/embed/embed-page-javadoc-LWLUAHHX.js +1 -0
  847. package/dist/embed/embed-page-javadoclike-BMEJGG2H.js +1 -0
  848. package/dist/embed/embed-page-javascript-GU26522Z.js +1 -0
  849. package/dist/embed/embed-page-javascript-M37PIZZC.js +1 -0
  850. package/dist/embed/embed-page-javastacktrace-ENINDMIF.js +1 -0
  851. package/dist/embed/embed-page-jboss-cli-Q2WN2KZS.js +1 -0
  852. package/dist/embed/embed-page-jexl-EU2C4LRG.js +1 -0
  853. package/dist/embed/embed-page-jolie-WJIQVPRR.js +1 -0
  854. package/dist/embed/embed-page-journeyDiagram-XKPGCS4Q-D4A2GN62.js +139 -0
  855. package/dist/embed/embed-page-jq-BRF5PIAN.js +1 -0
  856. package/dist/embed/embed-page-js-extras-WQMVOPIZ.js +1 -0
  857. package/dist/embed/embed-page-js-templates-YO6IJU6R.js +1 -0
  858. package/dist/embed/embed-page-jsdoc-ZKI7O6VF.js +1 -0
  859. package/dist/embed/embed-page-json-MRFYB7NT.js +1 -0
  860. package/dist/embed/embed-page-json-PSHSOWQY.js +1 -0
  861. package/dist/embed/embed-page-json5-VQKDKRNE.js +1 -0
  862. package/dist/embed/embed-page-jsonp-ANEJBBKD.js +1 -0
  863. package/dist/embed/embed-page-jsstacktrace-XYAXX4Z3.js +1 -0
  864. package/dist/embed/embed-page-jsx-FZEE3QI5.js +1 -0
  865. package/dist/embed/embed-page-julia-5W6JANPT.js +1 -0
  866. package/dist/embed/embed-page-julia-EY2DW2U2.js +1 -0
  867. package/dist/embed/embed-page-julia-repl-O5XO6CSL.js +1 -0
  868. package/dist/embed/embed-page-kanban-definition-3W4ZIXB7-5JTDNV4G.js +89 -0
  869. package/dist/embed/embed-page-katex-BO63LHUI.js +261 -0
  870. package/dist/embed/embed-page-keepalived-OPG3P3WJ.js +1 -0
  871. package/dist/embed/embed-page-keyman-CXJENJBT.js +1 -0
  872. package/dist/embed/embed-page-kotlin-62Q32YH3.js +1 -0
  873. package/dist/embed/embed-page-kotlin-V4IBLBDP.js +1 -0
  874. package/dist/embed/embed-page-kumir-TIJGTYC3.js +1 -0
  875. package/dist/embed/embed-page-kusto-BXI53DND.js +1 -0
  876. package/dist/embed/embed-page-lasso-2CPND7XH.js +1 -0
  877. package/dist/embed/embed-page-latex-F3X5K6QF.js +1 -0
  878. package/dist/embed/embed-page-latex-MVG52AHA.js +1 -0
  879. package/dist/embed/embed-page-latte-J3LVOB6S.js +1 -0
  880. package/dist/embed/embed-page-ldif-5OWTENAQ.js +1 -0
  881. package/dist/embed/embed-page-leaf-EYR425IG.js +1 -0
  882. package/dist/embed/embed-page-less-S6CBMQQZ.js +1 -0
  883. package/dist/embed/embed-page-less-WDPLNQ5B.js +1 -0
  884. package/dist/embed/embed-page-lilypond-IJV67NKP.js +1 -0
  885. package/dist/embed/embed-page-linker-script-MIX3HOEH.js +1 -0
  886. package/dist/embed/embed-page-liquid-CFWS6T2J.js +1 -0
  887. package/dist/embed/embed-page-lisp-C6XPBZ5U.js +1 -0
  888. package/dist/embed/embed-page-lisp-IM4ILKS7.js +1 -0
  889. package/dist/embed/embed-page-livecodeserver-6F3SUK5W.js +1 -0
  890. package/dist/embed/embed-page-livescript-GNIYPIHH.js +1 -0
  891. package/dist/embed/embed-page-livescript-HOLSYBIG.js +1 -0
  892. package/dist/embed/embed-page-llvm-IWL5DLNH.js +1 -0
  893. package/dist/embed/embed-page-llvm-K2USHCCC.js +1 -0
  894. package/dist/embed/embed-page-log-BLJX5RSC.js +1 -0
  895. package/dist/embed/embed-page-lolcode-6COIIRQ6.js +1 -0
  896. package/dist/embed/embed-page-lsl-KDZSWM6S.js +1 -0
  897. package/dist/embed/embed-page-lua-5KEV5KHK.js +1 -0
  898. package/dist/embed/embed-page-lua-F7VBLUI5.js +1 -0
  899. package/dist/embed/embed-page-magma-TTQUX26J.js +1 -0
  900. package/dist/embed/embed-page-makefile-4VQZE7FW.js +1 -0
  901. package/dist/embed/embed-page-makefile-LDN5QGHW.js +1 -0
  902. package/dist/embed/embed-page-markdown-GU3NFA6A.js +1 -0
  903. package/dist/embed/embed-page-markdown-ODPEZXUU.js +1 -0
  904. package/dist/embed/embed-page-markup-W6JMQ64H.js +1 -0
  905. package/dist/embed/embed-page-markup-templating-RYGNVTG7.js +1 -0
  906. package/dist/embed/embed-page-mata-D4O4BNGS.js +1 -0
  907. package/dist/embed/embed-page-mathematica-YSU2VUX4.js +1 -0
  908. package/dist/embed/embed-page-matlab-6TYO6LKK.js +1 -0
  909. package/dist/embed/embed-page-matlab-DCIHZIZM.js +1 -0
  910. package/dist/embed/embed-page-maxima-K2VWPGLA.js +1 -0
  911. package/dist/embed/embed-page-maxscript-3ARRWLS6.js +1 -0
  912. package/dist/embed/embed-page-mel-E3F6H7ZF.js +1 -0
  913. package/dist/embed/embed-page-mel-YGI273IY.js +1 -0
  914. package/dist/embed/embed-page-mercury-LXCDDOJN.js +1 -0
  915. package/dist/embed/embed-page-mermaid-4FMYB3TJ.js +1 -0
  916. package/dist/embed/embed-page-mermaid-CW4QCAH3.js +18 -0
  917. package/dist/embed/embed-page-metafont-33QDNLJC.js +1 -0
  918. package/dist/embed/embed-page-mindmap-definition-VGOIOE7T-LVIRJQDW.js +68 -0
  919. package/dist/embed/embed-page-mipsasm-HSMSNEPP.js +1 -0
  920. package/dist/embed/embed-page-mizar-OTR4FHWG.js +1 -0
  921. package/dist/embed/embed-page-mizar-ZDNSLX4H.js +1 -0
  922. package/dist/embed/embed-page-mojolicious-2VJDUL4M.js +1 -0
  923. package/dist/embed/embed-page-mongodb-E62Y62DN.js +1 -0
  924. package/dist/embed/embed-page-monkey-KOVSP7SE.js +1 -0
  925. package/dist/embed/embed-page-monkey-MWSXB6DH.js +1 -0
  926. package/dist/embed/embed-page-moonscript-7DWCIDI5.js +1 -0
  927. package/dist/embed/embed-page-moonscript-AIMMMW7W.js +1 -0
  928. package/dist/embed/embed-page-n1ql-TKR2PAQ4.js +1 -0
  929. package/dist/embed/embed-page-n1ql-VSPMFQEE.js +1 -0
  930. package/dist/embed/embed-page-n4js-VQSAFSQG.js +1 -0
  931. package/dist/embed/embed-page-nand2tetris-hdl-ZN4LQDMB.js +1 -0
  932. package/dist/embed/embed-page-naniscript-FX42SAZY.js +1 -0
  933. package/dist/embed/embed-page-nasm-FGR3ELJL.js +1 -0
  934. package/dist/embed/embed-page-neon-4JXYQJP3.js +1 -0
  935. package/dist/embed/embed-page-nevod-2EHVRC32.js +1 -0
  936. package/dist/embed/embed-page-nginx-3W4BPZZB.js +1 -0
  937. package/dist/embed/embed-page-nginx-672JEBEN.js +1 -0
  938. package/dist/embed/embed-page-nim-CNSA5KTJ.js +1 -0
  939. package/dist/embed/embed-page-nim-CS7GVCRH.js +1 -0
  940. package/dist/embed/embed-page-nix-H37VR2HL.js +1 -0
  941. package/dist/embed/embed-page-nix-ODG6AI37.js +1 -0
  942. package/dist/embed/embed-page-node-repl-F5RCYIN3.js +1 -0
  943. package/dist/embed/embed-page-nsis-LEW5NHHS.js +1 -0
  944. package/dist/embed/embed-page-nsis-P73IQUMW.js +1 -0
  945. package/dist/embed/embed-page-objectivec-GOD2BEHI.js +1 -0
  946. package/dist/embed/embed-page-objectivec-UO34JBT5.js +1 -0
  947. package/dist/embed/embed-page-ocaml-ODOKMPKS.js +1 -0
  948. package/dist/embed/embed-page-ocaml-PW67TSNU.js +1 -0
  949. package/dist/embed/embed-page-odin-42BCJRMU.js +1 -0
  950. package/dist/embed/embed-page-opencl-FWU2AVTW.js +1 -0
  951. package/dist/embed/embed-page-openqasm-D2QQCO47.js +1 -0
  952. package/dist/embed/embed-page-openscad-LZPRFY2W.js +1 -0
  953. package/dist/embed/embed-page-oxygene-HZG7OO7G.js +1 -0
  954. package/dist/embed/embed-page-oz-MQNQCKRU.js +1 -0
  955. package/dist/embed/embed-page-packet-BFZMPI3H-JUHAABU6.js +1 -0
  956. package/dist/embed/embed-page-parigp-MAX3X22G.js +1 -0
  957. package/dist/embed/embed-page-parser-2WFCRGYE.js +1 -0
  958. package/dist/embed/embed-page-parser3-C3KVU5ZC.js +1 -0
  959. package/dist/embed/embed-page-pascal-LVXMXCNE.js +1 -0
  960. package/dist/embed/embed-page-pascaligo-6RIW5OHU.js +1 -0
  961. package/dist/embed/embed-page-pcaxis-ZO5S5UAO.js +1 -0
  962. package/dist/embed/embed-page-peoplecode-EAE6M4AF.js +1 -0
  963. package/dist/embed/embed-page-perl-CAUIKKUT.js +1 -0
  964. package/dist/embed/embed-page-perl-NCR5YMVT.js +1 -0
  965. package/dist/embed/embed-page-pf-TXMTVH7H.js +1 -0
  966. package/dist/embed/embed-page-pgsql-M7L7YRCD.js +1 -0
  967. package/dist/embed/embed-page-php-IE2N3QI4.js +1 -0
  968. package/dist/embed/embed-page-php-QCBSAYIC.js +1 -0
  969. package/dist/embed/embed-page-php-extras-VRZO47SA.js +1 -0
  970. package/dist/embed/embed-page-php-template-U54UCRKN.js +1 -0
  971. package/dist/embed/embed-page-phpdoc-ZQWB2OXG.js +1 -0
  972. package/dist/embed/embed-page-pie-7BOR55EZ-GU56BHQJ.js +1 -0
  973. package/dist/embed/embed-page-pieDiagram-ADFJNKIX-JXFHXEAJ.js +30 -0
  974. package/dist/embed/embed-page-plaintext-OINTKMAM.js +1 -0
  975. package/dist/embed/embed-page-plant-uml-3RVWLPWM.js +1 -0
  976. package/dist/embed/embed-page-plsql-XQEBXO73.js +1 -0
  977. package/dist/embed/embed-page-pony-UEK5X7OI.js +1 -0
  978. package/dist/embed/embed-page-powerquery-DEKKCZY7.js +1 -0
  979. package/dist/embed/embed-page-powershell-EBW7RZTN.js +1 -0
  980. package/dist/embed/embed-page-powershell-UMB53SPC.js +1 -0
  981. package/dist/embed/embed-page-processing-56OIROQG.js +1 -0
  982. package/dist/embed/embed-page-processing-ZIDQ7SB3.js +1 -0
  983. package/dist/embed/embed-page-profile-6SSPU7PG.js +1 -0
  984. package/dist/embed/embed-page-prolog-7JA2UBRP.js +1 -0
  985. package/dist/embed/embed-page-prolog-L55HYSKT.js +1 -0
  986. package/dist/embed/embed-page-promql-L4YBO3EF.js +1 -0
  987. package/dist/embed/embed-page-properties-O3BOEJXJ.js +1 -0
  988. package/dist/embed/embed-page-properties-VGZTUJ5E.js +1 -0
  989. package/dist/embed/embed-page-protobuf-F7X2PLJJ.js +1 -0
  990. package/dist/embed/embed-page-protobuf-GS5HMEMS.js +1 -0
  991. package/dist/embed/embed-page-psl-HLKSMRWT.js +1 -0
  992. package/dist/embed/embed-page-pug-MI7HPGUX.js +1 -0
  993. package/dist/embed/embed-page-puppet-2HD3DPH2.js +1 -0
  994. package/dist/embed/embed-page-puppet-BRWZHTKL.js +1 -0
  995. package/dist/embed/embed-page-pure-FVSDVQ2B.js +1 -0
  996. package/dist/embed/embed-page-purebasic-PPHAGMQH.js +1 -0
  997. package/dist/embed/embed-page-purebasic-UVZDR2HE.js +1 -0
  998. package/dist/embed/embed-page-purescript-Q3TGKQZY.js +1 -0
  999. package/dist/embed/embed-page-purify-QTVE4GEG.js +8 -0
  1000. package/dist/embed/embed-page-python-NO3SIOCK.js +1 -0
  1001. package/dist/embed/embed-page-python-YAPGCWHR.js +1 -0
  1002. package/dist/embed/embed-page-python-repl-EIGKWV4T.js +1 -0
  1003. package/dist/embed/embed-page-q-5YCCZLRO.js +1 -0
  1004. package/dist/embed/embed-page-q-FWJ5L5RH.js +1 -0
  1005. package/dist/embed/embed-page-qml-PNZK27ST.js +1 -0
  1006. package/dist/embed/embed-page-qml-YVZULPLY.js +1 -0
  1007. package/dist/embed/embed-page-qore-QU7W2FQD.js +1 -0
  1008. package/dist/embed/embed-page-qsharp-FNGNB3PK.js +1 -0
  1009. package/dist/embed/embed-page-quadrantDiagram-AYHSOK5B-4BXTDPJ4.js +7 -0
  1010. package/dist/embed/embed-page-r-52DQANKK.js +1 -0
  1011. package/dist/embed/embed-page-r-B2QMYOFX.js +1 -0
  1012. package/dist/embed/embed-page-racket-OA22GPFB.js +1 -0
  1013. package/dist/embed/embed-page-radar-NHE76QYJ-A7QQXLRI.js +1 -0
  1014. package/dist/embed/embed-page-reason-QQ4RYUQI.js +1 -0
  1015. package/dist/embed/embed-page-reasonml-CQAWSREB.js +1 -0
  1016. package/dist/embed/embed-page-regex-5JJLL4V6.js +1 -0
  1017. package/dist/embed/embed-page-rego-OLGGN4OK.js +1 -0
  1018. package/dist/embed/embed-page-renpy-72F6BTO6.js +1 -0
  1019. package/dist/embed/embed-page-requirementDiagram-UZGBJVZJ-WA3XXOP7.js +64 -0
  1020. package/dist/embed/embed-page-rescript-VYN4PAG7.js +1 -0
  1021. package/dist/embed/embed-page-rest-YZNSQW6O.js +1 -0
  1022. package/dist/embed/embed-page-rib-U4ELGIV2.js +1 -0
  1023. package/dist/embed/embed-page-rip-ZA4CVYFN.js +1 -0
  1024. package/dist/embed/embed-page-roboconf-5IGYRDNH.js +1 -0
  1025. package/dist/embed/embed-page-roboconf-HKSGWVI6.js +1 -0
  1026. package/dist/embed/embed-page-robotframework-ARNA4YNR.js +1 -0
  1027. package/dist/embed/embed-page-routeros-DKQKHPKR.js +1 -0
  1028. package/dist/embed/embed-page-rsl-WZYNFUWJ.js +1 -0
  1029. package/dist/embed/embed-page-ruby-DLLZKK7A.js +1 -0
  1030. package/dist/embed/embed-page-ruby-TKJZO362.js +1 -0
  1031. package/dist/embed/embed-page-ruleslanguage-7CSB4CWD.js +1 -0
  1032. package/dist/embed/embed-page-rust-6JUJCSHC.js +1 -0
  1033. package/dist/embed/embed-page-rust-ZZUD5RKM.js +1 -0
  1034. package/dist/embed/embed-page-sankeyDiagram-TZEHDZUN-SAVUI2Q4.js +10 -0
  1035. package/dist/embed/embed-page-sas-6H3LYHVP.js +1 -0
  1036. package/dist/embed/embed-page-sas-EUBD2V4Z.js +1 -0
  1037. package/dist/embed/embed-page-sass-U6G7R7AZ.js +1 -0
  1038. package/dist/embed/embed-page-scala-HFYNBK2U.js +1 -0
  1039. package/dist/embed/embed-page-scala-OJM3677P.js +1 -0
  1040. package/dist/embed/embed-page-scheme-KBT7Z3ND.js +1 -0
  1041. package/dist/embed/embed-page-scheme-QQ2VPTFQ.js +1 -0
  1042. package/dist/embed/embed-page-scilab-LA3HLVKQ.js +1 -0
  1043. package/dist/embed/embed-page-scss-FDEUPWYR.js +1 -0
  1044. package/dist/embed/embed-page-scss-IH2AODYU.js +1 -0
  1045. package/dist/embed/embed-page-sequenceDiagram-WL72ISMW-C2QRTOTL.js +145 -0
  1046. package/dist/embed/embed-page-shell-O7OU7Y7F.js +1 -0
  1047. package/dist/embed/embed-page-shell-session-CPCKA76Q.js +1 -0
  1048. package/dist/embed/embed-page-smali-3HHDEBNE.js +1 -0
  1049. package/dist/embed/embed-page-smali-L7H7BQUY.js +1 -0
  1050. package/dist/embed/embed-page-smalltalk-KQLA6XRI.js +1 -0
  1051. package/dist/embed/embed-page-smalltalk-WMM37MR4.js +1 -0
  1052. package/dist/embed/embed-page-smarty-AF5LZRHA.js +1 -0
  1053. package/dist/embed/embed-page-sml-4ARWLXZU.js +1 -0
  1054. package/dist/embed/embed-page-sml-6BNN3PMR.js +1 -0
  1055. package/dist/embed/embed-page-solidity-5WL56MR7.js +1 -0
  1056. package/dist/embed/embed-page-solution-file-FJJU2R2L.js +1 -0
  1057. package/dist/embed/embed-page-soy-54PPSPCO.js +1 -0
  1058. package/dist/embed/embed-page-sparql-AC7LG2EE.js +1 -0
  1059. package/dist/embed/embed-page-splunk-spl-YBP24JOS.js +1 -0
  1060. package/dist/embed/embed-page-sqf-4E5P576B.js +1 -0
  1061. package/dist/embed/embed-page-sqf-CSHANDQB.js +1 -0
  1062. package/dist/embed/embed-page-sql-MGWNK6FE.js +1 -0
  1063. package/dist/embed/embed-page-sql-ZOJORZUC.js +1 -0
  1064. package/dist/embed/embed-page-sql_more-NACOUKSZ.js +1 -0
  1065. package/dist/embed/embed-page-squirrel-XG35KUR2.js +1 -0
  1066. package/dist/embed/embed-page-stan-GDB32LYB.js +1 -0
  1067. package/dist/embed/embed-page-stan-UJ7WCNJT.js +1 -0
  1068. package/dist/embed/embed-page-stata-DEQ57OIC.js +1 -0
  1069. package/dist/embed/embed-page-stata-WJUFDMUW.js +1 -0
  1070. package/dist/embed/embed-page-stateDiagram-FKZM4ZOC-6LDVHEHS.js +1 -0
  1071. package/dist/embed/embed-page-stateDiagram-v2-4FDKWEC3-UJYGEYF5.js +1 -0
  1072. package/dist/embed/embed-page-step21-6AYDKM5N.js +1 -0
  1073. package/dist/embed/embed-page-stylus-CFL6FZN3.js +1 -0
  1074. package/dist/embed/embed-page-stylus-MLEF22IY.js +1 -0
  1075. package/dist/embed/embed-page-subunit-OZQ2HNNA.js +1 -0
  1076. package/dist/embed/embed-page-supercollider-ZK2ECEDQ.js +1 -0
  1077. package/dist/embed/embed-page-swift-MNLMKF5F.js +1 -0
  1078. package/dist/embed/embed-page-swift-UJP2CPA4.js +1 -0
  1079. package/dist/embed/embed-page-systemd-DQXTIGWD.js +1 -0
  1080. package/dist/embed/embed-page-t4-cs-ZPHNHWPR.js +1 -0
  1081. package/dist/embed/embed-page-t4-templating-OA7FNPXM.js +1 -0
  1082. package/dist/embed/embed-page-t4-vb-XBX2HBI5.js +1 -0
  1083. package/dist/embed/embed-page-taggerscript-XVALJYA3.js +1 -0
  1084. package/dist/embed/embed-page-tap-EMOHKH5F.js +1 -0
  1085. package/dist/embed/embed-page-tap-HZHER7FY.js +1 -0
  1086. package/dist/embed/embed-page-tcl-GN4WSRHR.js +1 -0
  1087. package/dist/embed/embed-page-tcl-T3WWKS3Q.js +1 -0
  1088. package/dist/embed/embed-page-textile-OXFYF2DV.js +1 -0
  1089. package/dist/embed/embed-page-thrift-Q26IKVBC.js +1 -0
  1090. package/dist/embed/embed-page-timeline-definition-IT6M3QCI-OF6FTGVN.js +61 -0
  1091. package/dist/embed/embed-page-toml-ZVNI7WJB.js +1 -0
  1092. package/dist/embed/embed-page-tp-24NWOAQZ.js +1 -0
  1093. package/dist/embed/embed-page-treemap-KMMF4GRG-HPTV3SYE.js +1 -0
  1094. package/dist/embed/embed-page-tremor-443PBNWC.js +1 -0
  1095. package/dist/embed/embed-page-tsx-PX2Z4GDU.js +1 -0
  1096. package/dist/embed/embed-page-tt2-L43LNTGL.js +1 -0
  1097. package/dist/embed/embed-page-turtle-IXYYTHLU.js +1 -0
  1098. package/dist/embed/embed-page-twig-MZBQAWRC.js +1 -0
  1099. package/dist/embed/embed-page-twig-WSAAZNH3.js +1 -0
  1100. package/dist/embed/embed-page-typescript-5UWO3Y3K.js +1 -0
  1101. package/dist/embed/embed-page-typescript-BPIRCQG7.js +1 -0
  1102. package/dist/embed/embed-page-typoscript-UUKPTXPH.js +1 -0
  1103. package/dist/embed/embed-page-unrealscript-G2VHZRFN.js +1 -0
  1104. package/dist/embed/embed-page-uorazor-WYGVL7PT.js +1 -0
  1105. package/dist/embed/embed-page-uri-NRWWZBB7.js +1 -0
  1106. package/dist/embed/embed-page-v-LKVTPKDV.js +1 -0
  1107. package/dist/embed/embed-page-vala-EL5BNKYD.js +1 -0
  1108. package/dist/embed/embed-page-vala-MLIRE3PS.js +1 -0
  1109. package/dist/embed/embed-page-vbnet-5JKSIZ56.js +1 -0
  1110. package/dist/embed/embed-page-vbnet-KOGX2JTL.js +1 -0
  1111. package/dist/embed/embed-page-vbscript-637T6GXI.js +1 -0
  1112. package/dist/embed/embed-page-vbscript-html-YKWMMXG4.js +1 -0
  1113. package/dist/embed/embed-page-velocity-7Q63BBW2.js +1 -0
  1114. package/dist/embed/embed-page-verilog-B6EWQWMJ.js +1 -0
  1115. package/dist/embed/embed-page-verilog-G566LGG4.js +1 -0
  1116. package/dist/embed/embed-page-vhdl-R5JIOJNH.js +1 -0
  1117. package/dist/embed/embed-page-vhdl-RMOYZXLG.js +1 -0
  1118. package/dist/embed/embed-page-vim-47Q56RS4.js +1 -0
  1119. package/dist/embed/embed-page-vim-KBCAYMER.js +1 -0
  1120. package/dist/embed/embed-page-visual-basic-ZYE5FD6G.js +1 -0
  1121. package/dist/embed/embed-page-warpscript-65UOMFFU.js +1 -0
  1122. package/dist/embed/embed-page-wasm-MSBGNWUM.js +1 -0
  1123. package/dist/embed/embed-page-web-idl-7WW5RGOI.js +1 -0
  1124. package/dist/embed/embed-page-wgsl-FG3PI6M7.js +1 -0
  1125. package/dist/embed/embed-page-wiki-DGVS4GPN.js +1 -0
  1126. package/dist/embed/embed-page-wolfram-MOURXWVE.js +1 -0
  1127. package/dist/embed/embed-page-wren-PYL5ZRVR.js +1 -0
  1128. package/dist/embed/embed-page-x86asm-WQ6M3VHZ.js +1 -0
  1129. package/dist/embed/embed-page-xeora-JSPZIDKL.js +1 -0
  1130. package/dist/embed/embed-page-xl-DTY4E7YS.js +1 -0
  1131. package/dist/embed/embed-page-xml-P5QA5BKM.js +1 -0
  1132. package/dist/embed/embed-page-xml-doc-VAJOIYSW.js +1 -0
  1133. package/dist/embed/embed-page-xojo-L2PDU7MC.js +1 -0
  1134. package/dist/embed/embed-page-xquery-EWBQ7NVP.js +1 -0
  1135. package/dist/embed/embed-page-xquery-RUKMMBO2.js +1 -0
  1136. package/dist/embed/embed-page-xychartDiagram-PRI3JC2R-EWLR5Z3I.js +7 -0
  1137. package/dist/embed/embed-page-yaml-76KRB6BP.js +1 -0
  1138. package/dist/embed/embed-page-yaml-RR5MLWRK.js +1 -0
  1139. package/dist/embed/embed-page-yang-J62Y5RPD.js +1 -0
  1140. package/dist/embed/embed-page-zephir-OIOOQGNI.js +1 -0
  1141. package/dist/embed/embed-page-zig-75SL5ZWR.js +1 -0
  1142. package/dist/embed/embed-page.css +1 -0
  1143. package/dist/embed/embed-page.js +6 -0
  1144. package/dist/index.d.mts +19 -40
  1145. package/dist/index.d.ts +19 -40
  1146. package/dist/index.js +3605 -1694
  1147. package/dist/index.js.map +1 -1
  1148. package/dist/index.mjs +1125 -900
  1149. package/dist/index.mjs.map +1 -1
  1150. package/dist/kbProvider-2D6DZ34N.mjs +50 -0
  1151. package/dist/kbProvider-2D6DZ34N.mjs.map +1 -0
  1152. package/dist/{mcp-configs-SHRMQHIL.mjs → mcp-configs-WCY5EXCW.mjs} +3 -2
  1153. package/dist/mcp-configs-WCY5EXCW.mjs.map +1 -0
  1154. package/dist/mcpTransportRegistry-VXUVJKBC.mjs +14 -0
  1155. package/dist/mcpTransportRegistry-VXUVJKBC.mjs.map +1 -0
  1156. package/dist/open-HH7RKGML.mjs +260 -0
  1157. package/dist/open-HH7RKGML.mjs.map +1 -0
  1158. package/dist/open-audit-UJ3NXCGW.mjs +32 -0
  1159. package/dist/open-audit-UJ3NXCGW.mjs.map +1 -0
  1160. package/dist/open-catalog-WYS2AENM.mjs +59 -0
  1161. package/dist/open-catalog-WYS2AENM.mjs.map +1 -0
  1162. package/dist/open-exposure-FK4G6O6L.mjs +67 -0
  1163. package/dist/open-exposure-FK4G6O6L.mjs.map +1 -0
  1164. package/dist/open-files-GVRMK5PL.mjs +146 -0
  1165. package/dist/open-files-GVRMK5PL.mjs.map +1 -0
  1166. package/dist/open-session-3VN65PRR.mjs +53 -0
  1167. package/dist/open-session-3VN65PRR.mjs.map +1 -0
  1168. package/dist/openLattice-GAAGQJST.mjs +16 -0
  1169. package/dist/openLattice-GAAGQJST.mjs.map +1 -0
  1170. package/dist/registerExposedPlugins-63EUF4VS.mjs +99 -0
  1171. package/dist/registerExposedPlugins-63EUF4VS.mjs.map +1 -0
  1172. package/dist/{resources-VA7LSDKN.mjs → resources-SRQRKW5G.mjs} +47 -4
  1173. package/dist/resources-SRQRKW5G.mjs.map +1 -0
  1174. package/dist/sandboxProvider-I3P66VXT.mjs +10 -0
  1175. package/dist/sandboxProvider-I3P66VXT.mjs.map +1 -0
  1176. package/dist/{sender-PX32VSHB.mjs → sender-PLDU5EZ3.mjs} +3 -1
  1177. package/dist/{sender-PX32VSHB.mjs.map → sender-PLDU5EZ3.mjs.map} +1 -1
  1178. package/package.json +11 -8
  1179. package/dist/a2a-7N3WDAOP.mjs.map +0 -1
  1180. package/dist/a2a-standard-WC2BSOFV.mjs.map +0 -1
  1181. package/dist/chunk-2HOCF46L.mjs.map +0 -1
  1182. package/dist/resources-VA7LSDKN.mjs.map +0 -1
  1183. /package/dist/{A2AAuthService-DK5X6VIL.mjs.map → A2AAuthService-7UGQ7GMW.mjs.map} +0 -0
  1184. /package/dist/{mcp-configs-SHRMQHIL.mjs.map → chunk-NFEGQTCC.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -1,6 +1,17 @@
1
+ import {
2
+ getContentTypeFromFilename,
3
+ getFilenameFromPath
4
+ } from "./chunk-LHQY46YB.mjs";
5
+ import {
6
+ buildPreviewTokenScript
7
+ } from "./chunk-2POW27EI.mjs";
8
+ import "./chunk-WKNZ7GBC.mjs";
9
+ import {
10
+ CollectionService
11
+ } from "./chunk-PWHUWFXL.mjs";
1
12
  import {
2
13
  registerMcpServerConfigRoutes
3
- } from "./chunk-K4XELOSO.mjs";
14
+ } from "./chunk-QKPZWWHH.mjs";
4
15
  import {
5
16
  Logger,
6
17
  getQrCode,
@@ -16,10 +27,7 @@ import {
16
27
  resolvePathWithinRoot,
17
28
  saveProjectFile
18
29
  } from "./chunk-J4BK77PA.mjs";
19
- import {
20
- getContentTypeFromFilename,
21
- getFilenameFromPath
22
- } from "./chunk-LHQY46YB.mjs";
30
+ import "./chunk-NFEGQTCC.mjs";
23
31
 
24
32
  // src/index.ts
25
33
  import "dotenv/config";
@@ -29,7 +37,7 @@ import multipart from "@fastify/multipart";
29
37
  import sensible from "@fastify/sensible";
30
38
  import websocket from "@fastify/websocket";
31
39
  import staticPlugin from "@fastify/static";
32
- import path3 from "path";
40
+ import path4 from "path";
33
41
 
34
42
  // src/routes/index.ts
35
43
  import { randomUUID as randomUUID19 } from "crypto";
@@ -2022,7 +2030,12 @@ async function getHealth(request, reply) {
2022
2030
  }
2023
2031
 
2024
2032
  // src/services/skill_service.ts
2025
- import { SandboxSkillStore, PluginRegistry } from "@axiom-lattice/core";
2033
+ import {
2034
+ SandboxSkillStore,
2035
+ PluginRegistry,
2036
+ getSandboxPluginCatalog,
2037
+ parseSkillFrontmatter
2038
+ } from "@axiom-lattice/core";
2026
2039
  var PLUGIN_SKILL_SOURCE = "builtin-plugin";
2027
2040
  function getTenantId4(request) {
2028
2041
  return request.user?.tenantId || request.headers["x-tenant-id"] || "default";
@@ -2059,6 +2072,36 @@ var SkillService = class {
2059
2072
  constructor() {
2060
2073
  this.store = new SandboxSkillStore();
2061
2074
  }
2075
+ /**
2076
+ * Read the read-only skills contributed by the tenant's sandbox plugins.
2077
+ * Sandbox failures degrade silently so the system view still returns
2078
+ * built-in and store skills.
2079
+ */
2080
+ async tenantPluginSkills(tenantId) {
2081
+ const items = [];
2082
+ try {
2083
+ const loaded = await getSandboxPluginCatalog().ensureLoaded(tenantId);
2084
+ for (const plugin of loaded.plugins) {
2085
+ for (const [name, definition] of Object.entries(plugin.skills ?? {})) {
2086
+ const { meta } = parseSkillFrontmatter(definition.content);
2087
+ items.push({
2088
+ id: name,
2089
+ name: meta.name || name,
2090
+ description: meta.description || "",
2091
+ version: definition.version,
2092
+ pluginType: plugin.meta.type,
2093
+ resourcePaths: Object.entries(definition.resources ?? {}).map(([path5, resource]) => ({
2094
+ path: path5,
2095
+ mimeType: resource.mimeType
2096
+ })),
2097
+ content: definition.content
2098
+ });
2099
+ }
2100
+ }
2101
+ } catch {
2102
+ }
2103
+ return items;
2104
+ }
2062
2105
  async getAllSkills(request) {
2063
2106
  const tenantId = getTenantId4(request);
2064
2107
  const storeSkills = await this.store.getAllSkills(tenantId, buildContext(request));
@@ -2069,6 +2112,9 @@ var SkillService = class {
2069
2112
  for (const item of PluginRegistry.listSkills()) {
2070
2113
  merged.set(item.id, pluginSkillToSkill(item, tenantId));
2071
2114
  }
2115
+ for (const item of await this.tenantPluginSkills(tenantId)) {
2116
+ merged.set(item.id, pluginSkillToSkill(item, tenantId, item.content));
2117
+ }
2072
2118
  return Array.from(merged.values());
2073
2119
  }
2074
2120
  async getSkillById(request, id3) {
@@ -2081,21 +2127,23 @@ var SkillService = class {
2081
2127
  return pluginSkillToSkill(item, tenantId, definition.content);
2082
2128
  }
2083
2129
  }
2130
+ const tenantItem = (await this.tenantPluginSkills(tenantId)).find((entry) => entry.id === id3);
2131
+ if (tenantItem) return pluginSkillToSkill(tenantItem, tenantId, tenantItem.content);
2084
2132
  return this.store.getSkillById(tenantId, id3, buildContext(request));
2085
2133
  }
2086
2134
  async createSkill(request, id3, data) {
2087
2135
  const tenantId = getTenantId4(request);
2088
- this.assertNotPluginSkill(id3, "created");
2136
+ await this.assertMutable(tenantId, id3, "created");
2089
2137
  return this.store.createSkill(tenantId, id3, data, buildContext(request));
2090
2138
  }
2091
2139
  async updateSkill(request, id3, updates) {
2092
2140
  const tenantId = getTenantId4(request);
2093
- this.assertNotPluginSkill(id3, "modified");
2141
+ await this.assertMutable(tenantId, id3, "modified");
2094
2142
  return this.store.updateSkill(tenantId, id3, updates, buildContext(request));
2095
2143
  }
2096
2144
  async deleteSkill(request, id3) {
2097
2145
  const tenantId = getTenantId4(request);
2098
- this.assertNotPluginSkill(id3, "deleted");
2146
+ await this.assertMutable(tenantId, id3, "deleted");
2099
2147
  return this.store.deleteSkill(tenantId, id3, buildContext(request));
2100
2148
  }
2101
2149
  async searchByMetadata(request, key, value) {
@@ -2111,7 +2159,18 @@ var SkillService = class {
2111
2159
  return this.store.filterByLicense(tenantId, license, buildContext(request));
2112
2160
  }
2113
2161
  /**
2114
- * Guard against mutating a registered plugin skill.
2162
+ * Guard against mutating a built-in or tenant-plugin skill.
2163
+ * Message style mirrors SandboxSkillStore built-in errors so the controller's
2164
+ * existing "built-in skill" -> 403 mapping applies. Runs before any store write.
2165
+ */
2166
+ async assertMutable(tenantId, id3, action) {
2167
+ this.assertNotPluginSkill(id3, action);
2168
+ if ((await this.tenantPluginSkills(tenantId)).some((skill) => skill.id === id3)) {
2169
+ throw new Error(`Skill "${id3}" is a built-in skill and cannot be ${action}`);
2170
+ }
2171
+ }
2172
+ /**
2173
+ * Guard against mutating a globally registered plugin skill.
2115
2174
  * Message style mirrors SandboxSkillStore built-in errors so the controller's
2116
2175
  * existing "built-in skill" -> 403 mapping applies.
2117
2176
  */
@@ -2317,175 +2376,6 @@ async function filterSkillsByLicense(request, reply) {
2317
2376
  }
2318
2377
  }
2319
2378
 
2320
- // src/services/collection_service.ts
2321
- import { v4 as uuidv4 } from "uuid";
2322
- import { Document } from "@langchain/core/documents";
2323
- import {
2324
- collectionLatticeManager,
2325
- embeddingsLatticeManager,
2326
- getOrCreateCollectionVectorStore,
2327
- getCollectionEntryCount,
2328
- listCollectionEntries,
2329
- removeCollectionVectorStore
2330
- } from "@axiom-lattice/core";
2331
- function getTenantId5(request) {
2332
- return request.user?.tenantId || request.headers["x-tenant-id"] || "default";
2333
- }
2334
- var CollectionService = class {
2335
- // ─── Collection CRUD ──────────────────────────────────────────
2336
- async getAllCollections(request) {
2337
- const tenantId = getTenantId5(request);
2338
- const collections = await collectionLatticeManager.getAllCollections(tenantId);
2339
- for (const c2 of collections) {
2340
- try {
2341
- c2._entryCount = await getCollectionEntryCount(c2.name, c2.embeddingKey, c2.tenantId);
2342
- } catch {
2343
- c2._entryCount = 0;
2344
- }
2345
- }
2346
- return collections;
2347
- }
2348
- async getCollectionByName(request, name) {
2349
- const tenantId = getTenantId5(request);
2350
- return collectionLatticeManager.getCollection(tenantId, name);
2351
- }
2352
- async createCollection(request, data) {
2353
- const tenantId = getTenantId5(request);
2354
- const collection = await collectionLatticeManager.registerCollection(tenantId, data);
2355
- try {
2356
- await getOrCreateCollectionVectorStore(data.name, data.embeddingKey, tenantId);
2357
- } catch (err) {
2358
- console.warn(`[CollectionService] Failed to init vector store for ${data.name}:`, err);
2359
- }
2360
- return collection;
2361
- }
2362
- async updateCollection(request, name, updates) {
2363
- const tenantId = getTenantId5(request);
2364
- return collectionLatticeManager.updateCollection(tenantId, name, updates);
2365
- }
2366
- async deleteCollection(request, name) {
2367
- const tenantId = getTenantId5(request);
2368
- await removeCollectionVectorStore(name, tenantId);
2369
- return collectionLatticeManager.removeCollection(tenantId, name);
2370
- }
2371
- // ─── Entry CRUD ───────────────────────────────────────────────
2372
- async getEntries(request, collectionName) {
2373
- const collection = await this.getCollectionByName(request, collectionName);
2374
- if (!collection) throw new Error(`Collection "${collectionName}" not found`);
2375
- const docs = await listCollectionEntries(collectionName, collection.embeddingKey, collection.tenantId);
2376
- return docs.map((doc) => ({
2377
- id: doc.metadata._id || "",
2378
- content: doc.pageContent,
2379
- metadata: Object.fromEntries(
2380
- Object.entries(doc.metadata).filter(([k]) => !k.startsWith("_"))
2381
- )
2382
- }));
2383
- }
2384
- async createEntry(request, collectionName, data) {
2385
- const collection = await this.getCollectionByName(request, collectionName);
2386
- if (!collection) throw new Error(`Collection "${collectionName}" not found`);
2387
- const vectorStore = await getOrCreateCollectionVectorStore(
2388
- collectionName,
2389
- collection.embeddingKey,
2390
- collection.tenantId
2391
- );
2392
- const entryId = uuidv4();
2393
- const now = (/* @__PURE__ */ new Date()).toISOString();
2394
- const doc = new Document({
2395
- pageContent: data.content,
2396
- metadata: {
2397
- _id: entryId,
2398
- _created_at: now,
2399
- _updated_at: now,
2400
- ...data.metadata || {}
2401
- }
2402
- });
2403
- await vectorStore.addDocuments([doc]);
2404
- return { id: entryId, content: data.content, metadata: data.metadata || {} };
2405
- }
2406
- async getEntry(request, collectionName, entryId) {
2407
- const collection = await this.getCollectionByName(request, collectionName);
2408
- if (!collection) throw new Error(`Collection "${collectionName}" not found`);
2409
- const docs = await listCollectionEntries(collectionName, collection.embeddingKey, collection.tenantId);
2410
- const doc = docs.find((d) => d.metadata._id === entryId);
2411
- if (!doc) return null;
2412
- return {
2413
- id: entryId,
2414
- content: doc.pageContent,
2415
- metadata: Object.fromEntries(
2416
- Object.entries(doc.metadata).filter(([k]) => !k.startsWith("_"))
2417
- )
2418
- };
2419
- }
2420
- async updateEntry(request, collectionName, entryId, data) {
2421
- const existing = await this.getEntry(request, collectionName, entryId);
2422
- if (!existing) return null;
2423
- const collection = await this.getCollectionByName(request, collectionName);
2424
- if (!collection) throw new Error(`Collection "${collectionName}" not found`);
2425
- const vectorStore = await getOrCreateCollectionVectorStore(
2426
- collectionName,
2427
- collection.embeddingKey,
2428
- collection.tenantId
2429
- );
2430
- try {
2431
- await vectorStore.delete({ filter: { _id: entryId } });
2432
- } catch {
2433
- }
2434
- const now = (/* @__PURE__ */ new Date()).toISOString();
2435
- const mergedMetadata = { ...existing.metadata, ...data.metadata || {} };
2436
- const doc = new Document({
2437
- pageContent: data.content ?? existing.content,
2438
- metadata: { _id: entryId, _created_at: now, _updated_at: now, ...mergedMetadata }
2439
- });
2440
- await vectorStore.addDocuments([doc]);
2441
- return { id: entryId, content: data.content ?? existing.content, metadata: mergedMetadata };
2442
- }
2443
- async deleteEntry(request, collectionName, entryId) {
2444
- const collection = await this.getCollectionByName(request, collectionName);
2445
- if (!collection) throw new Error(`Collection "${collectionName}" not found`);
2446
- const vectorStore = await getOrCreateCollectionVectorStore(
2447
- collectionName,
2448
- collection.embeddingKey,
2449
- collection.tenantId
2450
- );
2451
- try {
2452
- await vectorStore.delete({ filter: { _id: entryId } });
2453
- return true;
2454
- } catch {
2455
- return false;
2456
- }
2457
- }
2458
- async searchEntries(request, collectionName, params) {
2459
- const collection = await this.getCollectionByName(request, collectionName);
2460
- if (!collection) throw new Error(`Collection "${collectionName}" not found`);
2461
- const vectorStore = await getOrCreateCollectionVectorStore(
2462
- collectionName,
2463
- collection.embeddingKey,
2464
- collection.tenantId
2465
- );
2466
- let embeddings;
2467
- try {
2468
- embeddings = embeddingsLatticeManager.getEmbeddingsClient(collection.embeddingKey);
2469
- } catch {
2470
- embeddings = embeddingsLatticeManager.getEmbeddingsClient("default");
2471
- }
2472
- const queryVector = await embeddings.embedQuery(params.query);
2473
- const results = await vectorStore.similaritySearchVectorWithScore(
2474
- queryVector,
2475
- params.top_k || 5,
2476
- params.filter
2477
- );
2478
- return results.map(([doc, score]) => ({
2479
- id: doc.metadata._id || uuidv4(),
2480
- content: doc.pageContent,
2481
- metadata: Object.fromEntries(
2482
- Object.entries(doc.metadata).filter(([k]) => !k.startsWith("_"))
2483
- ),
2484
- score
2485
- }));
2486
- }
2487
- };
2488
-
2489
2379
  // src/controllers/collections.ts
2490
2380
  var collectionService = new CollectionService();
2491
2381
  function serializeCollection(collection) {
@@ -2607,10 +2497,10 @@ async function deleteCollection(request, reply) {
2607
2497
  }
2608
2498
 
2609
2499
  // src/controllers/embeddings.ts
2610
- import { embeddingsLatticeManager as embeddingsLatticeManager2 } from "@axiom-lattice/core";
2500
+ import { embeddingsLatticeManager } from "@axiom-lattice/core";
2611
2501
  async function listEmbeddings(_request, _reply) {
2612
2502
  try {
2613
- const info = embeddingsLatticeManager2.getAllEmbeddingsInfo();
2503
+ const info = embeddingsLatticeManager.getAllEmbeddingsInfo();
2614
2504
  return {
2615
2505
  success: true,
2616
2506
  message: "Successfully retrieved embedding models",
@@ -2840,11 +2730,11 @@ import {
2840
2730
  getStoreLattice as getStoreLattice3,
2841
2731
  metricsServerManager
2842
2732
  } from "@axiom-lattice/core";
2843
- function getTenantId6(request) {
2733
+ function getTenantId5(request) {
2844
2734
  return request.headers["x-tenant-id"] || "default";
2845
2735
  }
2846
2736
  async function executeDataQuery(request, reply) {
2847
- const tenantId = getTenantId6(request);
2737
+ const tenantId = getTenantId5(request);
2848
2738
  const body = request.body;
2849
2739
  try {
2850
2740
  if (!body.serverKey && !body.datasourceId) {
@@ -2980,7 +2870,7 @@ async function executeSqlQuery(client, body, reply) {
2980
2870
  // src/controllers/workflow-tracking.ts
2981
2871
  import { getStoreLattice as getStoreLattice4, agentInstanceManager as agentInstanceManager4, ThreadStatus as ThreadStatus2, abortWorkflowRun as signalAbort } from "@axiom-lattice/core";
2982
2872
  import { MessageChunkTypes as MessageChunkTypes2 } from "@axiom-lattice/protocols";
2983
- function getTenantId7(request) {
2873
+ function getTenantId6(request) {
2984
2874
  const userTenantId = request.user?.tenantId;
2985
2875
  if (userTenantId) return userTenantId;
2986
2876
  return request.headers["x-tenant-id"] || "default";
@@ -3021,7 +2911,7 @@ async function getDefinitionsFromAssistants(tenantId) {
3021
2911
  }
3022
2912
  }
3023
2913
  async function getAllWorkflowDefinitions(request, reply) {
3024
- const tenantId = getTenantId7(request);
2914
+ const tenantId = getTenantId6(request);
3025
2915
  try {
3026
2916
  const configDefs = await getDefinitionsFromAssistants(tenantId);
3027
2917
  if (configDefs.length === 0) {
@@ -3066,7 +2956,7 @@ async function getAllWorkflowDefinitions(request, reply) {
3066
2956
  }
3067
2957
  }
3068
2958
  async function getAllWorkflowRuns(request, reply) {
3069
- const tenantId = getTenantId7(request);
2959
+ const tenantId = getTenantId6(request);
3070
2960
  const { assistantId, status } = request.query;
3071
2961
  try {
3072
2962
  const store = getTrackingStore();
@@ -3120,7 +3010,7 @@ async function getAllWorkflowRuns(request, reply) {
3120
3010
  var INBOX_DEFAULT_PAGE_SIZE = 20;
3121
3011
  var INBOX_MAX_PAGE_SIZE = 100;
3122
3012
  async function getInboxItems(request, reply) {
3123
- const tenantId = getTenantId7(request);
3013
+ const tenantId = getTenantId6(request);
3124
3014
  try {
3125
3015
  const store = getTrackingStore();
3126
3016
  if (!store) {
@@ -3228,7 +3118,7 @@ async function getInboxItems(request, reply) {
3228
3118
  }
3229
3119
  async function getWorkflowDefinitions(request, reply) {
3230
3120
  const { assistantId } = request.params;
3231
- const tenantId = getTenantId7(request);
3121
+ const tenantId = getTenantId6(request);
3232
3122
  try {
3233
3123
  const store = getTrackingStore();
3234
3124
  if (!store) {
@@ -3259,7 +3149,7 @@ async function getWorkflowDefinitions(request, reply) {
3259
3149
  }
3260
3150
  async function getWorkflowRuns(request, reply) {
3261
3151
  const { threadId } = request.params;
3262
- const tenantId = getTenantId7(request);
3152
+ const tenantId = getTenantId6(request);
3263
3153
  try {
3264
3154
  const store = getTrackingStore();
3265
3155
  if (!store) {
@@ -3295,7 +3185,7 @@ async function getWorkflowRun(request, reply) {
3295
3185
  }
3296
3186
  async function deleteWorkflowRun(request, reply) {
3297
3187
  const { runId } = request.params;
3298
- const tenantId = getTenantId7(request);
3188
+ const tenantId = getTenantId6(request);
3299
3189
  try {
3300
3190
  const store = getTrackingStore();
3301
3191
  if (!store) {
@@ -3378,7 +3268,7 @@ async function getRunTasks(request, reply) {
3378
3268
  }
3379
3269
  async function replyInboxTask(request, reply) {
3380
3270
  const { runId, answers } = request.body;
3381
- const tenantId = getTenantId7(request);
3271
+ const tenantId = getTenantId6(request);
3382
3272
  try {
3383
3273
  const store = getTrackingStore();
3384
3274
  if (!store) {
@@ -3455,7 +3345,7 @@ async function replyInboxTask(request, reply) {
3455
3345
  async function abortWorkflowRun(request, reply) {
3456
3346
  try {
3457
3347
  const { runId } = request.params;
3458
- const tenantId = getTenantId7(request);
3348
+ const tenantId = getTenantId6(request);
3459
3349
  const store = getTrackingStore();
3460
3350
  if (!store) {
3461
3351
  return reply.status(404).send({
@@ -3507,7 +3397,7 @@ import { randomUUID as randomUUID3 } from "crypto";
3507
3397
  function getWorkspaceId2(request) {
3508
3398
  return request.headers["x-workspace-id"] || "default";
3509
3399
  }
3510
- function getTenantId8(request) {
3400
+ function getTenantId7(request) {
3511
3401
  const userTenantId = request.user?.tenantId;
3512
3402
  if (userTenantId) return userTenantId;
3513
3403
  return request.headers["x-tenant-id"] || "default";
@@ -3534,7 +3424,7 @@ async function updateLinkMeta(userId, tenantId, meta) {
3534
3424
  await getLinkStore().updateLink(userId, tenantId, { metadata: meta });
3535
3425
  }
3536
3426
  async function createPersonalAssistant(request, reply) {
3537
- const tenantId = getTenantId8(request);
3427
+ const tenantId = getTenantId7(request);
3538
3428
  const userId = getUserId3(request);
3539
3429
  const { name, personality } = request.body;
3540
3430
  if (!name || !personality) {
@@ -3571,7 +3461,7 @@ async function createPersonalAssistant(request, reply) {
3571
3461
  });
3572
3462
  }
3573
3463
  async function getPersonalAssistant(request, reply) {
3574
- const tenantId = getTenantId8(request);
3464
+ const tenantId = getTenantId7(request);
3575
3465
  const userId = getUserId3(request);
3576
3466
  const store = getAssistantStore();
3577
3467
  const assistant = await store.getByOwner(tenantId, userId);
@@ -3588,7 +3478,7 @@ async function getPersonalAssistant(request, reply) {
3588
3478
  };
3589
3479
  }
3590
3480
  async function deletePersonalAssistant(request, reply) {
3591
- const tenantId = getTenantId8(request);
3481
+ const tenantId = getTenantId7(request);
3592
3482
  const userId = getUserId3(request);
3593
3483
  const store = getAssistantStore();
3594
3484
  const assistant = await store.getByOwner(tenantId, userId);
@@ -4121,9 +4011,9 @@ var ExportImportService = class {
4121
4011
  if (!files || files.size === 0) return void 0;
4122
4012
  const prefix = `files/${entityType}/${entityId}/`;
4123
4013
  const result = /* @__PURE__ */ new Map();
4124
- for (const [path4, content] of files.entries()) {
4125
- if (path4.startsWith(prefix)) {
4126
- result.set(path4.slice(prefix.length), content);
4014
+ for (const [path5, content] of files.entries()) {
4015
+ if (path5.startsWith(prefix)) {
4016
+ result.set(path5.slice(prefix.length), content);
4127
4017
  }
4128
4018
  }
4129
4019
  return result.size > 0 ? result : void 0;
@@ -4497,11 +4387,26 @@ async function importApply(request, reply) {
4497
4387
  }
4498
4388
 
4499
4389
  // src/controllers/middleware-types.ts
4500
- import { PluginRegistry as PluginRegistry2 } from "@axiom-lattice/core";
4390
+ import {
4391
+ PluginRegistry as PluginRegistry2,
4392
+ getSandboxPluginCatalog as getSandboxPluginCatalog2,
4393
+ mergePluginSources,
4394
+ serializePluginMeta
4395
+ } from "@axiom-lattice/core";
4396
+ async function collectMiddlewareMetas(tenantId) {
4397
+ let tenantPlugins = [];
4398
+ try {
4399
+ tenantPlugins = (await getSandboxPluginCatalog2().ensureLoaded(tenantId)).plugins;
4400
+ } catch {
4401
+ tenantPlugins = [];
4402
+ }
4403
+ const globalPlugins = PluginRegistry2.list().map((type) => PluginRegistry2.get(type)).filter((p) => Boolean(p));
4404
+ return mergePluginSources(globalPlugins, tenantPlugins).map(serializePluginMeta);
4405
+ }
4501
4406
  function middlewareTypesRoutes(fastify2) {
4502
- fastify2.get("/api/middleware-types", async (_request, reply) => {
4503
- const metas = PluginRegistry2.listMeta();
4504
- return reply.send(metas);
4407
+ fastify2.get("/api/middleware-types", async (request, reply) => {
4408
+ const tenantId = request.user?.tenantId || request.headers["x-tenant-id"] || "default";
4409
+ return reply.send(await collectMiddlewareMetas(tenantId));
4505
4410
  });
4506
4411
  }
4507
4412
 
@@ -5220,7 +5125,7 @@ import * as os2 from "os";
5220
5125
  import { getStoreLattice as getStoreLattice6 } from "@axiom-lattice/core";
5221
5126
  import { SandboxFilesystem, FilesystemBackend } from "@axiom-lattice/core";
5222
5127
  import { getSandBoxManager as getSandBoxManager3 } from "@axiom-lattice/core";
5223
- import { v4 as uuidv42 } from "uuid";
5128
+ import { v4 as uuidv4 } from "uuid";
5224
5129
 
5225
5130
  // src/services/collaboration/RoomCoordinatorProvisioner.ts
5226
5131
  var ROOM_COORDINATOR_KEY = "room-coordinator";
@@ -5423,7 +5328,7 @@ var ProjectCollaborationInitializationError = class extends Error {
5423
5328
  }
5424
5329
  };
5425
5330
  function createProjectCollaborationInitializer(deps) {
5426
- const idFactory = deps.idFactory ?? uuidv42;
5331
+ const idFactory = deps.idFactory ?? uuidv4;
5427
5332
  return {
5428
5333
  authorizeCreator: async ({ tenantId, userId }) => await deps.userTenantLinkStore.getLink(userId, tenantId) !== null,
5429
5334
  initialize: async ({ tenantId, userId, project }) => {
@@ -5498,7 +5403,7 @@ var WorkspaceController = class {
5498
5403
  async createWorkspace(request, reply) {
5499
5404
  const tenantId = this.getTenantId(request);
5500
5405
  const data = request.body;
5501
- const id3 = uuidv42();
5406
+ const id3 = uuidv4();
5502
5407
  const workspace = await this.workspaceStore.createWorkspace(
5503
5408
  tenantId,
5504
5409
  id3,
@@ -5571,7 +5476,7 @@ var WorkspaceController = class {
5571
5476
  if (existing.length > 0) {
5572
5477
  return;
5573
5478
  }
5574
- await this.projectStore.createProject(tenantId, workspaceId, uuidv42(), {
5479
+ await this.projectStore.createProject(tenantId, workspaceId, uuidv4(), {
5575
5480
  name: "Training",
5576
5481
  description: "Shared workspace for agent training",
5577
5482
  kind: "training"
@@ -5624,7 +5529,7 @@ var WorkspaceController = class {
5624
5529
  });
5625
5530
  }
5626
5531
  }
5627
- const id3 = uuidv42();
5532
+ const id3 = uuidv4();
5628
5533
  const project = await this.projectStore.createProject(
5629
5534
  tenantId,
5630
5535
  workspaceId,
@@ -6171,7 +6076,7 @@ var WorkspaceController = class {
6171
6076
  workspaceId,
6172
6077
  projectId,
6173
6078
  timestamp: Date.now()
6174
- })};</script>`;
6079
+ })};</script>` + buildPreviewTokenScript({ tenantId, workspaceId, projectId });
6175
6080
  if (content2.toLowerCase().includes("</head>")) {
6176
6081
  content2 = content2.replace(/<\/head>/i, `${contextScript}</head>`);
6177
6082
  console.log(`[viewFile] Context script injected before </head>`);
@@ -6202,7 +6107,7 @@ var WorkspaceController = class {
6202
6107
  workspaceId,
6203
6108
  projectId,
6204
6109
  timestamp: Date.now()
6205
- })};</script>`;
6110
+ })};</script>` + buildPreviewTokenScript({ tenantId, workspaceId, projectId });
6206
6111
  if (content.toLowerCase().includes("</head>")) {
6207
6112
  finalContent = content.replace(/<\/head>/i, `${contextScript}</head>`);
6208
6113
  console.log(`[viewFile] Context script injected before </head>`);
@@ -6224,21 +6129,21 @@ var WorkspaceController = class {
6224
6129
  async listPath(request) {
6225
6130
  const tenantId = this.getTenantId(request);
6226
6131
  const { workspaceId, projectId } = request.params;
6227
- const path4 = request.query.path || "/";
6132
+ const path5 = request.query.path || "/";
6228
6133
  const assistantId = request.query.assistantId;
6229
- console.log(`[listPath] tenantId=${tenantId} workspaceId=${workspaceId} projectId=${projectId} path=${path4} assistantId=${assistantId}`);
6230
- const { backend } = await this.getBackend(tenantId, workspaceId, projectId, assistantId, path4);
6231
- console.log(`[listPath] backend type=${backend.constructor.name} calling lsInfo(${path4})`);
6232
- const files = await backend.lsInfo(path4);
6134
+ console.log(`[listPath] tenantId=${tenantId} workspaceId=${workspaceId} projectId=${projectId} path=${path5} assistantId=${assistantId}`);
6135
+ const { backend } = await this.getBackend(tenantId, workspaceId, projectId, assistantId, path5);
6136
+ console.log(`[listPath] backend type=${backend.constructor.name} calling lsInfo(${path5})`);
6137
+ const files = await backend.lsInfo(path5);
6233
6138
  console.log(`[listPath] result count=${files.length}`);
6234
6139
  return { success: true, data: files };
6235
6140
  }
6236
6141
  async readFile(request) {
6237
6142
  const tenantId = this.getTenantId(request);
6238
6143
  const { workspaceId, projectId } = request.params;
6239
- const { path: path4, offset = 0, limit = 1e3, assistantId } = request.query;
6240
- const { backend } = await this.getBackend(tenantId, workspaceId, projectId, assistantId, path4);
6241
- const content = await backend.read(path4, Number(offset), Number(limit));
6144
+ const { path: path5, offset = 0, limit = 1e3, assistantId } = request.query;
6145
+ const { backend } = await this.getBackend(tenantId, workspaceId, projectId, assistantId, path5);
6146
+ const content = await backend.read(path5, Number(offset), Number(limit));
6242
6147
  return { success: true, data: { content, offset, limit } };
6243
6148
  }
6244
6149
  /**
@@ -6525,13 +6430,17 @@ var ProjectAccessService = class {
6525
6430
  this.requireCapability(membership, input.capability);
6526
6431
  return { project, membership };
6527
6432
  }
6528
- /** Authorizes roster visibility: read for public rooms, manage elsewhere. */
6433
+ /**
6434
+ * Authorizes roster visibility for any active participant (owner/admin/member/viewer).
6435
+ * Mutating the roster requires `manage` separately; reading it never does, because every
6436
+ * room participant needs the member list to render the room and derive their own capabilities.
6437
+ */
6529
6438
  async requireRosterAccess(input) {
6530
6439
  const project = await this.deps.projectStore.getProjectById(input.tenantId, input.projectId);
6531
6440
  if (!project) throw new ProjectCollaborationError("PROJECT_NOT_FOUND", 404, "Project not found");
6532
6441
  return this.requireProjectAccess({
6533
6442
  ...input,
6534
- capability: project.kind === "public" ? "read" : "manage"
6443
+ capability: "read"
6535
6444
  });
6536
6445
  }
6537
6446
  async requirePublicProjectAccess(project, input) {
@@ -6620,7 +6529,7 @@ import {
6620
6529
  sqlDatabaseManager
6621
6530
  } from "@axiom-lattice/core";
6622
6531
  import { randomUUID as randomUUID7 } from "crypto";
6623
- function getTenantId9(request) {
6532
+ function getTenantId8(request) {
6624
6533
  const userTenantId = request.user?.tenantId;
6625
6534
  if (userTenantId) {
6626
6535
  return userTenantId;
@@ -6628,7 +6537,7 @@ function getTenantId9(request) {
6628
6537
  return request.headers["x-tenant-id"] || "default";
6629
6538
  }
6630
6539
  async function getDatabaseConfigList(request, reply) {
6631
- const tenantId = getTenantId9(request);
6540
+ const tenantId = getTenantId8(request);
6632
6541
  try {
6633
6542
  const storeLattice = getStoreLattice7("default", "database");
6634
6543
  const store = storeLattice.store;
@@ -6658,7 +6567,7 @@ async function getDatabaseConfigList(request, reply) {
6658
6567
  }
6659
6568
  }
6660
6569
  async function getDatabaseConfig(request, reply) {
6661
- const tenantId = getTenantId9(request);
6570
+ const tenantId = getTenantId8(request);
6662
6571
  const { key } = request.params;
6663
6572
  try {
6664
6573
  const storeLattice = getStoreLattice7("default", "database");
@@ -6684,7 +6593,7 @@ async function getDatabaseConfig(request, reply) {
6684
6593
  }
6685
6594
  }
6686
6595
  async function createDatabaseConfig(request, reply) {
6687
- const tenantId = getTenantId9(request);
6596
+ const tenantId = getTenantId8(request);
6688
6597
  const body = request.body;
6689
6598
  try {
6690
6599
  const storeLattice = getStoreLattice7("default", "database");
@@ -6719,7 +6628,7 @@ async function createDatabaseConfig(request, reply) {
6719
6628
  }
6720
6629
  }
6721
6630
  async function updateDatabaseConfig(request, reply) {
6722
- const tenantId = getTenantId9(request);
6631
+ const tenantId = getTenantId8(request);
6723
6632
  const { key } = request.params;
6724
6633
  const updates = request.body;
6725
6634
  try {
@@ -6761,7 +6670,7 @@ async function updateDatabaseConfig(request, reply) {
6761
6670
  }
6762
6671
  }
6763
6672
  async function deleteDatabaseConfig(request, reply) {
6764
- const tenantId = getTenantId9(request);
6673
+ const tenantId = getTenantId8(request);
6765
6674
  const { keyOrId } = request.params;
6766
6675
  try {
6767
6676
  const storeLattice = getStoreLattice7("default", "database");
@@ -6810,7 +6719,7 @@ async function deleteDatabaseConfig(request, reply) {
6810
6719
  }
6811
6720
  }
6812
6721
  async function testDatabaseConnection(request, reply) {
6813
- const tenantId = getTenantId9(request);
6722
+ const tenantId = getTenantId8(request);
6814
6723
  const { key } = request.params;
6815
6724
  try {
6816
6725
  const storeLattice = getStoreLattice7("default", "database");
@@ -6903,7 +6812,7 @@ import {
6903
6812
  SemanticMetricsClient as SemanticMetricsClient2
6904
6813
  } from "@axiom-lattice/core";
6905
6814
  import { randomUUID as randomUUID8 } from "crypto";
6906
- function getTenantId10(request) {
6815
+ function getTenantId9(request) {
6907
6816
  const userTenantId = request.user?.tenantId;
6908
6817
  if (userTenantId) {
6909
6818
  return userTenantId;
@@ -6911,7 +6820,7 @@ function getTenantId10(request) {
6911
6820
  return request.headers["x-tenant-id"] || "default";
6912
6821
  }
6913
6822
  async function getMetricsServerConfigList(request, reply) {
6914
- const tenantId = getTenantId10(request);
6823
+ const tenantId = getTenantId9(request);
6915
6824
  try {
6916
6825
  const storeLattice = getStoreLattice8("default", "metrics");
6917
6826
  const store = storeLattice.store;
@@ -6937,7 +6846,7 @@ async function getMetricsServerConfigList(request, reply) {
6937
6846
  }
6938
6847
  }
6939
6848
  async function getMetricsServerConfig(request, reply) {
6940
- const tenantId = getTenantId10(request);
6849
+ const tenantId = getTenantId9(request);
6941
6850
  const { key } = request.params;
6942
6851
  try {
6943
6852
  const storeLattice = getStoreLattice8("default", "metrics");
@@ -6963,7 +6872,7 @@ async function getMetricsServerConfig(request, reply) {
6963
6872
  }
6964
6873
  }
6965
6874
  async function createMetricsServerConfig(request, reply) {
6966
- const tenantId = getTenantId10(request);
6875
+ const tenantId = getTenantId9(request);
6967
6876
  const body = request.body;
6968
6877
  try {
6969
6878
  const storeLattice = getStoreLattice8("default", "metrics");
@@ -7014,7 +6923,7 @@ async function createMetricsServerConfig(request, reply) {
7014
6923
  }
7015
6924
  }
7016
6925
  async function updateMetricsServerConfig(request, reply) {
7017
- const tenantId = getTenantId10(request);
6926
+ const tenantId = getTenantId9(request);
7018
6927
  const { key } = request.params;
7019
6928
  const updates = request.body;
7020
6929
  try {
@@ -7065,7 +6974,7 @@ async function updateMetricsServerConfig(request, reply) {
7065
6974
  }
7066
6975
  }
7067
6976
  async function deleteMetricsServerConfig(request, reply) {
7068
- const tenantId = getTenantId10(request);
6977
+ const tenantId = getTenantId9(request);
7069
6978
  const { keyOrId } = request.params;
7070
6979
  try {
7071
6980
  const storeLattice = getStoreLattice8("default", "metrics");
@@ -7112,7 +7021,7 @@ async function deleteMetricsServerConfig(request, reply) {
7112
7021
  }
7113
7022
  }
7114
7023
  async function testMetricsServerConnection(request, reply) {
7115
- const tenantId = getTenantId10(request);
7024
+ const tenantId = getTenantId9(request);
7116
7025
  const { key } = request.params;
7117
7026
  try {
7118
7027
  const storeLattice = getStoreLattice8("default", "metrics");
@@ -7163,7 +7072,7 @@ async function testMetricsServerConnection(request, reply) {
7163
7072
  }
7164
7073
  }
7165
7074
  async function listAvailableMetrics(request, reply) {
7166
- const tenantId = getTenantId10(request);
7075
+ const tenantId = getTenantId9(request);
7167
7076
  const { key } = request.params;
7168
7077
  try {
7169
7078
  const storeLattice = getStoreLattice8("default", "metrics");
@@ -7201,7 +7110,7 @@ async function listAvailableMetrics(request, reply) {
7201
7110
  }
7202
7111
  }
7203
7112
  async function queryMetricsData(request, reply) {
7204
- const tenantId = getTenantId10(request);
7113
+ const tenantId = getTenantId9(request);
7205
7114
  const { key } = request.params;
7206
7115
  const { metricName, startTime, endTime, step, labels } = request.body;
7207
7116
  try {
@@ -7249,7 +7158,7 @@ async function queryMetricsData(request, reply) {
7249
7158
  }
7250
7159
  }
7251
7160
  async function getDataSources(request, reply) {
7252
- const tenantId = getTenantId10(request);
7161
+ const tenantId = getTenantId9(request);
7253
7162
  const { key } = request.params;
7254
7163
  try {
7255
7164
  const storeLattice = getStoreLattice8("default", "metrics");
@@ -7290,7 +7199,7 @@ async function getDataSources(request, reply) {
7290
7199
  }
7291
7200
  }
7292
7201
  async function getDatasourceMetrics(request, reply) {
7293
- const tenantId = getTenantId10(request);
7202
+ const tenantId = getTenantId9(request);
7294
7203
  const { key, datasourceId } = request.params;
7295
7204
  try {
7296
7205
  const storeLattice = getStoreLattice8("default", "metrics");
@@ -7327,7 +7236,7 @@ async function getDatasourceMetrics(request, reply) {
7327
7236
  }
7328
7237
  }
7329
7238
  async function querySemanticMetrics(request, reply) {
7330
- const tenantId = getTenantId10(request);
7239
+ const tenantId = getTenantId9(request);
7331
7240
  const { key } = request.params;
7332
7241
  const body = request.body;
7333
7242
  try {
@@ -7484,7 +7393,7 @@ function registerMetricsServerConfigRoutes(app2) {
7484
7393
  }
7485
7394
 
7486
7395
  // src/controllers/connections.ts
7487
- import { ConnectionRegistry, PluginRegistry as PluginRegistry3 } from "@axiom-lattice/core";
7396
+ import { ConnectionRegistry, PluginRegistry as PluginRegistry3, getSandboxPluginCatalog as getSandboxPluginCatalog3, mergePluginSources as mergePluginSources2 } from "@axiom-lattice/core";
7488
7397
  import { z as z2 } from "zod";
7489
7398
  var createBody = z2.object({
7490
7399
  type: z2.string().min(1),
@@ -7504,6 +7413,17 @@ function getTenant(request) {
7504
7413
  }
7505
7414
  return request.headers["x-tenant-id"] || "default";
7506
7415
  }
7416
+ async function getTenantPlugin(request, type) {
7417
+ const tenantId = getTenant(request);
7418
+ let tenantPlugins = [];
7419
+ try {
7420
+ tenantPlugins = (await getSandboxPluginCatalog3().ensureLoaded(tenantId)).plugins;
7421
+ } catch {
7422
+ tenantPlugins = [];
7423
+ }
7424
+ const globalPlugins = PluginRegistry3.list().map((t2) => PluginRegistry3.get(t2)).filter((p) => Boolean(p));
7425
+ return mergePluginSources2(globalPlugins, tenantPlugins).find((p) => p.meta.type === type);
7426
+ }
7507
7427
  function maskSecrets(config) {
7508
7428
  const sensitive = /* @__PURE__ */ new Set([
7509
7429
  "password",
@@ -7587,7 +7507,7 @@ function connectionRoutes(fastify2) {
7587
7507
  fastify2.post("/api/connections/test", async (request, reply) => {
7588
7508
  const { type } = request.query;
7589
7509
  if (!type) return reply.status(400).send({ error: "query 'type' required" });
7590
- const plugin = PluginRegistry3.get(type);
7510
+ const plugin = await getTenantPlugin(request, type);
7591
7511
  if (!plugin?.connection?.test) {
7592
7512
  return reply.status(400).send({ error: "plugin does not support connection testing" });
7593
7513
  }
@@ -7615,7 +7535,7 @@ function connectionRoutes(fastify2) {
7615
7535
  fastify2.post("/api/connections/discover", async (request, reply) => {
7616
7536
  const { type } = request.query;
7617
7537
  if (!type) return reply.status(400).send({ error: "query 'type' required" });
7618
- const plugin = PluginRegistry3.get(type);
7538
+ const plugin = await getTenantPlugin(request, type);
7619
7539
  if (!plugin?.connection?.discover) {
7620
7540
  return reply.status(400).send({ error: "plugin does not support resource discovery" });
7621
7541
  }
@@ -7643,7 +7563,7 @@ function connectionRoutes(fastify2) {
7643
7563
 
7644
7564
  // src/controllers/eval.ts
7645
7565
  import { getStoreLattice as getStoreLattice10 } from "@axiom-lattice/core";
7646
- import { v4 as uuidv44 } from "uuid";
7566
+ import { v4 as uuidv43 } from "uuid";
7647
7567
 
7648
7568
  // src/services/eval-runner.ts
7649
7569
  import { EventEmitter } from "events";
@@ -7652,7 +7572,7 @@ import {
7652
7572
  modelLatticeManager as modelLatticeManager2,
7653
7573
  LatticeEvalProject
7654
7574
  } from "@axiom-lattice/core";
7655
- import { v4 as uuidv43 } from "uuid";
7575
+ import { v4 as uuidv42 } from "uuid";
7656
7576
  var TERMINAL_PERSIST_ATTEMPTS = 2;
7657
7577
  function mapLogs(logs) {
7658
7578
  return logs.map((l) => ({
@@ -7776,7 +7696,7 @@ var EvalRunner = class {
7776
7696
  console.warn(`[eval-runner] Project "${project.name}" has no judge modelKey and no "default" model \u2014 falling back to first registered model "${resolvedJudgeModelKey}"`);
7777
7697
  }
7778
7698
  }
7779
- const runId = uuidv43();
7699
+ const runId = uuidv42();
7780
7700
  const concurrency = Math.max(1, Math.floor(project.concurrency) || 3);
7781
7701
  const isHoldout = suites.length > 0 && suites.every((s) => s.name.endsWith("-validation"));
7782
7702
  const workspaceId = runConfig?.workspaceId || "";
@@ -7833,7 +7753,7 @@ var EvalRunner = class {
7833
7753
  if (terminalUnavailable()) return;
7834
7754
  const passed = result.result?.pass ?? false;
7835
7755
  const score = result.result?.final_score ?? 0;
7836
- await store.createRunResult(tenantId, runId, uuidv43(), {
7756
+ await store.createRunResult(tenantId, runId, uuidv42(), {
7837
7757
  suiteName,
7838
7758
  caseId: result.caseId,
7839
7759
  pass: passed,
@@ -7987,7 +7907,7 @@ var EvalRunner = class {
7987
7907
  var evalRunner = new EvalRunner();
7988
7908
 
7989
7909
  // src/controllers/eval.ts
7990
- function getTenantId11(request) {
7910
+ function getTenantId10(request) {
7991
7911
  const userTenantId = request.user?.tenantId;
7992
7912
  if (userTenantId) {
7993
7913
  return userTenantId;
@@ -8011,9 +7931,9 @@ async function getOwnedCase(store, tenantId, projectId, suiteId, caseId) {
8011
7931
  }
8012
7932
  async function createProject(request, reply) {
8013
7933
  try {
8014
- const tenantId = getTenantId11(request);
7934
+ const tenantId = getTenantId10(request);
8015
7935
  const store = getEvalStore();
8016
- const id3 = uuidv44();
7936
+ const id3 = uuidv43();
8017
7937
  const data = request.body;
8018
7938
  const existing = await store.getProjectsByTenant(tenantId);
8019
7939
  if (existing.some((p) => p.name === data.name)) {
@@ -8068,7 +7988,7 @@ async function createProject(request, reply) {
8068
7988
  }
8069
7989
  async function listProjects(request, reply) {
8070
7990
  try {
8071
- const tenantId = getTenantId11(request);
7991
+ const tenantId = getTenantId10(request);
8072
7992
  const store = getEvalStore();
8073
7993
  let projects = await store.getProjectsByTenant(tenantId);
8074
7994
  if (projects.length === 0) {
@@ -8079,7 +7999,7 @@ async function listProjects(request, reply) {
8079
7999
  const judgeModel = first ? { modelKey: first.key } : {};
8080
8000
  const host = request.hostname || "localhost";
8081
8001
  const baseUrl = `http://${host}:${process.env.PORT || 4001}`;
8082
- await store.createProject(tenantId, uuidv44(), {
8002
+ await store.createProject(tenantId, uuidv43(), {
8083
8003
  name: "Default",
8084
8004
  description: "Built-in project for testing eval against this server",
8085
8005
  judgeModelConfig: judgeModel,
@@ -8102,7 +8022,7 @@ async function listProjects(request, reply) {
8102
8022
  }
8103
8023
  async function getProject(request, reply) {
8104
8024
  try {
8105
- const tenantId = getTenantId11(request);
8025
+ const tenantId = getTenantId10(request);
8106
8026
  const store = getEvalStore();
8107
8027
  const { pid } = request.params;
8108
8028
  const project = await store.getProjectById(tenantId, pid);
@@ -8122,7 +8042,7 @@ async function getProject(request, reply) {
8122
8042
  }
8123
8043
  async function updateProject(request, reply) {
8124
8044
  try {
8125
- const tenantId = getTenantId11(request);
8045
+ const tenantId = getTenantId10(request);
8126
8046
  const store = getEvalStore();
8127
8047
  const { pid } = request.params;
8128
8048
  const existing = await store.getProjectById(tenantId, pid);
@@ -8166,7 +8086,7 @@ async function updateProject(request, reply) {
8166
8086
  async function deleteProject(request, reply) {
8167
8087
  let releaseDeletion;
8168
8088
  try {
8169
- const tenantId = getTenantId11(request);
8089
+ const tenantId = getTenantId10(request);
8170
8090
  const store = getEvalStore();
8171
8091
  const { pid } = request.params;
8172
8092
  const existing = await store.getProjectById(tenantId, pid);
@@ -8204,14 +8124,14 @@ async function deleteProject(request, reply) {
8204
8124
  }
8205
8125
  async function createSuite(request, reply) {
8206
8126
  try {
8207
- const tenantId = getTenantId11(request);
8127
+ const tenantId = getTenantId10(request);
8208
8128
  const store = getEvalStore();
8209
8129
  const { pid } = request.params;
8210
8130
  const project = await store.getProjectById(tenantId, pid);
8211
8131
  if (!project) {
8212
8132
  return reply.status(404).send({ success: false, message: "Project not found" });
8213
8133
  }
8214
- const id3 = uuidv44();
8134
+ const id3 = uuidv43();
8215
8135
  const data = request.body;
8216
8136
  const suite = await store.createSuite(tenantId, pid, id3, { name: data.name });
8217
8137
  return reply.status(201).send({
@@ -8226,7 +8146,7 @@ async function createSuite(request, reply) {
8226
8146
  }
8227
8147
  async function updateSuite(request, reply) {
8228
8148
  try {
8229
- const tenantId = getTenantId11(request);
8149
+ const tenantId = getTenantId10(request);
8230
8150
  const store = getEvalStore();
8231
8151
  const { pid, sid } = request.params;
8232
8152
  const existing = await getOwnedSuite(store, tenantId, pid, sid);
@@ -8246,7 +8166,7 @@ async function updateSuite(request, reply) {
8246
8166
  }
8247
8167
  async function deleteSuite(request, reply) {
8248
8168
  try {
8249
- const tenantId = getTenantId11(request);
8169
+ const tenantId = getTenantId10(request);
8250
8170
  const store = getEvalStore();
8251
8171
  const { pid, sid } = request.params;
8252
8172
  const existing = await getOwnedSuite(store, tenantId, pid, sid);
@@ -8265,14 +8185,14 @@ async function deleteSuite(request, reply) {
8265
8185
  }
8266
8186
  async function createCase(request, reply) {
8267
8187
  try {
8268
- const tenantId = getTenantId11(request);
8188
+ const tenantId = getTenantId10(request);
8269
8189
  const store = getEvalStore();
8270
8190
  const { pid, sid } = request.params;
8271
8191
  const suite = await getOwnedSuite(store, tenantId, pid, sid);
8272
8192
  if (!suite) {
8273
8193
  return reply.status(404).send({ success: false, message: "Suite not found" });
8274
8194
  }
8275
- const id3 = uuidv44();
8195
+ const id3 = uuidv43();
8276
8196
  const data = request.body;
8277
8197
  const created = await store.createCase(tenantId, sid, id3, {
8278
8198
  inputMessage: data.inputMessage,
@@ -8295,7 +8215,7 @@ async function createCase(request, reply) {
8295
8215
  }
8296
8216
  async function listCasesForSuite(request, reply) {
8297
8217
  try {
8298
- const tenantId = getTenantId11(request);
8218
+ const tenantId = getTenantId10(request);
8299
8219
  const store = getEvalStore();
8300
8220
  const { pid, sid } = request.params;
8301
8221
  const suite = await getOwnedSuite(store, tenantId, pid, sid);
@@ -8315,7 +8235,7 @@ async function listCasesForSuite(request, reply) {
8315
8235
  }
8316
8236
  async function updateCase(request, reply) {
8317
8237
  try {
8318
- const tenantId = getTenantId11(request);
8238
+ const tenantId = getTenantId10(request);
8319
8239
  const store = getEvalStore();
8320
8240
  const { pid, sid, cid } = request.params;
8321
8241
  const existing = await getOwnedCase(store, tenantId, pid, sid, cid);
@@ -8335,7 +8255,7 @@ async function updateCase(request, reply) {
8335
8255
  }
8336
8256
  async function deleteCase(request, reply) {
8337
8257
  try {
8338
- const tenantId = getTenantId11(request);
8258
+ const tenantId = getTenantId10(request);
8339
8259
  const store = getEvalStore();
8340
8260
  const { pid, sid, cid } = request.params;
8341
8261
  const existing = await getOwnedCase(store, tenantId, pid, sid, cid);
@@ -8367,7 +8287,7 @@ function registerEvalRoutes(app2) {
8367
8287
  app2.delete("/api/eval/projects/:pid/suites/:sid/cases/:cid", deleteCase);
8368
8288
  app2.post("/api/eval/projects/:pid/runs", async (request, reply) => {
8369
8289
  try {
8370
- const tenantId = getTenantId11(request);
8290
+ const tenantId = getTenantId10(request);
8371
8291
  const { pid } = request.params;
8372
8292
  const body = request.body ?? {};
8373
8293
  const bodyWs = request.headers["x-workspace-id"] || "";
@@ -8386,7 +8306,7 @@ function registerEvalRoutes(app2) {
8386
8306
  });
8387
8307
  app2.get("/api/eval/runs", async (request, reply) => {
8388
8308
  try {
8389
- const tenantId = getTenantId11(request);
8309
+ const tenantId = getTenantId10(request);
8390
8310
  const query = request.query;
8391
8311
  const runs = await getEvalStore().getRunsByTenant(tenantId, { projectId: query.project_id, status: query.status });
8392
8312
  reply.send({ success: true, message: "Ok", data: { records: runs, total: runs.length } });
@@ -8396,7 +8316,7 @@ function registerEvalRoutes(app2) {
8396
8316
  });
8397
8317
  app2.get("/api/eval/runs/:rid", async (request, reply) => {
8398
8318
  try {
8399
- const tenantId = getTenantId11(request);
8319
+ const tenantId = getTenantId10(request);
8400
8320
  const { rid } = request.params;
8401
8321
  const run2 = await getEvalStore().getRunById(tenantId, rid);
8402
8322
  if (!run2) return reply.status(404).send({ success: false, message: "Run not found" });
@@ -8407,7 +8327,7 @@ function registerEvalRoutes(app2) {
8407
8327
  }
8408
8328
  });
8409
8329
  app2.get("/api/eval/runs/:rid/stream", async (request, reply) => {
8410
- const tenantId = getTenantId11(request);
8330
+ const tenantId = getTenantId10(request);
8411
8331
  const { rid } = request.params;
8412
8332
  const store = getEvalStore();
8413
8333
  const ownedRun = await store.getRunById(tenantId, rid);
@@ -8483,7 +8403,7 @@ data: ${JSON.stringify(event.data)}
8483
8403
  });
8484
8404
  app2.post("/api/eval/runs/:rid/abort", async (request, reply) => {
8485
8405
  try {
8486
- const tenantId = getTenantId11(request);
8406
+ const tenantId = getTenantId10(request);
8487
8407
  const { rid } = request.params;
8488
8408
  const run2 = await getEvalStore().getRunById(tenantId, rid);
8489
8409
  if (!run2) return reply.status(404).send({ success: false, message: "Run not found" });
@@ -8496,7 +8416,7 @@ data: ${JSON.stringify(event.data)}
8496
8416
  });
8497
8417
  app2.delete("/api/eval/runs/:rid", async (request, reply) => {
8498
8418
  try {
8499
- const tenantId = getTenantId11(request);
8419
+ const tenantId = getTenantId10(request);
8500
8420
  const { rid } = request.params;
8501
8421
  const store = getEvalStore();
8502
8422
  const run2 = await store.getRunById(tenantId, rid);
@@ -8513,7 +8433,7 @@ data: ${JSON.stringify(event.data)}
8513
8433
  });
8514
8434
  app2.get("/api/eval/reports/projects/:pid", async (request, reply) => {
8515
8435
  try {
8516
- const tenantId = getTenantId11(request);
8436
+ const tenantId = getTenantId10(request);
8517
8437
  const { pid } = request.params;
8518
8438
  const report = await getEvalStore().getProjectReport(tenantId, pid);
8519
8439
  if (!report) return reply.status(404).send({ success: false, message: "Project not found" });
@@ -8526,7 +8446,7 @@ data: ${JSON.stringify(event.data)}
8526
8446
 
8527
8447
  // src/controllers/users.ts
8528
8448
  import { getStoreLattice as getStoreLattice11 } from "@axiom-lattice/core";
8529
- import { v4 as uuidv45 } from "uuid";
8449
+ import { v4 as uuidv44 } from "uuid";
8530
8450
  var UsersController = class {
8531
8451
  constructor() {
8532
8452
  this.userStore = getStoreLattice11("default", "user").store;
@@ -8542,7 +8462,7 @@ var UsersController = class {
8542
8462
  }
8543
8463
  async createUser(request, reply) {
8544
8464
  const data = request.body;
8545
- const id3 = uuidv45();
8465
+ const id3 = uuidv44();
8546
8466
  const existingUser = await this.userStore.getUserByEmail(data.email);
8547
8467
  if (existingUser) {
8548
8468
  return reply.status(409).send({
@@ -8608,7 +8528,7 @@ function registerUserRoutes(app2) {
8608
8528
 
8609
8529
  // src/controllers/tenants.ts
8610
8530
  import { getStoreLattice as getStoreLattice12 } from "@axiom-lattice/core";
8611
- import { v4 as uuidv46 } from "uuid";
8531
+ import { v4 as uuidv45 } from "uuid";
8612
8532
  var TenantsController = class {
8613
8533
  constructor() {
8614
8534
  this.tenantStore = getStoreLattice12("default", "tenant").store;
@@ -8620,7 +8540,7 @@ var TenantsController = class {
8620
8540
  }
8621
8541
  async createTenant(request, reply) {
8622
8542
  const data = request.body;
8623
- const id3 = uuidv46();
8543
+ const id3 = uuidv45();
8624
8544
  const tenant2 = await this.tenantStore.createTenant(id3, data);
8625
8545
  return reply.status(201).send({ success: true, data: tenant2 });
8626
8546
  }
@@ -8676,7 +8596,7 @@ function registerTenantRoutes(app2) {
8676
8596
 
8677
8597
  // src/controllers/auth.ts
8678
8598
  import { getStoreLattice as getStoreLattice13 } from "@axiom-lattice/core";
8679
- import { v4 as uuidv47 } from "uuid";
8599
+ import { v4 as uuidv46 } from "uuid";
8680
8600
  import { createHmac, randomBytes, timingSafeEqual } from "crypto";
8681
8601
  var defaultAuthConfig = {
8682
8602
  autoApproveUsers: true,
@@ -8700,7 +8620,7 @@ var AuthController = class {
8700
8620
  error: "User with this email already exists"
8701
8621
  });
8702
8622
  }
8703
- const userId = uuidv47();
8623
+ const userId = uuidv46();
8704
8624
  const userStatus = this.config.autoApproveUsers ? "active" : "pending";
8705
8625
  const userData = {
8706
8626
  email,
@@ -9099,13 +9019,13 @@ function isStaleConsoleSessionCredential(authHeader) {
9099
9019
  }
9100
9020
  }
9101
9021
  function bypassesConsoleAuth(request) {
9102
- const path4 = request.url.split("?")[0];
9022
+ const path5 = request.url.split("?")[0];
9103
9023
  const method = request.method;
9104
- if (method === "GET" && /^\/api\/web-apps\/[^/]+\/runtime\/bootstrap$/.test(path4) || (method === "GET" || method === "POST") && /^\/api\/web-apps\/[^/]+\/runtime\/threads$/.test(path4) || (method === "PATCH" || method === "DELETE") && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+$/.test(path4) || method === "GET" && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+\/messages$/.test(path4) || method === "POST" && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+\/(messages\/stream|abort|attachments)$/.test(path4) || method === "POST" && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+\/interrupts\/[^/]+\/resume$/.test(path4)) return true;
9105
- if (request.method === "GET" && /^\/api\/a2a\/agents\/[^/]+\/\.well-known\/agent-card\.json$/.test(path4)) {
9024
+ if (method === "GET" && /^\/api\/web-apps\/[^/]+\/runtime\/bootstrap$/.test(path5) || (method === "GET" || method === "POST") && /^\/api\/web-apps\/[^/]+\/runtime\/threads$/.test(path5) || (method === "PATCH" || method === "DELETE") && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+$/.test(path5) || method === "GET" && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+\/messages$/.test(path5) || method === "GET" && /^\/api\/web-apps\/[^/]+\/runtime\/files\/(viewfile|downloadfile)$/.test(path5) || method === "GET" && /^\/api\/web-apps\/[^/]+\/runtime\/api\/assistants\/[^/]+\/threads\/[^/]+\/sandbox\/(viewfile|downloadfile)$/.test(path5) || method === "POST" && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+\/(messages\/stream|abort|attachments)$/.test(path5) || method === "POST" && /^\/api\/web-apps\/[^/]+\/runtime\/threads\/[^/]+\/interrupts\/[^/]+\/resume$/.test(path5) || method === "GET" && /^\/api\/web-apps\/[^/]+\/chat$/.test(path5) || method === "GET" && /^\/embed\/[^/]+$/.test(path5) || (method === "POST" || method === "DELETE") && path5 === "/open/mcp" || method === "POST" && path5 === "/open/session" || (method === "GET" || method === "POST") && path5.startsWith("/open/sandbox/files/")) return true;
9025
+ if (request.method === "GET" && /^\/api\/a2a\/agents\/[^/]+\/\.well-known\/agent-card\.json$/.test(path5)) {
9106
9026
  return true;
9107
9027
  }
9108
- return request.method === "POST" && /^\/api\/a2a\/agents\/[^/]+\/jsonrpc$/.test(path4);
9028
+ return request.method === "POST" && /^\/api\/a2a\/agents\/[^/]+\/jsonrpc$/.test(path5);
9109
9029
  }
9110
9030
  function registerConsoleAuthHook(app2, options) {
9111
9031
  app2.addHook("preHandler", async (request, reply) => {
@@ -9128,8 +9048,8 @@ function registerConsoleAuthHook(app2, options) {
9128
9048
  }
9129
9049
  if (PUBLIC_ROUTES.some((route) => request.url === route)) return;
9130
9050
  if (request.url.startsWith("/s/")) return;
9131
- const path4 = request.url.split("?")[0];
9132
- if (request.method === "GET" && /^\/api\/workspaces\/[^/]+\/projects\/[^/]+\/viewfile$/.test(path4) || request.method === "GET" && /^\/api\/workspaces\/[^/]+\/projects\/[^/]+\/downloadfile$/.test(path4) || request.method === "POST" && /^\/api\/workspaces\/[^/]+\/projects\/[^/]+\/uploadfile$/.test(path4) || path4.startsWith("/f/") || path4 === "/f") {
9051
+ const path5 = request.url.split("?")[0];
9052
+ if (request.method === "GET" && /^\/api\/workspaces\/[^/]+\/projects\/[^/]+\/viewfile$/.test(path5) || request.method === "GET" && /^\/api\/workspaces\/[^/]+\/projects\/[^/]+\/downloadfile$/.test(path5) || request.method === "POST" && /^\/api\/workspaces\/[^/]+\/projects\/[^/]+\/uploadfile$/.test(path5) || path5.startsWith("/f/") || path5 === "/f") {
9133
9053
  return;
9134
9054
  }
9135
9055
  await reply.status(401).send({
@@ -9277,7 +9197,7 @@ var larkChannelAdapter = {
9277
9197
  };
9278
9198
  },
9279
9199
  async sendReply(replyTarget, message, installation) {
9280
- const { createLarkSender } = await import("./sender-PX32VSHB.mjs");
9200
+ const { createLarkSender } = await import("./sender-PLDU5EZ3.mjs");
9281
9201
  const sender = await createLarkSender(installation.config);
9282
9202
  await sender.sendTextReply({
9283
9203
  chatId: replyTarget.rawTarget.chatId,
@@ -9500,7 +9420,7 @@ function setChannelControllerDeps(deps) {
9500
9420
  _adapterRegistry = deps.adapterRegistry;
9501
9421
  _router = deps.router;
9502
9422
  }
9503
- function getTenantId12(request) {
9423
+ function getTenantId11(request) {
9504
9424
  const userTenantId = request.user?.tenantId;
9505
9425
  if (typeof userTenantId === "string" && userTenantId) {
9506
9426
  return userTenantId;
@@ -9630,7 +9550,7 @@ async function getInstallationStore() {
9630
9550
  });
9631
9551
  }
9632
9552
  async function getChannelInstallationList(request) {
9633
- const tenantId = getTenantId12(request);
9553
+ const tenantId = getTenantId11(request);
9634
9554
  const { channel } = request.query;
9635
9555
  try {
9636
9556
  const store = await getInstallationStore();
@@ -9656,7 +9576,7 @@ async function getChannelInstallationList(request) {
9656
9576
  }
9657
9577
  }
9658
9578
  async function getChannelInstallation(request, reply) {
9659
- const tenantId = getTenantId12(request);
9579
+ const tenantId = getTenantId11(request);
9660
9580
  const { installationId } = request.params;
9661
9581
  try {
9662
9582
  const store = await getInstallationStore();
@@ -9683,7 +9603,7 @@ async function getChannelInstallation(request, reply) {
9683
9603
  }
9684
9604
  }
9685
9605
  async function createChannelInstallation(request, reply) {
9686
- const tenantId = getTenantId12(request);
9606
+ const tenantId = getTenantId11(request);
9687
9607
  try {
9688
9608
  const body = snapshotPublicCreateRequest(request.body);
9689
9609
  if (!body) {
@@ -9742,7 +9662,7 @@ async function createChannelInstallation(request, reply) {
9742
9662
  }
9743
9663
  }
9744
9664
  async function updateChannelInstallation(request, reply) {
9745
- const tenantId = getTenantId12(request);
9665
+ const tenantId = getTenantId11(request);
9746
9666
  const { installationId } = request.params;
9747
9667
  try {
9748
9668
  const store = await getInstallationStore();
@@ -9866,7 +9786,7 @@ async function updateChannelInstallation(request, reply) {
9866
9786
  }
9867
9787
  }
9868
9788
  async function deleteChannelInstallation(request, reply) {
9869
- const tenantId = getTenantId12(request);
9789
+ const tenantId = getTenantId11(request);
9870
9790
  const { installationId } = request.params;
9871
9791
  try {
9872
9792
  const store = await getInstallationStore();
@@ -9938,7 +9858,7 @@ import {
9938
9858
  descriptorDataValue as descriptorDataValue2
9939
9859
  } from "@axiom-lattice/protocols";
9940
9860
  import { getBindingRegistry, getStoreLattice as getStoreLattice14 } from "@axiom-lattice/core";
9941
- function getTenantId13(request) {
9861
+ function getTenantId12(request) {
9942
9862
  const userTenantId = request.user?.tenantId;
9943
9863
  if (typeof userTenantId === "string" && userTenantId) return userTenantId;
9944
9864
  return request.headers["x-tenant-id"] || "default";
@@ -10011,7 +9931,7 @@ function invalidCreateRequest(reply) {
10011
9931
  }
10012
9932
  async function getBindingList(request, _reply) {
10013
9933
  void _reply;
10014
- const tenantId = getTenantId13(request);
9934
+ const tenantId = getTenantId12(request);
10015
9935
  const { channel, agentId, channelInstallationId, limit, offset } = request.query;
10016
9936
  try {
10017
9937
  const registry = getBindingRegistry();
@@ -10031,7 +9951,7 @@ async function getBindingList(request, _reply) {
10031
9951
  }
10032
9952
  }
10033
9953
  async function getBinding(request, reply) {
10034
- const tenantId = getTenantId13(request);
9954
+ const tenantId = getTenantId12(request);
10035
9955
  try {
10036
9956
  const registry = getBindingRegistry();
10037
9957
  const binding = await registry.findById(tenantId, request.params.id);
@@ -10046,7 +9966,7 @@ async function getBinding(request, reply) {
10046
9966
  }
10047
9967
  }
10048
9968
  async function createBinding(request, reply) {
10049
- const tenantId = getTenantId13(request);
9969
+ const tenantId = getTenantId12(request);
10050
9970
  try {
10051
9971
  const input = snapshotPublicCreate(request.body);
10052
9972
  if (!input) return invalidCreateRequest(reply);
@@ -10071,7 +9991,7 @@ async function createBinding(request, reply) {
10071
9991
  }
10072
9992
  async function updateBinding(request, reply) {
10073
9993
  try {
10074
- const tenantId = getTenantId13(request);
9994
+ const tenantId = getTenantId12(request);
10075
9995
  const registry = getBindingRegistry();
10076
9996
  const existing = await registry.findById(tenantId, request.params.id);
10077
9997
  if (!existing || isInternalBinding(existing)) {
@@ -10098,7 +10018,7 @@ async function updateBinding(request, reply) {
10098
10018
  }
10099
10019
  async function deleteBinding(request, reply) {
10100
10020
  try {
10101
- const tenantId = getTenantId13(request);
10021
+ const tenantId = getTenantId12(request);
10102
10022
  const registry = getBindingRegistry();
10103
10023
  const existing = await registry.findById(tenantId, request.params.id);
10104
10024
  if (!existing || isInternalBinding(existing)) {
@@ -10115,7 +10035,7 @@ async function deleteBinding(request, reply) {
10115
10035
  }
10116
10036
  async function resolveBinding(request, _reply) {
10117
10037
  void _reply;
10118
- const tenantId = getTenantId13(request);
10038
+ const tenantId = getTenantId12(request);
10119
10039
  const { channel, senderId, channelInstallationId } = request.query;
10120
10040
  if (channel === "room") {
10121
10041
  return { success: false, message: "No binding found", data: null };
@@ -10145,7 +10065,7 @@ function registerChannelBindingRoutes(app2) {
10145
10065
 
10146
10066
  // src/controllers/menu-items.ts
10147
10067
  import { getMenuRegistry } from "@axiom-lattice/core";
10148
- function getTenantId14(request) {
10068
+ function getTenantId13(request) {
10149
10069
  const userTenantId = request.user?.tenantId;
10150
10070
  if (userTenantId) return userTenantId;
10151
10071
  return request.headers["x-tenant-id"] || "default";
@@ -10154,7 +10074,7 @@ function errorMessage(err) {
10154
10074
  return err instanceof Error ? err.message : "Unexpected error";
10155
10075
  }
10156
10076
  async function getMenuItemList(request, _reply) {
10157
- const tenantId = getTenantId14(request);
10077
+ const tenantId = getTenantId13(request);
10158
10078
  try {
10159
10079
  const registry = getMenuRegistry();
10160
10080
  const items = await registry.list({ tenantId, menuTarget: request.query.menuTarget });
@@ -10166,7 +10086,7 @@ async function getMenuItemList(request, _reply) {
10166
10086
  }
10167
10087
  }
10168
10088
  async function getMenuItem(request, reply) {
10169
- const tenantId = getTenantId14(request);
10089
+ const tenantId = getTenantId13(request);
10170
10090
  try {
10171
10091
  const registry = getMenuRegistry();
10172
10092
  const item = await registry.getById(request.params.id);
@@ -10183,7 +10103,7 @@ async function getMenuItem(request, reply) {
10183
10103
  }
10184
10104
  }
10185
10105
  async function createMenuItem(request, reply) {
10186
- const tenantId = getTenantId14(request);
10106
+ const tenantId = getTenantId13(request);
10187
10107
  try {
10188
10108
  const registry = getMenuRegistry();
10189
10109
  const item = await registry.create({ ...request.body, tenantId });
@@ -10198,7 +10118,7 @@ async function createMenuItem(request, reply) {
10198
10118
  }
10199
10119
  async function updateMenuItem(request, reply) {
10200
10120
  try {
10201
- const tenantId = getTenantId14(request);
10121
+ const tenantId = getTenantId13(request);
10202
10122
  const registry = getMenuRegistry();
10203
10123
  const existing = await registry.getById(request.params.id);
10204
10124
  if (!existing || existing.tenantId !== tenantId) {
@@ -10216,7 +10136,7 @@ async function updateMenuItem(request, reply) {
10216
10136
  }
10217
10137
  async function deleteMenuItem(request, reply) {
10218
10138
  try {
10219
- const tenantId = getTenantId14(request);
10139
+ const tenantId = getTenantId13(request);
10220
10140
  const registry = getMenuRegistry();
10221
10141
  const existing = await registry.getById(request.params.id);
10222
10142
  if (!existing || existing.tenantId !== tenantId) {
@@ -10257,8 +10177,8 @@ var log = {
10257
10177
  };
10258
10178
  var connections = /* @__PURE__ */ new Map();
10259
10179
  var pending = /* @__PURE__ */ new Map();
10260
- function getAgentIdFromPath(path4) {
10261
- const match = path4.match(/^\/api\/a2a\/bridge\/proxy\/([^/]+)/);
10180
+ function getAgentIdFromPath(path5) {
10181
+ const match = path5.match(/^\/api\/a2a\/bridge\/proxy\/([^/]+)/);
10262
10182
  return match ? match[1] : null;
10263
10183
  }
10264
10184
  function handleBridgeConnection(socket, _request) {
@@ -10499,7 +10419,7 @@ import { getStoreLattice as getStoreLattice15 } from "@axiom-lattice/core";
10499
10419
  import {
10500
10420
  AgentType as AgentType2
10501
10421
  } from "@axiom-lattice/protocols";
10502
- function getTenantId15(request) {
10422
+ function getTenantId14(request) {
10503
10423
  const userTenantId = request.user?.tenantId;
10504
10424
  if (userTenantId) return userTenantId;
10505
10425
  return request.headers["x-tenant-id"] || "default";
@@ -10536,7 +10456,7 @@ async function requireManagedAssistant(request, reply) {
10536
10456
  reply.status(400).send({ success: false, error: "assistantId is required" });
10537
10457
  return null;
10538
10458
  }
10539
- const registered = await getLocalA2AAssistant(getTenantId15(request), assistantId);
10459
+ const registered = await getLocalA2AAssistant(getTenantId14(request), assistantId);
10540
10460
  if (!registered) {
10541
10461
  reply.status(404).send({
10542
10462
  success: false,
@@ -10547,7 +10467,7 @@ async function requireManagedAssistant(request, reply) {
10547
10467
  return { assistantId, localRuntime: registered.localRuntime };
10548
10468
  }
10549
10469
  async function getLocalA2AStatus(request, reply) {
10550
- const tenantId = getTenantId15(request);
10470
+ const tenantId = getTenantId14(request);
10551
10471
  const managed = await getLocalA2AAssistants(tenantId);
10552
10472
  const states = await Promise.all(
10553
10473
  managed.map(
@@ -11186,7 +11106,7 @@ function notifyProjectTaskAdmission(task) {
11186
11106
  } catch {
11187
11107
  }
11188
11108
  }
11189
- function getTenantId16(request) {
11109
+ function getTenantId15(request) {
11190
11110
  const user = request.user;
11191
11111
  const value = user?.tenantId ?? request.headers["x-tenant-id"] ?? "default";
11192
11112
  if (typeof value !== "string" || !value) throw new HttpTaskError(400, "INVALID_TASK_INPUT");
@@ -11427,7 +11347,7 @@ async function validateReferences(store, task, parentId, dependencies) {
11427
11347
  function createTaskController(deps) {
11428
11348
  const mutationMutex = deps.projectMutationMutex ?? projectMutationMutex;
11429
11349
  const authorize = async (request, projectId, capability2) => deps.access.requireProjectAccess({
11430
- tenantId: getTenantId16(request),
11350
+ tenantId: getTenantId15(request),
11431
11351
  userId: getUserId4(request),
11432
11352
  projectId,
11433
11353
  capability: capability2
@@ -11444,7 +11364,7 @@ function createTaskController(deps) {
11444
11364
  });
11445
11365
  };
11446
11366
  const list = withErrors(async (request) => {
11447
- const tenantId = getTenantId16(request);
11367
+ const tenantId = getTenantId15(request);
11448
11368
  const userId = getUserId4(request);
11449
11369
  const query = exactObject(request.query, ["projectId", "status", "priority", "limit", "offset", "ownerType", "ownerId", "parentId", "metadata"]);
11450
11370
  const projectId = typeof query.projectId === "string" ? query.projectId : void 0;
@@ -11516,14 +11436,14 @@ function createTaskController(deps) {
11516
11436
  });
11517
11437
  const get = withErrors(async (request, reply) => {
11518
11438
  await preauthorizeExplicitProject(request, authorize);
11519
- const current = await deps.tasks.getById(getTenantId16(request), request.params.id);
11439
+ const current = await deps.tasks.getById(getTenantId15(request), request.params.id);
11520
11440
  if (!current) return sendNotFound(reply);
11521
11441
  await authorizeRead(request, current, authorize);
11522
11442
  return { success: true, data: current };
11523
11443
  });
11524
11444
  const create = withErrors(async (request, reply) => {
11525
11445
  const body = snapshotCreate(request.body);
11526
- const tenantId = getTenantId16(request);
11446
+ const tenantId = getTenantId15(request);
11527
11447
  const userId = getUserId4(request);
11528
11448
  const governed = governedCreate(body);
11529
11449
  if (governed) return reply.code(409).send({ success: false, code: governed });
@@ -11576,7 +11496,7 @@ function createTaskController(deps) {
11576
11496
  const update = withErrors(async (request, reply) => {
11577
11497
  const body = snapshotUpdate(request.body);
11578
11498
  await preauthorizeExplicitProject(request, authorize);
11579
- const current = await deps.tasks.getById(getTenantId16(request), request.params.id);
11499
+ const current = await deps.tasks.getById(getTenantId15(request), request.params.id);
11580
11500
  if (!current) return sendNotFound(reply);
11581
11501
  await authorizeMutation(request, current, authorize);
11582
11502
  return lockedTask(request, current, async (locked) => {
@@ -11594,7 +11514,7 @@ function createTaskController(deps) {
11594
11514
  });
11595
11515
  const remove = withErrors(async (request, reply) => {
11596
11516
  await preauthorizeExplicitProject(request, authorize);
11597
- const current = await deps.tasks.getById(getTenantId16(request), request.params.id);
11517
+ const current = await deps.tasks.getById(getTenantId15(request), request.params.id);
11598
11518
  if (!current) return sendNotFound(reply);
11599
11519
  await authorizeMutation(request, current, authorize);
11600
11520
  return lockedTask(request, current, async (locked) => {
@@ -11608,7 +11528,7 @@ function createTaskController(deps) {
11608
11528
  const complete = withErrors(async (request, reply) => {
11609
11529
  const body = snapshotComplete(request.body);
11610
11530
  await preauthorizeExplicitProject(request, authorize);
11611
- const current = await deps.tasks.getById(getTenantId16(request), request.params.id);
11531
+ const current = await deps.tasks.getById(getTenantId15(request), request.params.id);
11612
11532
  if (!current) return sendNotFound(reply);
11613
11533
  await authorizeMutation(request, current, authorize);
11614
11534
  return lockedTask(request, current, async (locked) => {
@@ -11625,7 +11545,7 @@ function createTaskController(deps) {
11625
11545
  });
11626
11546
  const workItems = withErrors(async (request, reply) => {
11627
11547
  await preauthorizeExplicitProject(request, authorize);
11628
- const current = await deps.tasks.getById(getTenantId16(request), request.params.id);
11548
+ const current = await deps.tasks.getById(getTenantId15(request), request.params.id);
11629
11549
  if (!current) return sendNotFound(reply);
11630
11550
  await authorizeRead(request, current, authorize);
11631
11551
  const query = exactObject(request.query, ["action", "limit", "offset"]);
@@ -11645,7 +11565,7 @@ function createTaskController(deps) {
11645
11565
  const body = snapshotReassign(request.body);
11646
11566
  const pathProject = request.params.projectId;
11647
11567
  const access = await authorize(request, pathProject, "manage");
11648
- const snapshot = await deps.tasks.getById(getTenantId16(request), request.params.id);
11568
+ const snapshot = await deps.tasks.getById(getTenantId15(request), request.params.id);
11649
11569
  if (!snapshot || snapshot.projectId !== access.project.id || snapshot.workspaceId !== access.project.workspaceId || snapshot.ownerType !== "agent") throw notFound();
11650
11570
  const projectId = snapshot.projectId;
11651
11571
  return deps.executionMutex.runExclusive({
@@ -12811,7 +12731,6 @@ function registerAgentWebAppRuntimeRoutes(app2, deps) {
12811
12731
  });
12812
12732
  routes.get("/api/web-apps/:webAppId/runtime/files/viewfile", async (request, reply) => {
12813
12733
  const { webAppId } = paramsSchema.parse(request.params);
12814
- const identity = await resolveRuntimeIdentity(request, webAppId, identities);
12815
12734
  const scope = await fileScope(webAppId, fileQuerySchema.parse(request.query));
12816
12735
  const query = { ...request.query, assistantId: scope.assistantId };
12817
12736
  await workspace.viewFile(scopedRequest(request, scope, { workspaceId: scope.workspaceId, projectId: scope.projectId }, query), reply);
@@ -12819,7 +12738,6 @@ function registerAgentWebAppRuntimeRoutes(app2, deps) {
12819
12738
  });
12820
12739
  routes.get("/api/web-apps/:webAppId/runtime/files/downloadfile", async (request, reply) => {
12821
12740
  const { webAppId } = paramsSchema.parse(request.params);
12822
- const identity = await resolveRuntimeIdentity(request, webAppId, identities);
12823
12741
  const scope = await fileScope(webAppId, fileQuerySchema.parse(request.query));
12824
12742
  const query = { ...request.query, assistantId: scope.assistantId };
12825
12743
  await workspace.downloadFile(scopedRequest(request, scope, { workspaceId: scope.workspaceId, projectId: scope.projectId }, query), reply);
@@ -12844,6 +12762,15 @@ function registerAgentWebAppRuntimeRoutes(app2, deps) {
12844
12762
  };
12845
12763
  routes.get("/api/web-apps/:webAppId/runtime/assistants/:assistantId/threads/:threadId/sandbox/downloadfile", delegateGenuiFile(workspace.downloadFile.bind(workspace)));
12846
12764
  routes.get("/api/web-apps/:webAppId/runtime/assistants/:assistantId/threads/:threadId/sandbox/viewfile", delegateGenuiFile(workspace.viewFile.bind(workspace)));
12765
+ const delegateAnonGenuiFile = (method) => async (request, reply) => {
12766
+ const { webAppId } = genuiSandboxParams.parse(request.params);
12767
+ const scope = await fileScope(webAppId, fileQuerySchema.parse(request.query));
12768
+ const query = { ...request.query, assistantId: scope.assistantId };
12769
+ await method(scopedRequest(request, scope, { workspaceId: scope.workspaceId, projectId: scope.projectId }, query), reply);
12770
+ return reply;
12771
+ };
12772
+ routes.get("/api/web-apps/:webAppId/runtime/api/assistants/:assistantId/threads/:threadId/sandbox/downloadfile", delegateAnonGenuiFile(workspace.downloadFile.bind(workspace)));
12773
+ routes.get("/api/web-apps/:webAppId/runtime/api/assistants/:assistantId/threads/:threadId/sandbox/viewfile", delegateAnonGenuiFile(workspace.viewFile.bind(workspace)));
12847
12774
  }
12848
12775
  const mirrorThreadParams = z5.object({ webAppId: idSchema, assistantId: idSchema, threadId: idSchema }).strict();
12849
12776
  const mirrorBody = z5.object({ metadata: z5.object({ label: z5.string().max(300).optional() }).strict().optional(), projectId: idSchema.optional(), modelKey: idSchema.optional() }).strict();
@@ -13034,6 +12961,105 @@ function isMultipartRequestError(error) {
13034
12961
  return typeof error === "object" && error !== null && "code" in error && typeof error.code === "string" && error.code.startsWith("FST_");
13035
12962
  }
13036
12963
 
12964
+ // src/routes/agent-web-app-embed.ts
12965
+ import { existsSync as existsSync2 } from "fs";
12966
+ import { readFile, readdir as readdir2 } from "fs/promises";
12967
+ import path3 from "path";
12968
+ import { z as z6 } from "zod";
12969
+ var idSchema2 = z6.string().min(1).max(128).regex(/^[A-Za-z0-9._:@-]+$/);
12970
+ var JS_CONTENT_TYPE = "application/javascript; charset=utf-8";
12971
+ var CSS_CONTENT_TYPE = "text/css; charset=utf-8";
12972
+ var EXACT_ASSETS = {
12973
+ "agent-chat-loader.js": { contentType: JS_CONTENT_TYPE },
12974
+ "embed-page.js": { contentType: JS_CONTENT_TYPE },
12975
+ "embed-page.css": { contentType: CSS_CONTENT_TYPE }
12976
+ };
12977
+ var HASHED_CHUNK_PATTERN = /^embed-page-[A-Za-z0-9._-]+\.(js|css)$/;
12978
+ var CHUNK_CSS_PATTERN = /^embed-page-[A-Za-z0-9._-]+\.css$/;
12979
+ function resolveAsset(asset) {
12980
+ if (asset.includes("..")) return null;
12981
+ const exact2 = EXACT_ASSETS[asset];
12982
+ if (exact2 !== void 0) return { contentType: exact2.contentType, immutable: false };
12983
+ const hashed = HASHED_CHUNK_PATTERN.exec(asset);
12984
+ if (hashed) {
12985
+ return { contentType: hashed[1] === "css" ? CSS_CONTENT_TYPE : JS_CONTENT_TYPE, immutable: true };
12986
+ }
12987
+ return null;
12988
+ }
12989
+ async function listChunkCssFiles(assetsDir) {
12990
+ try {
12991
+ return (await readdir2(assetsDir)).filter((name) => CHUNK_CSS_PATTERN.test(name) && !name.includes("..")).sort();
12992
+ } catch {
12993
+ return [];
12994
+ }
12995
+ }
12996
+ var BUNDLED_MARKER = "agent-chat-loader.js";
12997
+ function resolveBundledEmbedDir() {
12998
+ if (typeof __dirname === "string") {
12999
+ const compiled = path3.resolve(__dirname, "embed");
13000
+ if (existsSync2(path3.join(compiled, BUNDLED_MARKER))) return compiled;
13001
+ }
13002
+ let dir = path3.dirname(path3.resolve(process.argv[1] ?? process.cwd()));
13003
+ for (let depth = 0; depth < 8; depth += 1) {
13004
+ const candidate = path3.join(dir, "packages", "gateway", "dist", "embed");
13005
+ if (existsSync2(path3.join(candidate, BUNDLED_MARKER))) return candidate;
13006
+ const parent = path3.dirname(dir);
13007
+ if (parent === dir) break;
13008
+ dir = parent;
13009
+ }
13010
+ return null;
13011
+ }
13012
+ function renderChatShell(chunkCssFiles) {
13013
+ const chunkCssLinks = chunkCssFiles.map(
13014
+ (name) => ` <link rel="stylesheet" href="/embed/${name}" />`
13015
+ );
13016
+ return [
13017
+ "<!doctype html>",
13018
+ '<html lang="en">',
13019
+ " <head>",
13020
+ ' <meta charset="utf-8" />',
13021
+ ' <meta name="viewport" content="width=device-width, initial-scale=1" />',
13022
+ " <title>Agent chat</title>",
13023
+ ' <link rel="stylesheet" href="/embed/embed-page.css" />',
13024
+ ...chunkCssLinks,
13025
+ " </head>",
13026
+ " <body>",
13027
+ ' <div id="axiom-embed-root">',
13028
+ " <noscript>This chat requires JavaScript.</noscript>",
13029
+ ' <p class="axiom-embed-loading">Loading chat\u2026</p>',
13030
+ " </div>",
13031
+ ' <script type="module" src="/embed/embed-page.js"></script>',
13032
+ " </body>",
13033
+ "</html>"
13034
+ ].join("\n");
13035
+ }
13036
+ function registerAgentWebAppEmbedRoutes(app2, deps = {}) {
13037
+ const bundledDir = resolveBundledEmbedDir();
13038
+ const assetsDir = deps.assetsDir ?? process.env.AXIOM_EMBED_ASSETS_DIR ?? bundledDir ?? path3.resolve(process.cwd(), "assets/embed");
13039
+ let chunkCssFiles = null;
13040
+ app2.get("/api/web-apps/:webAppId/chat", async (request, reply) => {
13041
+ const parsed = idSchema2.safeParse(request.params.webAppId);
13042
+ if (!parsed.success) {
13043
+ return reply.code(400).send({ success: false, error: { code: "INVALID_REQUEST", message: "Invalid web app id", retryable: false } });
13044
+ }
13045
+ chunkCssFiles ?? (chunkCssFiles = await listChunkCssFiles(assetsDir));
13046
+ return reply.header("content-type", "text/html; charset=utf-8").header("cache-control", "no-store").send(renderChatShell(chunkCssFiles));
13047
+ });
13048
+ app2.get("/embed/:asset", async (request, reply) => {
13049
+ const asset = request.params.asset ?? "";
13050
+ const resolved = resolveAsset(asset);
13051
+ if (resolved === null) {
13052
+ return reply.code(404).send({ success: false, error: { code: "INVALID_REQUEST", message: "Unknown embed asset", retryable: false } });
13053
+ }
13054
+ try {
13055
+ const body = await readFile(path3.join(assetsDir, asset));
13056
+ return reply.header("content-type", resolved.contentType).header("cache-control", resolved.immutable ? "public, max-age=31536000, immutable" : "public, max-age=300").send(body);
13057
+ } catch {
13058
+ return reply.code(404).send({ success: false, error: { code: "INVALID_REQUEST", message: "Embed asset not built", retryable: false } });
13059
+ }
13060
+ });
13061
+ }
13062
+
13037
13063
  // src/services/agent-web-app/AgentWebAppAttachmentRef.ts
13038
13064
  import { createCipheriv, createDecipheriv, createHash as createHash3, randomBytes as randomBytes2 } from "crypto";
13039
13065
  var TTL_MS = 15 * 6e4;
@@ -13116,10 +13142,10 @@ function isAttachmentPayload(value) {
13116
13142
  }
13117
13143
 
13118
13144
  // src/controllers/capability-bundles.ts
13119
- import { z as z7 } from "zod";
13145
+ import { z as z8 } from "zod";
13120
13146
 
13121
13147
  // src/services/capability/CapabilityBundleService.ts
13122
- import { z as z6 } from "zod";
13148
+ import { z as z7 } from "zod";
13123
13149
  import { CapabilityBundleMergeError, CapabilityBundleValidationError, mergeCapabilityBundles, validateCapabilityBundleInput } from "@axiom-lattice/core";
13124
13150
  var CapabilityBundleServiceError = class extends Error {
13125
13151
  constructor(code, message, statusCode) {
@@ -13129,7 +13155,7 @@ var CapabilityBundleServiceError = class extends Error {
13129
13155
  this.name = "CapabilityBundleServiceError";
13130
13156
  }
13131
13157
  };
13132
- var uuid = z6.string().uuid();
13158
+ var uuid = z7.string().uuid();
13133
13159
  function ownRecord(value) {
13134
13160
  if (value === void 0 || value === null) return {};
13135
13161
  if (typeof value !== "object" || Array.isArray(value)) throw new CapabilityBundleServiceError("INVALID_BUNDLE_CONFIG", "Project config must be an object", 409);
@@ -13331,12 +13357,12 @@ var CapabilityBundleService = class {
13331
13357
 
13332
13358
  // src/controllers/capability-bundles.ts
13333
13359
  var logger3 = new Logger({ serviceName: "lattice/gateway/capability-bundles" });
13334
- var capability = z7.unknown();
13335
- var createSchema = z7.object({ name: z7.string(), description: z7.string().optional(), capabilities: z7.array(capability) }).strict();
13336
- var updateSchema = createSchema.partial().extend({ expectedUpdatedAt: z7.string().optional() });
13337
- var bundleIdSchema = z7.string().uuid();
13338
- var bundleParamsSchema = z7.object({ bundleId: bundleIdSchema });
13339
- var projectSchema = z7.object({ bundleIds: z7.array(bundleIdSchema), expectedRevisions: z7.record(z7.string()).optional() }).strict();
13360
+ var capability = z8.unknown();
13361
+ var createSchema = z8.object({ name: z8.string(), description: z8.string().optional(), capabilities: z8.array(capability) }).strict();
13362
+ var updateSchema = createSchema.partial().extend({ expectedUpdatedAt: z8.string().optional() });
13363
+ var bundleIdSchema = z8.string().uuid();
13364
+ var bundleParamsSchema = z8.object({ bundleId: bundleIdSchema });
13365
+ var projectSchema = z8.object({ bundleIds: z8.array(bundleIdSchema), expectedRevisions: z8.record(z8.string()).optional() }).strict();
13340
13366
  function tenant(request, authRequired2) {
13341
13367
  const authenticated = request.user?.tenantId;
13342
13368
  const header2 = request.headers["x-tenant-id"];
@@ -13604,6 +13630,14 @@ var ProjectMembershipService = class {
13604
13630
  const room = await this.deps.roomStore.getMainRoom(membership.tenantId, membership.projectId);
13605
13631
  if (!room) throw new Error("Project main room not found");
13606
13632
  this.deps.realtime.membershipChanged({ tenantId: membership.tenantId, roomId: room.id, membership, change, sourceKey });
13633
+ this.deps.realtime.membershipAffected({
13634
+ tenantId: membership.tenantId,
13635
+ userId: membership.userId,
13636
+ change,
13637
+ projectId: membership.projectId,
13638
+ roomId: room.id,
13639
+ sourceKey: `membership-affected:${sourceKey}`
13640
+ });
13607
13641
  }).catch((error) => {
13608
13642
  this.reportRealtimeFailure(membership.id);
13609
13643
  });
@@ -14208,45 +14242,46 @@ function matchesNormalizedPayload(message, input) {
14208
14242
 
14209
14243
  // src/routes/project-rooms.ts
14210
14244
  import { ZodError as ZodError3 } from "zod";
14245
+ import { toProjectRoomPublicMessage } from "@axiom-lattice/protocols";
14211
14246
 
14212
14247
  // src/schemas/project-room.ts
14213
- import { z as z8 } from "zod";
14214
- var id2 = z8.string().trim().min(1).max(128);
14215
- var isoDate = z8.string().datetime({ offset: true }).transform((value) => new Date(value));
14216
- var expectedUpdatedAt = z8.object({ expectedUpdatedAt: isoDate }).strict();
14217
- var projectRoomParamsSchema = z8.object({ projectId: id2 }).strict();
14218
- var membershipParamsSchema = z8.object({ projectId: id2, membershipId: id2 }).strict();
14219
- var roomMessagesQuerySchema = z8.object({
14220
- beforeCreatedAt: z8.string().datetime({ offset: true }).transform((value) => new Date(value)).optional(),
14248
+ import { z as z9 } from "zod";
14249
+ var id2 = z9.string().trim().min(1).max(128);
14250
+ var isoDate = z9.string().datetime({ offset: true }).transform((value) => new Date(value));
14251
+ var expectedUpdatedAt = z9.object({ expectedUpdatedAt: isoDate }).strict();
14252
+ var projectRoomParamsSchema = z9.object({ projectId: id2 }).strict();
14253
+ var membershipParamsSchema = z9.object({ projectId: id2, membershipId: id2 }).strict();
14254
+ var roomMessagesQuerySchema = z9.object({
14255
+ beforeCreatedAt: z9.string().datetime({ offset: true }).transform((value) => new Date(value)).optional(),
14221
14256
  beforeId: id2.optional(),
14222
- limit: z8.coerce.number().int().min(1).max(100).optional()
14257
+ limit: z9.coerce.number().int().min(1).max(100).optional()
14223
14258
  }).strict().refine((value) => value.beforeCreatedAt === void 0 === (value.beforeId === void 0), { message: "Both cursor fields are required" });
14224
- var createRoomMessageSchema = z8.object({
14225
- text: z8.string(),
14226
- mentions: z8.array(z8.union([
14227
- z8.object({ type: z8.literal("team") }).strict(),
14228
- z8.object({ type: z8.literal("bot"), membershipId: id2 }).strict()
14259
+ var createRoomMessageSchema = z9.object({
14260
+ text: z9.string(),
14261
+ mentions: z9.array(z9.union([
14262
+ z9.object({ type: z9.literal("team") }).strict(),
14263
+ z9.object({ type: z9.literal("bot"), membershipId: id2 }).strict()
14229
14264
  ])).optional(),
14230
14265
  replyToMessageId: id2.optional()
14231
14266
  }).strict();
14232
- var addProjectMemberSchema = z8.object({ userId: id2, role: z8.enum(["owner", "admin", "member", "viewer"]) }).strict();
14233
- var updateProjectMemberSchema = z8.object({ role: z8.enum(["owner", "admin", "member", "viewer"]), expectedUpdatedAt: isoDate }).strict();
14267
+ var addProjectMemberSchema = z9.object({ userId: id2, role: z9.enum(["owner", "admin", "member", "viewer"]) }).strict();
14268
+ var updateProjectMemberSchema = z9.object({ role: z9.enum(["owner", "admin", "member", "viewer"]), expectedUpdatedAt: isoDate }).strict();
14234
14269
  var mutationExpectedUpdatedAtSchema = expectedUpdatedAt;
14235
- var roomMessageRetryParamsSchema = z8.object({ projectId: id2, messageId: id2 }).strict();
14236
- var emptyObjectSchema = z8.object({}).strict();
14237
- var idempotencyKeySchema = z8.string().refine((value) => value.trim().length >= 1 && value.trim().length <= 200 && /^[\x20-\x7e]+$/.test(value.trim()), "Invalid idempotency key").transform((value) => value.trim());
14238
- var addProjectBotSchema = z8.object({
14270
+ var roomMessageRetryParamsSchema = z9.object({ projectId: id2, messageId: id2 }).strict();
14271
+ var emptyObjectSchema = z9.object({}).strict();
14272
+ var idempotencyKeySchema = z9.string().refine((value) => value.trim().length >= 1 && value.trim().length <= 200 && /^[\x20-\x7e]+$/.test(value.trim()), "Invalid idempotency key").transform((value) => value.trim());
14273
+ var addProjectBotSchema = z9.object({
14239
14274
  assistantId: id2,
14240
- role: z8.enum(["coordinator", "specialist"]),
14241
- title: z8.string(),
14242
- responsibility: z8.string().optional(),
14243
- mentionName: z8.string()
14275
+ role: z9.enum(["coordinator", "specialist"]),
14276
+ title: z9.string(),
14277
+ responsibility: z9.string().optional(),
14278
+ mentionName: z9.string()
14244
14279
  }).strict();
14245
- var updateProjectBotSchema = z8.object({
14246
- role: z8.enum(["coordinator", "specialist"]).optional(),
14247
- title: z8.string().optional(),
14248
- responsibility: z8.string().optional(),
14249
- mentionName: z8.string().optional(),
14280
+ var updateProjectBotSchema = z9.object({
14281
+ role: z9.enum(["coordinator", "specialist"]).optional(),
14282
+ title: z9.string().optional(),
14283
+ responsibility: z9.string().optional(),
14284
+ mentionName: z9.string().optional(),
14250
14285
  expectedUpdatedAt: isoDate
14251
14286
  }).strict().refine((value) => value.role !== void 0 || value.title !== void 0 || value.responsibility !== void 0 || value.mentionName !== void 0, { message: "At least one mutable field is required" });
14252
14287
 
@@ -14264,7 +14299,8 @@ function registerProjectRoomRoutes(app2, deps) {
14264
14299
  const params = projectRoomParamsSchema.parse(request.params);
14265
14300
  const query = roomMessagesQuerySchema.parse(request.query);
14266
14301
  const before = query.beforeCreatedAt === void 0 && query.beforeId === void 0 ? void 0 : { createdAt: query.beforeCreatedAt, id: query.beforeId };
14267
- return { data: await deps.messageService.list(actor(request, params.projectId), { ...before ? { before } : {}, ...query.limit === void 0 ? {} : { limit: query.limit } }) };
14302
+ const messages = await deps.messageService.list(actor(request, params.projectId), { ...before ? { before } : {}, ...query.limit === void 0 ? {} : { limit: query.limit } });
14303
+ return { data: messages.map(toProjectRoomMessage) };
14268
14304
  }));
14269
14305
  app2.post("/api/projects/:projectId/room/messages", async (request, reply) => run(reply, async () => {
14270
14306
  const params = projectRoomParamsSchema.parse(request.params);
@@ -14275,7 +14311,7 @@ function registerProjectRoomRoutes(app2, deps) {
14275
14311
  const idempotencyKey = rawIdempotencyKey === void 0 ? void 0 : idempotencyKeySchema.parse(rawIdempotencyKey);
14276
14312
  const result = await deps.messageService.createAndDispatch(requestActor, { ...input, ...idempotencyKey === void 0 ? {} : { requestIdempotencyKey: idempotencyKey } });
14277
14313
  const allSucceeded = result.dispatch.length > 0 && result.dispatch.every((entry) => entry.success);
14278
- return { statusCode: allSucceeded ? result.replayed ? 200 : 201 : 202, data: result };
14314
+ return { statusCode: allSucceeded ? result.replayed ? 200 : 201 : 202, data: { message: toProjectRoomMessage(result.message), dispatch: result.dispatch, replayed: result.replayed } };
14279
14315
  }));
14280
14316
  app2.post("/api/projects/:projectId/room/messages/:messageId/retry", async (request, reply) => run(reply, async () => {
14281
14317
  const params = roomMessageRetryParamsSchema.parse(request.params);
@@ -14284,7 +14320,20 @@ function registerProjectRoomRoutes(app2, deps) {
14284
14320
  const dispatch = await deps.messageService.retry(actor(request, params.projectId), params.messageId);
14285
14321
  return { statusCode: dispatch.length > 0 && dispatch.every((entry) => entry.success) ? 200 : 202, data: dispatch };
14286
14322
  }));
14287
- app2.get("/api/projects/:projectId/members", async (request, reply) => run(reply, async () => ({ data: await deps.membershipService.list(actor(request, projectRoomParamsSchema.parse(request.params).projectId)) })));
14323
+ app2.post("/api/projects/:projectId/room/read-state", async (request, reply) => run(reply, async () => {
14324
+ const params = projectRoomParamsSchema.parse(request.params);
14325
+ emptyObjectSchema.parse(request.body ?? {});
14326
+ await deps.readStateService.mark(actor(request, params.projectId));
14327
+ return { data: { marked: true } };
14328
+ }));
14329
+ app2.get("/api/projects/:projectId/members", async (request, reply) => run(reply, async () => {
14330
+ const memberships = await deps.membershipService.list(actor(request, projectRoomParamsSchema.parse(request.params).projectId));
14331
+ const enriched = await Promise.all(memberships.map(async (membership) => {
14332
+ const user = await deps.userDirectory.getUserById(membership.userId);
14333
+ return user === null ? membership : { ...membership, name: user.name };
14334
+ }));
14335
+ return { data: enriched };
14336
+ }));
14288
14337
  app2.post("/api/projects/:projectId/members", async (request, reply) => run(reply, async () => {
14289
14338
  const p = projectRoomParamsSchema.parse(request.params);
14290
14339
  return { statusCode: 201, data: await deps.membershipService.add(actor(request, p.projectId), addProjectMemberSchema.parse(request.body)) };
@@ -14306,6 +14355,11 @@ function actor(request, projectId) {
14306
14355
  projectRoomParamsSchema.parse({ projectId });
14307
14356
  return { tenantId: user.tenantId, userId: user.id, projectId };
14308
14357
  }
14358
+ function toProjectRoomMessage(message) {
14359
+ const publicMessage = toProjectRoomPublicMessage(message);
14360
+ if (publicMessage === void 0) throw new Error("Room message could not be mapped to its public DTO");
14361
+ return publicMessage;
14362
+ }
14309
14363
  async function run(reply, operation) {
14310
14364
  try {
14311
14365
  const result = await operation();
@@ -14371,6 +14425,7 @@ import {
14371
14425
  generateDirectHumanProjectId,
14372
14426
  generateDirectBotProjectId
14373
14427
  } from "@axiom-lattice/core";
14428
+ import { toProjectRoomPublicMessage as toProjectRoomPublicMessage2 } from "@axiom-lattice/protocols";
14374
14429
  var CoSpaceAuthError = class extends Error {
14375
14430
  constructor() {
14376
14431
  super(...arguments);
@@ -14385,6 +14440,18 @@ function getActor2(request) {
14385
14440
  }
14386
14441
  return { tenantId: user.tenantId, userId: user.id };
14387
14442
  }
14443
+ async function computeUnread(deps, tenantId, userId, roomId, lastMessage) {
14444
+ if (!lastMessage) return 0;
14445
+ const readState = await deps.readStateStore.get(tenantId, roomId, userId);
14446
+ const horizon = readState?.lastReadAt;
14447
+ if (horizon && lastMessage.createdAt.getTime() <= horizon.getTime()) return 0;
14448
+ return deps.messageStore.countAfter({
14449
+ tenantId,
14450
+ roomId,
14451
+ after: horizon ?? /* @__PURE__ */ new Date(0),
14452
+ excludeAuthorUserId: userId
14453
+ });
14454
+ }
14388
14455
  function registerCoSpaceRoutes(app2, deps) {
14389
14456
  const idFactory = deps.idFactory ?? (() => randomUUID16());
14390
14457
  app2.get(
@@ -14435,67 +14502,91 @@ function registerCoSpaceRoutes(app2, deps) {
14435
14502
  limit: 1
14436
14503
  });
14437
14504
  const lastMessage = messages[0];
14505
+ const publicLastMessage = lastMessage === void 0 ? void 0 : toProjectRoomPublicMessage2(lastMessage);
14438
14506
  const memberships = await deps.membershipStore.list(
14439
14507
  actor2.tenantId,
14440
14508
  project.id
14441
14509
  );
14442
14510
  const participantNames = [];
14511
+ const otherHumanNames = [];
14443
14512
  for (const m of memberships) {
14444
14513
  if (m.status !== "active") continue;
14445
14514
  const user = await deps.userStore.getUserById(m.userId);
14446
14515
  if (user) {
14447
14516
  participantNames.push(user.name);
14517
+ if (m.userId !== actor2.userId) otherHumanNames.push(user.name);
14448
14518
  }
14449
14519
  }
14520
+ const displayName = project.kind === "personal" && otherHumanNames.length === 1 ? otherHumanNames[0] : void 0;
14450
14521
  rooms.push({
14451
14522
  project,
14452
14523
  room,
14453
- lastMessage,
14524
+ lastMessage: publicLastMessage,
14454
14525
  participantCount: memberships.filter(
14455
14526
  (m) => m.status === "active"
14456
14527
  ).length,
14457
- participantNames
14528
+ participantNames,
14529
+ ...displayName === void 0 ? {} : { displayName },
14530
+ unreadCount: await computeUnread(
14531
+ deps,
14532
+ actor2.tenantId,
14533
+ actor2.userId,
14534
+ room.id,
14535
+ lastMessage
14536
+ )
14458
14537
  });
14459
14538
  } catch (e) {
14460
14539
  console.error("[CoSpace] Failed to process room for project:", project.id, e);
14461
14540
  }
14462
14541
  }
14463
14542
  rooms.sort((a, b) => {
14464
- const aTime = a.lastMessage?.createdAt?.getTime() ?? 0;
14465
- const bTime = b.lastMessage?.createdAt?.getTime() ?? 0;
14543
+ const aTime = a.lastMessage ? Date.parse(a.lastMessage.createdAt) : 0;
14544
+ const bTime = b.lastMessage ? Date.parse(b.lastMessage.createdAt) : 0;
14466
14545
  return bTime - aTime;
14467
14546
  });
14468
- const publicRoom = await deps.publicRoom.ensure(actor2.tenantId, params.workspaceId);
14469
- if (publicRoom) {
14470
- const publicMessages = await deps.messageStore.list({
14471
- tenantId: actor2.tenantId,
14472
- roomId: publicRoom.room.id,
14473
- limit: 1
14474
- });
14475
- const publicMemberships = await deps.membershipStore.list(
14476
- actor2.tenantId,
14477
- publicRoom.project.id
14478
- );
14479
- const publicParticipantNames = [];
14480
- for (const m of publicMemberships) {
14481
- if (m.status !== "active") continue;
14482
- const user = await deps.userStore.getUserById(m.userId);
14483
- if (user) {
14484
- publicParticipantNames.push(user.name);
14485
- }
14486
- }
14487
- rooms.unshift({
14488
- project: publicRoom.project,
14489
- room: publicRoom.room,
14490
- lastMessage: publicMessages[0],
14491
- participantCount: publicMemberships.filter((m) => m.status === "active").length,
14492
- participantNames: publicParticipantNames,
14493
- isPublic: true
14494
- });
14495
- }
14496
- return { data: { rooms } };
14497
- });
14498
- }
14547
+ try {
14548
+ const publicRoom = await deps.publicRoom.ensure(actor2.tenantId, params.workspaceId);
14549
+ if (publicRoom) {
14550
+ const publicMessages = await deps.messageStore.list({
14551
+ tenantId: actor2.tenantId,
14552
+ roomId: publicRoom.room.id,
14553
+ limit: 1
14554
+ });
14555
+ const publicLastMessage = publicMessages[0];
14556
+ const publicMemberships = await deps.membershipStore.list(
14557
+ actor2.tenantId,
14558
+ publicRoom.project.id
14559
+ );
14560
+ const publicParticipantNames = [];
14561
+ for (const m of publicMemberships) {
14562
+ if (m.status !== "active") continue;
14563
+ const user = await deps.userStore.getUserById(m.userId);
14564
+ if (user) {
14565
+ publicParticipantNames.push(user.name);
14566
+ }
14567
+ }
14568
+ rooms.unshift({
14569
+ project: publicRoom.project,
14570
+ room: publicRoom.room,
14571
+ lastMessage: publicLastMessage === void 0 ? void 0 : toProjectRoomPublicMessage2(publicLastMessage),
14572
+ participantCount: publicMemberships.filter((m) => m.status === "active").length,
14573
+ participantNames: publicParticipantNames,
14574
+ isPublic: true,
14575
+ unreadCount: await computeUnread(
14576
+ deps,
14577
+ actor2.tenantId,
14578
+ actor2.userId,
14579
+ publicRoom.room.id,
14580
+ publicLastMessage
14581
+ )
14582
+ });
14583
+ }
14584
+ } catch (e) {
14585
+ console.error("[CoSpace] Failed to assemble public room:", e);
14586
+ }
14587
+ return { data: { rooms } };
14588
+ });
14589
+ }
14499
14590
  );
14500
14591
  app2.post(
14501
14592
  "/api/workspaces/:workspaceId/direct",
@@ -14516,7 +14607,6 @@ function registerCoSpaceRoutes(app2, deps) {
14516
14607
  );
14517
14608
  }
14518
14609
  let projectId;
14519
- let otherPartyId;
14520
14610
  if (body.type === "human") {
14521
14611
  projectId = generateDirectHumanProjectId(
14522
14612
  actor2.tenantId,
@@ -14524,7 +14614,6 @@ function registerCoSpaceRoutes(app2, deps) {
14524
14614
  actor2.userId,
14525
14615
  body.targetUserId
14526
14616
  );
14527
- otherPartyId = body.targetUserId;
14528
14617
  } else {
14529
14618
  projectId = generateDirectBotProjectId(
14530
14619
  actor2.tenantId,
@@ -14532,14 +14621,24 @@ function registerCoSpaceRoutes(app2, deps) {
14532
14621
  actor2.userId,
14533
14622
  body.assistantId
14534
14623
  );
14535
- otherPartyId = body.assistantId;
14536
14624
  }
14537
14625
  let project = await deps.projectStore.getProjectById(
14538
14626
  actor2.tenantId,
14539
14627
  projectId
14540
14628
  );
14541
14629
  if (!project) {
14542
- const name = body.type === "human" ? `Direct with ${otherPartyId}` : `Chat with ${otherPartyId}`;
14630
+ let displayName;
14631
+ if (body.type === "human") {
14632
+ const targetUser = await deps.userStore.getUserById(body.targetUserId);
14633
+ displayName = targetUser?.name ?? body.targetUserId;
14634
+ } else {
14635
+ const targetAssistant = await deps.assistantStore.getAssistantById(
14636
+ actor2.tenantId,
14637
+ body.assistantId
14638
+ );
14639
+ displayName = targetAssistant?.name ?? body.assistantId;
14640
+ }
14641
+ const name = body.type === "human" ? `Direct with ${displayName}` : `Chat with ${displayName}`;
14543
14642
  project = await deps.projectStore.createProject(
14544
14643
  actor2.tenantId,
14545
14644
  params.workspaceId,
@@ -14732,12 +14831,28 @@ function registerCoSpaceRoutes(app2, deps) {
14732
14831
  actor2.tenantId,
14733
14832
  directProjectId
14734
14833
  );
14735
- bots.push({
14834
+ const bot = {
14736
14835
  assistantId: assistant.id,
14737
14836
  name: assistant.name,
14738
14837
  description: assistant.description,
14739
14838
  hasDirectRoom: existingProject !== null
14740
- });
14839
+ };
14840
+ if (assistant.createdAt) bot.createdAt = assistant.createdAt.toISOString();
14841
+ if (existingProject) {
14842
+ const membership = await deps.botMembershipStore.findByAssistant(
14843
+ actor2.tenantId,
14844
+ directProjectId,
14845
+ assistant.id
14846
+ );
14847
+ if (membership) {
14848
+ if (membership.role) bot.role = membership.role;
14849
+ if (membership.mentionName) bot.mentionName = membership.mentionName;
14850
+ if (membership.responsibility) bot.responsibility = membership.responsibility;
14851
+ bot.status = membership.status;
14852
+ if (membership.joinedAt) bot.joinedAt = membership.joinedAt.toISOString();
14853
+ }
14854
+ }
14855
+ bots.push(bot);
14741
14856
  }
14742
14857
  return { data: { bots } };
14743
14858
  });
@@ -14778,13 +14893,15 @@ function registerCoSpaceRoutes(app2, deps) {
14778
14893
  actor2.tenantId,
14779
14894
  directProjectId
14780
14895
  );
14781
- members.push({
14896
+ const member = {
14782
14897
  userId: link.userId,
14783
14898
  name: user.name,
14784
14899
  email: user.email,
14785
14900
  role: link.role,
14786
14901
  hasDirectRoom: existingProject !== null
14787
- });
14902
+ };
14903
+ if (link.joinedAt) member.joinedAt = link.joinedAt.toISOString();
14904
+ members.push(member);
14788
14905
  }
14789
14906
  return { data: { members } };
14790
14907
  });
@@ -17549,6 +17666,7 @@ function snapshotJson(value, ancestors = /* @__PURE__ */ new Set()) {
17549
17666
  // src/services/collaboration/ProjectRoomRealtimePublisher.ts
17550
17667
  import { createHash as createHash7 } from "crypto";
17551
17668
  import {
17669
+ projectRoomUserEventScope,
17552
17670
  snapshotExactRecord as snapshotExactRecord10,
17553
17671
  snapshotProjectRoomBotMembershipRealtime,
17554
17672
  snapshotProjectRoomMembershipRealtime,
@@ -17623,6 +17741,46 @@ var BrokerProjectRoomRealtimePublisher = class {
17623
17741
  };
17624
17742
  });
17625
17743
  }
17744
+ /** Publishes a membership notice onto the affected user's channel scope. */
17745
+ membershipAffected(input) {
17746
+ this.publish("membership.affected", () => {
17747
+ const value = snapshotExactRecord10(input, ["tenantId", "userId", "change", "projectId", "roomId", "sourceKey"]);
17748
+ if (!value || !safeId2(value.tenantId) || !safeId2(value.userId) || !safeId2(value.projectId) || !safeId2(value.roomId) || !safeSourceKey(value.sourceKey) || !["added", "removed", "role_changed"].includes(value.change)) {
17749
+ throw new TypeError("Invalid membership input");
17750
+ }
17751
+ const scope = projectRoomUserEventScope(value.tenantId, value.userId);
17752
+ return {
17753
+ sourceKey: value.sourceKey,
17754
+ id: value.sourceKey,
17755
+ scope,
17756
+ draft: {
17757
+ type: "membership.affected",
17758
+ occurredAt: (/* @__PURE__ */ new Date()).toISOString(),
17759
+ data: { change: value.change, projectId: value.projectId, roomId: value.roomId }
17760
+ }
17761
+ };
17762
+ });
17763
+ }
17764
+ /** Publishes a read-marker update onto the acting user's channel scope. */
17765
+ readChanged(input) {
17766
+ this.publish("read.changed", () => {
17767
+ const value = snapshotExactRecord10(input, ["tenantId", "userId", "projectId", "roomId", "lastReadAt", "sourceKey"]);
17768
+ if (!value || !safeId2(value.tenantId) || !safeId2(value.userId) || !safeId2(value.projectId) || !safeId2(value.roomId) || !safeSourceKey(value.sourceKey) || typeof value.lastReadAt !== "string" || !Number.isFinite(Date.parse(value.lastReadAt))) {
17769
+ throw new TypeError("Invalid read input");
17770
+ }
17771
+ const scope = projectRoomUserEventScope(value.tenantId, value.userId);
17772
+ return {
17773
+ sourceKey: value.sourceKey,
17774
+ id: value.sourceKey,
17775
+ scope,
17776
+ draft: {
17777
+ type: "read.changed",
17778
+ occurredAt: (/* @__PURE__ */ new Date()).toISOString(),
17779
+ data: { projectId: value.projectId, roomId: value.roomId, lastReadAt: new Date(Date.parse(value.lastReadAt)).toISOString() }
17780
+ }
17781
+ };
17782
+ });
17783
+ }
17626
17784
  publish(type, build) {
17627
17785
  let event;
17628
17786
  try {
@@ -17681,8 +17839,212 @@ function safeErrorCode(error) {
17681
17839
  return error instanceof Error && error.name === "Error" ? "Error" : "UnknownError";
17682
17840
  }
17683
17841
 
17684
- // src/services/collaboration/ProjectRoomRealtimeService.ts
17685
- import { ProjectRoomCursorError as ProjectRoomCursorError2 } from "@axiom-lattice/protocols";
17842
+ // src/services/collaboration/ProjectRoomTaskEventSubscriber.ts
17843
+ import { isProjectLifecycleTask as isProjectLifecycleTask6 } from "@axiom-lattice/core";
17844
+ import { snapshotExactRecord as snapshotExactRecord11 } from "@axiom-lattice/protocols";
17845
+ var ProjectRoomTaskEventSubscriber = class {
17846
+ /** Creates a bounded Project task lifecycle observer. */
17847
+ constructor(deps) {
17848
+ this.deps = deps;
17849
+ this.queues = /* @__PURE__ */ new Map();
17850
+ this.pendingCount = 0;
17851
+ this.accepting = true;
17852
+ this.closed = false;
17853
+ this.accepted = /* @__PURE__ */ new Set();
17854
+ this.maxPending = deps.maxPending ?? 1024;
17855
+ if (!Number.isSafeInteger(this.maxPending) || this.maxPending < 1) throw new RangeError("maxPending must be a positive safe integer");
17856
+ }
17857
+ /** Admits one notification without awaiting any store operation. */
17858
+ handle(value) {
17859
+ const event = this.parse(value);
17860
+ if (!event) {
17861
+ this.warn("Project task realtime notification rejected", { code: "INVALID_TASK_REALTIME_EVENT" });
17862
+ return Promise.resolve();
17863
+ }
17864
+ if (!this.accepting || this.closed) return Promise.resolve();
17865
+ const scopeKey3 = JSON.stringify([event.tenantId, event.workspaceId, event.projectId, event.taskId]);
17866
+ const eventKey = event.eventKey;
17867
+ let queue = this.queues.get(scopeKey3);
17868
+ if (!queue) {
17869
+ if (this.pendingCount >= this.maxPending) return this.overflow(event.taskId);
17870
+ queue = { events: [], keys: /* @__PURE__ */ new Set(), tail: Promise.resolve() };
17871
+ this.queues.set(scopeKey3, queue);
17872
+ }
17873
+ if (queue.keys.has(eventKey)) return queue.tail;
17874
+ if (this.pendingCount >= this.maxPending) return this.overflow(event.taskId);
17875
+ queue.keys.add(eventKey);
17876
+ queue.events.push(event);
17877
+ this.pendingCount += 1;
17878
+ const previousTail = queue.tail;
17879
+ queue.tail = previousTail.then(() => this.processQueue(scopeKey3, queue)).catch((error) => {
17880
+ this.warn("project-room:task-realtime-failed", { code: "TASK_REALTIME_NOTIFICATION_FAILED", error: error instanceof Error ? error.name : "UnknownError" });
17881
+ });
17882
+ const accepted = queue.tail;
17883
+ this.accepted.add(accepted);
17884
+ void accepted.finally(() => this.accepted.delete(accepted));
17885
+ return accepted;
17886
+ }
17887
+ /** Closes admission without interrupting accepted work. */
17888
+ closeAdmission() {
17889
+ this.accepting = false;
17890
+ }
17891
+ /** Drains accepted work, closing permanently if the bound expires. */
17892
+ async drain(timeoutMs = 5e3) {
17893
+ const work = Promise.allSettled([...this.accepted]).then(() => void 0);
17894
+ let timer;
17895
+ const timeout = new Promise((resolve3) => {
17896
+ timer = setTimeout(() => resolve3("timeout"), timeoutMs);
17897
+ timer.unref?.();
17898
+ });
17899
+ const outcome = await Promise.race([work.then(() => "drained"), timeout]);
17900
+ if (timer) clearTimeout(timer);
17901
+ this.closed = true;
17902
+ if (outcome === "timeout") this.queues.clear();
17903
+ }
17904
+ /** Closes admission and drains accepted work. */
17905
+ async dispose() {
17906
+ this.closeAdmission();
17907
+ await this.drain();
17908
+ this.closed = true;
17909
+ }
17910
+ async processQueue(scopeKey3, queue) {
17911
+ while (queue.events.length > 0) {
17912
+ const event = queue.events.shift();
17913
+ try {
17914
+ if (!this.closed) await this.publish(event);
17915
+ } finally {
17916
+ queue.keys.delete(event.eventKey);
17917
+ this.pendingCount -= 1;
17918
+ }
17919
+ }
17920
+ if (queue.events.length === 0 && this.queues.get(scopeKey3) === queue) this.queues.delete(scopeKey3);
17921
+ }
17922
+ async publish(event) {
17923
+ try {
17924
+ const taskValue = await this.deps.tasks.getById(event.tenantId, event.taskId);
17925
+ const task = taskValue === null ? void 0 : snapshotTaskItem(taskValue);
17926
+ if (this.closed) return;
17927
+ if (!task || !isProjectLifecycleTask6(task) || task.tenantId !== event.tenantId || task.workspaceId !== event.workspaceId || task.projectId !== event.projectId || task.status !== event.status || task.updatedAt.toISOString() !== event.updatedAt || event.threadId !== void 0 && task.context?.thread_id !== event.threadId) {
17928
+ this.warn("project-room:task-event-stale", { taskId: safeId3(event.taskId), eventKey: safeId3(event.eventKey) });
17929
+ return;
17930
+ }
17931
+ const roomValue = await this.deps.rooms.getMainRoom(event.tenantId, event.projectId);
17932
+ const room = snapshotProjectRoom(roomValue);
17933
+ if (this.closed) return;
17934
+ if (!room || room.tenantId !== event.tenantId || room.workspaceId !== event.workspaceId || room.projectId !== event.projectId) return;
17935
+ const membershipValue = await this.deps.memberships.findByAssistant(event.tenantId, event.projectId, task.ownerId);
17936
+ const membership = snapshotProjectBotMembership(membershipValue);
17937
+ if (this.closed) return;
17938
+ if (!membership || membership.tenantId !== event.tenantId || membership.workspaceId !== event.workspaceId || membership.projectId !== event.projectId || membership.roomId !== room.id || membership.assistantId !== task.ownerId) return;
17939
+ this.deps.realtime.taskChanged({
17940
+ tenantId: event.tenantId,
17941
+ roomId: room.id,
17942
+ projectId: event.projectId,
17943
+ taskId: task.id,
17944
+ status: task.status,
17945
+ ownerMembershipId: membership.id,
17946
+ updatedAt: task.updatedAt.toISOString(),
17947
+ sourceKey: `task:${task.id}:${event.eventKey}`
17948
+ });
17949
+ } catch (error) {
17950
+ this.warn("project-room:task-realtime-failed", { code: "TASK_REALTIME_NOTIFICATION_FAILED", taskId: safeId3(event.taskId), error: error instanceof Error ? error.name : "UnknownError" });
17951
+ }
17952
+ }
17953
+ parse(value) {
17954
+ const row = snapshotExactRecord11(value, ["tenantId", "workspaceId", "projectId", "taskId", "status", "action", "eventKey", "updatedAt"], ["threadId"]);
17955
+ const actions = ["in_progress", "interrupted", "failed", "completed", "cancelled", "reassigned"];
17956
+ const statuses = ["pending", "in_progress", "review", "failed", "interrupted", "completed", "cancelled"];
17957
+ if (!row || !actions.includes(String(row.action)) || !statuses.includes(String(row.status)) || !["tenantId", "workspaceId", "projectId", "taskId", "eventKey", "updatedAt"].every((key) => typeof row[key] === "string" && row[key].length > 0) || !Number.isFinite(Date.parse(row.updatedAt)) || row.threadId !== void 0 && typeof row.threadId !== "string") return void 0;
17958
+ return row;
17959
+ }
17960
+ warn(message, context) {
17961
+ try {
17962
+ this.deps.log.warn(message, context);
17963
+ } catch {
17964
+ }
17965
+ }
17966
+ overflow(taskId) {
17967
+ this.warn("project-room:task-realtime-overflow", { code: "TASK_REALTIME_QUEUE_FULL", taskId });
17968
+ return Promise.resolve();
17969
+ }
17970
+ };
17971
+ function safeId3(value) {
17972
+ return typeof value === "string" && value.length > 0 ? value : void 0;
17973
+ }
17974
+
17975
+ // src/services/collaboration/ProjectRoomRealtimeRuntime.ts
17976
+ var ProjectRoomRealtimeRuntime = class {
17977
+ constructor(deps) {
17978
+ this.deps = deps;
17979
+ this.accepted = /* @__PURE__ */ new Set();
17980
+ this.broker = deps.broker;
17981
+ this.publisher = deps.publisher;
17982
+ this.shutdownTimeoutMs = deps.shutdownTimeoutMs ?? 5e3;
17983
+ this.unsubscribe = deps.subscribe(((event) => {
17984
+ let work;
17985
+ try {
17986
+ work = Promise.resolve(deps.subscriber.handle(event));
17987
+ } catch (error) {
17988
+ work = Promise.reject(error);
17989
+ }
17990
+ const accepted = work.catch((error) => {
17991
+ deps.log.warn("project-room:task-subscriber-failed", { error: error instanceof Error ? error.name : "UnknownError" });
17992
+ });
17993
+ this.accepted.add(accepted);
17994
+ void accepted.finally(() => this.accepted.delete(accepted));
17995
+ }));
17996
+ }
17997
+ /** Stops admission, drains accepted work, and closes transport resources exactly once. */
17998
+ close() {
17999
+ this.closing ?? (this.closing = this.dispose());
18000
+ return this.closing;
18001
+ }
18002
+ async dispose() {
18003
+ this.unsubscribe();
18004
+ this.deps.subscriber.closeAdmission();
18005
+ const accepted = [...this.accepted];
18006
+ const drained = await boundedAllSettled(accepted, this.shutdownTimeoutMs);
18007
+ if (!drained) this.deps.log.warn("project-room:runtime-drain-timeout", {
18008
+ timeoutMs: this.shutdownTimeoutMs,
18009
+ pending: accepted.length
18010
+ });
18011
+ await this.deps.subscriber.drain(drained ? this.shutdownTimeoutMs : 0);
18012
+ this.broker.close();
18013
+ }
18014
+ };
18015
+ function createProjectRoomRealtimeRuntime(deps) {
18016
+ const broker = new ProjectRoomEventBroker({ log: deps.log });
18017
+ const publisher = new BrokerProjectRoomRealtimePublisher({ broker, log: deps.log });
18018
+ const subscriber = new ProjectRoomTaskEventSubscriber({
18019
+ tasks: deps.tasks,
18020
+ rooms: deps.rooms,
18021
+ memberships: deps.memberships,
18022
+ realtime: publisher,
18023
+ log: deps.log
18024
+ });
18025
+ return new ProjectRoomRealtimeRuntime({
18026
+ broker,
18027
+ publisher,
18028
+ subscriber,
18029
+ subscribe: (listener) => taskLifecycleNotifier.subscribe(listener),
18030
+ log: deps.log,
18031
+ shutdownTimeoutMs: deps.shutdownTimeoutMs
18032
+ });
18033
+ }
18034
+ async function boundedAllSettled(promises, timeoutMs) {
18035
+ if (promises.length === 0) return true;
18036
+ let timer;
18037
+ const timeout = new Promise((resolve3) => {
18038
+ timer = setTimeout(() => resolve3(false), timeoutMs);
18039
+ timer.unref?.();
18040
+ });
18041
+ const result = await Promise.race([Promise.allSettled(promises).then(() => true), timeout]);
18042
+ if (timer) clearTimeout(timer);
18043
+ return result;
18044
+ }
18045
+
18046
+ // src/services/collaboration/WorkspaceRoomEventsService.ts
18047
+ import { PROJECT_ROOM_USER_CHANNEL_PROJECT, projectRoomUserEventScope as projectRoomUserEventScope2 } from "@axiom-lattice/protocols";
17686
18048
 
17687
18049
  // src/services/collaboration/ProjectRoomSseWriter.ts
17688
18050
  var DEFAULT_MAX_FRAMES = 256;
@@ -17735,6 +18097,10 @@ var ProjectRoomSseWriter = class {
17735
18097
  enqueueControl(event) {
17736
18098
  this.enqueue(serializeControl(event));
17737
18099
  }
18100
+ /** Enqueues a pre-serialized SSE frame (used by scoped multi-room streams). */
18101
+ enqueueRaw(frame) {
18102
+ this.enqueue(frame);
18103
+ }
17738
18104
  /** Writes a heartbeat comment when the socket is not currently blocked. */
17739
18105
  heartbeat() {
17740
18106
  if (!this.closed && !this.writing) this.writeFrame(": heartbeat\n\n");
@@ -17825,453 +18191,269 @@ var ProjectRoomSseWriter = class {
17825
18191
  this.blockedBytes = 0;
17826
18192
  (finish ?? (() => this.close()))();
17827
18193
  }
17828
- } catch {
17829
- this.close();
17830
- }
17831
- }
17832
- armTerminalDeadline(deadlineMs, finish) {
17833
- this.terminalTimer = setTimeout(finish, deadlineMs);
17834
- this.terminalTimer.unref?.();
17835
- }
17836
- writeFrame(frame) {
17837
- if (this.closed) return;
17838
- try {
17839
- if (!this.raw.write(frame)) {
17840
- this.writing = true;
17841
- this.blockedBytes = Buffer.byteLength(frame, "utf8");
17842
- this.drainTimer = setTimeout(() => {
17843
- this.drainTimer = void 0;
17844
- this.failSlowConsumer();
17845
- }, this.drainTimeoutMs);
17846
- this.drainTimer.unref?.();
17847
- } else {
17848
- this.writing = false;
17849
- this.blockedBytes = 0;
17850
- this.flush();
17851
- }
17852
- } catch {
17853
- this.close();
17854
- }
17855
- }
17856
- clearDrainTimer() {
17857
- if (this.drainTimer !== void 0) clearTimeout(this.drainTimer);
17858
- this.drainTimer = void 0;
17859
- }
17860
- failSlowConsumer() {
17861
- if (this.closed) return;
17862
- this.frames.length = 0;
17863
- this.queuedBytes = 0;
17864
- if (!this.slowConsumerAttempted) {
17865
- this.slowConsumerAttempted = true;
17866
- try {
17867
- this.raw.write(serializeControl({ type: "resync", data: { reason: "SLOW_CONSUMER" } }));
17868
- } catch {
17869
- }
17870
- }
17871
- this.close();
17872
- }
17873
- };
17874
- function positive(value, name) {
17875
- if (!Number.isSafeInteger(value) || value <= 0) throw new RangeError(`${name} must be positive`);
17876
- return value;
17877
- }
17878
-
17879
- // src/services/collaboration/ProjectRoomRealtimeService.ts
17880
- var MAX_REPLAY_EVENTS = 1e4;
17881
- var MAX_NODE_TIMER_DELAY = 2147e6;
17882
- var ProjectRoomRealtimeService = class {
17883
- /** Creates a service using one process-local broker and read-only authorizer. */
17884
- constructor(deps) {
17885
- this.deps = deps;
17886
- this.connections = /* @__PURE__ */ new Set();
17887
- this.closed = false;
17888
- this.activeConnections = /* @__PURE__ */ new Map();
17889
- this.now = deps.now ?? Date.now;
17890
- this.authRecheckMs = deps.authRecheckMs ?? 15e3;
17891
- this.heartbeatMs = deps.heartbeatMs ?? 15e3;
17892
- }
17893
- /** Returns whether the actor's tenant/user/project stream quota has capacity. */
17894
- canConnect(actor2) {
17895
- if (this.closed) return false;
17896
- return (this.activeConnections.get(connectionKey(actor2)) ?? 0) < (this.deps.maxConnectionsPerUserProject ?? 5);
17897
- }
17898
- /** Starts a connection; authorization is assumed to have been performed by the route. */
17899
- connect(input) {
17900
- if (!this.canConnect(input.actor)) {
17901
- input.raw.end();
17902
- return;
17903
- }
17904
- const quotaKey = connectionKey(input.actor);
17905
- this.activeConnections.set(quotaKey, (this.activeConnections.get(quotaKey) ?? 0) + 1);
17906
- const writer = new ProjectRoomSseWriter(input.raw, { onClose: () => connection.close() });
17907
- let phase = "initializing";
17908
- let subscription;
17909
- let accessTimer;
17910
- let heartbeatTimer;
17911
- let expiryTimer;
17912
- const lifetimeAbort = new AbortController();
17913
- let accessAbort;
17914
- let closed = false;
17915
- const buffered = [];
17916
- const clearTimer = (timer) => {
17917
- if (timer !== void 0) clearTimeout(timer);
17918
- };
17919
- const cleanup = () => {
17920
- if (closed) return;
17921
- closed = true;
17922
- phase = "closed";
17923
- clearTimer(accessTimer);
17924
- clearTimer(heartbeatTimer);
17925
- clearTimer(expiryTimer);
17926
- lifetimeAbort.abort();
17927
- accessAbort?.abort();
17928
- subscription?.unsubscribe();
17929
- writer.close();
17930
- this.connections.delete(connection);
17931
- const remainingConnections = (this.activeConnections.get(quotaKey) ?? 1) - 1;
17932
- if (remainingConnections === 0) this.activeConnections.delete(quotaKey);
17933
- else this.activeConnections.set(quotaKey, remainingConnections);
17934
- };
17935
- const revoke = (reason) => {
17936
- if (closed) return;
17937
- void writer.closeWithControl({ type: "access.revoked", data: { reason } }).then(cleanup, cleanup);
17938
- };
17939
- const scheduleAccessCheck = () => {
17940
- if (closed) return;
17941
- accessTimer = setTimeout(() => {
17942
- accessTimer = void 0;
17943
- if (closed) return;
17944
- accessAbort = new AbortController();
17945
- const combined = combineSignals2(lifetimeAbort.signal, accessAbort.signal);
17946
- Promise.resolve().then(() => this.deps.requireReadAccess(input.actor, combined.signal)).then(() => {
17947
- combined.cleanup();
17948
- accessAbort = void 0;
17949
- scheduleAccessCheck();
17950
- }, (_error) => {
17951
- combined.cleanup();
17952
- accessAbort = void 0;
17953
- if (!closed) revoke("PROJECT_ACCESS_REVOKED");
17954
- });
17955
- }, this.authRecheckMs);
17956
- accessTimer.unref?.();
17957
- };
17958
- const connection = { close: cleanup };
17959
- this.connections.add(connection);
17960
- const scheduleHeartbeat = () => {
17961
- if (closed) return;
17962
- heartbeatTimer = setTimeout(() => {
17963
- heartbeatTimer = void 0;
17964
- if (closed) return;
17965
- writer.heartbeat();
17966
- scheduleHeartbeat();
17967
- }, this.heartbeatMs);
17968
- heartbeatTimer.unref?.();
17969
- };
17970
- scheduleHeartbeat();
17971
- const remaining = input.actor.tokenExpiresAt - this.now();
17972
- if (remaining <= 0) {
17973
- revoke("TOKEN_EXPIRED");
17974
- return;
17975
- }
17976
- const maxTimerDelay = this.deps.maxTimerDelay ?? MAX_NODE_TIMER_DELAY;
17977
- const scheduleExpiry = () => {
17978
- if (closed) return;
17979
- const delay2 = input.actor.tokenExpiresAt - this.now();
17980
- if (delay2 <= 0) {
17981
- revoke("TOKEN_EXPIRED");
17982
- return;
17983
- }
17984
- expiryTimer = setTimeout(() => {
17985
- expiryTimer = void 0;
17986
- scheduleExpiry();
17987
- }, Math.min(delay2, maxTimerDelay));
17988
- expiryTimer.unref?.();
17989
- };
17990
- scheduleExpiry();
17991
- try {
17992
- subscription = this.deps.broker.subscribe(
17993
- { tenantId: input.actor.tenantId, roomId: input.roomId, projectId: input.actor.projectId },
17994
- input.lastEventId,
17995
- (event) => {
17996
- if (phase === "initializing") buffered.push(event);
17997
- else if (phase === "direct") writer.enqueueBusiness(event);
17998
- }
17999
- );
18000
- if (subscription.replay.length > MAX_REPLAY_EVENTS) {
18001
- void writer.closeWithControl({ type: "resync", data: { reason: "CURSOR_EXPIRED" } }).then(cleanup, cleanup);
18002
- return;
18003
- }
18004
- let lastSequence = sequence(subscription.headEventId);
18005
- for (const event of subscription.replay) {
18006
- writer.enqueueBusiness(event);
18007
- lastSequence = sequence(event.id);
18008
- }
18009
- writer.enqueueControl({ type: "ready", data: { epoch: this.deps.broker.epoch, headEventId: subscription.headEventId } });
18010
- while (buffered.length > 0) {
18011
- for (const event of buffered.splice(0).sort((left, right) => sequence(left.id) - sequence(right.id))) {
18012
- if (sequence(event.id) > lastSequence) {
18013
- writer.enqueueBusiness(event);
18014
- lastSequence = sequence(event.id);
18015
- }
18016
- }
18017
- }
18018
- phase = "direct";
18019
- scheduleAccessCheck();
18020
- } catch (error) {
18021
- if (error instanceof ProjectRoomCursorError2) void writer.closeWithControl({ type: "resync", data: { reason: error.code } }).then(cleanup, cleanup);
18022
- else cleanup();
18023
- }
18024
- }
18025
- /** Closes every connection and prevents new connections. */
18026
- close() {
18027
- if (this.closed) return;
18028
- this.closed = true;
18029
- for (const connection of [...this.connections]) connection.close();
18030
- }
18031
- };
18032
- function sequence(id3) {
18033
- return id3 === null ? 0 : Number(id3.slice(id3.lastIndexOf(":") + 1));
18034
- }
18035
- function connectionKey(actor2) {
18036
- return JSON.stringify([actor2.tenantId, actor2.userId, actor2.projectId]);
18037
- }
18038
- function combineSignals2(first, second) {
18039
- const controller = new AbortController();
18040
- const abort = () => controller.abort();
18041
- if (first.aborted || second.aborted) abort();
18042
- else {
18043
- first.addEventListener("abort", abort, { once: true });
18044
- second.addEventListener("abort", abort, { once: true });
18045
- }
18046
- return { signal: controller.signal, cleanup: () => {
18047
- first.removeEventListener("abort", abort);
18048
- second.removeEventListener("abort", abort);
18049
- } };
18050
- }
18051
-
18052
- // src/services/collaboration/ProjectRoomTaskEventSubscriber.ts
18053
- import { isProjectLifecycleTask as isProjectLifecycleTask6 } from "@axiom-lattice/core";
18054
- import { snapshotExactRecord as snapshotExactRecord11 } from "@axiom-lattice/protocols";
18055
- var ProjectRoomTaskEventSubscriber = class {
18056
- /** Creates a bounded Project task lifecycle observer. */
18057
- constructor(deps) {
18058
- this.deps = deps;
18059
- this.queues = /* @__PURE__ */ new Map();
18060
- this.pendingCount = 0;
18061
- this.accepting = true;
18062
- this.closed = false;
18063
- this.accepted = /* @__PURE__ */ new Set();
18064
- this.maxPending = deps.maxPending ?? 1024;
18065
- if (!Number.isSafeInteger(this.maxPending) || this.maxPending < 1) throw new RangeError("maxPending must be a positive safe integer");
18066
- }
18067
- /** Admits one notification without awaiting any store operation. */
18068
- handle(value) {
18069
- const event = this.parse(value);
18070
- if (!event) {
18071
- this.warn("Project task realtime notification rejected", { code: "INVALID_TASK_REALTIME_EVENT" });
18072
- return Promise.resolve();
18073
- }
18074
- if (!this.accepting || this.closed) return Promise.resolve();
18075
- const scopeKey3 = JSON.stringify([event.tenantId, event.workspaceId, event.projectId, event.taskId]);
18076
- const eventKey = event.eventKey;
18077
- let queue = this.queues.get(scopeKey3);
18078
- if (!queue) {
18079
- if (this.pendingCount >= this.maxPending) return this.overflow(event.taskId);
18080
- queue = { events: [], keys: /* @__PURE__ */ new Set(), tail: Promise.resolve() };
18081
- this.queues.set(scopeKey3, queue);
18082
- }
18083
- if (queue.keys.has(eventKey)) return queue.tail;
18084
- if (this.pendingCount >= this.maxPending) return this.overflow(event.taskId);
18085
- queue.keys.add(eventKey);
18086
- queue.events.push(event);
18087
- this.pendingCount += 1;
18088
- const previousTail = queue.tail;
18089
- queue.tail = previousTail.then(() => this.processQueue(scopeKey3, queue)).catch((error) => {
18090
- this.warn("project-room:task-realtime-failed", { code: "TASK_REALTIME_NOTIFICATION_FAILED", error: error instanceof Error ? error.name : "UnknownError" });
18091
- });
18092
- const accepted = queue.tail;
18093
- this.accepted.add(accepted);
18094
- void accepted.finally(() => this.accepted.delete(accepted));
18095
- return accepted;
18096
- }
18097
- /** Closes admission without interrupting accepted work. */
18098
- closeAdmission() {
18099
- this.accepting = false;
18100
- }
18101
- /** Drains accepted work, closing permanently if the bound expires. */
18102
- async drain(timeoutMs = 5e3) {
18103
- const work = Promise.allSettled([...this.accepted]).then(() => void 0);
18104
- let timer;
18105
- const timeout = new Promise((resolve3) => {
18106
- timer = setTimeout(() => resolve3("timeout"), timeoutMs);
18107
- timer.unref?.();
18108
- });
18109
- const outcome = await Promise.race([work.then(() => "drained"), timeout]);
18110
- if (timer) clearTimeout(timer);
18111
- this.closed = true;
18112
- if (outcome === "timeout") this.queues.clear();
18113
- }
18114
- /** Closes admission and drains accepted work. */
18115
- async dispose() {
18116
- this.closeAdmission();
18117
- await this.drain();
18118
- this.closed = true;
18119
- }
18120
- async processQueue(scopeKey3, queue) {
18121
- while (queue.events.length > 0) {
18122
- const event = queue.events.shift();
18123
- try {
18124
- if (!this.closed) await this.publish(event);
18125
- } finally {
18126
- queue.keys.delete(event.eventKey);
18127
- this.pendingCount -= 1;
18128
- }
18129
- }
18130
- if (queue.events.length === 0 && this.queues.get(scopeKey3) === queue) this.queues.delete(scopeKey3);
18131
- }
18132
- async publish(event) {
18133
- try {
18134
- const taskValue = await this.deps.tasks.getById(event.tenantId, event.taskId);
18135
- const task = taskValue === null ? void 0 : snapshotTaskItem(taskValue);
18136
- if (this.closed) return;
18137
- if (!task || !isProjectLifecycleTask6(task) || task.tenantId !== event.tenantId || task.workspaceId !== event.workspaceId || task.projectId !== event.projectId || task.status !== event.status || task.updatedAt.toISOString() !== event.updatedAt || event.threadId !== void 0 && task.context?.thread_id !== event.threadId) {
18138
- this.warn("project-room:task-event-stale", { taskId: safeId3(event.taskId), eventKey: safeId3(event.eventKey) });
18139
- return;
18140
- }
18141
- const roomValue = await this.deps.rooms.getMainRoom(event.tenantId, event.projectId);
18142
- const room = snapshotProjectRoom(roomValue);
18143
- if (this.closed) return;
18144
- if (!room || room.tenantId !== event.tenantId || room.workspaceId !== event.workspaceId || room.projectId !== event.projectId) return;
18145
- const membershipValue = await this.deps.memberships.findByAssistant(event.tenantId, event.projectId, task.ownerId);
18146
- const membership = snapshotProjectBotMembership(membershipValue);
18147
- if (this.closed) return;
18148
- if (!membership || membership.tenantId !== event.tenantId || membership.workspaceId !== event.workspaceId || membership.projectId !== event.projectId || membership.roomId !== room.id || membership.assistantId !== task.ownerId) return;
18149
- this.deps.realtime.taskChanged({
18150
- tenantId: event.tenantId,
18151
- roomId: room.id,
18152
- projectId: event.projectId,
18153
- taskId: task.id,
18154
- status: task.status,
18155
- ownerMembershipId: membership.id,
18156
- updatedAt: task.updatedAt.toISOString(),
18157
- sourceKey: `task:${task.id}:${event.eventKey}`
18158
- });
18159
- } catch (error) {
18160
- this.warn("project-room:task-realtime-failed", { code: "TASK_REALTIME_NOTIFICATION_FAILED", taskId: safeId3(event.taskId), error: error instanceof Error ? error.name : "UnknownError" });
18194
+ } catch {
18195
+ this.close();
18161
18196
  }
18162
18197
  }
18163
- parse(value) {
18164
- const row = snapshotExactRecord11(value, ["tenantId", "workspaceId", "projectId", "taskId", "status", "action", "eventKey", "updatedAt"], ["threadId"]);
18165
- const actions = ["in_progress", "interrupted", "failed", "completed", "cancelled", "reassigned"];
18166
- const statuses = ["pending", "in_progress", "review", "failed", "interrupted", "completed", "cancelled"];
18167
- if (!row || !actions.includes(String(row.action)) || !statuses.includes(String(row.status)) || !["tenantId", "workspaceId", "projectId", "taskId", "eventKey", "updatedAt"].every((key) => typeof row[key] === "string" && row[key].length > 0) || !Number.isFinite(Date.parse(row.updatedAt)) || row.threadId !== void 0 && typeof row.threadId !== "string") return void 0;
18168
- return row;
18198
+ armTerminalDeadline(deadlineMs, finish) {
18199
+ this.terminalTimer = setTimeout(finish, deadlineMs);
18200
+ this.terminalTimer.unref?.();
18169
18201
  }
18170
- warn(message, context) {
18202
+ writeFrame(frame) {
18203
+ if (this.closed) return;
18171
18204
  try {
18172
- this.deps.log.warn(message, context);
18205
+ if (!this.raw.write(frame)) {
18206
+ this.writing = true;
18207
+ this.blockedBytes = Buffer.byteLength(frame, "utf8");
18208
+ this.drainTimer = setTimeout(() => {
18209
+ this.drainTimer = void 0;
18210
+ this.failSlowConsumer();
18211
+ }, this.drainTimeoutMs);
18212
+ this.drainTimer.unref?.();
18213
+ } else {
18214
+ this.writing = false;
18215
+ this.blockedBytes = 0;
18216
+ this.flush();
18217
+ }
18173
18218
  } catch {
18219
+ this.close();
18174
18220
  }
18175
18221
  }
18176
- overflow(taskId) {
18177
- this.warn("project-room:task-realtime-overflow", { code: "TASK_REALTIME_QUEUE_FULL", taskId });
18178
- return Promise.resolve();
18222
+ clearDrainTimer() {
18223
+ if (this.drainTimer !== void 0) clearTimeout(this.drainTimer);
18224
+ this.drainTimer = void 0;
18225
+ }
18226
+ failSlowConsumer() {
18227
+ if (this.closed) return;
18228
+ this.frames.length = 0;
18229
+ this.queuedBytes = 0;
18230
+ if (!this.slowConsumerAttempted) {
18231
+ this.slowConsumerAttempted = true;
18232
+ try {
18233
+ this.raw.write(serializeControl({ type: "resync", data: { reason: "SLOW_CONSUMER" } }));
18234
+ } catch {
18235
+ }
18236
+ }
18237
+ this.close();
18179
18238
  }
18180
18239
  };
18181
- function safeId3(value) {
18182
- return typeof value === "string" && value.length > 0 ? value : void 0;
18240
+ function positive(value, name) {
18241
+ if (!Number.isSafeInteger(value) || value <= 0) throw new RangeError(`${name} must be positive`);
18242
+ return value;
18183
18243
  }
18184
18244
 
18185
- // src/services/collaboration/ProjectRoomRealtimeRuntime.ts
18186
- var ProjectRoomRealtimeRuntime = class {
18245
+ // src/services/collaboration/WorkspaceRoomEventsService.ts
18246
+ var MAX_NODE_TIMER_DELAY = 2147e6;
18247
+ var WorkspaceRoomEventsService = class {
18248
+ /** Creates a service over the shared process-local broker. */
18187
18249
  constructor(deps) {
18188
18250
  this.deps = deps;
18189
- this.accepted = /* @__PURE__ */ new Set();
18190
- this.broker = deps.broker;
18191
- this.publisher = deps.publisher;
18192
- this.service = deps.service;
18193
- this.shutdownTimeoutMs = deps.shutdownTimeoutMs ?? 5e3;
18194
- this.unsubscribe = deps.subscribe(((event) => {
18195
- let work;
18196
- try {
18197
- work = Promise.resolve(deps.subscriber.handle(event));
18198
- } catch (error) {
18199
- work = Promise.reject(error);
18200
- }
18201
- const accepted = work.catch((error) => {
18202
- deps.log.warn("project-room:task-subscriber-failed", { error: error instanceof Error ? error.name : "UnknownError" });
18203
- });
18204
- this.accepted.add(accepted);
18205
- void accepted.finally(() => this.accepted.delete(accepted));
18206
- }));
18251
+ this.connections = /* @__PURE__ */ new Map();
18252
+ this.closed = false;
18253
+ this.now = deps.now ?? Date.now;
18254
+ this.heartbeatMs = deps.heartbeatMs ?? 15e3;
18255
+ this.authRecheckMs = deps.authRecheckMs ?? 15e3;
18256
+ this.maxConnectionsPerUser = deps.maxConnectionsPerUser ?? 2;
18257
+ this.maxTimerDelay = deps.maxTimerDelay ?? MAX_NODE_TIMER_DELAY;
18207
18258
  }
18208
- /** Stops admission, drains accepted work, and closes transport resources exactly once. */
18259
+ /** Starts a live-only connection; the route performs authentication beforehand. */
18260
+ connect(input) {
18261
+ if (this.closed) {
18262
+ input.raw.end();
18263
+ return;
18264
+ }
18265
+ const userKey = JSON.stringify([input.actor.tenantId, input.actor.userId]);
18266
+ const active = this.connections.get(userKey) ?? /* @__PURE__ */ new Set();
18267
+ if (active.size >= this.maxConnectionsPerUser) {
18268
+ const oldest = [...active].sort((left, right) => left.startedAt - right.startedAt)[0];
18269
+ oldest?.supersede();
18270
+ }
18271
+ const connection = this.buildConnection(input.actor, input.workspaceId, input.raw);
18272
+ active.add(connection);
18273
+ this.connections.set(userKey, active);
18274
+ }
18275
+ /** Closes every connection and stops admitting new ones. */
18209
18276
  close() {
18210
- this.closing ?? (this.closing = this.dispose());
18211
- return this.closing;
18277
+ if (this.closed) return;
18278
+ this.closed = true;
18279
+ for (const active of [...this.connections.values()]) for (const connection of [...active]) connection.close();
18280
+ this.connections.clear();
18212
18281
  }
18213
- async dispose() {
18214
- this.unsubscribe();
18215
- this.deps.subscriber.closeAdmission();
18216
- const accepted = [...this.accepted];
18217
- const drained = await boundedAllSettled(accepted, this.shutdownTimeoutMs);
18218
- if (!drained) this.deps.log.warn("project-room:runtime-drain-timeout", {
18219
- timeoutMs: this.shutdownTimeoutMs,
18220
- pending: accepted.length
18282
+ buildConnection(actor2, workspaceId, raw) {
18283
+ let phase = "initializing";
18284
+ const subscriptions = /* @__PURE__ */ new Map();
18285
+ let heartbeatTimer;
18286
+ let accessTimer;
18287
+ let expiryTimer;
18288
+ let closed = false;
18289
+ const recordRef = {};
18290
+ let rebuildTail = Promise.resolve(true);
18291
+ const lifetimeAbort = new AbortController();
18292
+ const clear = (timer) => {
18293
+ if (timer !== void 0) clearTimeout(timer);
18294
+ };
18295
+ const userScope = projectRoomUserEventScope2(actor2.tenantId, actor2.userId);
18296
+ const userScopeKey = JSON.stringify([userScope.tenantId, userScope.roomId, userScope.projectId]);
18297
+ const roomScopeKey = (scope) => JSON.stringify([scope.tenantId, scope.roomId, scope.projectId]);
18298
+ const serializeScoped = (scope, event) => scope === null ? `id: ${event.id}
18299
+ event: ${event.type}
18300
+ data: ${JSON.stringify(event)}
18301
+
18302
+ ` : `id: ${event.id}
18303
+ event: ${event.type}
18304
+ data: ${JSON.stringify({ ...event, scope })}
18305
+
18306
+ `;
18307
+ const writer = new ProjectRoomSseWriter(raw, { onClose: () => cleanup() });
18308
+ const cleanup = () => {
18309
+ if (closed) return;
18310
+ closed = true;
18311
+ phase = "closed";
18312
+ clear(heartbeatTimer);
18313
+ clear(accessTimer);
18314
+ clear(expiryTimer);
18315
+ lifetimeAbort.abort();
18316
+ for (const entry of subscriptions.values()) entry.unsubscribe();
18317
+ subscriptions.clear();
18318
+ writer.close();
18319
+ const userKey = JSON.stringify([actor2.tenantId, actor2.userId]);
18320
+ const active = this.connections.get(userKey);
18321
+ if (active && recordRef.current !== void 0) {
18322
+ active.delete(recordRef.current);
18323
+ if (active.size === 0) this.connections.delete(userKey);
18324
+ }
18325
+ };
18326
+ const revoke = (reason) => {
18327
+ if (closed) return;
18328
+ void writer.closeWithControl({ type: "access.revoked", data: { reason } }).then(cleanup, cleanup);
18329
+ };
18330
+ const record = {
18331
+ startedAt: this.now(),
18332
+ supersede: () => revoke("CONNECTION_SUPERSEDED"),
18333
+ close: cleanup
18334
+ };
18335
+ recordRef.current = record;
18336
+ const rebuildSubscriptions = async () => {
18337
+ try {
18338
+ const rooms = await this.deps.listMemberRooms({ tenantId: actor2.tenantId, userId: actor2.userId, workspaceId });
18339
+ if (closed) return true;
18340
+ const wanted = /* @__PURE__ */ new Map();
18341
+ for (const room of rooms) {
18342
+ const scope = { tenantId: actor2.tenantId, roomId: room.roomId, projectId: room.projectId };
18343
+ wanted.set(roomScopeKey(scope), scope);
18344
+ }
18345
+ for (const [key, entry] of [...subscriptions]) {
18346
+ if (key === userScopeKey || wanted.has(key)) continue;
18347
+ entry.unsubscribe();
18348
+ subscriptions.delete(key);
18349
+ }
18350
+ for (const [key, scope] of wanted) {
18351
+ if (subscriptions.has(key)) continue;
18352
+ const subscription = this.deps.broker.subscribe(scope, void 0, roomListener(scope));
18353
+ subscriptions.set(key, { scope, unsubscribe: subscription.unsubscribe });
18354
+ }
18355
+ if (!subscriptions.has(userScopeKey)) {
18356
+ const subscription = this.deps.broker.subscribe(userScope, void 0, userListener);
18357
+ subscriptions.set(userScopeKey, { scope: userScope, unsubscribe: subscription.unsubscribe });
18358
+ }
18359
+ return true;
18360
+ } catch (error) {
18361
+ this.deps.log.warn("workspace-room-events:resubscribe-failed", {
18362
+ error: error instanceof Error ? error.message : String(error)
18363
+ });
18364
+ return false;
18365
+ }
18366
+ };
18367
+ const enqueueRebuild = () => {
18368
+ rebuildTail = rebuildTail.then(rebuildSubscriptions, rebuildSubscriptions);
18369
+ };
18370
+ const userListener = (event) => {
18371
+ if (phase === "live") writer.enqueueRaw(serializeScoped(null, event));
18372
+ if (event.type === "membership.affected") enqueueRebuild();
18373
+ };
18374
+ const roomListener = (scope) => (event) => {
18375
+ if (phase === "live") writer.enqueueRaw(serializeScoped(scope, event));
18376
+ };
18377
+ const scheduleExpiry = () => {
18378
+ if (closed) return;
18379
+ const delay2 = actor2.tokenExpiresAt - this.now();
18380
+ if (delay2 <= 0) {
18381
+ revoke("TOKEN_EXPIRED");
18382
+ return;
18383
+ }
18384
+ expiryTimer = setTimeout(() => {
18385
+ expiryTimer = void 0;
18386
+ scheduleExpiry();
18387
+ }, Math.min(delay2, this.maxTimerDelay));
18388
+ expiryTimer.unref?.();
18389
+ };
18390
+ const scheduleHeartbeat = () => {
18391
+ if (closed) return;
18392
+ heartbeatTimer = setTimeout(() => {
18393
+ heartbeatTimer = void 0;
18394
+ if (closed) return;
18395
+ writer.heartbeat();
18396
+ scheduleHeartbeat();
18397
+ }, this.heartbeatMs);
18398
+ heartbeatTimer.unref?.();
18399
+ };
18400
+ const scheduleAccessCheck = () => {
18401
+ if (closed) return;
18402
+ accessTimer = setTimeout(() => {
18403
+ accessTimer = void 0;
18404
+ if (closed) return;
18405
+ const projectIds = [...subscriptions.values()].map((entry) => entry.scope.projectId).filter((projectId) => projectId !== PROJECT_ROOM_USER_CHANNEL_PROJECT);
18406
+ Promise.all(projectIds.map((projectId) => Promise.resolve().then(() => this.deps.requireReadAccess({ tenantId: actor2.tenantId, userId: actor2.userId, projectId })))).then(() => {
18407
+ if (!closed) scheduleAccessCheck();
18408
+ }, () => {
18409
+ if (!closed) revoke("PROJECT_ACCESS_REVOKED");
18410
+ });
18411
+ }, this.authRecheckMs);
18412
+ accessTimer.unref?.();
18413
+ };
18414
+ scheduleHeartbeat();
18415
+ enqueueRebuild();
18416
+ const initialRebuild = rebuildTail;
18417
+ void initialRebuild.then((ok) => {
18418
+ if (closed) return;
18419
+ if (!ok) {
18420
+ cleanup();
18421
+ return;
18422
+ }
18423
+ writer.enqueueControl({ type: "ready", data: { epoch: this.deps.broker.epoch, headEventId: null } });
18424
+ phase = "live";
18425
+ scheduleExpiry();
18426
+ scheduleAccessCheck();
18221
18427
  });
18222
- await this.deps.subscriber.drain(drained ? this.shutdownTimeoutMs : 0);
18223
- this.service.close();
18224
- this.broker.close();
18428
+ return record;
18225
18429
  }
18226
18430
  };
18227
- function createProjectRoomRealtimeRuntime(deps) {
18228
- const broker = new ProjectRoomEventBroker({ log: deps.log });
18229
- const publisher = new BrokerProjectRoomRealtimePublisher({ broker, log: deps.log });
18230
- const service2 = new ProjectRoomRealtimeService({ broker, log: deps.log, requireReadAccess: deps.requireReadAccess });
18231
- const subscriber = new ProjectRoomTaskEventSubscriber({
18232
- tasks: deps.tasks,
18233
- rooms: deps.rooms,
18234
- memberships: deps.memberships,
18235
- realtime: publisher,
18236
- log: deps.log
18237
- });
18238
- return new ProjectRoomRealtimeRuntime({
18239
- broker,
18240
- publisher,
18241
- service: service2,
18242
- subscriber,
18243
- subscribe: (listener) => taskLifecycleNotifier.subscribe(listener),
18244
- log: deps.log,
18245
- shutdownTimeoutMs: deps.shutdownTimeoutMs
18246
- });
18247
- }
18248
- async function boundedAllSettled(promises, timeoutMs) {
18249
- if (promises.length === 0) return true;
18250
- let timer;
18251
- const timeout = new Promise((resolve3) => {
18252
- timer = setTimeout(() => resolve3(false), timeoutMs);
18253
- timer.unref?.();
18254
- });
18255
- const result = await Promise.race([Promise.allSettled(promises).then(() => true), timeout]);
18256
- if (timer) clearTimeout(timer);
18257
- return result;
18431
+
18432
+ // src/services/collaboration/WorkspaceMemberRoomLister.ts
18433
+ function createWorkspaceMemberRoomLister(deps) {
18434
+ return async (input) => {
18435
+ const projects = await deps.projects.getProjectsByWorkspace(input.tenantId, input.workspaceId);
18436
+ const memberRooms = [];
18437
+ for (const project of projects) {
18438
+ const membership = await deps.memberships.findByUser(input.tenantId, project.id, input.userId);
18439
+ if (!membership || membership.status !== "active") continue;
18440
+ const room = await deps.rooms.getMainRoom(input.tenantId, project.id);
18441
+ if (room) memberRooms.push({ projectId: project.id, roomId: room.id });
18442
+ }
18443
+ return memberRooms;
18444
+ };
18258
18445
  }
18259
18446
 
18260
- // src/routes/project-room-events.ts
18261
- import { isProjectRoomEventId, snapshotExactRecord as snapshotExactRecord12 } from "@axiom-lattice/protocols";
18262
- function registerProjectRoomEventRoutes(app2, deps) {
18263
- app2.get("/api/projects/:projectId/room/events", async (request, reply) => {
18447
+ // src/routes/workspace-room-events.ts
18448
+ import { snapshotExactRecord as snapshotExactRecord12 } from "@axiom-lattice/protocols";
18449
+ function registerWorkspaceRoomEventRoutes(app2, deps) {
18450
+ app2.get("/api/workspaces/:workspaceId/room-events", async (request, reply) => {
18264
18451
  try {
18265
- const projectId = exactProjectId(request.params);
18266
- const headers = strictHeaders(request, true);
18452
+ const params = exactParams(request.params);
18453
+ const headers = strictHeaders(request);
18267
18454
  if (request.body !== void 0 || Object.keys(request.query).length !== 0) return invalid(reply);
18268
18455
  const session = verifyConsoleSessionAuthHeader(headers.authorization, deps.tokenSecret);
18269
18456
  if (!session?.tenantId) return unauthorized(reply);
18270
- await deps.access.requireExistingProjectAccess({ tenantId: session.tenantId, userId: session.id, projectId, capability: "read" });
18271
- const room = exactRoom(await deps.rooms.getMainRoom(session.tenantId, projectId), session.tenantId, projectId);
18272
- if (!room) return reply.code(404).send({ success: false, error: { code: "PROJECT_ROOM_NOT_FOUND", message: "Project room not found", retryable: false } });
18273
- const actor2 = { tenantId: session.tenantId, userId: session.id, projectId, tokenExpiresAt: session.expiresAt };
18274
- if (!deps.realtime.canConnect(actor2)) return reply.code(429).send({ success: false, error: { code: "PROJECT_ROOM_STREAM_LIMIT", message: "Project room stream limit reached", retryable: true } });
18275
18457
  reply.hijack();
18276
18458
  reply.raw.writeHead(200, {
18277
18459
  "Content-Type": "text/event-stream",
@@ -18280,53 +18462,35 @@ function registerProjectRoomEventRoutes(app2, deps) {
18280
18462
  "X-Accel-Buffering": "no",
18281
18463
  "Access-Control-Allow-Origin": "*"
18282
18464
  });
18283
- deps.realtime.connect({ actor: actor2, roomId: room.id, ...headers.lastEventId ? { lastEventId: headers.lastEventId } : {}, raw: reply.raw });
18284
- } catch (error) {
18285
- return routeError(reply, error);
18286
- }
18287
- });
18288
- app2.get("/api/projects/:projectId/room/realtime-mode", async (request, reply) => {
18289
- try {
18290
- const projectId = exactProjectId(request.params);
18291
- const headers = strictHeaders(request, false);
18292
- if (request.body !== void 0 || Object.keys(request.query).length !== 0) return invalid(reply);
18293
- const session = verifyConsoleSessionAuthHeader(headers.authorization, deps.tokenSecret);
18294
- if (!session?.tenantId) return unauthorized(reply);
18295
- await deps.access.requireExistingProjectAccess({ tenantId: session.tenantId, userId: session.id, projectId, capability: "read" });
18296
- return reply.send({ success: true, data: { mode: "single-gateway", supportedGatewayProcesses: 1, durableReplay: false, epoch: deps.broker.epoch } });
18465
+ deps.service.connect({
18466
+ actor: { tenantId: session.tenantId, userId: session.id, tokenExpiresAt: session.expiresAt },
18467
+ workspaceId: params.workspaceId,
18468
+ raw: reply.raw
18469
+ });
18297
18470
  } catch (error) {
18298
18471
  return routeError(reply, error);
18299
18472
  }
18300
18473
  });
18301
18474
  }
18302
- function strictHeaders(request, requireSse) {
18475
+ function exactParams(params) {
18476
+ const value = snapshotExactRecord12(params, ["workspaceId"]);
18477
+ if (!value || typeof value.workspaceId !== "string" || !value.workspaceId.trim()) throw new InvalidRealtimeRequestError();
18478
+ return { workspaceId: value.workspaceId };
18479
+ }
18480
+ function strictHeaders(request) {
18303
18481
  const raw = request.raw.rawHeaders;
18304
18482
  const values = (name) => raw.flatMap((value, index) => index % 2 === 0 && value.toLowerCase() === name ? [raw[index + 1]] : []);
18305
18483
  const authorization = values("authorization");
18306
18484
  const accept = values("accept");
18307
18485
  const cursor = values("last-event-id");
18308
- if (authorization.length !== 1 || authorization[0].includes(",") || cursor.length > 1 || cursor.some((value) => value.includes(",")) || requireSse && (accept.length !== 1 || !isSseAccept(accept[0]))) {
18309
- throw new InvalidRealtimeRequestError();
18310
- }
18311
- const lastEventId = cursor[0]?.trim();
18312
- if (lastEventId !== void 0 && (!lastEventId || !isProjectRoomEventId(lastEventId))) throw new InvalidRealtimeRequestError();
18313
- return { authorization: authorization[0], ...lastEventId ? { lastEventId } : {} };
18486
+ if (authorization.length !== 1 || authorization[0].includes(",") || cursor.length > 0 || accept.length !== 1 || !isSseAccept(accept[0])) throw new InvalidRealtimeRequestError();
18487
+ return { authorization: authorization[0] };
18314
18488
  }
18315
18489
  function isSseAccept(value) {
18316
18490
  if (value.includes(",")) return false;
18317
18491
  const [mediaType, ...parameters] = value.split(";");
18318
18492
  return mediaType.trim() === "text/event-stream" && parameters.every((parameter) => /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\s*=\s*(?:[!#$%&'*+.^_`|~0-9A-Za-z-]+|"[^"]*")$/.test(parameter.trim()));
18319
18493
  }
18320
- function exactProjectId(params) {
18321
- const value = snapshotExactRecord12(params, ["projectId"]);
18322
- if (!value || typeof value.projectId !== "string" || !value.projectId.trim()) throw new InvalidRealtimeRequestError();
18323
- return value.projectId;
18324
- }
18325
- function exactRoom(value, tenantId, projectId) {
18326
- if (!value || typeof value !== "object") return void 0;
18327
- const room = value;
18328
- return typeof room.id === "string" && room.id && room.tenantId === tenantId && room.projectId === projectId ? { id: room.id } : void 0;
18329
- }
18330
18494
  var InvalidRealtimeRequestError = class extends Error {
18331
18495
  };
18332
18496
  function invalid(reply) {
@@ -18337,7 +18501,6 @@ function unauthorized(reply) {
18337
18501
  }
18338
18502
  function routeError(reply, error) {
18339
18503
  if (error instanceof InvalidRealtimeRequestError) return invalid(reply);
18340
- if (error instanceof ProjectCollaborationError) return reply.code(error.statusCode).send({ success: false, error: { code: error.code, message: error.message, retryable: false } });
18341
18504
  return reply.code(500).send({ success: false, error: { code: "INTERNAL_ERROR", message: "Internal server error", retryable: false } });
18342
18505
  }
18343
18506
 
@@ -18476,6 +18639,7 @@ var registerLatticeRoutes = (app2, channelDeps, options = {}) => {
18476
18639
  const projectRoomStore = getStoreLattice16("default", "projectRoom").store;
18477
18640
  const projectBotMembershipStore = getStoreLattice16("default", "projectBotMembership").store;
18478
18641
  const projectRoomMessageStore = getStoreLattice16("default", "projectRoomMessage").store;
18642
+ const projectRoomReadStateStore = getStoreLattice16("default", "projectRoomReadState").store;
18479
18643
  const threadStore = getStoreLattice16("default", "thread").store;
18480
18644
  const taskStore = getStoreLattice16("default", "task").store;
18481
18645
  const taskWorkItemStore = getStoreLattice16("default", "taskWorkItem").store;
@@ -18487,23 +18651,30 @@ var registerLatticeRoutes = (app2, channelDeps, options = {}) => {
18487
18651
  tasks: taskStore,
18488
18652
  rooms: projectRoomStore,
18489
18653
  memberships: projectBotMembershipStore,
18490
- log: realtimeLog,
18491
- requireReadAccess: async (actor2) => {
18492
- await accessService.requireExistingProjectAccess({
18493
- tenantId: actor2.tenantId,
18494
- userId: actor2.userId,
18495
- projectId: actor2.projectId,
18496
- capability: "read"
18497
- });
18498
- }
18654
+ log: realtimeLog
18499
18655
  }) : void 0;
18500
18656
  if (projectRoomRealtimeRuntime) {
18501
18657
  app2.addHook("onClose", async () => projectRoomRealtimeRuntime?.close());
18502
- registerProjectRoomEventRoutes(app2, {
18503
- access: accessService,
18504
- rooms: projectRoomStore,
18505
- realtime: projectRoomRealtimeRuntime.service,
18658
+ const workspaceRoomEventsService = new WorkspaceRoomEventsService({
18506
18659
  broker: projectRoomRealtimeRuntime.broker,
18660
+ listMemberRooms: createWorkspaceMemberRoomLister({
18661
+ projects: projectStore,
18662
+ memberships: projectMembershipStore,
18663
+ rooms: projectRoomStore
18664
+ }),
18665
+ requireReadAccess: async (input) => {
18666
+ await accessService.requireExistingProjectAccess({
18667
+ tenantId: input.tenantId,
18668
+ userId: input.userId,
18669
+ projectId: input.projectId,
18670
+ capability: "read"
18671
+ });
18672
+ },
18673
+ log: realtimeLog
18674
+ });
18675
+ app2.addHook("onClose", async () => workspaceRoomEventsService.close());
18676
+ registerWorkspaceRoomEventRoutes(app2, {
18677
+ service: workspaceRoomEventsService,
18507
18678
  tokenSecret: resolveConsoleTokenSecret(process.env.AUTH_REQUIRED === "true")
18508
18679
  });
18509
18680
  }
@@ -18585,7 +18756,32 @@ var registerLatticeRoutes = (app2, channelDeps, options = {}) => {
18585
18756
  saveBot: projectBotMembershipStore.save.bind(projectBotMembershipStore),
18586
18757
  ensureCoordinator: (tenantId) => coordinatorProvisioner.ensure(tenantId)
18587
18758
  });
18588
- registerProjectRoomRoutes(app2, { roomService, membershipService, messageService });
18759
+ const readStateService = {
18760
+ mark: async (actorRef) => {
18761
+ await accessService.requireExistingProjectAccess({ ...actorRef, capability: "read" });
18762
+ const room = await projectRoomStore.getMainRoom(actorRef.tenantId, actorRef.projectId);
18763
+ if (!room) return;
18764
+ const lastReadAt = /* @__PURE__ */ new Date();
18765
+ await projectRoomReadStateStore.markRead({ tenantId: actorRef.tenantId, roomId: room.id, userId: actorRef.userId, lastReadAt });
18766
+ projectRoomRealtimeRuntime?.publisher.readChanged({
18767
+ tenantId: actorRef.tenantId,
18768
+ userId: actorRef.userId,
18769
+ projectId: actorRef.projectId,
18770
+ roomId: room.id,
18771
+ lastReadAt: lastReadAt.toISOString(),
18772
+ sourceKey: `read:${actorRef.userId}:${room.id}:${lastReadAt.getTime()}`
18773
+ });
18774
+ }
18775
+ };
18776
+ registerProjectRoomRoutes(app2, {
18777
+ roomService,
18778
+ membershipService,
18779
+ messageService,
18780
+ readStateService,
18781
+ userDirectory: {
18782
+ getUserById: (id3) => getStoreLattice16("default", "user").store.getUserById(id3).then((u) => u ? { name: u.name } : null)
18783
+ }
18784
+ });
18589
18785
  registerProjectRosterRoutes(app2, { service: rosterService });
18590
18786
  registerCoSpaceRoutes(app2, {
18591
18787
  projectStore: {
@@ -18607,7 +18803,11 @@ var registerLatticeRoutes = (app2, channelDeps, options = {}) => {
18607
18803
  },
18608
18804
  messageStore: {
18609
18805
  list: projectRoomMessageStore.list.bind(projectRoomMessageStore),
18610
- create: projectRoomMessageStore.create.bind(projectRoomMessageStore)
18806
+ create: projectRoomMessageStore.create.bind(projectRoomMessageStore),
18807
+ countAfter: projectRoomMessageStore.countAfter.bind(projectRoomMessageStore)
18808
+ },
18809
+ readStateStore: {
18810
+ get: projectRoomReadStateStore.get.bind(projectRoomReadStateStore)
18611
18811
  },
18612
18812
  userTenantLinkStore: {
18613
18813
  getUsersByTenant: userTenantLinkStore.getUsersByTenant.bind(userTenantLinkStore)
@@ -18740,6 +18940,7 @@ var registerLatticeRoutes = (app2, channelDeps, options = {}) => {
18740
18940
  }
18741
18941
  })
18742
18942
  });
18943
+ registerAgentWebAppEmbedRoutes(app2, {});
18743
18944
  registerA2ABridgeRoutes(app2);
18744
18945
  registerSTTRoutes(app2);
18745
18946
  app2.get("/api/local-a2a", getLocalA2AStatus);
@@ -21461,9 +21662,9 @@ var MessageRouter = class {
21461
21662
  };
21462
21663
 
21463
21664
  // src/channels/room/RoomChannelAdapter.ts
21464
- import { z as z9 } from "zod";
21665
+ import { z as z10 } from "zod";
21465
21666
  import { snapshotExactRecord as snapshotExactRecord15 } from "@axiom-lattice/protocols";
21466
- var roomConfigSchema = z9.object({}).strict();
21667
+ var roomConfigSchema = z10.object({}).strict();
21467
21668
  function createRoomChannelAdapter(writer) {
21468
21669
  return {
21469
21670
  channel: "room",
@@ -21643,7 +21844,7 @@ app.register(multipart, {
21643
21844
  });
21644
21845
  app.register(websocket);
21645
21846
  app.register(staticPlugin, {
21646
- root: typeof __dirname === "string" ? path3.join(__dirname, "../public") : path3.resolve(process.cwd(), "public"),
21847
+ root: typeof __dirname === "string" ? path4.join(__dirname, "../public") : path4.resolve(process.cwd(), "public"),
21647
21848
  prefix: "/"
21648
21849
  });
21649
21850
  app.setErrorHandler((error, request, reply) => {
@@ -21694,7 +21895,7 @@ async function restoreMcpConnections() {
21694
21895
  const connectedConfigs = configs.filter((c2) => c2.status === "connected");
21695
21896
  if (connectedConfigs.length === 0) return;
21696
21897
  logger5.info(`Restoring ${connectedConfigs.length} MCP server connections...`);
21697
- const { convertToConnection } = await import("./mcp-configs-SHRMQHIL.mjs");
21898
+ const { convertToConnection } = await import("./mcp-configs-WCY5EXCW.mjs");
21698
21899
  for (const config of connectedConfigs) {
21699
21900
  try {
21700
21901
  const connection = convertToConnection(config.config);
@@ -21733,32 +21934,17 @@ var start = async (config) => {
21733
21934
  const projectRoomRealtimeMode = resolveProjectRoomRealtimeMode();
21734
21935
  let projectRoomRealtimeRuntime;
21735
21936
  if (projectRoomRealtimeMode === "single-gateway") {
21736
- const projectStore = getStoreLattice27("default", "project").store;
21737
- const membershipStore = getStoreLattice27("default", "projectMembership").store;
21738
- const access = new ProjectAccessService({
21739
- projectStore,
21740
- membershipStore,
21741
- userTenantLinkStore: getStoreLattice27("default", "userTenantLink").store
21742
- });
21743
21937
  projectRoomRealtimeRuntime = createProjectRoomRealtimeRuntime({
21744
21938
  tasks: getStoreLattice27("default", "task").store,
21745
21939
  rooms: getStoreLattice27("default", "projectRoom").store,
21746
21940
  memberships: getStoreLattice27("default", "projectBotMembership").store,
21747
- log: { warn: (message, context) => logger5.warn(message, context) },
21748
- requireReadAccess: async (actor2) => {
21749
- await access.requireExistingProjectAccess({
21750
- tenantId: actor2.tenantId,
21751
- userId: actor2.userId,
21752
- projectId: actor2.projectId,
21753
- capability: "read"
21754
- });
21755
- }
21941
+ log: { warn: (message, context) => logger5.warn(message, context) }
21756
21942
  });
21757
21943
  }
21758
21944
  let channelDeps;
21759
21945
  const adapterRegistry = new ChannelAdapterRegistry();
21760
21946
  adapterRegistry.register(larkChannelAdapter);
21761
- const { wechatChannelAdapter } = await import("./WechatChannelAdapter-WSDKR4OA.mjs");
21947
+ const { wechatChannelAdapter } = await import("./WechatChannelAdapter-7WHE5UGY.mjs");
21762
21948
  adapterRegistry.register(wechatChannelAdapter);
21763
21949
  try {
21764
21950
  const { getStoreLattice: getStore11 } = await import("@axiom-lattice/core");
@@ -21809,9 +21995,9 @@ var start = async (config) => {
21809
21995
  projectRoomRealtimeRuntime
21810
21996
  });
21811
21997
  try {
21812
- const { A2AAuthService, parseEnvKeys } = await import("./A2AAuthService-DK5X6VIL.mjs");
21813
- const { registerA2AStandardRoutes } = await import("./a2a-standard-WC2BSOFV.mjs");
21814
- const a2a = await import("./a2a-7N3WDAOP.mjs");
21998
+ const { A2AAuthService, parseEnvKeys } = await import("./A2AAuthService-7UGQ7GMW.mjs");
21999
+ const { registerA2AStandardRoutes } = await import("./a2a-standard-VEQBXBMM.mjs");
22000
+ const a2a = await import("./a2a-FGYX2HH3.mjs");
21815
22001
  const a2aKeyStore = getStoreLattice27("default", "a2aApiKey").store;
21816
22002
  const assistantStore = getStoreLattice27("default", "assistant").store;
21817
22003
  const projectStore = getStoreLattice27("default", "project").store;
@@ -21839,12 +22025,51 @@ var start = async (config) => {
21839
22025
  error: err instanceof Error ? err.message : String(err)
21840
22026
  });
21841
22027
  }
22028
+ try {
22029
+ const { registerOpenRoutes } = await import("./open-HH7RKGML.mjs");
22030
+ const { registerOpenSessionRoutes } = await import("./open-session-3VN65PRR.mjs");
22031
+ const { registerOpenCatalogRoutes } = await import("./open-catalog-WYS2AENM.mjs");
22032
+ const { registerOpenFilesRoutes } = await import("./open-files-GVRMK5PL.mjs");
22033
+ const { registerOpenAuditRoutes } = await import("./open-audit-UJ3NXCGW.mjs");
22034
+ const { registerOpenExposureRoutes } = await import("./open-exposure-FK4G6O6L.mjs");
22035
+ const { openLattice } = await import("./openLattice-GAAGQJST.mjs");
22036
+ const { createKbProvider } = await import("./kbProvider-2D6DZ34N.mjs");
22037
+ const { createOpenSandboxProvider } = await import("./sandboxProvider-I3P66VXT.mjs");
22038
+ const { createAgentProvider } = await import("./agentProvider-X4FVQPKW.mjs");
22039
+ const { registerExposedPluginTools } = await import("./registerExposedPlugins-63EUF4VS.mjs");
22040
+ const { CollectionService: CollectionService2 } = await import("./collection_service-RTRJEQFL.mjs");
22041
+ openLattice.register(createKbProvider(new CollectionService2()));
22042
+ openLattice.register(createOpenSandboxProvider());
22043
+ const threadStore = getStoreLattice27("default", "thread").store;
22044
+ const assistantStore = getStoreLattice27("default", "assistant").store;
22045
+ openLattice.register(
22046
+ createAgentProvider({
22047
+ threadStore,
22048
+ resolveAssistant: async (tenantId, assistantId) => {
22049
+ const assistant = await assistantStore.getAssistantById(tenantId, assistantId);
22050
+ return assistant ? { name: assistant.name, description: assistant.description } : null;
22051
+ }
22052
+ })
22053
+ );
22054
+ await registerExposedPluginTools();
22055
+ registerOpenRoutes(app);
22056
+ registerOpenSessionRoutes(app);
22057
+ registerOpenCatalogRoutes(app);
22058
+ registerOpenFilesRoutes(app);
22059
+ registerOpenAuditRoutes(app);
22060
+ registerOpenExposureRoutes(app);
22061
+ logger5.info("Open API routes registered (kb + sandbox providers, session exchange)");
22062
+ } catch (err) {
22063
+ logger5.warn("Open API routes unavailable", {
22064
+ error: err instanceof Error ? err.message : String(err)
22065
+ });
22066
+ }
21842
22067
  if (!sandboxLatticeManager2.hasLattice("default")) {
21843
22068
  sandboxLatticeManager2.registerLattice("default", getConfiguredSandboxProvider());
21844
22069
  logger5.info("Registered sandbox manager from env configuration");
21845
22070
  }
21846
22071
  try {
21847
- const { ResourceController } = await import("./resources-VA7LSDKN.mjs");
22072
+ const { ResourceController } = await import("./resources-SRQRKW5G.mjs");
21848
22073
  const sharedResourceStore = getStoreLattice27("default", "sharedResource").store;
21849
22074
  const cache = new TokenCache();
21850
22075
  const resourceController = new ResourceController({