decocms 4.253.2 → 4.253.3

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 (222) hide show
  1. package/dist/client/assets/{AlertCircle-BYvQDEJ0.js → AlertCircle-CtXDDPuh.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DMcwZhe6.js → AreaChart-yi4TgkYE.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-B-9nUwLX.js → ArrowLeft-DtOVN8vp.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-B1UtGT45.js → ArrowUp-I330YJW3.js} +1 -1
  5. package/dist/client/assets/{Check-Cu-Awg_S.js → Check-CDgez8no.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-C4O_1HW1.js → CheckCircle-yFYdDBYT.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-D1GCQiij.js → ChevronDown-CKlR5rwM.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-NcrFTq4Q.js → ChevronRight-BJ3yvnPz.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-DhZiWWo6.js → ChevronSelectorVertical-DrytqWO7.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-CrheBWdX.js → ChevronUp-Bk64bZHd.js} +1 -1
  11. package/dist/client/assets/{Copy01-DwPzyMCP.js → Copy01-DUFwBGHZ.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-CqBwox93.js → CreditCard01-4vl-vsk4.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-Dnc_qefX.js → DotsVertical-BVAKyUxS.js} +1 -1
  14. package/dist/client/assets/{Download01-yzTeB8lR.js → Download01-DBszkg_x.js} +1 -1
  15. package/dist/client/assets/{Eye-rZWcM_sl.js → Eye-CzwEImrg.js} +1 -1
  16. package/dist/client/assets/{FilterLines-BMCdm4O2.js → FilterLines-ByiTdPGm.js} +1 -1
  17. package/dist/client/assets/{Globe01-CojEB28p.js → Globe01-BT9zQGYP.js} +1 -1
  18. package/dist/client/assets/{Globe04-DohkS1yI.js → Globe04-CUaWBaQZ.js} +1 -1
  19. package/dist/client/assets/{HardDrive-WahlW5wX.js → HardDrive-OvDfsdks.js} +1 -1
  20. package/dist/client/assets/{Key01-Bx4K_S3Q.js → Key01-C80140fI.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-CtNOOeZL.js → LinkExternal01-Crdm3X-P.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-D_Q5BYhU.js → LockUnlocked01-BaCHfPNz.js} +1 -1
  23. package/dist/client/assets/{LogOut01-BZABwyef.js → LogOut01-W-wJ3HBs.js} +1 -1
  24. package/dist/client/assets/{Monitor01-7UTn7zVa.js → Monitor01-Ch5Y4tuq.js} +1 -1
  25. package/dist/client/assets/{Palette-BoChqeld.js → Palette-BcDfqcDI.js} +1 -1
  26. package/dist/client/assets/{Play-DNBU5rzE.js → Play-DH1W9sUg.js} +1 -1
  27. package/dist/client/assets/{Plus-8T2afHEs.js → Plus-DOqutG8C.js} +1 -1
  28. package/dist/client/assets/{SearchLg-6rfLixx5.js → SearchLg-3rGuCUoM.js} +1 -1
  29. package/dist/client/assets/{SearchMd-0vzqE1Pd.js → SearchMd-eExvU_Cs.js} +1 -1
  30. package/dist/client/assets/{Settings02-KfyhGAo3.js → Settings02-CmGQOcPT.js} +1 -1
  31. package/dist/client/assets/{Share07-BTlsc7Ng.js → Share07-5YpBA79_.js} +1 -1
  32. package/dist/client/assets/{Shield01-CPg5EmjN.js → Shield01-BnZKrg7I.js} +1 -1
  33. package/dist/client/assets/{Stars01-CV6o6WbI.js → Stars01-RuIE5Zdu.js} +1 -1
  34. package/dist/client/assets/{Stars02-Do7POkWd.js → Stars02-BQJTArZQ.js} +1 -1
  35. package/dist/client/assets/{Sun-knqgcKen.js → Sun-DNrI0Umm.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-dwH3CFZl.js → SwitchHorizontal01--iR18qCk.js} +1 -1
  37. package/dist/client/assets/{Tool01-CawhE5Vv.js → Tool01-DCPbUowt.js} +1 -1
  38. package/dist/client/assets/{Tool02-DUb3PZH0.js → Tool02-Bu2KnVcQ.js} +1 -1
  39. package/dist/client/assets/{Trash01-CZV6hVoi.js → Trash01-D17XOrLH.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-Cp69MjT_.js → TrendUp01-P2ZZoWEf.js} +1 -1
  41. package/dist/client/assets/{Upload01-AWrvzckN.js → Upload01-DzeGUE4j.js} +1 -1
  42. package/dist/client/assets/{User01-DLfObf45.js → User01-9xZCV673.js} +1 -1
  43. package/dist/client/assets/{UserSquare-BjlZKgC9.js → UserSquare-CVtGfIDn.js} +1 -1
  44. package/dist/client/assets/{Users01-CQ3eFXvg.js → Users01-mNF9ASXd.js} +1 -1
  45. package/dist/client/assets/{Users03-DgZSfmdp.js → Users03-BgkkJa8X.js} +1 -1
  46. package/dist/client/assets/{XCircle-BpPG80mN.js → XCircle-DCQf8XEr.js} +1 -1
  47. package/dist/client/assets/{XClose-DW7idjn0.js → XClose-D3a9ZSmL.js} +1 -1
  48. package/dist/client/assets/{YAxis-Da2rtvB9.js → YAxis-wwPBklqZ.js} +1 -1
  49. package/dist/client/assets/{Zap-Dzj3-lys.js → Zap-DV9Keoy4.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-Bs2nDJX-.js → ZapSquare-Cs9IlPcM.js} +1 -1
  51. package/dist/client/assets/{access-gate-DZ_-IWJN.js → access-gate-gBCcXiQ5.js} +1 -1
  52. package/dist/client/assets/{agent-icon-xLXU6rvd.js → agent-icon-Bs96UMN4.js} +1 -1
  53. package/dist/client/assets/{agents-list-CE_lUbRY.js → agents-list-KlcE8Guv.js} +1 -1
  54. package/dist/client/assets/{ai-providers-B5hVpeDw.js → ai-providers-2TQlnA-T.js} +1 -1
  55. package/dist/client/assets/{alert-CnmxLYRw.js → alert-BfgQbql2.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-CvsZ6guw.js → alert-dialog-CYISmsp0.js} +1 -1
  57. package/dist/client/assets/{api-keys-D72J-m-j.js → api-keys-CobV6DXd.js} +1 -1
  58. package/dist/client/assets/{app-editor-CClK5ocS.js → app-editor-C4t39sNr.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-DHLFLTCH.js → auth-catchall-BcNlgPxi.js} +1 -1
  60. package/dist/client/assets/{auth-1R6gk2tO.js → auth-dGsBCMlC.js} +1 -1
  61. package/dist/client/assets/{auth-entry-CUwr4ac9.js → auth-entry-CqcvIPvV.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-Cx8b5rv5.js → auth-split-layout-BLakgVeC.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-CZZKLfUR.js → authenticate-and-persist-oauth-BPXOHlXS.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-DuyceG26.js → automation-list-row-C3v52KPe.js} +1 -1
  65. package/dist/client/assets/{automation-runs-DP3JWssQ.js → automation-runs-C2HUGQOX.js} +1 -1
  66. package/dist/client/assets/{automations-DbKB4JrO.js → automations-bSKH6oaP.js} +1 -1
  67. package/dist/client/assets/{avatar-DPXyNBP8.js → avatar-BenMWCiJ.js} +1 -1
  68. package/dist/client/assets/{badge-CGCuo_-5.js → badge-CliF6PXU.js} +1 -1
  69. package/dist/client/assets/{block-document-CMd9Eo96.js → block-document-ecGEHpLp.js} +1 -1
  70. package/dist/client/assets/{buckets-DljZRfHK.js → buckets-CsGE0mZQ.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-BLk77HCA.js → bulk-category-panel-CPeSnbUk.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-DnpJPSNM.js → capability-load-error-Br0E5BK9.js} +1 -1
  73. package/dist/client/assets/{cards-C60HDM5G.js → cards-CwRuFB_T.js} +1 -1
  74. package/dist/client/assets/{category-editor-DCes96yT.js → category-editor-jfBtBcjQ.js} +1 -1
  75. package/dist/client/assets/{chart-BDZIA7_t.js → chart-B6MFUsFo.js} +1 -1
  76. package/dist/client/assets/{chat-context-C9nTU_s6.js → chat-context-Dfd1-1Lo.js} +1 -1
  77. package/dist/client/assets/{checkbox-CYVQb6u5.js → checkbox-EYTcqsBG.js} +1 -1
  78. package/dist/client/assets/{choose-editor-CHdyY5E4.js → choose-editor-Cip_BFLn.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-a3s0cdGF.js → cli-auth-success-CH0wRwLP.js} +1 -1
  80. package/dist/client/assets/{collection-detail-COMW8222.js → collection-detail-H7RiBES3.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-DjAF7BCj.js → collection-display-button-DA23yX4e.js} +1 -1
  82. package/dist/client/assets/{collection-search-CSSjKy7f.js → collection-search-DJzt3Gor.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-DOG_oIXa.js → collection-table-wrapper-Dlv17U_6.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-DGI2IEmV.js → collection-tabs-DtP7TjJI.js} +1 -1
  85. package/dist/client/assets/{command-DUeMCHIE.js → command-CKH2r5eb.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-DB8uJRe2.js → commerce-onboarding-bCIN1-83.js} +1 -1
  87. package/dist/client/assets/{connect-xjult6u-.js → connect-BUGoLkAq.js} +1 -1
  88. package/dist/client/assets/{connection-O58eU8Dr.js → connection-DQgnmnzq.js} +1 -1
  89. package/dist/client/assets/{connection-card-Drtf7vdR.js → connection-card-ACuj5E9S.js} +1 -1
  90. package/dist/client/assets/{connection-detail-O-fmNmpE.js → connection-detail-BULrhdZi.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-rO7EwngE.js → connection-form-helpers-Cfz51jR_.js} +1 -1
  92. package/dist/client/assets/{connections-kiyFdETe.js → connections-DsXrDSxT.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-BNBoVXdw.js → decopilot-sse-pool-BeJzOsVO.js} +1 -1
  94. package/dist/client/assets/{dialog-06THKDmm.js → dialog-DuSBFSga.js} +1 -1
  95. package/dist/client/assets/{domain-settings-DxS7w6w-.js → domain-settings-DRz19-Jt.js} +1 -1
  96. package/dist/client/assets/{drawer-DfM0a7aK.js → drawer-CHruCnRr.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-w7n_JiUQ.js → dropdown-menu-C8nav0fy.js} +1 -1
  98. package/dist/client/assets/{empty-state-DytlgCAm.js → empty-state-mkhi1rfX.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-42ShpRyJ.js → extract-connection-data-BNJ-imMD.js} +1 -1
  100. package/dist/client/assets/{file-explorer-D_PGAi5e.js → file-explorer-DLJoQEI1.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-DIpohPJ6.js → file-type-icon-ZBtP7G5F.js} +1 -1
  102. package/dist/client/assets/{form-D7T5_Dgj.js → form-Bz1Blvsa.js} +1 -1
  103. package/dist/client/assets/{general-DmFqcLLE.js → general-CPBxviis.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-BebzrN3W.js → github-repo-picker-B8bIONwq.js} +1 -1
  105. package/dist/client/assets/{hooks-BxLy1Zzz.js → hooks-rJKJK9uM.js} +1 -1
  106. package/dist/client/assets/{index-9OoxX1NR.js → index-BVEPrL3c.js} +1 -1
  107. package/dist/client/assets/{index-DDTrmVhz.js → index-BY-CqMte.js} +1 -1
  108. package/dist/client/assets/{index-DF3uNrPp.js → index-CG1pYzpa.js} +1 -1
  109. package/dist/client/assets/{index-CvNeVHfy.js → index-CUt_QACY.js} +1 -1
  110. package/dist/client/assets/{index-BdUjMMS5.js → index-CW_yn53K.js} +1 -1
  111. package/dist/client/assets/{index-B1P_V3qG.js → index-CxtBxDI6.js} +1 -1
  112. package/dist/client/assets/{index-BB4_ygWi.js → index-DUWnGqTz.js} +1 -1
  113. package/dist/client/assets/{index-BYzmGpA0.js → index-Dfj5Ug_S.js} +1 -1
  114. package/dist/client/assets/{index-C2wbMIfs.js → index-ndY-oSUU.js} +5 -5
  115. package/dist/client/assets/{index-CMALBC-v.js → index-pn6its_f.js} +3 -3
  116. package/dist/client/assets/{index-redirect-Cpg_Q5et.js → index-redirect-SGbZ48ZW.js} +1 -1
  117. package/dist/client/assets/{infra-billing-DyTByfZt.js → infra-billing-CNfnM4ka.js} +1 -1
  118. package/dist/client/assets/{input-CjP4wQRD.js → input-Ci4t0s2s.js} +1 -1
  119. package/dist/client/assets/{integration-icon-_VDJvzJ-.js → integration-icon-CImpG20B.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-8QQ-DA_M.js → invite-member-dialog-DxoBMqRW.js} +1 -1
  121. package/dist/client/assets/{label-BNnDeYWX.js → label-DzYHqeOW.js} +1 -1
  122. package/dist/client/assets/{layout-DGxeKl7-.js → layout-Cpwo9qMT.js} +1 -1
  123. package/dist/client/assets/{login-BmUk90CP.js → login-CMwy8bWM.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-R6LWeGel.js → mcp-oauth-BLKHxK_9.js} +1 -1
  125. package/dist/client/assets/{members-Rje746QY.js → members-D1aLpNnn.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-CHdpsAKe.js → monaco-editor-DAY5kz0b.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-nWQLcD7N.js → monitoring-stats-row-DCElRuK8.js} +1 -1
  128. package/dist/client/assets/{multi-select-DvVxCCA2.js → multi-select-Y2ogFLe9.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-BrZMJ9Z_.js → oauth-callback-BHS88oZ9.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-6lB5ioTQ.js → oauth-callback-ai-provider-DMlMd00n.js} +1 -1
  131. package/dist/client/assets/{onboarding-CFZ_YqBk.js → onboarding-Dasul-y-.js} +1 -1
  132. package/dist/client/assets/{org-layout-CFJ3s3aO.js → org-layout-Cw-8oJq9.js} +1 -1
  133. package/dist/client/assets/{organization-choice-4gTGCdVZ.js → organization-choice-8SsJz-Kn.js} +1 -1
  134. package/dist/client/assets/{orgs-BlhaM_QR.js → orgs-BjhvjtBn.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-8CrhZnSd.js → page-seo-form-LlbkmsrH.js} +1 -1
  136. package/dist/client/assets/{popover-BZEJPBaN.js → popover-k9Q2U8MP.js} +1 -1
  137. package/dist/client/assets/{post-editor-DXF_bdFs.js → post-editor-CdIOS9Pq.js} +1 -1
  138. package/dist/client/assets/{primitives-DefLuCWp.js → primitives-BLv1hHA7.js} +1 -1
  139. package/dist/client/assets/{profile-ixoNCK51.js → profile-CZcbiHZH.js} +1 -1
  140. package/dist/client/assets/{project-app-view-BmDjcK09.js → project-app-view-C3T5V3cO.js} +1 -1
  141. package/dist/client/assets/record-editor-DwWObGXS.js +1 -0
  142. package/dist/client/assets/{redirect-editor-DOZ_6ItM.js → redirect-editor-Cbkccd6C.js} +1 -1
  143. package/dist/client/assets/registry-BINw5C1A.js +2 -0
  144. package/dist/client/assets/{registry-layout-CZnAV2GE.js → registry-layout-ir9IA911.js} +1 -1
  145. package/dist/client/assets/{reports-BskvcwLH.js → reports-eHZgj0t3.js} +1 -1
  146. package/dist/client/assets/{require-capability-Byjk0WDJ.js → require-capability-Cw87zgq2.js} +1 -1
  147. package/dist/client/assets/{required-auth-layout-BuUCLduS.js → required-auth-layout-DWSFcPaB.js} +1 -1
  148. package/dist/client/assets/{reset-password-Hn69qiVu.js → reset-password-_ZheVpnD.js} +1 -1
  149. package/dist/client/assets/{roles-DPU4GH76.js → roles-G8zZMQV2.js} +1 -1
  150. package/dist/client/assets/{search-input-F06b4Ka7.js → search-input-Duqb8J7K.js} +1 -1
  151. package/dist/client/assets/{secrets-DtooYsRz.js → secrets-Cox7mlSS.js} +1 -1
  152. package/dist/client/assets/{sections-editor-DHi-y1Qr.js → sections-editor-BKACmRBp.js} +1 -1
  153. package/dist/client/assets/{select-fEJ2CWnh.js → select-CZBrxnZP.js} +1 -1
  154. package/dist/client/assets/{select-model-CSZcccgl.js → select-model-Bx_B88dX.js} +1 -1
  155. package/dist/client/assets/{self-tool-result-BoRiwr9O.js → self-tool-result-TKX8PVRX.js} +1 -1
  156. package/dist/client/assets/{seo-editor-C0yrgVaA.js → seo-editor-NeW6LrgW.js} +1 -1
  157. package/dist/client/assets/{settings-layout-CkCx5djT.js → settings-layout-CuEgRfLl.js} +1 -1
  158. package/dist/client/assets/{shell-controls-CvuXlA7S.js → shell-controls-BnGACb2W.js} +1 -1
  159. package/dist/client/assets/{shell-layout-D2WGSk9d.js → shell-layout-DiQgbo88.js} +1 -1
  160. package/dist/client/assets/{spinner-DRW7bcot.js → spinner-Dc2wGodB.js} +1 -1
  161. package/dist/client/assets/{sso-C9S6ArZ5.js → sso-L91u7aIt.js} +1 -1
  162. package/dist/client/assets/{store-DUIqjsmW.js → store-Dw0jnViH.js} +1 -1
  163. package/dist/client/assets/store-registry-xH_8cb-l.js +2 -0
  164. package/dist/client/assets/{switch-9lR-M49q.js → switch-cFSs7XoW.js} +1 -1
  165. package/dist/client/assets/{synced-repos-DCY70HWU.js → synced-repos-C0wLX6aH.js} +1 -1
  166. package/dist/client/assets/{tab-id-DOlOt_oN.js → tab-id-C6YUqvRq.js} +1 -1
  167. package/dist/client/assets/{table-55wy8ES_.js → table-BDqmn3dR.js} +1 -1
  168. package/dist/client/assets/{tabs-B_f6B2ih.js → tabs-DXuBW9wa.js} +1 -1
  169. package/dist/client/assets/{task-key-DC0DmXL_.js → task-key-C5WsmOV8.js} +1 -1
  170. package/dist/client/assets/{tasks-C1jd4mF0.js → tasks-GWYtJ4Df.js} +1 -1
  171. package/dist/client/assets/{textarea-CioreWQ5.js → textarea-dPhCEXKr.js} +1 -1
  172. package/dist/client/assets/{toggle-group-CKR4opVv.js → toggle-group-DMRSkixl.js} +1 -1
  173. package/dist/client/assets/{toolbar-DxhudO7Y.js → toolbar-DatHEDdN.js} +1 -1
  174. package/dist/client/assets/{track-5IMkFYjp.js → track-CziUhU91.js} +1 -1
  175. package/dist/client/assets/{types-LSAqkaao.js → types-DNCJwL4t.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-C1myPe1T.js → use-ai-providers-BZ3Rr2E-.js} +1 -1
  177. package/dist/client/assets/{use-api-keys-BLhCxSau.js → use-api-keys-r3Wthsr0.js} +1 -1
  178. package/dist/client/assets/{use-automations-CB10hjhp.js → use-automations-CXawOzXl.js} +1 -1
  179. package/dist/client/assets/{use-autosave-BxOegg1k.js → use-autosave-D0cOZ97s.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-jMDHnmqb.js → use-clock-tick-DHR8fR-3.js} +1 -1
  181. package/dist/client/assets/{use-commerce-diagnostic-CzYB3N6a.js → use-commerce-diagnostic-Eb4IUPoq.js} +1 -1
  182. package/dist/client/assets/{use-connection-DT2B_DYi.js → use-connection-BXWPlJBx.js} +1 -1
  183. package/dist/client/assets/{use-copy-D3XerJdc.js → use-copy-DN7yEEj_.js} +1 -1
  184. package/dist/client/assets/{use-create-virtual-mcp-DKZ39HDE.js → use-create-virtual-mcp-L6nBl4-w.js} +1 -1
  185. package/dist/client/assets/{use-debounced-autosave-DTkDy42k.js → use-debounced-autosave-BW5BR0e-.js} +1 -1
  186. package/dist/client/assets/{use-debounced-value-DbRRK9TT.js → use-debounced-value-wubVjvto.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-G33cy0ys.js → use-decopilot-events-85uKVxiJ.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-B7i8EHY-.js → use-delete-connection-_KV84ITu.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-EilNlemK.js → use-deployment-admin-CzweoLQP.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-BPtRUpqF.js → use-file-configs-B0lETjBj.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-QWIMbpAi.js → use-infinite-scroll-CFU5iMXa.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-d9x5nN9k.js → use-join-requests-BPkJuyIJ.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-CluZ1kcE.js → use-mcp-client-C7DoCN8S.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-Bn-w9dls.js → use-mcp-tools-krQNfneB.js} +1 -1
  195. package/dist/client/assets/{use-members-Bsc6dQLG.js → use-members-BKlO0dvu.js} +1 -1
  196. package/dist/client/assets/{use-navigate-to-agent-NiTIdPbN.js → use-navigate-to-agent-mhMqplTl.js} +1 -1
  197. package/dist/client/assets/{use-org-auth-client-Cu0_xvCB.js → use-org-auth-client-BnzVw0OX.js} +1 -1
  198. package/dist/client/assets/{use-org-repo-syncs-DNte33T4.js → use-org-repo-syncs-DOv8ph3D.js} +1 -1
  199. package/dist/client/assets/{use-org-sso-Bf2lWMgv.js → use-org-sso-Llil0EAX.js} +1 -1
  200. package/dist/client/assets/{use-organization-roles-BtYEcikp.js → use-organization-roles-DR38nLFO.js} +1 -1
  201. package/dist/client/assets/{use-organization-settings-h-vNu5dF.js → use-organization-settings-D0Kz-YEB.js} +1 -1
  202. package/dist/client/assets/{use-registry-connections-CpTGVE3o.js → use-registry-connections-DL69X8pZ.js} +1 -1
  203. package/dist/client/assets/{use-secrets-Djj5tnEX.js → use-secrets-ddoBQmdq.js} +1 -1
  204. package/dist/client/assets/{use-section-preview-base-DwW1Ebe1.js → use-section-preview-base-DGGZVHGT.js} +1 -1
  205. package/dist/client/assets/{use-status-sounds-Bfvpj4xw.js → use-status-sounds-BcGbFKp2.js} +1 -1
  206. package/dist/client/assets/{use-tags-Bcb85fVL.js → use-tags-C_oi6adA.js} +1 -1
  207. package/dist/client/assets/{use-view-mode-CHryhyWZ.js → use-view-mode-CQ7C45Rq.js} +1 -1
  208. package/dist/client/assets/{use-virtual-mcp-DMt0VXr_.js → use-virtual-mcp-DgRlnk4E.js} +1 -1
  209. package/dist/client/assets/useInfiniteQuery-BNDjieF7.js +1 -0
  210. package/dist/client/assets/useSuspenseInfiniteQuery-CPbq2GSv.js +1 -0
  211. package/dist/client/assets/{users-BK6ODa0L.js → users-3XZqH4os.js} +1 -1
  212. package/dist/client/assets/{variant-calendar-D8gSD-Zc.js → variant-calendar-3TFN0yrj.js} +1 -1
  213. package/dist/client/assets/{view-mode-toggle-k-CL6fP4.js → view-mode-toggle-BxPtdsgT.js} +1 -1
  214. package/dist/client/index.html +1 -1
  215. package/dist/server/cli.js +1 -1
  216. package/dist/server/server.js +1 -1
  217. package/package.json +1 -1
  218. package/dist/client/assets/record-editor-SauBdytI.js +0 -1
  219. package/dist/client/assets/registry-DNELIUVJ.js +0 -2
  220. package/dist/client/assets/store-registry-CCLV9EGA.js +0 -2
  221. package/dist/client/assets/useInfiniteQuery-gLOjDPyq.js +0 -1
  222. package/dist/client/assets/useSuspenseInfiniteQuery-EB_E_bJc.js +0 -1
@@ -50,7 +50,7 @@
50
50
  <meta name="twitter:description" content="Hire specialized agents, give them access to your tools, and let them deliver real projects — with planning, verification, and observability built in." />
51
51
  <meta name="twitter:image" content="/og-image.png" />
52
52
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
53
- <script type="module" crossorigin src="/assets/index-CMALBC-v.js"></script>
53
+ <script type="module" crossorigin src="/assets/index-pn6its_f.js"></script>
54
54
  <link rel="stylesheet" crossorigin href="/assets/index-DZ9B9lIh.css">
55
55
  </head>
56
56
  <body>
@@ -1396,7 +1396,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var hi1=L(()=>{If()});f
1396
1396
  `.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await eb`
1397
1397
  DELETE FROM kysely_migration WHERE name = ${X}
1398
1398
  `.execute($)}}async function Kr1($){await _t6($),await vt6($);let Z=new Gr1({db:$,provider:{getMigrations:()=>Promise.resolve(ri0)}}),{error:X,results:Q}=await Z.migrateToLatest(),Y=0;if(Q?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),X)throw console.error("Failed to migrate"),console.error(X),X;return Y}async function xt6($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Ll0();let G=X??K6(),J=async()=>{if(!Z&&!X)await uB(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await Kr1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function ft6(){let $=K6(),Z=new Gr1({db:$.db,provider:{getMigrations:()=>Promise.resolve(ri0)}}),{error:X,results:Q}=await Z.migrateDown();if(Q?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),X)throw console.error("Failed to rollback migration"),console.error(X),X}var Hr1=L(()=>{Yr1();wl0();YX()});async function uZ0($){let Z={...process.env},X=C80($,Z);console.log(jw1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?Lp1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (t90(),p90)),{outputs:G,services:J}=await Y({home:X.settings.dataDir,externalDatabaseUrl:X.externalDatabaseUrl,externalNatsUrl:X.externalNatsUrl});if(!X.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (wl0(),Dp1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (YX(),xn1)),{migrateToLatest:F}=await Promise.resolve().then(() => (Hr1(),Wr1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,skipBetterAuth:!0})}let K={...X.settings,betterAuthSecret:Q,databaseUrl:G.databaseUrl,natsUrls:G.natsUrls,...G.s3?{s3Endpoint:G.s3.endpoint,s3Bucket:G.s3.bucket,s3AccessKeyId:G.s3.accessKeyId,s3SecretAccessKey:G.s3.secretAccessKey,s3ForcePathStyle:G.s3.forcePathStyle}:{},...G.natsTunnel?{natsPublicUrl:G.natsTunnel.publicUrl,natsAccountJwt:G.natsTunnel.accountJwt,natsAccountSigningKey:G.natsTunnel.accountSigningKey,natsOperatorJwt:G.natsTunnel.operatorJwt,natsTunnelPublicEnabled:!0,natsCredsPath:G.natsTunnel.credsPath}:{}};return ui1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var ai0=L(()=>{If();wp1();_8()});var Ur1={};N0(Ur1,{updateService:()=>TE,subscribeCliState:()=>$n0,setTuiConsoleIntercepted:()=>cZ0,setServerUrl:()=>mi,setMigrationsDone:()=>di,setDevMode:()=>gt6,resetCliStateForTests:()=>bt6,isTuiConsoleIntercepted:()=>lZ0,getCliState:()=>ei0,addLogEntry:()=>iB});function Fr1(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function bt6(){nQ=Fr1()}function yt6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function li(){for(let $ of si0)$()}function ei0(){return nQ}function $n0($){return si0.add($),()=>si0.delete($)}function TE($){nQ={...nQ,services:nQ.services.map((Z)=>Z.name===$.name?$:Z)},li()}function di(){nQ={...nQ,migrationsStatus:"done"},li()}function mi($){nQ={...nQ,serverUrl:$},li()}function iB($){let Z=[...nQ.logs,$];nQ={...nQ,logs:Z.length>500?Z.slice(-500):Z},li()}function gt6(){nQ={...nQ,services:[...yt6(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},li()}function cZ0($){Nr1=$}function lZ0(){return Nr1}var nQ,si0,Nr1=!1;var RE=L(()=>{nQ=Fr1();si0=new Set});import{createServer as Br1}from"net";function ht6($){return new Promise((Z)=>{let X=Br1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function ii($){if(await ht6($))return $;let Z=await new Promise((X,Q)=>{let Y=Br1();Y.once("error",Q),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>X(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var Zn0=()=>{};function ni($){return $.replace(/\x1b\[[0-9;]*m/g,"")}var Xn0={};N0(Xn0,{startDevServer:()=>ct6});import{join as ut6}from"path";function Or1($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
1399
- `);Q=G.pop()??"";for(let J of G){let K=ni(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;iB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=ni(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)iB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function ct6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await ii(Number(Y)+1):await ii(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await uZ0({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)TE({name:w.name,status:"ready",port:w.port});di();let F=ut6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Or1(U.stdout),Or1(U.stderr);mi(G),TE({name:"Vite",status:"ready",port:Number(Y)}),TE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (t90(),p90));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var Qn0=L(()=>{ai0();RE();Zn0()});var dZ0;var Yn0=L(()=>{dZ0={name:"decocms",version:"4.253.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as dt6,Text as Lr1}from"ink";import{jsx as mt6,jsxs as wr1}from"react/jsx-runtime";function Dr1({version:$}){return wr1(dt6,{flexDirection:"column",marginTop:1,children:[DZ0.map((Z,X)=>mt6(Lr1,{color:EZ0[X],children:Z},X)),wr1(Lr1,{dimColor:!0,children:[" v",$]})]})}var Er1=L(()=>{Ci()});import{Box as IE,Text as nB}from"ink";import{Spinner as it6}from"@inkjs/ui";import{jsx as eY,jsxs as $y}from"react/jsx-runtime";function jr1({status:$}){if($==="pending")return eY(it6,{label:""});return eY(nB,{color:"green",children:"\u2713"})}function nt6($){return`${$.name}: ${$.port||"...."}`}function zr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return $y(IE,{flexDirection:"column",paddingBottom:1,children:[eY(Dr1,{version:dZ0.version}),eY(IE,{marginBottom:1,children:eY(nB,{dimColor:!0,children:"\u2500".repeat(80)})}),eY(IE,{children:$y(nB,{dimColor:!0,children:["Home: ",X]})}),$y(IE,{gap:2,children:[$.map((Y)=>$y(IE,{gap:1,children:[eY(nB,{children:nt6(Y)}),eY(jr1,{status:Y.status})]},Y.name)),$y(IE,{gap:1,children:[eY(nB,{children:"Migrations"}),eY(jr1,{status:Z})]})]}),eY(IE,{children:Q?$y(nB,{children:["Open in browser: ",eY(nB,{color:"cyan",children:Q})]}):eY(nB,{dimColor:!0,children:"Starting..."})})]})}var Pr1=L(()=>{Yn0();Er1()});import{Box as pt6,Text as pi}from"ink";import{jsx as Gn0,jsxs as Jn0}from"react/jsx-runtime";function tt6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Ar1({logs:$}){return Gn0(pt6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return Gn0(pi,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Jn0(pi,{children:[Jn0(pi,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Gn0(pi,{color:tt6(Z.status),children:Z.status}),Jn0(pi,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Tr1=()=>{};var Kn0={};N0(Kn0,{App:()=>at6});import{Box as ot6}from"ink";import{useSyncExternalStore as rt6}from"react";import{jsx as Rr1,jsxs as st6}from"react/jsx-runtime";function at6({home:$}){let Z=rt6($n0,ei0);return st6(ot6,{flexDirection:"column",children:[Rr1(zr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Rr1(Ar1,{logs:Z.logs})]})}var Wn0=L(()=>{Pr1();Tr1();RE()});var gJ="thread-gate",$N="decopilot-hosted-harness",ZN="decopilot-hosted-harness-sandboxed",N3="automations",pB="background-tools",qE="task-board-github-reads",ME="jira-push";var Ir1="7";function qr1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Ir1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Mr1=()=>{};function et6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Hn0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Vr1(){let $=et6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Hn0($,"--cpu-prof-dir")??process.cwd(),name:Hn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Hn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function kr1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=jE();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),mZ0=setInterval(()=>void Z().catch(()=>{}),$),mZ0.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(mZ0)clearInterval(mZ0)}}var mZ0;var Sr1=()=>{};import*as $o6 from"bun:jsc";function Cr1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Zo6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=Xo6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Zo6,Xo6;var _r1=L(()=>{({startSamplingProfiler:Zo6,samplingProfilerStackTraces:Xo6}=$o6)});function vr1(){Vr1();let $=[kr1(),qn1(),Cr1()];return()=>{for(let Z of $)Z()}}var xr1=L(()=>{Gl0();Sr1();_r1()});var VE=v((fr1)=>{Object.defineProperty(fr1,"__esModule",{value:!0});fr1.RepublishHeaders=fr1.DirectMsgHeaders=fr1.JsHeaders=fr1.AdvisoryKind=void 0;fr1.isOrderedPushConsumerOptions=Qo6;fr1.isPullConsumer=Yo6;fr1.isPushConsumer=Go6;fr1.isBoundPushConsumerOptions=Jo6;function Qo6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Yo6($){return $.isPullConsumer()}function Go6($){return $.isPushConsumer()}function Jo6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}fr1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};fr1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};fr1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};fr1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $G=v((yr1)=>{Object.defineProperty(yr1,"__esModule",{value:!0});yr1.TD=yr1.TE=yr1.Empty=void 0;yr1.encode=Lo6;yr1.decode=wo6;yr1.Empty=new Uint8Array(0);yr1.TE=new TextEncoder;yr1.TD=new TextDecoder;function Oo6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function Lo6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(yr1.TE.encode($[X]));if(Z.length===0)return yr1.Empty;if(Z.length===1)return Z[0];return Oo6(...Z)}function wo6($){if(!$||$.length===0)return"";return yr1.TD.decode($)}});var ZG=v((ur1)=>{Object.defineProperty(ur1,"__esModule",{value:!0});ur1.errors=ur1.PermissionViolationError=ur1.NoRespondersError=ur1.TimeoutError=ur1.RequestError=ur1.ProtocolError=ur1.ConnectionError=ur1.DrainingConnectionError=ur1.ClosedConnectionError=ur1.AuthorizationError=ur1.UserAuthenticationExpiredError=ur1.InvalidOperationError=ur1.InvalidArgumentError=ur1.InvalidSubjectError=void 0;class Nn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}ur1.InvalidSubjectError=Nn0;class iZ0 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new iZ0(`${$} ${Z}`,X)}}ur1.InvalidArgumentError=iZ0;class Un0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}ur1.InvalidOperationError=Un0;class nZ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new nZ0($);return null}}ur1.UserAuthenticationExpiredError=nZ0;class pZ0 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new pZ0($);return null}}ur1.AuthorizationError=pZ0;class Bn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}ur1.ClosedConnectionError=Bn0;class On0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}ur1.DrainingConnectionError=On0;class Ln0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}ur1.ConnectionError=Ln0;class wn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}ur1.ProtocolError=wn0;class Dn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof tZ0}}ur1.RequestError=Dn0;class En0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}ur1.TimeoutError=En0;class tZ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}ur1.NoRespondersError=tZ0;class oZ0 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new oZ0($,X,Q,Y)}}ur1.PermissionViolationError=oZ0;ur1.errors={AuthorizationError:pZ0,ClosedConnectionError:Bn0,ConnectionError:Ln0,DrainingConnectionError:On0,InvalidArgumentError:iZ0,InvalidOperationError:Un0,InvalidSubjectError:Nn0,NoRespondersError:tZ0,PermissionViolationError:oZ0,ProtocolError:wn0,RequestError:Dn0,TimeoutError:En0,UserAuthenticationExpiredError:nZ0}});var hJ=v((ir1)=>{Object.defineProperty(ir1,"__esModule",{value:!0});ir1.SimpleMutex=ir1.Perf=void 0;ir1.extend=vo6;ir1.render=xo6;ir1.timeout=fo6;ir1.delay=bo6;ir1.deadline=yo6;ir1.deferred=zn0;ir1.debugDeferred=go6;ir1.shuffle=ho6;ir1.collect=uo6;ir1.jitter=mr1;ir1.backoff=co6;ir1.nanos=lo6;ir1.millis=do6;ir1.randomToken=no6;var _o6=$G(),jn0=ZG();function vo6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function xo6($){return _o6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function fo6($,Z=!0){let X=Z?new jn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new jn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function bo6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function yo6($,Z=1000){let X=zn0(),Q=setTimeout(()=>{X.reject(new jn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function zn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function go6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function ho6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function uo6($){let Z=[];for await(let X of $)Z.push(X);return Z}class lr1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}ir1.Perf=lr1;class dr1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=zn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}ir1.SimpleMutex=dr1;function mr1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function co6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return mr1(X>Z?$[Z]:$[X])}}}function lo6($){return $*1e6}function do6($){return Math.floor($/1e6)}var mo6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",XN=new Uint8Array(62);for(let $=0;$<62;$++)XN[$]=mo6.charCodeAt($);var io6=218340105584896;function no6(){let $=Math.floor(Math.random()*io6),Z=$%62,X=XN[Z];$=($-Z)/62,Z=$%62;let Q=XN[Z];$=($-Z)/62,Z=$%62;let Y=XN[Z];$=($-Z)/62,Z=$%62;let G=XN[Z];$=($-Z)/62,Z=$%62;let J=XN[Z];$=($-Z)/62,Z=$%62;let K=XN[Z];$=($-Z)/62,Z=$%62;let W=XN[Z];$=($-Z)/62;let H=XN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var er1=v((ar1)=>{Object.defineProperty(ar1,"__esModule",{value:!0});ar1.nuid=ar1.NuidImpl=void 0;var Wr6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",tB=62,aZ0=12,or1=10,pr1=33,Hr6=333,tr1=aZ0+or1,An0=new Uint8Array(tB);for(let $=0;$<tB;$++)An0[$]=Wr6.charCodeAt($);var rZ0=4294967296,rr1=BigInt(tB)**BigInt(or1),ti=Number(rr1/(1n<<32n)),Pn0=Number(rr1%(1n<<32n));function Fr6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Nr6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Fr6($)}class Tn0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(tr1),this.cbuf=new Uint8Array(aZ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(ti+1)),this.seqLo=Math.floor(Math.random()*rZ0);while($++<8&&this.seqHi===ti&&this.seqLo>=Pn0);if(this.seqHi===ti&&this.seqLo>=Pn0)this.seqLo=0;this.inc=Math.random()*(Hr6-pr1)+pr1|0}setPre(){Nr6(this.cbuf);for(let $=0;$<aZ0;$++)this.buf[$]=An0[this.cbuf[$]%tB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=tr1-1;X>=aZ0;X--){let Q=Math.floor($/tB),G=($-Q*tB)*rZ0+Z,J=Math.floor(G/tB),K=G-J*tB;this.buf[X]=An0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=rZ0)this.seqLo-=rZ0,this.seqHi+=1;if(this.seqHi>ti||this.seqHi===ti&&this.seqLo>=Pn0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}ar1.NuidImpl=Tn0;ar1.nuid=new Tn0});var Qa1=v((Za1)=>{Object.defineProperty(Za1,"__esModule",{value:!0});Za1.nuid=Za1.Nuid=void 0;var $a1=er1();Za1.Nuid=$a1.NuidImpl;Za1.nuid=$a1.nuid});var eZ0=v((sZ0)=>{Object.defineProperty(sZ0,"__esModule",{value:!0});sZ0.nuid=sZ0.Nuid=void 0;var Ya1=Qa1();Object.defineProperty(sZ0,"Nuid",{enumerable:!0,get:function(){return Ya1.Nuid}});Object.defineProperty(sZ0,"nuid",{enumerable:!0,get:function(){return Ya1.nuid}})});var oB=v((Ga1)=>{Object.defineProperty(Ga1,"__esModule",{value:!0});Ga1.DEFAULT_HOST=Ga1.DEFAULT_PORT=Ga1.Match=void 0;Ga1.syncIterator=Dr6;Ga1.createInbox=Er6;var Lr6=eZ0(),wr6=ZG();Ga1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Dr6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function Er6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw wr6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Lr6.nuid.next()}`}Ga1.DEFAULT_PORT=4222;Ga1.DEFAULT_HOST="127.0.0.1"});var oi=v((Ha1)=>{Object.defineProperty(Ha1,"__esModule",{value:!0});Ha1.DataBuffer=void 0;var Ka1=$G();class Wa1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return Ka1.TE.encode($)}static toAscii($){return Ka1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Ha1.DataBuffer=Wa1});var kE=v((Ua1)=>{Object.defineProperty(Ua1,"__esModule",{value:!0});Ua1.LF=Ua1.CR=Ua1.CRLF=Ua1.CR_LF_LEN=Ua1.CR_LF=void 0;Ua1.setTransportFactory=qr6;Ua1.defaultPort=Mr6;Ua1.getUrlParseFn=Vr6;Ua1.newTransport=kr6;Ua1.getResolveFn=Sr6;Ua1.protoLen=Na1;Ua1.extractProtocolMessage=Cr6;var Tr6=$G(),Rr6=oB(),Ir6=oi(),XG;function qr6($){XG=$}function Mr6(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:Rr6.DEFAULT_PORT}function Vr6(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function kr6(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function Sr6(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Ua1.CR_LF=`\r
1399
+ `);Q=G.pop()??"";for(let J of G){let K=ni(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;iB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=ni(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)iB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function ct6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await ii(Number(Y)+1):await ii(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await uZ0({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)TE({name:w.name,status:"ready",port:w.port});di();let F=ut6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Or1(U.stdout),Or1(U.stderr);mi(G),TE({name:"Vite",status:"ready",port:Number(Y)}),TE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (t90(),p90));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var Qn0=L(()=>{ai0();RE();Zn0()});var dZ0;var Yn0=L(()=>{dZ0={name:"decocms",version:"4.253.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as dt6,Text as Lr1}from"ink";import{jsx as mt6,jsxs as wr1}from"react/jsx-runtime";function Dr1({version:$}){return wr1(dt6,{flexDirection:"column",marginTop:1,children:[DZ0.map((Z,X)=>mt6(Lr1,{color:EZ0[X],children:Z},X)),wr1(Lr1,{dimColor:!0,children:[" v",$]})]})}var Er1=L(()=>{Ci()});import{Box as IE,Text as nB}from"ink";import{Spinner as it6}from"@inkjs/ui";import{jsx as eY,jsxs as $y}from"react/jsx-runtime";function jr1({status:$}){if($==="pending")return eY(it6,{label:""});return eY(nB,{color:"green",children:"\u2713"})}function nt6($){return`${$.name}: ${$.port||"...."}`}function zr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return $y(IE,{flexDirection:"column",paddingBottom:1,children:[eY(Dr1,{version:dZ0.version}),eY(IE,{marginBottom:1,children:eY(nB,{dimColor:!0,children:"\u2500".repeat(80)})}),eY(IE,{children:$y(nB,{dimColor:!0,children:["Home: ",X]})}),$y(IE,{gap:2,children:[$.map((Y)=>$y(IE,{gap:1,children:[eY(nB,{children:nt6(Y)}),eY(jr1,{status:Y.status})]},Y.name)),$y(IE,{gap:1,children:[eY(nB,{children:"Migrations"}),eY(jr1,{status:Z})]})]}),eY(IE,{children:Q?$y(nB,{children:["Open in browser: ",eY(nB,{color:"cyan",children:Q})]}):eY(nB,{dimColor:!0,children:"Starting..."})})]})}var Pr1=L(()=>{Yn0();Er1()});import{Box as pt6,Text as pi}from"ink";import{jsx as Gn0,jsxs as Jn0}from"react/jsx-runtime";function tt6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Ar1({logs:$}){return Gn0(pt6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return Gn0(pi,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Jn0(pi,{children:[Jn0(pi,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Gn0(pi,{color:tt6(Z.status),children:Z.status}),Jn0(pi,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Tr1=()=>{};var Kn0={};N0(Kn0,{App:()=>at6});import{Box as ot6}from"ink";import{useSyncExternalStore as rt6}from"react";import{jsx as Rr1,jsxs as st6}from"react/jsx-runtime";function at6({home:$}){let Z=rt6($n0,ei0);return st6(ot6,{flexDirection:"column",children:[Rr1(zr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Rr1(Ar1,{logs:Z.logs})]})}var Wn0=L(()=>{Pr1();Tr1();RE()});var gJ="thread-gate",$N="decopilot-hosted-harness",ZN="decopilot-hosted-harness-sandboxed",N3="automations",pB="background-tools",qE="task-board-github-reads",ME="jira-push";var Ir1="7";function qr1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Ir1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Mr1=()=>{};function et6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Hn0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Vr1(){let $=et6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Hn0($,"--cpu-prof-dir")??process.cwd(),name:Hn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Hn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function kr1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=jE();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),mZ0=setInterval(()=>void Z().catch(()=>{}),$),mZ0.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(mZ0)clearInterval(mZ0)}}var mZ0;var Sr1=()=>{};import*as $o6 from"bun:jsc";function Cr1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Zo6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=Xo6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var Zo6,Xo6;var _r1=L(()=>{({startSamplingProfiler:Zo6,samplingProfilerStackTraces:Xo6}=$o6)});function vr1(){Vr1();let $=[kr1(),qn1(),Cr1()];return()=>{for(let Z of $)Z()}}var xr1=L(()=>{Gl0();Sr1();_r1()});var VE=v((fr1)=>{Object.defineProperty(fr1,"__esModule",{value:!0});fr1.RepublishHeaders=fr1.DirectMsgHeaders=fr1.JsHeaders=fr1.AdvisoryKind=void 0;fr1.isOrderedPushConsumerOptions=Qo6;fr1.isPullConsumer=Yo6;fr1.isPushConsumer=Go6;fr1.isBoundPushConsumerOptions=Jo6;function Qo6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Yo6($){return $.isPullConsumer()}function Go6($){return $.isPushConsumer()}function Jo6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}fr1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};fr1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};fr1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};fr1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $G=v((yr1)=>{Object.defineProperty(yr1,"__esModule",{value:!0});yr1.TD=yr1.TE=yr1.Empty=void 0;yr1.encode=Lo6;yr1.decode=wo6;yr1.Empty=new Uint8Array(0);yr1.TE=new TextEncoder;yr1.TD=new TextDecoder;function Oo6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function Lo6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(yr1.TE.encode($[X]));if(Z.length===0)return yr1.Empty;if(Z.length===1)return Z[0];return Oo6(...Z)}function wo6($){if(!$||$.length===0)return"";return yr1.TD.decode($)}});var ZG=v((ur1)=>{Object.defineProperty(ur1,"__esModule",{value:!0});ur1.errors=ur1.PermissionViolationError=ur1.NoRespondersError=ur1.TimeoutError=ur1.RequestError=ur1.ProtocolError=ur1.ConnectionError=ur1.DrainingConnectionError=ur1.ClosedConnectionError=ur1.AuthorizationError=ur1.UserAuthenticationExpiredError=ur1.InvalidOperationError=ur1.InvalidArgumentError=ur1.InvalidSubjectError=void 0;class Nn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}ur1.InvalidSubjectError=Nn0;class iZ0 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new iZ0(`${$} ${Z}`,X)}}ur1.InvalidArgumentError=iZ0;class Un0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}ur1.InvalidOperationError=Un0;class nZ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new nZ0($);return null}}ur1.UserAuthenticationExpiredError=nZ0;class pZ0 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new pZ0($);return null}}ur1.AuthorizationError=pZ0;class Bn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}ur1.ClosedConnectionError=Bn0;class On0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}ur1.DrainingConnectionError=On0;class Ln0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}ur1.ConnectionError=Ln0;class wn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}ur1.ProtocolError=wn0;class Dn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof tZ0}}ur1.RequestError=Dn0;class En0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}ur1.TimeoutError=En0;class tZ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}ur1.NoRespondersError=tZ0;class oZ0 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new oZ0($,X,Q,Y)}}ur1.PermissionViolationError=oZ0;ur1.errors={AuthorizationError:pZ0,ClosedConnectionError:Bn0,ConnectionError:Ln0,DrainingConnectionError:On0,InvalidArgumentError:iZ0,InvalidOperationError:Un0,InvalidSubjectError:Nn0,NoRespondersError:tZ0,PermissionViolationError:oZ0,ProtocolError:wn0,RequestError:Dn0,TimeoutError:En0,UserAuthenticationExpiredError:nZ0}});var hJ=v((ir1)=>{Object.defineProperty(ir1,"__esModule",{value:!0});ir1.SimpleMutex=ir1.Perf=void 0;ir1.extend=vo6;ir1.render=xo6;ir1.timeout=fo6;ir1.delay=bo6;ir1.deadline=yo6;ir1.deferred=zn0;ir1.debugDeferred=go6;ir1.shuffle=ho6;ir1.collect=uo6;ir1.jitter=mr1;ir1.backoff=co6;ir1.nanos=lo6;ir1.millis=do6;ir1.randomToken=no6;var _o6=$G(),jn0=ZG();function vo6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function xo6($){return _o6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function fo6($,Z=!0){let X=Z?new jn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new jn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function bo6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function yo6($,Z=1000){let X=zn0(),Q=setTimeout(()=>{X.reject(new jn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function zn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function go6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function ho6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function uo6($){let Z=[];for await(let X of $)Z.push(X);return Z}class lr1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}ir1.Perf=lr1;class dr1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=zn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}ir1.SimpleMutex=dr1;function mr1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function co6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return mr1(X>Z?$[Z]:$[X])}}}function lo6($){return $*1e6}function do6($){return Math.floor($/1e6)}var mo6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",XN=new Uint8Array(62);for(let $=0;$<62;$++)XN[$]=mo6.charCodeAt($);var io6=218340105584896;function no6(){let $=Math.floor(Math.random()*io6),Z=$%62,X=XN[Z];$=($-Z)/62,Z=$%62;let Q=XN[Z];$=($-Z)/62,Z=$%62;let Y=XN[Z];$=($-Z)/62,Z=$%62;let G=XN[Z];$=($-Z)/62,Z=$%62;let J=XN[Z];$=($-Z)/62,Z=$%62;let K=XN[Z];$=($-Z)/62,Z=$%62;let W=XN[Z];$=($-Z)/62;let H=XN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var er1=v((ar1)=>{Object.defineProperty(ar1,"__esModule",{value:!0});ar1.nuid=ar1.NuidImpl=void 0;var Wr6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",tB=62,aZ0=12,or1=10,pr1=33,Hr6=333,tr1=aZ0+or1,An0=new Uint8Array(tB);for(let $=0;$<tB;$++)An0[$]=Wr6.charCodeAt($);var rZ0=4294967296,rr1=BigInt(tB)**BigInt(or1),ti=Number(rr1/(1n<<32n)),Pn0=Number(rr1%(1n<<32n));function Fr6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Nr6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Fr6($)}class Tn0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(tr1),this.cbuf=new Uint8Array(aZ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(ti+1)),this.seqLo=Math.floor(Math.random()*rZ0);while($++<8&&this.seqHi===ti&&this.seqLo>=Pn0);if(this.seqHi===ti&&this.seqLo>=Pn0)this.seqLo=0;this.inc=Math.random()*(Hr6-pr1)+pr1|0}setPre(){Nr6(this.cbuf);for(let $=0;$<aZ0;$++)this.buf[$]=An0[this.cbuf[$]%tB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=tr1-1;X>=aZ0;X--){let Q=Math.floor($/tB),G=($-Q*tB)*rZ0+Z,J=Math.floor(G/tB),K=G-J*tB;this.buf[X]=An0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=rZ0)this.seqLo-=rZ0,this.seqHi+=1;if(this.seqHi>ti||this.seqHi===ti&&this.seqLo>=Pn0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}ar1.NuidImpl=Tn0;ar1.nuid=new Tn0});var Qa1=v((Za1)=>{Object.defineProperty(Za1,"__esModule",{value:!0});Za1.nuid=Za1.Nuid=void 0;var $a1=er1();Za1.Nuid=$a1.NuidImpl;Za1.nuid=$a1.nuid});var eZ0=v((sZ0)=>{Object.defineProperty(sZ0,"__esModule",{value:!0});sZ0.nuid=sZ0.Nuid=void 0;var Ya1=Qa1();Object.defineProperty(sZ0,"Nuid",{enumerable:!0,get:function(){return Ya1.Nuid}});Object.defineProperty(sZ0,"nuid",{enumerable:!0,get:function(){return Ya1.nuid}})});var oB=v((Ga1)=>{Object.defineProperty(Ga1,"__esModule",{value:!0});Ga1.DEFAULT_HOST=Ga1.DEFAULT_PORT=Ga1.Match=void 0;Ga1.syncIterator=Dr6;Ga1.createInbox=Er6;var Lr6=eZ0(),wr6=ZG();Ga1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Dr6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function Er6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw wr6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Lr6.nuid.next()}`}Ga1.DEFAULT_PORT=4222;Ga1.DEFAULT_HOST="127.0.0.1"});var oi=v((Ha1)=>{Object.defineProperty(Ha1,"__esModule",{value:!0});Ha1.DataBuffer=void 0;var Ka1=$G();class Wa1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return Ka1.TE.encode($)}static toAscii($){return Ka1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Ha1.DataBuffer=Wa1});var kE=v((Ua1)=>{Object.defineProperty(Ua1,"__esModule",{value:!0});Ua1.LF=Ua1.CR=Ua1.CRLF=Ua1.CR_LF_LEN=Ua1.CR_LF=void 0;Ua1.setTransportFactory=qr6;Ua1.defaultPort=Mr6;Ua1.getUrlParseFn=Vr6;Ua1.newTransport=kr6;Ua1.getResolveFn=Sr6;Ua1.protoLen=Na1;Ua1.extractProtocolMessage=Cr6;var Tr6=$G(),Rr6=oB(),Ir6=oi(),XG;function qr6($){XG=$}function Mr6(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:Rr6.DEFAULT_PORT}function Vr6(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function kr6(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function Sr6(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Ua1.CR_LF=`\r
1400
1400
  `;Ua1.CR_LF_LEN=Ua1.CR_LF.length;Ua1.CRLF=Ir6.DataBuffer.fromAscii(Ua1.CR_LF);Ua1.CR=new Uint8Array(Ua1.CRLF)[0];Ua1.LF=new Uint8Array(Ua1.CRLF)[1];function Na1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===Ua1.CR&&$[X]===Ua1.LF)return X+1}return 0}function Cr6($){let Z=Na1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return Tr6.TD.decode(Q)}return""}});var Vn0=v((za1)=>{Object.defineProperty(za1,"__esModule",{value:!0});za1.ipV4=Da1;za1.isIP=lr6;za1.parseIP=Ea1;var ri=4,SE=16,$70=48,wa1=57,Oa1=65,ur6=70,La1=97,cr6=102,Mn0=16777215;function Da1($,Z,X,Q){let Y=new Uint8Array(SE);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,K)=>{Y[K]=J}),Y[12]=$,Y[13]=Z,Y[14]=X,Y[15]=Q,Y}function lr6($){return Ea1($)!==void 0}function Ea1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return ja1($);case":":return dr6($)}return}function ja1($){let Z=new Uint8Array(ri);for(let X=0;X<ri;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=mr6($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return Da1(Z[0],Z[1],Z[2],Z[3])}function dr6($){let Z=new Uint8Array(SE),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<SE){let{n:Y,c:G,ok:J}=ir6($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=SE-ri)return;if(Q+ri>SE)return;let K=ja1($);if(K===void 0)return;Z[Q]=K[12],Z[Q+1]=K[13],Z[Q+2]=K[14],Z[Q+3]=K[15],$="",Q+=ri;break}if(Z[Q]=Y>>8,Z[Q+1]=Y,Q+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(X>=0)return;if(X=Q,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(Q<SE){if(X<0)return;let Y=SE-Q;for(let G=Q-1;G>=X;G--)Z[G+Y]=Z[G];for(let G=X+Y-1;G>=X;G--)Z[G]=0}else if(X>=0)return;return Z}function mr6($){let Z=0,X=0;for(Z=0;Z<$.length&&$70<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=wa1;Z++)if(X=X*10+($.charCodeAt(Z)-$70),X>=Mn0)return{n:Mn0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function ir6($){let Z=0,X=0;for(X=0;X<$.length;X++){if($70<=$.charCodeAt(X)&&$.charCodeAt(X)<=wa1)Z*=16,Z+=$.charCodeAt(X)-$70;else if(La1<=$.charCodeAt(X)&&$.charCodeAt(X)<=cr6)Z*=16,Z+=$.charCodeAt(X)-La1+10;else if(Oa1<=$.charCodeAt(X)&&$.charCodeAt(X)<=ur6)Z*=16,Z+=$.charCodeAt(X)-Oa1+10;else break;if(Z>=Mn0)return{n:0,c:X,ok:!1}}if(X===0)return{n:0,c:X,ok:!1};return{n:Z,c:X,ok:!0}}});var xn0=v((Aa1)=>{Object.defineProperty(Aa1,"__esModule",{value:!0});Aa1.Servers=Aa1.ServerImpl=void 0;Aa1.isIPV4OrHostname=Pa1;Aa1.hostPort=vn0;var kn0=kE(),Sn0=hJ(),Cn0=Vn0(),or6=oB(),rr6=ZG();function Pa1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function _n0($){return!Pa1($)}function ar6($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function vn0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=ar6($),_n0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=_n0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):or6.DEFAULT_PORT,Y=new URL(`${X===80?"https":"http"}://${$}`);Y.port=`${X}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:X}}class Zy{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=vn0($);this.listen=X.listen,this.hostname=X.hostname,this.port=X.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,Cn0.isIP)(this.hostname))return[this];else{let X=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${X.join(",")}`);for(let Q of X){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${_n0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new Zy(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,Sn0.shuffle)(Z);return this.resolves=Z,Z}}Aa1.ServerImpl=Zy;class Z70{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw rr6.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,kn0.getUrlParseFn)(),X=new Map;for(let Y of this.servers)X.set(Y.listen,Y);let Q=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=vn0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new Zy(Y))}if(this.randomize)(0,Sn0.shuffle)(Q);if(this.servers=Q,this.currentServer===void 0||!Q.includes(this.currentServer))this.currentServer=Q[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,Cn0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let X=(0,kn0.getUrlParseFn)();$=X?X($):$;let Q=new Zy($,Z);if((0,Cn0.isIP)(Q.hostname))Q.tlsName=this.tlsName;this.servers.push(Q)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return Z70.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return Z70.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let X=[],Q=[],Y=(0,kn0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Zy(K,!0);G.set(K,W)});let J=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(W);G.delete(H)}),J.reverse(),J.forEach((K)=>{let W=this.servers.splice(K,1);Q=Q.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),X.push(W)}),this.randomize&&X.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,Sn0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}Aa1.Servers=Z70});var X70=v((qa1)=>{Object.defineProperty(qa1,"__esModule",{value:!0});qa1.QueuedIteratorImpl=void 0;var fn0=hJ(),Ra1=ZG();class Ia1{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,fn0.deferred)(),this.yields=[],this.iterClosed=(0,fn0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(X){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new Ra1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new Ra1.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let Q=$[Z];try{Q()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let X=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-X:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,fn0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}qa1.QueuedIteratorImpl=Ia1});var bn0=v((Sa1)=>{Object.defineProperty(Sa1,"__esModule",{value:!0});Sa1.MuxSubscription=void 0;var Za6=oB(),Va1=ZG();class ka1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,Za6.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((X)=>{X.resolver(Z,{})}),!0;if(Z.operation==="publish"){let X=this.all().find((Q)=>{return Q.requestSubject===Z.subject});if(X)return X.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let X=this.getToken(Z);if(X){let Q=this.get(X);if(Q){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new Va1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new Va1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}Sa1.MuxSubscription=ka1});var yn0=v((va1)=>{Object.defineProperty(va1,"__esModule",{value:!0});va1.Heartbeat=void 0;var Xa6=hJ();class _a1{ph;interval;maxOut;timer;pendings;constructor($,Z,X){this.ph=$,this.interval=Z,this.maxOut=X,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,Xa6.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}va1.Heartbeat=_a1});var un0=v((ga1)=>{Object.defineProperty(ga1,"__esModule",{value:!0});ga1.DenoBuffer=ga1.MAX_SIZE=ga1.AssertionError=void 0;ga1.assert=ba1;ga1.concat=ya1;ga1.append=Ya6;ga1.readAll=Ga6;ga1.writeAll=Ja6;var Qa6=$G();class gn0 extends Error{constructor($){super($);this.name="AssertionError"}}ga1.AssertionError=gn0;function ba1($,Z="Assertion failed."){if(!$)throw new gn0(Z)}var fa1=32768;ga1.MAX_SIZE=4294967294;function Q70($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function ya1($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let X=new Uint8Array($.length+Z.length);return X.set($,0),X.set(Z,$.length),X}function Ya6($,Z){return ya1($,Uint8Array.of(Z))}class hn0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){ba1($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=Q70(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(Qa6.TE.encode($))}write($){let Z=this._grow($.byteLength);return Q70($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let X=this._tryGrowByReslice($);if(X>=0)return X;let Q=this.capacity;if($<=Math.floor(Q/2)-Z)Q70(this._buf.subarray(this._off),this._buf);else if(Q+$>ga1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,ga1.MAX_SIZE));Q70(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,ga1.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,X=new Uint8Array(fa1);while(!0){let Q=this.capacity-this.length<fa1,Y=Q?X:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(Q)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}ga1.DenoBuffer=hn0;function Ga6($){let Z=new hn0;return Z.readFrom($),Z.bytes()}function Ja6($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var dn0=v((da1)=>{Object.defineProperty(da1,"__esModule",{value:!0});da1.cc=da1.State=da1.Parser=da1.Kind=void 0;da1.describe=Ba6;var cn0=un0(),ln0=$G();da1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function Ba6($){let Z,X="";switch($.kind){case da1.Kind.MSG:Z="MSG";break;case da1.Kind.OK:Z="OK";break;case da1.Kind.ERR:Z="ERR",X=ln0.TD.decode($.data);break;case da1.Kind.PING:Z="PING";break;case da1.Kind.PONG:Z="PONG";break;case da1.Kind.INFO:Z="INFO",X=ln0.TD.decode($.data)}return`${Z}: ${X}`}function ua1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var ca1=48,Oa6=57,Xy=67108864;class la1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=da1.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let X=$[Z];switch(this.state){case da1.State.OP_START:switch(X){case da1.cc.M:case da1.cc.m:this.state=da1.State.OP_M,this.hdr=-1,this.ma=ua1();break;case da1.cc.H:case da1.cc.h:this.state=da1.State.OP_H,this.hdr=0,this.ma=ua1();break;case da1.cc.P:case da1.cc.p:this.state=da1.State.OP_P;break;case da1.cc.PLUS:this.state=da1.State.OP_PLUS;break;case da1.cc.MINUS:this.state=da1.State.OP_MINUS;break;case da1.cc.I:case da1.cc.i:this.state=da1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_H:switch(X){case da1.cc.M:case da1.cc.m:this.state=da1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_M:switch(X){case da1.cc.S:case da1.cc.s:this.state=da1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_MS:switch(X){case da1.cc.G:case da1.cc.g:this.state=da1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_MSG:switch(X){case da1.cc.SPACE:case da1.cc.TAB:this.state=da1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_MSG_SPC:switch(X){case da1.cc.SPACE:case da1.cc.TAB:continue;default:this.state=da1.State.MSG_ARG,this.as=Z}break;case da1.State.MSG_ARG:switch(X){case da1.cc.CR:this.drop=1;break;case da1.cc.NL:{let Q=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(Q),this.drop=0,this.as=Z+1,this.state=da1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case da1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:da1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=da1.State.MSG_END}else{let Q=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<Q)Q=Y;if(Q>0)this.msgBuf.write($.subarray(Z,Z+Q)),Z=Z+Q-1;else this.msgBuf.writeByte(X)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:da1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=da1.State.MSG_END;break;case da1.State.MSG_END:switch(X){case da1.cc.NL:this.drop=0,this.as=Z+1,this.state=da1.State.OP_START;break;default:continue}break;case da1.State.OP_PLUS:switch(X){case da1.cc.O:case da1.cc.o:this.state=da1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_PLUS_O:switch(X){case da1.cc.K:case da1.cc.k:this.state=da1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_PLUS_OK:switch(X){case da1.cc.NL:this.dispatcher.push({kind:da1.Kind.OK}),this.drop=0,this.state=da1.State.OP_START;break}break;case da1.State.OP_MINUS:switch(X){case da1.cc.E:case da1.cc.e:this.state=da1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_MINUS_E:switch(X){case da1.cc.R:case da1.cc.r:this.state=da1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_MINUS_ER:switch(X){case da1.cc.R:case da1.cc.r:this.state=da1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_MINUS_ERR:switch(X){case da1.cc.SPACE:case da1.cc.TAB:this.state=da1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_MINUS_ERR_SPC:switch(X){case da1.cc.SPACE:case da1.cc.TAB:continue;default:this.state=da1.State.MINUS_ERR_ARG,this.as=Z}break;case da1.State.MINUS_ERR_ARG:switch(X){case da1.cc.CR:this.drop=1;break;case da1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:da1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=da1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case da1.State.OP_P:switch(X){case da1.cc.I:case da1.cc.i:this.state=da1.State.OP_PI;break;case da1.cc.O:case da1.cc.o:this.state=da1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_PO:switch(X){case da1.cc.N:case da1.cc.n:this.state=da1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_PON:switch(X){case da1.cc.G:case da1.cc.g:this.state=da1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_PONG:switch(X){case da1.cc.NL:this.dispatcher.push({kind:da1.Kind.PONG}),this.drop=0,this.state=da1.State.OP_START;break}break;case da1.State.OP_PI:switch(X){case da1.cc.N:case da1.cc.n:this.state=da1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_PIN:switch(X){case da1.cc.G:case da1.cc.g:this.state=da1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_PING:switch(X){case da1.cc.NL:this.dispatcher.push({kind:da1.Kind.PING}),this.drop=0,this.state=da1.State.OP_START;break}break;case da1.State.OP_I:switch(X){case da1.cc.N:case da1.cc.n:this.state=da1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_IN:switch(X){case da1.cc.F:case da1.cc.f:this.state=da1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_INF:switch(X){case da1.cc.O:case da1.cc.o:this.state=da1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_INFO:switch(X){case da1.cc.SPACE:case da1.cc.TAB:this.state=da1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case da1.State.OP_INFO_SPC:switch(X){case da1.cc.SPACE:case da1.cc.TAB:continue;default:this.state=da1.State.INFO_ARG,this.as=Z}break;case da1.State.INFO_ARG:switch(X){case da1.cc.CR:this.drop=1;break;case da1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:da1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=da1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===da1.State.MSG_ARG||this.state===da1.State.MINUS_ERR_ARG||this.state===da1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new cn0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===da1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new cn0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,X=new Uint8Array($+Z);if(X.set(this.ma.subject),this.ma.reply)X.set(this.ma.reply,$);if(this.argBuf=new cn0.DenoBuffer(X),this.ma.subject=X.subarray(0,$),this.ma.reply)this.ma.reply=X.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case da1.cc.SPACE:case da1.cc.TAB:case da1.cc.CR:case da1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],Xy);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],Xy);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${ln0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case da1.cc.SPACE:case da1.cc.TAB:case da1.cc.CR:case da1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],Xy),this.ma.size=this.protoParseInt(Z[3],Xy);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],Xy),this.ma.size=this.protoParseInt(Z[4],Xy);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let X=0;for(let Q=0;Q<$.length;Q++){if($[Q]<ca1||$[Q]>Oa6)return-1;X=X*10+($[Q]-ca1)}return Z!==void 0&&X>Z?-1:X}}da1.Parser=la1;da1.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};da1.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var J70=v((ia1)=>{Object.defineProperty(ia1,"__esModule",{value:!0});ia1.MsgHdrsImpl=void 0;ia1.canonicalMIMEHeaderKey=in0;ia1.headers=Da6;var ma1=$G(),uJ=oB(),G70=ZG();function in0($){let F=!0,N=Array($.length);for(let U=0;U<$.length;U++){let B=$.charCodeAt(U);if(B===58||B<33||B>126)throw G70.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;N[U]=B,F=B==45}return String.fromCharCode(...N)}function Da6($=0,Z=""){if($===0&&Z!=="")throw G70.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw G70.InvalidArgumentError.format("description","is required");return new Qy($,Z)}var mn0="NATS/1.0";class Qy{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,X]of this.headers){let Q=$.values(Z);if(X.length!==Q.length)return!1;let Y=[...X].sort(),G=[...Q].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new Qy,Q=ma1.TD.decode($).split(`\r
1401
1401
  `),Y=Q[0];if(Y!==mn0){let G=Y.replace(mn0,"").trim();if(G.length>0){if(Z._code=parseInt(G,10),isNaN(Z._code))Z._code=0;let J=Z._code.toString();G=G.replace(J,""),Z._description=G.trim()}}if(Q.length>=1)Q.slice(1).map((G)=>{if(G){let J=G.indexOf(":");if(J>-1){let K=G.slice(0,J),W=G.slice(J+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=mn0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,X]of this.headers)for(let Q=0;Q<X.length;Q++)$=`${$}\r
1402
1402
  ${Z}: ${X[Q]}`;return`${$}\r
@@ -2850,7 +2850,7 @@ Respond with the structured verdict and a short reason.`,Dg$;var Eg$=w(()=>{P4()
2850
2850
  ${G.join(`
2851
2851
  `)}`:Y}function iJ6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2852
2852
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Xh$=200,xJ6=12,gJ6,uJ6=300,c91=3;var l91=w(()=>{b_();JA0();gJ6={aheadBy:0,behindBy:0,files:[]}});function nJ6($){if(!$||$.includes(".."))return!1;return pJ6.test($)}function Yh$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!nJ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Gh$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var pJ6;var Jh$=w(()=>{pJ6=/^[\w./@-]+$/});function d91($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function za($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Wh$($,Z,X,Q){if(!Q.connectionId)throw new y_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new y_(Q9);await rO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:Q9;throw new y_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await aO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=k4$(F instanceof Error?F.message:String(F));throw N?new y_(U):F}),K=eh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await wB(H,tJ6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var tJ6=10485760,y_;var m91=w(()=>{mG();tP0();rp();Fm0();ox();y_=class y_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function rJ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!oJ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function g_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(sJ6)])}function eJ6($,Z,X){let Q=w5($)[Z]?.[X];return!!Q&&Object.keys(IY(Q)).length>0}function h_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Gu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=za(Z,X);if(!Y)throw new g4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return rP0(Q,G.id,Y)}function i91($,Z){if(Z instanceof oP0)return $.json({error:Z.message},429,{...C5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,C5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,C5)}async function Fh$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Nh$($){try{let Z=await Gu($),X=await WA0(Z,$.get("vmClaim").branch);return $.json(X,200,C5)}catch(Z){return i91($,Z)}}function Pa($,Z){let Q=(FA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return FA0.set($,Y),Y.finally(()=>{if(FA0.get($)===Y)FA0.delete($)}),Q}async function mZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,C5);let Q=h_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...C5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?Z36(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...C5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function Z36($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function NA0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function X36($){return Uh$.includes($)}var oJ6,Kh$=524288,aJ6=65536,sJ6=1e4,Hh$=2000,$36,FA0,C5,Uh$,Oh$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",$36),$.post("/:virtualMcpId/:branch/write",(X)=>mZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>mZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>mZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>mZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>mZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>mZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>mZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:g_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!X36(Q))return X.json({error:`step must be one of: ${Uh$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Oy(Y.virtualMcpMetadata);try{await tO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return mZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return RN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Fg$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nh$(X);return Z(X)});let Z=(X)=>mZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hh$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nh$(X);return mZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hh$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await Gu(X),J=await KA0(G,Q.branch,Y.base);return X.json(J,200,C5)}catch(Y){return i91(X,Y)}return mZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,C5);let Q=h_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Pa(Y,async()=>{try{await A91(W,Q,Y);let K=za(G,J);if(K)await Wh$(W,Q,Y,K)}catch(K){if(K instanceof y_)return X.json({error:K.message},403,C5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,C5)}return mZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Pa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,C5);try{let J=await Gu(X);return await Qh$(J,Q.branch,G),X.json({ok:!0},200,C5)}catch(J){let W=J instanceof g4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,C5)}});return Pa(Q.claimName,()=>mZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Pa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Gu(X),H=W.base??await K.getDefaultBranch();return await HA0(K,Q.branch,H),X.json({ok:!0},200,C5)}catch(W){return i91(X,W)}});let Y=h_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Pa(G,async()=>{try{await A91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,C5)}return mZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Kh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=h_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=I91(F)&&U?[F,N]:Y?await Promise.all([NA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),NA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Gu(X);return Promise.all([WA0(L,Q.branch),KA0(L,Q.branch)])})(),D=await wg$(K,O,B);return X.json(D,200,C5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:F},502,C5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Kh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=h_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=I91(F)&&U?[F,N]:Y?await Promise.all([NA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),NA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Gu(X);return Promise.all([WA0(L,Q.branch),KA0(L,Q.branch)])})(),D=await Lg$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,C5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:F},502,C5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=h_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=d91(`${W}${G}`);return Fh$(X,K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:aJ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=h_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Yh$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Gh$(G,W.resolveType),H=d91(K);return Fh$(X,H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Bh$=w(()=>{w8();wN();sh();P91();RF();Kg$();_3();iX();P8();tB0();NB();Hg$();Ng$();_p0();tp();k91();Eg$();v91();b_();l91();Jh$();m91();oJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$36=nP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{rJ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Np({orgId:Y.id,virtualMcpId:G,branch:J}),H=await fF(X,J,Q),F=Wg$({userId:H,projectRef:K}),N=W.metadata??null;if(mW$(N).fastPreviewCapability&&!eJ6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await aX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});FA0=new Map;C5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Uh$=["clone","install","start"]});function wh$($,Z,X){let Q=p91.get($);if(!Q)Q={pending:null,running:!1},p91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)Y36($,Q);return G}async function Y36($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await G36(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)p91.delete($)}}async function G36($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Yu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=h91(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=u91(K,B),E=`${JSON.stringify(D,null,2)}
2853
- `,j=await Z.createBlob(E);await eg$(Z.owner,Z.repo,j,E);let z=L[0]??`${GA0(Q)}/${f91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of u91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Da(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:J36($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=Q36-1)throw B;await k$(nZ(2000,200,Y,2,0.5))}}}function J36($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Zm0(Q,$.deps.coAuthor)}var Q36=3,p91;var Dh$=w(()=>{uO0();sP0();u4();b_();JA0();p91=new Map});import{createHmac as Lh$,randomBytes as W36,timingSafeEqual as K36}from"crypto";function Eh$(){if(UA0)return UA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return UA0=$?Buffer.from($):W36(32),UA0}function n91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+H36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Lh$("sha256",Eh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Lh$("sha256",Eh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!K36(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var H36=21600000,UA0=null;var zh$=w(()=>{I$()});import{z as Ju}from"zod";function N36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&F36.test($)}function Ah$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function OA0($){let Z=$.get("decofileScope");return rP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function BA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Th$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Ph$),$.use("/:virtualMcpId/:branch/*",Ph$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await $h$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ah$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return BA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=U36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{aP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await OA0(Z),W=await wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:eh(Q)},G),K=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ah$(Z)})}catch(J){return BA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await HA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return BA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return BA0(Z,Q)}}),$}var F36,U36,Ph$;var Rh$=w(()=>{sP0();w8();P91();tP0();m91();v91();Dh$();zh$();l91();b_();JA0();F36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;U36=Ju.object({set:Ju.record(Ju.string(),Ju.unknown()).optional(),delete:Ju.array(Ju.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ph$=nP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!N36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!jh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!nB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=za(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ih$=($)=>{let Z=new F1;if(Z.use("*",q_),Z.route("/",FP0()),Z.route("/",lf$()),Z.route("/",ty$()),Z.route("/",iy$()),Z.route("/",mP0()),Z.route("/tools",Zg$()),Z.route("/",sy$()),Z.route("/",Ry$({kvStorage:$.kvStorage})),Z.route("/",Ay$()),Z.route("/fs",gy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Oh$()),Z.route("/decofile",Th$()),Z.route("/",ly$()),Z.route("/deco-sites",UP0()),Z.route("/sso",YP0()),Z.route("/",iP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ff$()),$.mountDevAssets)Z.route("/dev-assets",OP0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",w_$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",uy$()),Z.route("/mcp",OD0()),Z.route("/mcp/self",dP0()),Z.route("/mcp",DD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qh$=w(()=>{w8();d61();bf$();n61();BP0();lr();c61();Ty$();Iy$();hy$();on();v61();LD0();B91();cy$();dy$();py$();oy$();ey$();D91();Xg$();L91();BD0();Bh$();Rh$()});function O36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var B36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Mh$=()=>{let $=new F1;return $.use("*",B36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:O36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var kh$=w(()=>{w8();I$();Wz0()});import{z as M1}from"zod";function GH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function R36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function I36($,Z,X){try{return JSON.parse($)}catch{throw new Ch$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function q36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:I36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function M36($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function k36($){if(!$)return;return{openai:{response_format:$}}}function V36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Vh$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var w36=256,D36,L36,E36,j36,z36,P36,A36,T36,Ch$,_h$,vh$;var fh$=w(()=>{P4();w8();sh();QN();D36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),L36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),E36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(L36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),j36=M1.object({type:M1.literal("text")}),z36=M1.object({type:M1.literal("json_object")}),P36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),A36=M1.union([j36,z36,P36]),T36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(E36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(D36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:A36.optional(),user:M1.string().optional()});Ch$=class Ch$ extends Error{constructor($){super($);this.name="MessageConversionError"}};_h$=new F1;_h$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(GH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=T36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=R36(G.model);if(!J)return $.json(GH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=q36(G.messages),U=G.tools?M36(G.tools):void 0,O=k36(G.response_format),B=V36(),D=Math.floor(Date.now()/1000);if(G.stream)return RN($,async(L)=>{let E=Vh$(F,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=w36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sh$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Vh$(F,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GH(Y.message,"server_error"),500)}});vh$=_h$});function S36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function bh$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||W7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(Da1(N)!==G)continue;if(!S36(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var xh$=w(()=>{w8();fO()});var gh$;var yh$=w(()=>{gh$={name:"decocms",version:"4.253.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function v36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_36}}var hh$,_36="https://ph.studio.decocms.com",uh$;var ch$=w(()=>{w8();_h0();EC();f9();I$();k61();yh$();hh$=new F1;hh$.get("/",($)=>{let Z={version:gh$.version,theme:ld1(),...RL().logo&&{logo:RL().logo},...SK()&&{internalUrl:jS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ev$(),posthog:v36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!SK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uh$=hh$});function Wu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function t91($){return(Wu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function dh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Wu($))}&sz=${Z}`}function lh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function mh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?lh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):lh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var u_,f36,b36,x36,y36,ih$;var ph$=w(()=>{u_=l0.enum(["good","bad","neutral"]),f36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:u_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),b36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(f36)),x36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},y36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:u_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:u_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(b36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:u_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:u_.optional()})).min(1)})]),ih$=l0.object({...x36,template:y36})});function wA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ih$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var o91=w(()=>{ph$()});import{join as nh$}from"path";async function h36($){try{let Z=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(g36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=wA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||t91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function JG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function u36($,Z){let X=Wu($),Q=Z?.brand?.trim()||t91(X),Y=dh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=mh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${JG(W)}</title>`,`<meta name="description" content="${JG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${JG(W)}" />`,`<meta property="og:description" content="${JG(K)}" />`,`<meta property="og:url" content="${JG(J)}" />`,`<meta property="og:image" content="${JG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${JG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${JG(W)}" />`,`<meta name="twitter:description" content="${JG(K)}" />`,`<meta name="twitter:image" content="${JG(H)}" />`,`<meta name="twitter:image:alt" content="${JG(F)}" />`,`<link rel="canonical" href="${JG(J)}" />`,`<link rel="icon" href="${JG(Y)}" sizes="any" />`].join(`
2853
+ `,j=await Z.createBlob(E);await eg$(Z.owner,Z.repo,j,E);let z=L[0]??`${GA0(Q)}/${f91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of u91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Da(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:J36($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=Q36-1)throw B;await k$(nZ(2000,200,Y,2,0.5))}}}function J36($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Zm0(Q,$.deps.coAuthor)}var Q36=3,p91;var Dh$=w(()=>{uO0();sP0();u4();b_();JA0();p91=new Map});import{createHmac as Lh$,randomBytes as W36,timingSafeEqual as K36}from"crypto";function Eh$(){if(UA0)return UA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return UA0=$?Buffer.from($):W36(32),UA0}function n91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+H36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Lh$("sha256",Eh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Lh$("sha256",Eh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!K36(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var H36=21600000,UA0=null;var zh$=w(()=>{I$()});import{z as Ju}from"zod";function N36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&F36.test($)}function Ah$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function OA0($){let Z=$.get("decofileScope");return rP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function BA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Th$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Ph$),$.use("/:virtualMcpId/:branch/*",Ph$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await $h$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ah$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return BA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=U36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{aP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await OA0(Z),W=await wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:eh(Q)},G),K=n91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ah$(Z)})}catch(J){return BA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await HA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return BA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await OA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return BA0(Z,Q)}}),$}var F36,U36,Ph$;var Rh$=w(()=>{sP0();w8();P91();tP0();m91();v91();Dh$();zh$();l91();b_();JA0();F36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;U36=Ju.object({set:Ju.record(Ju.string(),Ju.unknown()).optional(),delete:Ju.array(Ju.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ph$=nP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!N36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!jh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!nB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=za(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ih$=($)=>{let Z=new F1;if(Z.use("*",q_),Z.route("/",FP0()),Z.route("/",lf$()),Z.route("/",ty$()),Z.route("/",iy$()),Z.route("/",mP0()),Z.route("/tools",Zg$()),Z.route("/",sy$()),Z.route("/",Ry$({kvStorage:$.kvStorage})),Z.route("/",Ay$()),Z.route("/fs",gy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Oh$()),Z.route("/decofile",Th$()),Z.route("/",ly$()),Z.route("/deco-sites",UP0()),Z.route("/sso",YP0()),Z.route("/",iP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ff$()),$.mountDevAssets)Z.route("/dev-assets",OP0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",w_$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",uy$()),Z.route("/mcp",OD0()),Z.route("/mcp/self",dP0()),Z.route("/mcp",DD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qh$=w(()=>{w8();d61();bf$();n61();BP0();lr();c61();Ty$();Iy$();hy$();on();v61();LD0();B91();cy$();dy$();py$();oy$();ey$();D91();Xg$();L91();BD0();Bh$();Rh$()});function O36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var B36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Mh$=()=>{let $=new F1;return $.use("*",B36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:O36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var kh$=w(()=>{w8();I$();Wz0()});import{z as M1}from"zod";function GH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function R36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function I36($,Z,X){try{return JSON.parse($)}catch{throw new Ch$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function q36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:I36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function M36($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function k36($){if(!$)return;return{openai:{response_format:$}}}function V36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Vh$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var w36=256,D36,L36,E36,j36,z36,P36,A36,T36,Ch$,_h$,vh$;var fh$=w(()=>{P4();w8();sh();QN();D36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),L36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),E36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(L36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),j36=M1.object({type:M1.literal("text")}),z36=M1.object({type:M1.literal("json_object")}),P36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),A36=M1.union([j36,z36,P36]),T36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(E36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(D36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:A36.optional(),user:M1.string().optional()});Ch$=class Ch$ extends Error{constructor($){super($);this.name="MessageConversionError"}};_h$=new F1;_h$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(GH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=T36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=R36(G.model);if(!J)return $.json(GH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=q36(G.messages),U=G.tools?M36(G.tools):void 0,O=k36(G.response_format),B=V36(),D=Math.floor(Date.now()/1000);if(G.stream)return RN($,async(L)=>{let E=Vh$(F,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=w36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sh$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Vh$(F,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GH(Y.message,"server_error"),500)}});vh$=_h$});function S36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function bh$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||W7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(Da1(N)!==G)continue;if(!S36(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var xh$=w(()=>{w8();fO()});var gh$;var yh$=w(()=>{gh$={name:"decocms",version:"4.253.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function v36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_36}}var hh$,_36="https://ph.studio.decocms.com",uh$;var ch$=w(()=>{w8();_h0();EC();f9();I$();k61();yh$();hh$=new F1;hh$.get("/",($)=>{let Z={version:gh$.version,theme:ld1(),...RL().logo&&{logo:RL().logo},...SK()&&{internalUrl:jS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ev$(),posthog:v36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!SK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});uh$=hh$});function Wu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function t91($){return(Wu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function dh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Wu($))}&sz=${Z}`}function lh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function mh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?lh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):lh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var u_,f36,b36,x36,y36,ih$;var ph$=w(()=>{u_=l0.enum(["good","bad","neutral"]),f36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:u_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),b36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(f36)),x36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},y36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:u_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:u_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:u_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(b36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:u_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:u_.optional()})).min(1)})]),ih$=l0.object({...x36,template:y36})});function wA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ih$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var o91=w(()=>{ph$()});import{join as nh$}from"path";async function h36($){try{let Z=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(g36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=wA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||t91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function JG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function u36($,Z){let X=Wu($),Q=Z?.brand?.trim()||t91(X),Y=dh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=mh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${JG(W)}</title>`,`<meta name="description" content="${JG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${JG(W)}" />`,`<meta property="og:description" content="${JG(K)}" />`,`<meta property="og:url" content="${JG(J)}" />`,`<meta property="og:image" content="${JG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${JG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${JG(W)}" />`,`<meta name="twitter:description" content="${JG(K)}" />`,`<meta name="twitter:image" content="${JG(H)}" />`,`<meta name="twitter:image:alt" content="${JG(F)}" />`,`<link rel="canonical" href="${JG(J)}" />`,`<link rel="icon" href="${JG(Y)}" sizes="any" />`].join(`
2854
2854
  `)}function c36($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
2855
2855
  </head>`)}function th$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=Wu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(nh$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(l36)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?nh$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await h36(Wu(Q)),K=u36(Q,W);return X.html(c36(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var g36=2500,l36=1e4;var oh$=w(()=>{w8();o91();gL();I$()});function Aa($,Z){return fetch(`${sW({})}${$}`,Z)}async function d36($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Aa(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=wA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var m36,qN,rh$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},ah$;var sh$=w(()=>{w8();fY();gL();o91();m36=new Set(["complete","errored","terminated","unknown"]),qN=new F1;qN.use("*",async($,Z)=>{let X=await H8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});qN.use("/link-token/*",rh$);qN.use("/suggest",rh$);qN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await d36(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});qN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Aa("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${yL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});qN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Aa(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${yL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:m36.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});qN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Aa(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});qN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Aa(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});ah$=qN});import{createHmac as i36,timingSafeEqual as p36}from"crypto";function $u$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>n36)return!1;let W=i36("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&p36(K,F)})}function Zu$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=IJ(Z),Q=IJ(IJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:JH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Xu$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function JH($){return typeof $==="string"?$:void 0}function IJ($){return typeof $==="object"&&$!==null?$:void 0}function DA0($){return typeof $==="number"?new Date($*1000):null}function s91($){return JH($)??JH(IJ($)?.id)}function t36($){return s91($.subscription)??JH(IJ(IJ($.parent)?.subscription_details)?.subscription)}function o36($){let Z=DA0($.current_period_end);if(Z)return Z;let X=IJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=IJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function r91($,Z){let X=DA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function a91($,Z){let X=DA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function r36($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=JH(IJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(JH(IJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(JH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=JH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(IJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:IJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(JH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=s91(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(r91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:s91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:a91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=JH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&r91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Xu$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:o36(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:a91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=t36(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(r91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:DA0(X.period_end),lastStripeEventAt:a91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function a36($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Xu$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function eh$($,Z){let X=a36($,Z);if(!X)return;VY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:ri1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Qu$($){let Z=new tW(u8().db),X=await r36(Z,$);if(!(X.handled&&X.topUp))eh$($,X);if(X.handled&&X.topUp)await yw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),eh$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Us1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof bY&&(Q.status===400||Q.status===404)))throw Q}return X}var n36=300;var Yu$=w(()=>{bG();V4();R60();nL();Fe0()});var s36=1048576,e91;var Gu$=w(()=>{w8();wN();I$();Yu$();e91=new F1;e91.post("/webhook",k9({maxSize:s36,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!$u$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Zu$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Qu$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as e36}from"crypto";function ZW6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return e36(Buffer.from(Y),Buffer.from(Q))}var $W6=5242880,$Z1;var Ju$=w(()=>{w8();wN();ip();$Z1=new F1;$Z1.post("/webhook",k9({maxSize:$W6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!ZW6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await qp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Wu$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ku$,XW6,QW6,Hu$;var Fu$=w(()=>{w8();N3();xy();qx();Ku$=new F1,XW6=["range","if-none-match","if-modified-since"],QW6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ku$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(vh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await _n(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&D3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Wu$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of XW6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of QW6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Wu$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Hu$=Ku$});var Ta=_((c_)=>{var YW6=c_&&c_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),GW6=c_&&c_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))YW6(Z,$,X)};Object.defineProperty(c_,"__esModule",{value:!0});GW6(OY(),c_)});var Ou$=_((Nu$)=>{Object.defineProperty(Nu$,"__esModule",{value:!0});Nu$.version=void 0;Nu$.version="3.4.0"});var Du$=_((WH)=>{var JW6=WH&&WH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(WH,"__esModule",{value:!0});WH.NodeTransport=WH.VERSION=void 0;WH.nodeResolveHost=UW6;var r6=Ta(),WW6=z0("net"),ZZ1=z0("tls"),KW6=z0("path"),Bu$=z0("fs"),HW6=JW6(z0("dns")),FW6=Ou$();WH.VERSION=FW6.version;var NW6="nats.js";class wu${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=NW6,this.version=WH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,WW6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,KW6.resolve)($),!(0,Bu$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Bu$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,ZZ1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,ZZ1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof ZZ1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}WH.NodeTransport=wu$;function UW6($){let Z=(0,r6.deferred)();return HW6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Pu$=_((zu$)=>{Object.defineProperty(zu$,"__esModule",{value:!0});zu$.connect=OW6;var Lu$=Du$(),Eu$=Ta(),ju$=Ta();function OW6($={}){if((0,ju$.hasWsProtocol)($))return Promise.reject(ju$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Eu$.setTransportFactory)({factory:()=>{return new Lu$.NodeTransport},dnsResolveFn:Lu$.nodeResolveHost}),Eu$.NatsConnectionImpl.connect($)}});var Au$=_((MN)=>{var wW6=MN&&MN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),DW6=MN&&MN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))wW6(Z,$,X)};Object.defineProperty(MN,"__esModule",{value:!0});MN.connect=void 0;var LW6=Pu$();Object.defineProperty(MN,"connect",{enumerable:!0,get:function(){return LW6.connect}});DW6(Ta(),MN)});function qu$($){let Z=$?.connectFn??PW6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:zW6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=nZ(jW6,EW6,B-1,2,0.5);await k$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Tu$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Iu$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function PW6($){return Ru$.connect($)}var Tu$,Ru$,Iu$,EW6=100,jW6=3000,zW6=3000;var Mu$=w(()=>{u4();Tu$=V(_u(),1),Ru$=V(Au$(),1),Iu$=V(uw(),1)});function XZ1($,Z){return`${$}.${Z}`}class QZ1{cache;constructor($){this.cache=jh({ttlMs:$?.ttlMs??AW6,maxSize:$?.maxSize??TW6})}async get($,Z){return this.cache.get(XZ1($,Z))??null}async set($,Z,X){this.cache.set(XZ1($,Z),X)}async invalidate($,Z){this.cache.delete(XZ1($,Z))}teardown(){this.cache.clear()}}var AW6=600000,TW6=5000;var ku$=()=>{};function LA0($,Z){return`${$}:${Z}`}function YZ1($){let Z=jh({ttlMs:$?.ttlMs??RW6,maxSize:$?.maxSize??IW6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Vu$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(LA0(K,H))},set(K,H,F){Z.set(LA0(K,H),F)},invalidate(K,H){Z.delete(LA0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Vu$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(LA0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Vu$="studio.ai-provider-keys.invalidate",RW6=30000,IW6=5000;var Su$=()=>{};class GZ1{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Cu$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Cu$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Cu$;var _u$=w(()=>{Cu$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var vu$=($)=>{let Z;return()=>Z??=$()},JZ1,WZ1;var fu$=w(()=>{R6();JZ1=vu$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),WZ1=vu$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function _W6(){return{name:pF,subjects:[`${lw0}.>`],storage:KW.StorageType.File,max_age:kW6,max_bytes:SW6,max_msgs_per_subject:CW6,discard:KW.DiscardPolicy.Old,retention:KW.RetentionPolicy.Limits,duplicate_window:VW6,num_replicas:1}}class yu${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function bu$($){let Z=xu$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function xW6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,MW6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function yW6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class KZ1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=_W6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await KW.jetstreamManager($);try{await Q.streams.info(pF),await Q.streams.update(pF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(pF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:yW6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=xW6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=cF$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=_o0(H,{runId:Z}),U=performance.now()-F;if(JZ1().record(U),WZ1().add(1,{"org.id":Q??"unknown"}),bW6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?bu$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),fW6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=_o0(Z,{runId:$,dedup:X});if(JZ1().record(performance.now()-Y),WZ1().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:bu$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=uF$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?KW.DeliverPolicy.New:KW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=_B($),W;try{W=await(await Q.consumers.get(pF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=nw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(dw0()).pipeThrough(mw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(pF,{filter:_B($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var KW,xu$,qW6=($)=>{let Z;return()=>Z??=$()},MW6,kW6=86400000000000,VW6=120000000000,SW6=4294967296,CW6=500000,vW6,fW6,bW6;var gu$=w(()=>{u4();vo0();tw0();iw0();R6();fu$();KW=V(uw(),1),xu$=V(_u(),1),MW6=qW6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));vW6=process.env.STREAM_ENCODE_TRACE==="1",fW6=process.env.DECOPILOT_STREAM_TRACE==="1";bW6=vW6?new yu$:null});function EA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,CW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var hu$=w(()=>{P8()});class HZ1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function uu$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!br(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await v6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),F8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var cu$=w(()=>{$Q();xr();l5()});function mW6($){return $ instanceof n7}function iW6($,Z){return Z-$>=lW6}class FZ1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??gW6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??uW6,X=this.options.itemIntervalMs??hW6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-$t0),St0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-dW6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await kt0(this.taskBoard,Y,Q),await Vt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==t8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await iF(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),mW6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+cW6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),F8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!iW6(EF(X),Date.now()))return;await VK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===t8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await fy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await uu$(J,Q,W.map((K)=>K.merged)))return!0;if(await MN$(J,Q))return!0;if(!Y)return!1;if(!rt0(W))return!1;return await Uw0(J,Q,{previewMatchesHead:at0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var gW6=60000,hW6=300000,uW6=50,cW6=60000,lW6=900000,dW6=120000;var lu$=w(()=>{j9();ct0();lF();dn();cu$();l5();z3();Ct0();l3();kn()});import{readdir as pW6,rm as jA0}from"fs/promises";import{join as zA0}from"path";async function PA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-nW6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await l_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await du$($,Y,Z);else if(!Y.startsWith(".")){let G=zA0($,Y),J=await l_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await du$(G,K,Z)}if((await l_(G)).length===0)await jA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function du$($,Z,X){let Q=0,Y=zA0($,Z),G=await l_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=zA0(Y,W),H=await l_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=zA0(K,N);await jA0(O,{recursive:!0,force:!0}),Q++}}if((await l_(K)).length===0)await jA0(K,{recursive:!0,force:!0})}if((await l_(Y)).length===0)await jA0(Y,{recursive:!0,force:!0});return Q}async function l_($){try{return(await pW6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var nW6=30;var NZ1=()=>{};import{DBOS as UZ1,SchedulerMode as tW6}from"@dbos-inc/dbos-sdk";async function rW6(){let $=[VJ(),d_(),NH()],Z=0;for(let X of $)try{Z+=await PA0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function aW6($,Z){await UZ1.runStep(()=>rW6(),{name:"monitoringRetention"})}function iu$(){if(mu$)return;mu$=!0;let $=UZ1.registerWorkflow(aW6,{name:"monitoringRetentionWorkflow"});UZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:oW6,mode:tW6.ExactlyOncePerIntervalWhenActive})}var oW6="23 4 * * *",mu$=!1;var pu$=w(()=>{HY();NZ1()});function nu$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await XJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await N61($.db,Z,Q.role);return Y.boundAuth=F61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new zL(X,void 0,Y.boundAuth,Q.role,"self"),MB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var tu$=w(()=>{PL();KC()});function sW6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function $K6(){for(let $ of eW6)$()}function ou$($){let Z=[...OZ1.logs,$];OZ1={...OZ1,logs:Z.length>500?Z.slice(-500):Z},$K6()}function BZ1(){return ZK6}var OZ1,eW6,ZK6=!1;var wZ1=w(()=>{OZ1=sW6(),eW6=new Set});import{EventEmitter as XK6}from"events";var DZ1;var ru$=w(()=>{wZ1();DZ1=new XK6;DZ1.on("request",($)=>{ou$($)})});function au$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Ku(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>Ku(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${Ku(U.method)}${G5.reset}`}}catch{}}let W=Ku(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${Ku(F.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=YK6(Q),H=J?"\u25C0":"\u2190";if(!BZ1())console.log(`${G5.dim}${H}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=QK6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!BZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);DZ1.emit("request",{method:Q,path:Ku(Y),status:N,duration:F,timestamp:new Date})}}}var G5,QK6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},YK6=($)=>{return G5[$]||G5.reset},Ku=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var su$=w(()=>{wZ1();ru$();G5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as Xc$}from"crypto";import{mkdir as GK6,readdir as JK6,rm as eu$,stat as Qc$}from"fs/promises";import{join as EZ1,relative as WK6}from"path";import{z as P$}from"zod";function Gc$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return EZ1(KK6,Z)}function Jc$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function LZ1($,Z){let X=Gc$($),Q=Jc$(Z);return EZ1(X,Q)}function HK6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Xc$("sha256",Y).update(G).digest("hex")}function Zc$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=HK6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Jc$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Wc$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Xc$("md5","etag").update(Q).digest("hex")}"`}async function Kc$($,Z,X,Q,Y){try{let G=await JK6($,{withFileTypes:!0});for(let J of G){let W=EZ1($,J.name),H=WK6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Kc$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Qc$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Wc$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Hc$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Gc$(Q);await GK6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Kc$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=LZ1(Q,G.key),W=await Qc$(J);return{contentType:o61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Wc$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$c$;return{url:Zc$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$c$;return{url:Zc$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=LZ1(Q,G.key);try{return await eu$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=LZ1(Q,K);try{await eu$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function jZ1($,Z,X){let Q=Hc$(Z,X),Y=new gW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:F5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new ZQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),HJ(Y,G,$,"mcp:dev-assets")}async function Fc$($,Z,X,Q){let G=Hc$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var KK6="./data/assets",$c$=3600,Yc$,Nc$;var Uc$=w(()=>{I$();oy();w8();Zd();IC();vX();BP0();Yc$=new F1;Yc$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return jZ1($.req.raw,Z,Q)});Nc$=Yc$});var Oc$={};G4(Oc$,{mountDevRoutes:()=>FK6});function FK6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return jZ1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Fc$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Nc$);let X=new F1;X.use("*",JW({mountPath:"/api/dev-assets"})),X.route("/",OP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Bc$=w(()=>{w8();l61();BP0();Uc$()});import{sql as NK6}from"kysely";import{randomUUID as wc$}from"crypto";import{z as UK6}from"zod";async function BK6($){let Z=new Date().toISOString(),X=wc$(),Q=m4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:wc$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await NK6`SELECT
2856
2856
  pg_notify('studio_events', ${X}),