decocms 4.197.2 → 4.197.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 (224) hide show
  1. package/dist/client/assets/{AlertCircle-DpL6Tscn.js → AlertCircle-DVliR6xO.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CoEemB4J.js → AreaChart-Bft5_7Jo.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BYRvhhFt.js → ArrowLeft-lL88AaOj.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-C_q46EO5.js → ArrowUp-Dx2bunEH.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-CFDR0g1M.js → ArrowUpRight-C2g30W8x.js} +1 -1
  6. package/dist/client/assets/{Check-BChGvAW3.js → Check-BXK1x5qf.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-BZAw7ZLj.js → CheckCircle-Cr7gQd_k.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-DfMtmSgR.js → ChevronDown-DF40q8ur.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-PJs7Wj1v.js → ChevronRight-CEqcN1nl.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-Dr2YqthP.js → ChevronUp-CTY929Nw.js} +1 -1
  11. package/dist/client/assets/{Copy01-pcUw8cKn.js → Copy01-XeWH9pDX.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-CZAfbu8J.js → CpuChip01-jU26rGIw.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-Be_a0Hl3.js → CreditCard01-BOoFee1Y.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-BuQlhNri.js → DotsVertical-Cf_YxSoI.js} +1 -1
  15. package/dist/client/assets/{Eye-Cb8Ttsk7.js → Eye-CfWwtx_w.js} +1 -1
  16. package/dist/client/assets/{FilterLines-d91RyRXM.js → FilterLines-CgFEB7vW.js} +1 -1
  17. package/dist/client/assets/{Globe01-B5iAXvY9.js → Globe01-BQF-MOJ4.js} +1 -1
  18. package/dist/client/assets/{Globe04-CUj3yJ4H.js → Globe04-D3Zjghxm.js} +1 -1
  19. package/dist/client/assets/{HardDrive-C5Gg1Zd2.js → HardDrive-D4zXLyz2.js} +1 -1
  20. package/dist/client/assets/{Key01-fVtj4fXs.js → Key01-mQ8L03Wg.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-BL44UyAD.js → LayoutLeft-CxFQlOR7.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-L9JYsRrc.js → LinkExternal01-CFwwrZPd.js} +1 -1
  23. package/dist/client/assets/{LogOut01-BSEcdW7a.js → LogOut01-D3aJ8-6N.js} +1 -1
  24. package/dist/client/assets/{Monitor01-0j7xzNTu.js → Monitor01-CbLYdQhv.js} +1 -1
  25. package/dist/client/assets/{Palette-DxEDEmZD.js → Palette-C9IXv8Zo.js} +1 -1
  26. package/dist/client/assets/{Play-Ce3PIPIz.js → Play-DlFtrclq.js} +1 -1
  27. package/dist/client/assets/{Plus-BshesZK9.js → Plus-DC7S1eBg.js} +1 -1
  28. package/dist/client/assets/{SearchLg-Bibw1E-2.js → SearchLg-CNW7EH-i.js} +1 -1
  29. package/dist/client/assets/{SearchMd-DuGOSj9Q.js → SearchMd-DPNK-GGp.js} +1 -1
  30. package/dist/client/assets/{Settings02-BO8Tyy4j.js → Settings02-DKWMWmY_.js} +1 -1
  31. package/dist/client/assets/{Share07-B90wnNYq.js → Share07-DBL4ej2u.js} +1 -1
  32. package/dist/client/assets/{Shield01-BEvfydMk.js → Shield01-CoyYJvr_.js} +1 -1
  33. package/dist/client/assets/{Star01-Cb4QEb-Y.js → Star01-W-1UqpJQ.js} +1 -1
  34. package/dist/client/assets/{Stars01-BbZWvgRz.js → Stars01-BckddNGi.js} +1 -1
  35. package/dist/client/assets/{Stars02-DnEwCMW-.js → Stars02-ByUC0u1H.js} +1 -1
  36. package/dist/client/assets/{Sun-DqJVcwP1.js → Sun-MFtTThsD.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-BEcRH-iW.js → SwitchHorizontal01-DG9YIxEd.js} +1 -1
  38. package/dist/client/assets/{Tool01-BhAPypFm.js → Tool01-DXogECdR.js} +1 -1
  39. package/dist/client/assets/{Tool02-C1_VEvRQ.js → Tool02-BYfv7Fn-.js} +1 -1
  40. package/dist/client/assets/{Trash01-CqgwN4Ls.js → Trash01-5a2s0D8T.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-CgrsvLX5.js → TrendUp01-C0ZHwPPE.js} +1 -1
  42. package/dist/client/assets/{Upload01-CuT2JdpQ.js → Upload01-TrIuT6JH.js} +1 -1
  43. package/dist/client/assets/{User01-Bv6oogoE.js → User01-C-RQbqOo.js} +1 -1
  44. package/dist/client/assets/{Users01-mJuxxn4S.js → Users01-DGQD0DUk.js} +1 -1
  45. package/dist/client/assets/{Users03-Y9NuGIXU.js → Users03-CDMelPJX.js} +1 -1
  46. package/dist/client/assets/{X-Da1aH-NS.js → X-Cua7ipOq.js} +1 -1
  47. package/dist/client/assets/{XCircle-Bn-kiykC.js → XCircle-CqZuDp-j.js} +1 -1
  48. package/dist/client/assets/{XClose-DLc2n8Qt.js → XClose-CY1IJeN9.js} +1 -1
  49. package/dist/client/assets/{Zap-BZPI5EwL.js → Zap-BZmbtuRB.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-DjVa6YMe.js → ZapSquare-yT0mcWFT.js} +1 -1
  51. package/dist/client/assets/{access-gate-CTmGk4ny.js → access-gate-DK4hLSHR.js} +1 -1
  52. package/dist/client/assets/{agent-icon-BQVVDebW.js → agent-icon-C9QKmBiJ.js} +1 -1
  53. package/dist/client/assets/{agents-list-BtAmOQCg.js → agents-list-BTDBhNAZ.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DJEkLj9J.js → ai-providers-t59bQ-On.js} +1 -1
  55. package/dist/client/assets/{alert-BVAzECwh.js → alert-CzttVzt6.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-COu8iXMQ.js → alert-dialog-CjOnwLgK.js} +1 -1
  57. package/dist/client/assets/{app-editor-BGcVa7eq.js → app-editor-CKzXfdd5.js} +1 -1
  58. package/dist/client/assets/{auth-B6pkXjQ7.js → auth-DJFYgbZL.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-DK_xsJXJ.js → auth-catchall-D7P3D7a6.js} +1 -1
  60. package/dist/client/assets/{auth-entry-Bhlelf2G.js → auth-entry-DLlQdokG.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-CwgyRcqb.js → auth-split-layout-K7vQuXE4.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-BpVUvoKT.js → authenticate-and-persist-oauth-DjNSpZsa.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-B5UmktTU.js → automation-list-row-DsTg5UgW.js} +1 -1
  64. package/dist/client/assets/{automation-runs-9N6MOCSR.js → automation-runs-CgfctsTZ.js} +1 -1
  65. package/dist/client/assets/{automations-DhiUYcZJ.js → automations-DKrUDnVT.js} +1 -1
  66. package/dist/client/assets/{avatar-BewHuBZX.js → avatar-YPkmAyoH.js} +1 -1
  67. package/dist/client/assets/{badge-D2xVGCkQ.js → badge-R3I21d46.js} +1 -1
  68. package/dist/client/assets/{billing-CmQ4_F49.js → billing-BYSP1aCJ.js} +1 -1
  69. package/dist/client/assets/{block-document-5eKtIwrA.js → block-document-CxGpglL3.js} +1 -1
  70. package/dist/client/assets/{brand-context-CQOR1JRF.js → brand-context-CrWdg9sa.js} +1 -1
  71. package/dist/client/assets/{buckets-CbWh9tHL.js → buckets-B0IbAOqf.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-vw_UiCK9.js → bulk-category-panel-Bv7u0cVz.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-ChNs0ivS.js → capability-load-error-BT29-iGb.js} +1 -1
  74. package/dist/client/assets/{card-BSXmZFDc.js → card-5Rb_Xqfz.js} +1 -1
  75. package/dist/client/assets/{cards-C_ZfN-TN.js → cards-B_G-V5EB.js} +1 -1
  76. package/dist/client/assets/{category-editor-BvO3r5Uv.js → category-editor-CBiyVVIp.js} +1 -1
  77. package/dist/client/assets/{chat-context-IT6-9MAd.js → chat-context-DE8oqQMm.js} +1 -1
  78. package/dist/client/assets/{checkbox-BgjJh_IR.js → checkbox-DXz87-OD.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-C7XkmqSU.js → cli-auth-success-CLoy-YOw.js} +1 -1
  80. package/dist/client/assets/{collection-detail-BEWtP7VK.js → collection-detail-DjenOH5N.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-7li8NxCF.js → collection-display-button-HAcA1zNB.js} +1 -1
  82. package/dist/client/assets/{collection-search-Cs9k9yDL.js → collection-search-B8vRELkx.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-DmrgVBtr.js → collection-table-wrapper-dmeIBljS.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-CKgPXLEH.js → collection-tabs-DPMY_x-J.js} +1 -1
  85. package/dist/client/assets/{command-5Lnlz65r.js → command-DCkYtFPP.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-DB4wxRkI.js → commerce-onboarding-BubCCiM9.js} +1 -1
  87. package/dist/client/assets/{connect-DLLr0eli.js → connect-DFSjAS3i.js} +1 -1
  88. package/dist/client/assets/{connection-BeaSWl0G.js → connection-BMDE_Kx3.js} +1 -1
  89. package/dist/client/assets/{connection-card-B4imN2NA.js → connection-card-Dj5rE7Fk.js} +1 -1
  90. package/dist/client/assets/{connection-detail-jZf8lrsJ.js → connection-detail-Cn3FpZ4t.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-BL4WThpd.js → connection-form-helpers-fXMkOBZY.js} +1 -1
  92. package/dist/client/assets/{connections-Daze9dwe.js → connections-ZNrErha7.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-DzGiYipX.js → decopilot-sse-pool-Bj0LCKlQ.js} +1 -1
  94. package/dist/client/assets/{dialog-BJziDe4N.js → dialog-BvrbPs-6.js} +1 -1
  95. package/dist/client/assets/{domain-settings-CNlG2fTt.js → domain-settings-BGJZX2Ns.js} +1 -1
  96. package/dist/client/assets/{drawer-CuRFEVgy.js → drawer-BOKXNEmk.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-B0uYlxff.js → dropdown-menu-9-kVfv87.js} +1 -1
  98. package/dist/client/assets/{empty-state-uZ77Jd0v.js → empty-state-BRcCBPku.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-CTTtSTKN.js → extract-connection-data-DzhoPN_P.js} +1 -1
  100. package/dist/client/assets/{file-explorer-B1hKgrle.js → file-explorer-CjIXC5Rv.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-DRHukJhb.js → file-type-icon-C-O7z9cW.js} +1 -1
  102. package/dist/client/assets/{form-BLZEj5M6.js → form-BkWGGKPy.js} +1 -1
  103. package/dist/client/assets/{general-C9-Gh9Un.js → general-5OKEpMsg.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-DDtjb7BS.js → github-repo-picker-CvUbtmjP.js} +1 -1
  105. package/dist/client/assets/{hooks-8AOqxrL3.js → hooks-CsfuSUZj.js} +1 -1
  106. package/dist/client/assets/{index-BXi8XGVO.js → index-BNWPXTPv.js} +3 -3
  107. package/dist/client/assets/{index-a0gG7b2j.js → index-CBghLFwH.js} +1 -1
  108. package/dist/client/assets/{index-D-mYizx7.js → index-CieJw8he.js} +1 -1
  109. package/dist/client/assets/{index-BbwXrbtX.js → index-DHbvWouA.js} +1 -1
  110. package/dist/client/assets/{index-iB09S4ZI.js → index-DQNX-_yF.js} +24 -24
  111. package/dist/client/assets/{index-CFP6oHuE.js → index-DdlIYbBk.js} +1 -1
  112. package/dist/client/assets/{index-BrfCenfw.js → index-EfBmyxdf.js} +1 -1
  113. package/dist/client/assets/{index-COtjVgHq.js → index-HjHj25r9.js} +1 -1
  114. package/dist/client/assets/{index-BBVhZ0nf.js → index-aFVJqrjv.js} +1 -1
  115. package/dist/client/assets/{index-BJ_5870q.js → index-m1WTOGHi.js} +1 -1
  116. package/dist/client/assets/{index-redirect-BF972uE7.js → index-redirect-C88I6-3z.js} +1 -1
  117. package/dist/client/assets/{input-DuPzhhSH.js → input-CcT8xIHo.js} +1 -1
  118. package/dist/client/assets/{integration-icon-oWKr_bxS.js → integration-icon-CgojibRJ.js} +1 -1
  119. package/dist/client/assets/{invite-member-dialog-CtMeBe4Q.js → invite-member-dialog-8jIxcOVy.js} +1 -1
  120. package/dist/client/assets/{label-BEZ9ozrm.js → label-BsyUGRR3.js} +1 -1
  121. package/dist/client/assets/{layout-Dob62ohh.js → layout-BRu5tKha.js} +1 -1
  122. package/dist/client/assets/{login-Cps8QMpx.js → login-BqEQQgis.js} +1 -1
  123. package/dist/client/assets/{mcp-oauth-DznHTp7Q.js → mcp-oauth-BYKOsbk3.js} +1 -1
  124. package/dist/client/assets/{members-CAYkzsAC.js → members-VzGE0p10.js} +1 -1
  125. package/dist/client/assets/{monaco-editor-Dtn0c3c0.js → monaco-editor-gY8DOGP4.js} +1 -1
  126. package/dist/client/assets/{monitoring-stats-row-C1iTJegD.js → monitoring-stats-row-BZGPRAzy.js} +1 -1
  127. package/dist/client/assets/{multi-select-CReOgu2V.js → multi-select-BKe_T84L.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-CfZVz1X4.js → oauth-callback-C6evABUI.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-ai-provider-B1dx_9ZA.js → oauth-callback-ai-provider-Cr_xINMX.js} +1 -1
  130. package/dist/client/assets/{onboarding-DknY2NdT.js → onboarding-DnvTxriT.js} +1 -1
  131. package/dist/client/assets/{org-layout-KBNyDeMT.js → org-layout-26lBq9YR.js} +1 -1
  132. package/dist/client/assets/{organization-choice-ybvzTqcR.js → organization-choice-BFSTx2JY.js} +1 -1
  133. package/dist/client/assets/{orgs-COLTkKC_.js → orgs-YeMRGNq-.js} +1 -1
  134. package/dist/client/assets/{page-seo-form-1U1qn7k0.js → page-seo-form-xlYAYOwj.js} +1 -1
  135. package/dist/client/assets/{popover-CIeMy6Tl.js → popover-D0s_P7CH.js} +1 -1
  136. package/dist/client/assets/{post-editor-CkHk9dRs.js → post-editor-D5sN7Nms.js} +1 -1
  137. package/dist/client/assets/{primitives-DGQ7OHkr.js → primitives-e7UluGrY.js} +1 -1
  138. package/dist/client/assets/{profile-BRNaLNV6.js → profile-tlrbLr-P.js} +1 -1
  139. package/dist/client/assets/{project-app-view-C5RyuF-3.js → project-app-view-Yq9T-9yy.js} +1 -1
  140. package/dist/client/assets/record-editor-BzA0n2jk.js +1 -0
  141. package/dist/client/assets/{redirect-editor-8_yPdNmf.js → redirect-editor-RmhW_G66.js} +1 -1
  142. package/dist/client/assets/registry-DzdWVaeh.js +2 -0
  143. package/dist/client/assets/{registry-layout-C7e1ipww.js → registry-layout-tvcL6jq6.js} +1 -1
  144. package/dist/client/assets/{reports-DCysDfGk.js → reports-BYeFjwnq.js} +1 -1
  145. package/dist/client/assets/{require-capability-Bmfc_FY6.js → require-capability-728k3qvB.js} +1 -1
  146. package/dist/client/assets/{required-auth-layout-Km00f7IG.js → required-auth-layout-mGvjBzd2.js} +1 -1
  147. package/dist/client/assets/{reset-password-D4fQnma9.js → reset-password-EQfhwsHo.js} +1 -1
  148. package/dist/client/assets/{roles-BqFKhya9.js → roles-imPiWC88.js} +1 -1
  149. package/dist/client/assets/{search-input-DCThR-Dd.js → search-input-DuGrfb1Q.js} +1 -1
  150. package/dist/client/assets/{secrets-BRNaisMH.js → secrets-CvF95Lqx.js} +1 -1
  151. package/dist/client/assets/{sections-editor-DW1awDYx.js → sections-editor-DwHscuXG.js} +1 -1
  152. package/dist/client/assets/{select-C2aLiaQD.js → select-C4STeElu.js} +1 -1
  153. package/dist/client/assets/{select-model-DnRANcdl.js → select-model-DrRhAeB5.js} +1 -1
  154. package/dist/client/assets/{self-tool-result-BWr3V3Nr.js → self-tool-result-C9BZZRd6.js} +1 -1
  155. package/dist/client/assets/{seo-editor-DcJ6zdOl.js → seo-editor-PtOgdxbB.js} +1 -1
  156. package/dist/client/assets/{settings-layout-BaMialle.js → settings-layout-CN8GjoBE.js} +1 -1
  157. package/dist/client/assets/{settings-section-CSObNV42.js → settings-section-DeGxqVCj.js} +1 -1
  158. package/dist/client/assets/{shell-controls-smJY73O8.js → shell-controls-BLf33GG_.js} +1 -1
  159. package/dist/client/assets/{shell-layout-uIkLH9Oh.js → shell-layout-wGeNpRGY.js} +1 -1
  160. package/dist/client/assets/{sidebar-Bo-R194o.js → sidebar-B1OG8SwA.js} +1 -1
  161. package/dist/client/assets/{skeleton-BwgcAM0S.js → skeleton-Dsb1zKg4.js} +1 -1
  162. package/dist/client/assets/{spinner-DEPr-FcG.js → spinner-CTL1mm1a.js} +1 -1
  163. package/dist/client/assets/{sso-CoqOt_Zo.js → sso-DjKMzLp2.js} +1 -1
  164. package/dist/client/assets/{store-w2v-rh3j.js → store-Dku3okyt.js} +1 -1
  165. package/dist/client/assets/store-registry-DqV0YeJC.js +2 -0
  166. package/dist/client/assets/{studio-tools-CIwEdQH6.js → studio-tools-CFxFYM2P.js} +1 -1
  167. package/dist/client/assets/{switch-BPqfZ-jC.js → switch-wQppOTkt.js} +1 -1
  168. package/dist/client/assets/{synced-repos-ZOIM6muH.js → synced-repos-SJ25VxQY.js} +1 -1
  169. package/dist/client/assets/{tab-id-DepDDA9_.js → tab-id-BAiTndPb.js} +1 -1
  170. package/dist/client/assets/{table-K5tRinKE.js → table-Bfid1ezO.js} +1 -1
  171. package/dist/client/assets/{tabs-BI2WYCWM.js → tabs-D70-cJvH.js} +1 -1
  172. package/dist/client/assets/{textarea-D00WtAVC.js → textarea-v2VX_RRe.js} +1 -1
  173. package/dist/client/assets/{toggle-group-BQuU-V-J.js → toggle-group-B3H92BwS.js} +1 -1
  174. package/dist/client/assets/{toolbar-2JK6-CKe.js → toolbar-C-UuCpzh.js} +1 -1
  175. package/dist/client/assets/{tooltip-dxFFf5TO.js → tooltip-iNGn4NMv.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-pOnoTtq9.js → use-ai-providers-DJode_QP.js} +1 -1
  177. package/dist/client/assets/{use-automations-BhU30_ns.js → use-automations-CqP4WfAs.js} +1 -1
  178. package/dist/client/assets/{use-autosave-DVVHS6oi.js → use-autosave-CHIZVZgc.js} +1 -1
  179. package/dist/client/assets/{use-capability-DtqmBc0p.js → use-capability-DTlMipF2.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-B7KDRjlj.js → use-clock-tick-BTSaM10O.js} +1 -1
  181. package/dist/client/assets/{use-connection-1XceIaVt.js → use-connection-DG8Acgcp.js} +1 -1
  182. package/dist/client/assets/{use-copy-D6dj3bWn.js → use-copy-D-8X95YO.js} +1 -1
  183. package/dist/client/assets/{use-create-virtual-mcp-CzcLHs5g.js → use-create-virtual-mcp-Dwy1UpsV.js} +1 -1
  184. package/dist/client/assets/{use-debounced-autosave-DlgUqdX2.js → use-debounced-autosave-CFuNMc5J.js} +1 -1
  185. package/dist/client/assets/{use-debounced-value-sAF9FOgW.js → use-debounced-value-DqrL7HqH.js} +1 -1
  186. package/dist/client/assets/{use-deco-credits-D-5thmbQ.js → use-deco-credits-DmJBwJBY.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-CL16kVza.js → use-decopilot-events-C-XAHGl5.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-BAO101Zg.js → use-delete-connection-Dmt2icE8.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-QIdZGKie.js → use-deployment-admin-DQlgjLZ9.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-CCGLmbGB.js → use-file-configs-bPaw1wqW.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-0GwuWQ18.js → use-infinite-scroll-DcD1QYTx.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-bV_612yf.js → use-join-requests-Dxdvf2gX.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-XuHEw0sL.js → use-mcp-client-BMeizkyl.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-DMU5G4E6.js → use-mcp-tools-DL1eCDkR.js} +1 -1
  195. package/dist/client/assets/{use-members-B17dnJUi.js → use-members-DTiNhtXb.js} +1 -1
  196. package/dist/client/assets/{use-mobile-CLmBmZlL.js → use-mobile-CTe9DTnn.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-CesLlenP.js → use-navigate-to-agent-LL6-iK5T.js} +1 -1
  198. package/dist/client/assets/{use-open-billing-url-CqXZzDqc.js → use-open-billing-url-JkgZfNd-.js} +1 -1
  199. package/dist/client/assets/{use-org-auth-client-DK9eV4Q0.js → use-org-auth-client-C6DDeKq6.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-BXikBwjB.js → use-org-sso-BTP8H26F.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-B2laqgqT.js → use-organization-roles-Ct0aen4I.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-DYNBSfY0.js → use-organization-settings-Bmi0Z0Zg.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-dmTn3QTb.js → use-registry-connections-CJRPtsWQ.js} +1 -1
  204. package/dist/client/assets/{use-secrets-hMAD_KTZ.js → use-secrets-Fii-55vz.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-PhK7SdcU.js → use-section-preview-base-Du17Ut-r.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-DwKPBF6E.js → use-status-sounds-ByWLFhVr.js} +1 -1
  207. package/dist/client/assets/{use-tags-L_TWFhNu.js → use-tags-DwMw8t0o.js} +1 -1
  208. package/dist/client/assets/{use-view-mode-DqkubEXN.js → use-view-mode-Fe0Tzboh.js} +1 -1
  209. package/dist/client/assets/{use-virtual-mcp-DF86UjN0.js → use-virtual-mcp-Ban7u2eD.js} +1 -1
  210. package/dist/client/assets/useInfiniteQuery-Imyx_ENS.js +1 -0
  211. package/dist/client/assets/{useRouterState-D2ZtXguJ.js → useRouterState-CD7zNDDP.js} +1 -1
  212. package/dist/client/assets/useSuspenseInfiniteQuery-75sxugRj.js +1 -0
  213. package/dist/client/assets/{users-CvU9p_s9.js → users-D7aCS9z5.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-_7CExyc2.js → variant-calendar-BfJkA0Sq.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-CpJaPhlH.js → view-mode-toggle-xZRd88GJ.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +1 -1
  218. package/dist/server/server.js +1 -1
  219. package/package.json +1 -1
  220. package/dist/client/assets/record-editor-COdvBBun.js +0 -1
  221. package/dist/client/assets/registry-rkWiCYrV.js +0 -2
  222. package/dist/client/assets/store-registry-DqEl1DEk.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-CaMxVBWb.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-CGDHD714.js +0 -1
@@ -1332,7 +1332,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var Cc1=O(()=>{kx()});f
1332
1332
  `.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await Xb`
1333
1333
  DELETE FROM kysely_migration WHERE name = ${X}
1334
1334
  `.execute($)}}async function pi1($){await zc6($),await jc6($);let Z=new ii1({db:$,provider:{getMigrations:()=>Promise.resolve(hl0)}}),{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 Pc6($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Fh0();let G=X??U6(),J=async()=>{if(!Z&&!X)await Bw(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await pi1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function Ac6(){let $=U6(),Z=new ii1({db:$.db,provider:{getMigrations:()=>Promise.resolve(hl0)}}),{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 oi1=O(()=>{mi1();wh0();o7()});async function i50($){let Z={...process.env},X=h00($,Z);console.log(NF1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?Wd1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (X50(),Z50)),{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(() => (wh0(),Ud1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (o7(),ql1)),{migrateToLatest:U}=await Promise.resolve().then(() => (oi1(),ti1)),N=H(G.databaseUrl);await U({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 _c1(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 ul0=O(()=>{kx();Hd1();b8()});var si1={};w0(si1,{updateService:()=>pD,subscribeCliState:()=>dl0,setTuiConsoleIntercepted:()=>n50,setServerUrl:()=>km,setMigrationsDone:()=>Mm,setDevMode:()=>Ic6,resetCliStateForTests:()=>Tc6,isTuiConsoleIntercepted:()=>p50,getCliState:()=>ll0,addLogEntry:()=>zw});function ri1(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function Tc6(){SQ=ri1()}function Rc6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function qm(){for(let $ of cl0)$()}function ll0(){return SQ}function dl0($){return cl0.add($),()=>cl0.delete($)}function pD($){SQ={...SQ,services:SQ.services.map((Z)=>Z.name===$.name?$:Z)},qm()}function Mm(){SQ={...SQ,migrationsStatus:"done"},qm()}function km($){SQ={...SQ,serverUrl:$},qm()}function zw($){let Z=[...SQ.logs,$];SQ={...SQ,logs:Z.length>500?Z.slice(-500):Z},qm()}function Ic6(){SQ={...SQ,services:[...Rc6(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},qm()}function n50($){ai1=$}function p50(){return ai1}var SQ,cl0,ai1=!1;var tD=O(()=>{SQ=ri1();cl0=new Set});import{createServer as ei1}from"net";function qc6($){return new Promise((Z)=>{let X=ei1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function Vm($){if(await qc6($))return $;let Z=await new Promise((X,Q)=>{let Y=ei1();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 ml0=()=>{};function Sm($){return $.replace(/\x1b\[[0-9;]*m/g,"")}var il0={};w0(il0,{startDevServer:()=>kc6});import{join as Mc6}from"path";function $n1($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
1335
- `);Q=G.pop()??"";for(let J of G){let K=Sm(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;zw({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=Sm(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)zw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function kc6($){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 Vm(Number(Y)+1):await Vm(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await i50({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)pD({name:L.name,status:"ready",port:L.port});Mm();let U=Mc6(import.meta.dir,"..","..","..","..",".."),N=X===!0,F=Bun.spawn(["bun","run","dev:servers"],{cwd:U,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)$n1(F.stdout),$n1(F.stderr);km(G),pD({name:"Vite",status:"ready",port:Number(Y)}),pD({name:"API",status:"ready",port:Number(K.port)});let B=async(L)=>{if(F.kill(L),await F.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (X50(),Z50));await D(K.dataDir)}};return process.on("SIGINT",()=>B("SIGINT")),process.on("SIGTERM",()=>B("SIGTERM")),{port:Number(Y),process:F}}var nl0=O(()=>{ul0();tD();ml0()});var t50;var pl0=O(()=>{t50={name:"decocms",version:"4.197.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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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 Sc6,Text as Zn1}from"ink";import{jsx as Cc6,jsxs as Xn1}from"react/jsx-runtime";function Qn1({version:$}){return Xn1(Sc6,{flexDirection:"column",marginTop:1,children:[T50.map((Z,X)=>Cc6(Zn1,{color:R50[X],children:Z},X)),Xn1(Zn1,{dimColor:!0,children:[" v",$]})]})}var Yn1=O(()=>{Om()});import{Box as oD,Text as jw}from"ink";import{Spinner as _c6}from"@inkjs/ui";import{jsx as hY,jsxs as Qb}from"react/jsx-runtime";function Gn1({status:$}){if($==="pending")return hY(_c6,{label:""});return hY(jw,{color:"green",children:"\u2713"})}function vc6($){return`${$.name}: ${$.port||"...."}`}function Jn1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return Qb(oD,{flexDirection:"column",paddingBottom:1,children:[hY(Qn1,{version:t50.version}),hY(oD,{marginBottom:1,children:hY(jw,{dimColor:!0,children:"\u2500".repeat(80)})}),hY(oD,{children:Qb(jw,{dimColor:!0,children:["Home: ",X]})}),Qb(oD,{gap:2,children:[$.map((Y)=>Qb(oD,{gap:1,children:[hY(jw,{children:vc6(Y)}),hY(Gn1,{status:Y.status})]},Y.name)),Qb(oD,{gap:1,children:[hY(jw,{children:"Migrations"}),hY(Gn1,{status:Z})]})]}),hY(oD,{children:Q?Qb(jw,{children:["Open in browser: ",hY(jw,{color:"cyan",children:Q})]}):hY(jw,{dimColor:!0,children:"Starting..."})})]})}var Kn1=O(()=>{pl0();Yn1()});import{Box as xc6,Text as Cm}from"ink";import{jsx as tl0,jsxs as ol0}from"react/jsx-runtime";function fc6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Wn1({logs:$}){return tl0(xc6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return tl0(Cm,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return ol0(Cm,{children:[ol0(Cm,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),tl0(Cm,{color:fc6(Z.status),children:Z.status}),ol0(Cm,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Hn1=()=>{};var rl0={};w0(rl0,{App:()=>gc6});import{Box as bc6}from"ink";import{useSyncExternalStore as yc6}from"react";import{jsx as Un1,jsxs as hc6}from"react/jsx-runtime";function gc6({home:$}){let Z=yc6(dl0,ll0);return hc6(bc6,{flexDirection:"column",children:[Un1(Jn1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Un1(Wn1,{logs:Z.logs})]})}var al0=O(()=>{Kn1();Hn1();tD()});var NJ="thread-gate",_U="decopilot-hosted-harness",nG="automations",Pw="background-tools";var Nn1="7";function Fn1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Nn1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var wn1=()=>{};function uc6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function sl0($,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 Bn1(){let $=uc6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:sl0($,"--cpu-prof-dir")??process.cwd(),name:sl0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(sl0($,"--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 On1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=dD();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(()=>{}),o50=setInterval(()=>void Z().catch(()=>{}),$),o50.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(o50)clearInterval(o50)}}var o50;var Ln1=()=>{};import*as cc6 from"bun:jsc";function Dn1(){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{lc6()}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=dc6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let U of K){let N=U.frames.find((B)=>B.sourceURL&&!/Unknown Executable/.test(B.category??""))??U.frames[0];if(!N)continue;let F=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${N.name??"?"} @ ${F}:${N.line??"?"}`;W.set(w,(W.get(w)??0)+1)}let H=[...W.entries()].sort((U,N)=>N[1]-U[1]).slice(0,8).map(([U,N])=>({frame:U,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 lc6,dc6;var En1=O(()=>{({startSamplingProfiler:lc6,samplingProfilerStackTraces:dc6}=cc6)});function zn1(){Bn1();let $=[On1(),El1(),Dn1()];return()=>{for(let Z of $)Z()}}var jn1=O(()=>{Xh0();Ln1();En1()});var rD=_((Pn1)=>{Object.defineProperty(Pn1,"__esModule",{value:!0});Pn1.RepublishHeaders=Pn1.DirectMsgHeaders=Pn1.JsHeaders=Pn1.AdvisoryKind=void 0;Pn1.isOrderedPushConsumerOptions=mc6;Pn1.isPullConsumer=ic6;Pn1.isPushConsumer=nc6;Pn1.isBoundPushConsumerOptions=pc6;function mc6($){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 ic6($){return $.isPullConsumer()}function nc6($){return $.isPushConsumer()}function pc6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Pn1.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"};Pn1.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"};Pn1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Pn1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var uY=_((Tn1)=>{Object.defineProperty(Tn1,"__esModule",{value:!0});Tn1.TD=Tn1.TE=Tn1.Empty=void 0;Tn1.encode=Xl6;Tn1.decode=Ql6;Tn1.Empty=new Uint8Array(0);Tn1.TE=new TextEncoder;Tn1.TD=new TextDecoder;function Zl6(...$){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 Xl6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(Tn1.TE.encode($[X]));if(Z.length===0)return Tn1.Empty;if(Z.length===1)return Z[0];return Zl6(...Z)}function Ql6($){if(!$||$.length===0)return"";return Tn1.TD.decode($)}});var cY=_((qn1)=>{Object.defineProperty(qn1,"__esModule",{value:!0});qn1.errors=qn1.PermissionViolationError=qn1.NoRespondersError=qn1.TimeoutError=qn1.RequestError=qn1.ProtocolError=qn1.ConnectionError=qn1.DrainingConnectionError=qn1.ClosedConnectionError=qn1.AuthorizationError=qn1.UserAuthenticationExpiredError=qn1.InvalidOperationError=qn1.InvalidArgumentError=qn1.InvalidSubjectError=void 0;class $d0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}qn1.InvalidSubjectError=$d0;class r50 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 r50(`${$} ${Z}`,X)}}qn1.InvalidArgumentError=r50;class Zd0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}qn1.InvalidOperationError=Zd0;class a50 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new a50($);return null}}qn1.UserAuthenticationExpiredError=a50;class s50 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 s50($);return null}}qn1.AuthorizationError=s50;class Xd0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}qn1.ClosedConnectionError=Xd0;class Qd0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}qn1.DrainingConnectionError=Qd0;class Yd0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}qn1.ConnectionError=Yd0;class Gd0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}qn1.ProtocolError=Gd0;class Jd0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof e50}}qn1.RequestError=Jd0;class Kd0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}qn1.TimeoutError=Kd0;class e50 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}qn1.NoRespondersError=e50;class $90 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 $90($,X,Q,Y)}}qn1.PermissionViolationError=$90;qn1.errors={AuthorizationError:s50,ClosedConnectionError:Xd0,ConnectionError:Yd0,DrainingConnectionError:Qd0,InvalidArgumentError:r50,InvalidOperationError:Zd0,InvalidSubjectError:$d0,NoRespondersError:e50,PermissionViolationError:$90,ProtocolError:Gd0,RequestError:Jd0,TimeoutError:Kd0,UserAuthenticationExpiredError:a50}});var FJ=_((Cn1)=>{Object.defineProperty(Cn1,"__esModule",{value:!0});Cn1.SimpleMutex=Cn1.Perf=void 0;Cn1.extend=jl6;Cn1.render=Pl6;Cn1.timeout=Al6;Cn1.delay=Tl6;Cn1.deadline=Rl6;Cn1.deferred=Hd0;Cn1.debugDeferred=Il6;Cn1.shuffle=ql6;Cn1.collect=Ml6;Cn1.jitter=Sn1;Cn1.backoff=kl6;Cn1.nanos=Vl6;Cn1.millis=Sl6;Cn1.randomToken=vl6;var zl6=uY(),Wd0=cY();function jl6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function Pl6($){return zl6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Al6($,Z=!0){let X=Z?new Wd0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new Wd0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function Tl6($=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 Rl6($,Z=1000){let X=Hd0(),Q=setTimeout(()=>{X.reject(new Wd0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Hd0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Il6(){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 ql6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function Ml6($){let Z=[];for await(let X of $)Z.push(X);return Z}class kn1{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})}),$}}Cn1.Perf=kn1;class Vn1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Hd0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Cn1.SimpleMutex=Vn1;function Sn1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function kl6($=[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 Sn1(X>Z?$[Z]:$[X])}}}function Vl6($){return $*1e6}function Sl6($){return Math.floor($/1e6)}var Cl6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",vU=new Uint8Array(62);for(let $=0;$<62;$++)vU[$]=Cl6.charCodeAt($);var _l6=218340105584896;function vl6(){let $=Math.floor(Math.random()*_l6),Z=$%62,X=vU[Z];$=($-Z)/62,Z=$%62;let Q=vU[Z];$=($-Z)/62,Z=$%62;let Y=vU[Z];$=($-Z)/62,Z=$%62;let G=vU[Z];$=($-Z)/62,Z=$%62;let J=vU[Z];$=($-Z)/62,Z=$%62;let K=vU[Z];$=($-Z)/62,Z=$%62;let W=vU[Z];$=($-Z)/62;let H=vU[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var hn1=_((yn1)=>{Object.defineProperty(yn1,"__esModule",{value:!0});yn1.nuid=yn1.NuidImpl=void 0;var ol6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Aw=62,X90=12,fn1=10,vn1=33,rl6=333,xn1=X90+fn1,Nd0=new Uint8Array(Aw);for(let $=0;$<Aw;$++)Nd0[$]=ol6.charCodeAt($);var Z90=4294967296,bn1=BigInt(Aw)**BigInt(fn1),_m=Number(bn1/(1n<<32n)),Ud0=Number(bn1%(1n<<32n));function al6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function sl6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else al6($)}class Fd0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(xn1),this.cbuf=new Uint8Array(X90),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(_m+1)),this.seqLo=Math.floor(Math.random()*Z90);while($++<8&&this.seqHi===_m&&this.seqLo>=Ud0);if(this.seqHi===_m&&this.seqLo>=Ud0)this.seqLo=0;this.inc=Math.random()*(rl6-vn1)+vn1|0}setPre(){sl6(this.cbuf);for(let $=0;$<X90;$++)this.buf[$]=Nd0[this.cbuf[$]%Aw]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=xn1-1;X>=X90;X--){let Q=Math.floor($/Aw),G=($-Q*Aw)*Z90+Z,J=Math.floor(G/Aw),K=G-J*Aw;this.buf[X]=Nd0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=Z90)this.seqLo-=Z90,this.seqHi+=1;if(this.seqHi>_m||this.seqHi===_m&&this.seqLo>=Ud0)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()}}yn1.NuidImpl=Fd0;yn1.nuid=new Fd0});var dn1=_((cn1)=>{Object.defineProperty(cn1,"__esModule",{value:!0});cn1.nuid=cn1.Nuid=void 0;var un1=hn1();cn1.Nuid=un1.NuidImpl;cn1.nuid=un1.nuid});var Y90=_((Q90)=>{Object.defineProperty(Q90,"__esModule",{value:!0});Q90.nuid=Q90.Nuid=void 0;var mn1=dn1();Object.defineProperty(Q90,"Nuid",{enumerable:!0,get:function(){return mn1.Nuid}});Object.defineProperty(Q90,"nuid",{enumerable:!0,get:function(){return mn1.nuid}})});var Tw=_((in1)=>{Object.defineProperty(in1,"__esModule",{value:!0});in1.DEFAULT_HOST=in1.DEFAULT_PORT=in1.Match=void 0;in1.syncIterator=Yd6;in1.createInbox=Gd6;var Xd6=Y90(),Qd6=cY();in1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Yd6($){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 Gd6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Qd6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Xd6.nuid.next()}`}in1.DEFAULT_PORT=4222;in1.DEFAULT_HOST="127.0.0.1"});var vm=_((on1)=>{Object.defineProperty(on1,"__esModule",{value:!0});on1.DataBuffer=void 0;var pn1=uY();class tn1{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 pn1.TE.encode($)}static toAscii($){return pn1.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}}on1.DataBuffer=tn1});var aD=_((sn1)=>{Object.defineProperty(sn1,"__esModule",{value:!0});sn1.LF=sn1.CR=sn1.CRLF=sn1.CR_LF_LEN=sn1.CR_LF=void 0;sn1.setTransportFactory=wd6;sn1.defaultPort=Bd6;sn1.getUrlParseFn=Od6;sn1.newTransport=Ld6;sn1.getResolveFn=Dd6;sn1.protoLen=an1;sn1.extractProtocolMessage=Ed6;var Ud6=uY(),Nd6=Tw(),Fd6=vm(),lY;function wd6($){lY=$}function Bd6(){return lY!==void 0&&lY.defaultPort!==void 0?lY.defaultPort:Nd6.DEFAULT_PORT}function Od6(){return lY!==void 0&&lY.urlParseFn?lY.urlParseFn:void 0}function Ld6(){if(!lY||typeof lY.factory!=="function")throw Error("transport fn is not set");return lY.factory()}function Dd6(){return lY!==void 0&&lY.dnsResolveFn?lY.dnsResolveFn:void 0}sn1.CR_LF=`\r
1335
+ `);Q=G.pop()??"";for(let J of G){let K=Sm(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;zw({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=Sm(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)zw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function kc6($){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 Vm(Number(Y)+1):await Vm(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await i50({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)pD({name:L.name,status:"ready",port:L.port});Mm();let U=Mc6(import.meta.dir,"..","..","..","..",".."),N=X===!0,F=Bun.spawn(["bun","run","dev:servers"],{cwd:U,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)$n1(F.stdout),$n1(F.stderr);km(G),pD({name:"Vite",status:"ready",port:Number(Y)}),pD({name:"API",status:"ready",port:Number(K.port)});let B=async(L)=>{if(F.kill(L),await F.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (X50(),Z50));await D(K.dataDir)}};return process.on("SIGINT",()=>B("SIGINT")),process.on("SIGTERM",()=>B("SIGTERM")),{port:Number(Y),process:F}}var nl0=O(()=>{ul0();tD();ml0()});var t50;var pl0=O(()=>{t50={name:"decocms",version:"4.197.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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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 Sc6,Text as Zn1}from"ink";import{jsx as Cc6,jsxs as Xn1}from"react/jsx-runtime";function Qn1({version:$}){return Xn1(Sc6,{flexDirection:"column",marginTop:1,children:[T50.map((Z,X)=>Cc6(Zn1,{color:R50[X],children:Z},X)),Xn1(Zn1,{dimColor:!0,children:[" v",$]})]})}var Yn1=O(()=>{Om()});import{Box as oD,Text as jw}from"ink";import{Spinner as _c6}from"@inkjs/ui";import{jsx as hY,jsxs as Qb}from"react/jsx-runtime";function Gn1({status:$}){if($==="pending")return hY(_c6,{label:""});return hY(jw,{color:"green",children:"\u2713"})}function vc6($){return`${$.name}: ${$.port||"...."}`}function Jn1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return Qb(oD,{flexDirection:"column",paddingBottom:1,children:[hY(Qn1,{version:t50.version}),hY(oD,{marginBottom:1,children:hY(jw,{dimColor:!0,children:"\u2500".repeat(80)})}),hY(oD,{children:Qb(jw,{dimColor:!0,children:["Home: ",X]})}),Qb(oD,{gap:2,children:[$.map((Y)=>Qb(oD,{gap:1,children:[hY(jw,{children:vc6(Y)}),hY(Gn1,{status:Y.status})]},Y.name)),Qb(oD,{gap:1,children:[hY(jw,{children:"Migrations"}),hY(Gn1,{status:Z})]})]}),hY(oD,{children:Q?Qb(jw,{children:["Open in browser: ",hY(jw,{color:"cyan",children:Q})]}):hY(jw,{dimColor:!0,children:"Starting..."})})]})}var Kn1=O(()=>{pl0();Yn1()});import{Box as xc6,Text as Cm}from"ink";import{jsx as tl0,jsxs as ol0}from"react/jsx-runtime";function fc6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Wn1({logs:$}){return tl0(xc6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return tl0(Cm,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return ol0(Cm,{children:[ol0(Cm,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),tl0(Cm,{color:fc6(Z.status),children:Z.status}),ol0(Cm,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Hn1=()=>{};var rl0={};w0(rl0,{App:()=>gc6});import{Box as bc6}from"ink";import{useSyncExternalStore as yc6}from"react";import{jsx as Un1,jsxs as hc6}from"react/jsx-runtime";function gc6({home:$}){let Z=yc6(dl0,ll0);return hc6(bc6,{flexDirection:"column",children:[Un1(Jn1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Un1(Wn1,{logs:Z.logs})]})}var al0=O(()=>{Kn1();Hn1();tD()});var NJ="thread-gate",_U="decopilot-hosted-harness",nG="automations",Pw="background-tools";var Nn1="7";function Fn1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Nn1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var wn1=()=>{};function uc6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function sl0($,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 Bn1(){let $=uc6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:sl0($,"--cpu-prof-dir")??process.cwd(),name:sl0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(sl0($,"--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 On1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=dD();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(()=>{}),o50=setInterval(()=>void Z().catch(()=>{}),$),o50.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(o50)clearInterval(o50)}}var o50;var Ln1=()=>{};import*as cc6 from"bun:jsc";function Dn1(){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{lc6()}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=dc6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let U of K){let N=U.frames.find((B)=>B.sourceURL&&!/Unknown Executable/.test(B.category??""))??U.frames[0];if(!N)continue;let F=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${N.name??"?"} @ ${F}:${N.line??"?"}`;W.set(w,(W.get(w)??0)+1)}let H=[...W.entries()].sort((U,N)=>N[1]-U[1]).slice(0,8).map(([U,N])=>({frame:U,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 lc6,dc6;var En1=O(()=>{({startSamplingProfiler:lc6,samplingProfilerStackTraces:dc6}=cc6)});function zn1(){Bn1();let $=[On1(),El1(),Dn1()];return()=>{for(let Z of $)Z()}}var jn1=O(()=>{Xh0();Ln1();En1()});var rD=_((Pn1)=>{Object.defineProperty(Pn1,"__esModule",{value:!0});Pn1.RepublishHeaders=Pn1.DirectMsgHeaders=Pn1.JsHeaders=Pn1.AdvisoryKind=void 0;Pn1.isOrderedPushConsumerOptions=mc6;Pn1.isPullConsumer=ic6;Pn1.isPushConsumer=nc6;Pn1.isBoundPushConsumerOptions=pc6;function mc6($){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 ic6($){return $.isPullConsumer()}function nc6($){return $.isPushConsumer()}function pc6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Pn1.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"};Pn1.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"};Pn1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Pn1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var uY=_((Tn1)=>{Object.defineProperty(Tn1,"__esModule",{value:!0});Tn1.TD=Tn1.TE=Tn1.Empty=void 0;Tn1.encode=Xl6;Tn1.decode=Ql6;Tn1.Empty=new Uint8Array(0);Tn1.TE=new TextEncoder;Tn1.TD=new TextDecoder;function Zl6(...$){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 Xl6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(Tn1.TE.encode($[X]));if(Z.length===0)return Tn1.Empty;if(Z.length===1)return Z[0];return Zl6(...Z)}function Ql6($){if(!$||$.length===0)return"";return Tn1.TD.decode($)}});var cY=_((qn1)=>{Object.defineProperty(qn1,"__esModule",{value:!0});qn1.errors=qn1.PermissionViolationError=qn1.NoRespondersError=qn1.TimeoutError=qn1.RequestError=qn1.ProtocolError=qn1.ConnectionError=qn1.DrainingConnectionError=qn1.ClosedConnectionError=qn1.AuthorizationError=qn1.UserAuthenticationExpiredError=qn1.InvalidOperationError=qn1.InvalidArgumentError=qn1.InvalidSubjectError=void 0;class $d0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}qn1.InvalidSubjectError=$d0;class r50 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 r50(`${$} ${Z}`,X)}}qn1.InvalidArgumentError=r50;class Zd0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}qn1.InvalidOperationError=Zd0;class a50 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new a50($);return null}}qn1.UserAuthenticationExpiredError=a50;class s50 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 s50($);return null}}qn1.AuthorizationError=s50;class Xd0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}qn1.ClosedConnectionError=Xd0;class Qd0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}qn1.DrainingConnectionError=Qd0;class Yd0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}qn1.ConnectionError=Yd0;class Gd0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}qn1.ProtocolError=Gd0;class Jd0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof e50}}qn1.RequestError=Jd0;class Kd0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}qn1.TimeoutError=Kd0;class e50 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}qn1.NoRespondersError=e50;class $90 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 $90($,X,Q,Y)}}qn1.PermissionViolationError=$90;qn1.errors={AuthorizationError:s50,ClosedConnectionError:Xd0,ConnectionError:Yd0,DrainingConnectionError:Qd0,InvalidArgumentError:r50,InvalidOperationError:Zd0,InvalidSubjectError:$d0,NoRespondersError:e50,PermissionViolationError:$90,ProtocolError:Gd0,RequestError:Jd0,TimeoutError:Kd0,UserAuthenticationExpiredError:a50}});var FJ=_((Cn1)=>{Object.defineProperty(Cn1,"__esModule",{value:!0});Cn1.SimpleMutex=Cn1.Perf=void 0;Cn1.extend=jl6;Cn1.render=Pl6;Cn1.timeout=Al6;Cn1.delay=Tl6;Cn1.deadline=Rl6;Cn1.deferred=Hd0;Cn1.debugDeferred=Il6;Cn1.shuffle=ql6;Cn1.collect=Ml6;Cn1.jitter=Sn1;Cn1.backoff=kl6;Cn1.nanos=Vl6;Cn1.millis=Sl6;Cn1.randomToken=vl6;var zl6=uY(),Wd0=cY();function jl6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function Pl6($){return zl6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Al6($,Z=!0){let X=Z?new Wd0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new Wd0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function Tl6($=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 Rl6($,Z=1000){let X=Hd0(),Q=setTimeout(()=>{X.reject(new Wd0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Hd0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Il6(){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 ql6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function Ml6($){let Z=[];for await(let X of $)Z.push(X);return Z}class kn1{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})}),$}}Cn1.Perf=kn1;class Vn1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Hd0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Cn1.SimpleMutex=Vn1;function Sn1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function kl6($=[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 Sn1(X>Z?$[Z]:$[X])}}}function Vl6($){return $*1e6}function Sl6($){return Math.floor($/1e6)}var Cl6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",vU=new Uint8Array(62);for(let $=0;$<62;$++)vU[$]=Cl6.charCodeAt($);var _l6=218340105584896;function vl6(){let $=Math.floor(Math.random()*_l6),Z=$%62,X=vU[Z];$=($-Z)/62,Z=$%62;let Q=vU[Z];$=($-Z)/62,Z=$%62;let Y=vU[Z];$=($-Z)/62,Z=$%62;let G=vU[Z];$=($-Z)/62,Z=$%62;let J=vU[Z];$=($-Z)/62,Z=$%62;let K=vU[Z];$=($-Z)/62,Z=$%62;let W=vU[Z];$=($-Z)/62;let H=vU[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var hn1=_((yn1)=>{Object.defineProperty(yn1,"__esModule",{value:!0});yn1.nuid=yn1.NuidImpl=void 0;var ol6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Aw=62,X90=12,fn1=10,vn1=33,rl6=333,xn1=X90+fn1,Nd0=new Uint8Array(Aw);for(let $=0;$<Aw;$++)Nd0[$]=ol6.charCodeAt($);var Z90=4294967296,bn1=BigInt(Aw)**BigInt(fn1),_m=Number(bn1/(1n<<32n)),Ud0=Number(bn1%(1n<<32n));function al6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function sl6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else al6($)}class Fd0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(xn1),this.cbuf=new Uint8Array(X90),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(_m+1)),this.seqLo=Math.floor(Math.random()*Z90);while($++<8&&this.seqHi===_m&&this.seqLo>=Ud0);if(this.seqHi===_m&&this.seqLo>=Ud0)this.seqLo=0;this.inc=Math.random()*(rl6-vn1)+vn1|0}setPre(){sl6(this.cbuf);for(let $=0;$<X90;$++)this.buf[$]=Nd0[this.cbuf[$]%Aw]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=xn1-1;X>=X90;X--){let Q=Math.floor($/Aw),G=($-Q*Aw)*Z90+Z,J=Math.floor(G/Aw),K=G-J*Aw;this.buf[X]=Nd0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=Z90)this.seqLo-=Z90,this.seqHi+=1;if(this.seqHi>_m||this.seqHi===_m&&this.seqLo>=Ud0)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()}}yn1.NuidImpl=Fd0;yn1.nuid=new Fd0});var dn1=_((cn1)=>{Object.defineProperty(cn1,"__esModule",{value:!0});cn1.nuid=cn1.Nuid=void 0;var un1=hn1();cn1.Nuid=un1.NuidImpl;cn1.nuid=un1.nuid});var Y90=_((Q90)=>{Object.defineProperty(Q90,"__esModule",{value:!0});Q90.nuid=Q90.Nuid=void 0;var mn1=dn1();Object.defineProperty(Q90,"Nuid",{enumerable:!0,get:function(){return mn1.Nuid}});Object.defineProperty(Q90,"nuid",{enumerable:!0,get:function(){return mn1.nuid}})});var Tw=_((in1)=>{Object.defineProperty(in1,"__esModule",{value:!0});in1.DEFAULT_HOST=in1.DEFAULT_PORT=in1.Match=void 0;in1.syncIterator=Yd6;in1.createInbox=Gd6;var Xd6=Y90(),Qd6=cY();in1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Yd6($){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 Gd6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Qd6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Xd6.nuid.next()}`}in1.DEFAULT_PORT=4222;in1.DEFAULT_HOST="127.0.0.1"});var vm=_((on1)=>{Object.defineProperty(on1,"__esModule",{value:!0});on1.DataBuffer=void 0;var pn1=uY();class tn1{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 pn1.TE.encode($)}static toAscii($){return pn1.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}}on1.DataBuffer=tn1});var aD=_((sn1)=>{Object.defineProperty(sn1,"__esModule",{value:!0});sn1.LF=sn1.CR=sn1.CRLF=sn1.CR_LF_LEN=sn1.CR_LF=void 0;sn1.setTransportFactory=wd6;sn1.defaultPort=Bd6;sn1.getUrlParseFn=Od6;sn1.newTransport=Ld6;sn1.getResolveFn=Dd6;sn1.protoLen=an1;sn1.extractProtocolMessage=Ed6;var Ud6=uY(),Nd6=Tw(),Fd6=vm(),lY;function wd6($){lY=$}function Bd6(){return lY!==void 0&&lY.defaultPort!==void 0?lY.defaultPort:Nd6.DEFAULT_PORT}function Od6(){return lY!==void 0&&lY.urlParseFn?lY.urlParseFn:void 0}function Ld6(){if(!lY||typeof lY.factory!=="function")throw Error("transport fn is not set");return lY.factory()}function Dd6(){return lY!==void 0&&lY.dnsResolveFn?lY.dnsResolveFn:void 0}sn1.CR_LF=`\r
1336
1336
  `;sn1.CR_LF_LEN=sn1.CR_LF.length;sn1.CRLF=Fd6.DataBuffer.fromAscii(sn1.CR_LF);sn1.CR=new Uint8Array(sn1.CRLF)[0];sn1.LF=new Uint8Array(sn1.CRLF)[1];function an1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===sn1.CR&&$[X]===sn1.LF)return X+1}return 0}function Ed6($){let Z=an1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return Ud6.TD.decode(Q)}return""}});var Dd0=_((Jp1)=>{Object.defineProperty(Jp1,"__esModule",{value:!0});Jp1.ipV4=Qp1;Jp1.isIP=Vd6;Jp1.parseIP=Yp1;var xm=4,sD=16,G90=48,Xp1=57,$p1=65,Md6=70,Zp1=97,kd6=102,Ld0=16777215;function Qp1($,Z,X,Q){let Y=new Uint8Array(sD);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 Vd6($){return Yp1($)!==void 0}function Yp1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return Gp1($);case":":return Sd6($)}return}function Gp1($){let Z=new Uint8Array(xm);for(let X=0;X<xm;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=Cd6($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return Qp1(Z[0],Z[1],Z[2],Z[3])}function Sd6($){let Z=new Uint8Array(sD),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<sD){let{n:Y,c:G,ok:J}=_d6($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=sD-xm)return;if(Q+xm>sD)return;let K=Gp1($);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+=xm;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<sD){if(X<0)return;let Y=sD-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 Cd6($){let Z=0,X=0;for(Z=0;Z<$.length&&G90<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=Xp1;Z++)if(X=X*10+($.charCodeAt(Z)-G90),X>=Ld0)return{n:Ld0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function _d6($){let Z=0,X=0;for(X=0;X<$.length;X++){if(G90<=$.charCodeAt(X)&&$.charCodeAt(X)<=Xp1)Z*=16,Z+=$.charCodeAt(X)-G90;else if(Zp1<=$.charCodeAt(X)&&$.charCodeAt(X)<=kd6)Z*=16,Z+=$.charCodeAt(X)-Zp1+10;else if($p1<=$.charCodeAt(X)&&$.charCodeAt(X)<=Md6)Z*=16,Z+=$.charCodeAt(X)-$p1+10;else break;if(Z>=Ld0)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 Td0=_((Wp1)=>{Object.defineProperty(Wp1,"__esModule",{value:!0});Wp1.Servers=Wp1.ServerImpl=void 0;Wp1.isIPV4OrHostname=Kp1;Wp1.hostPort=Ad0;var Ed0=aD(),zd0=FJ(),jd0=Dd0(),bd6=Tw(),yd6=cY();function Kp1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Pd0($){return!Kp1($)}function gd6($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function Ad0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=gd6($),Pd0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Pd0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):bd6.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 Yb{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=Ad0($);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,jd0.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}://${Pd0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new Yb(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,zd0.shuffle)(Z);return this.resolves=Z,Z}}Wp1.ServerImpl=Yb;class J90{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw yd6.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Ed0.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}=Ad0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new Yb(Y))}if(this.randomize)(0,zd0.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,jd0.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,Ed0.getUrlParseFn)();$=X?X($):$;let Q=new Yb($,Z);if((0,jd0.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 J90.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return J90.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,Ed0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Yb(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,zd0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}Wp1.Servers=J90});var K90=_((Fp1)=>{Object.defineProperty(Fp1,"__esModule",{value:!0});Fp1.QueuedIteratorImpl=void 0;var Rd0=FJ(),Up1=cY();class Np1{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,Rd0.deferred)(),this.yields=[],this.iterClosed=(0,Rd0.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 Up1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new Up1.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,Rd0.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}}Fp1.QueuedIteratorImpl=Np1});var Id0=_((Lp1)=>{Object.defineProperty(Lp1,"__esModule",{value:!0});Lp1.MuxSubscription=void 0;var ld6=Tw(),Bp1=cY();class Op1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,ld6.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 Bp1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new Bp1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}Lp1.MuxSubscription=Op1});var qd0=_((zp1)=>{Object.defineProperty(zp1,"__esModule",{value:!0});zp1.Heartbeat=void 0;var dd6=FJ();class Ep1{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,dd6.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})}}zp1.Heartbeat=Ep1});var Vd0=_((Rp1)=>{Object.defineProperty(Rp1,"__esModule",{value:!0});Rp1.DenoBuffer=Rp1.MAX_SIZE=Rp1.AssertionError=void 0;Rp1.assert=Ap1;Rp1.concat=Tp1;Rp1.append=id6;Rp1.readAll=nd6;Rp1.writeAll=pd6;var md6=uY();class Md0 extends Error{constructor($){super($);this.name="AssertionError"}}Rp1.AssertionError=Md0;function Ap1($,Z="Assertion failed."){if(!$)throw new Md0(Z)}var Pp1=32768;Rp1.MAX_SIZE=4294967294;function W90($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function Tp1($,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 id6($,Z){return Tp1($,Uint8Array.of(Z))}class kd0{_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($){Ap1($<=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=W90(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(md6.TE.encode($))}write($){let Z=this._grow($.byteLength);return W90($,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)W90(this._buf.subarray(this._off),this._buf);else if(Q+$>Rp1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,Rp1.MAX_SIZE));W90(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,Rp1.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(Pp1);while(!0){let Q=this.capacity-this.length<Pp1,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}}}Rp1.DenoBuffer=kd0;function nd6($){let Z=new kd0;return Z.readFrom($),Z.bytes()}function pd6($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var _d0=_((Vp1)=>{Object.defineProperty(Vp1,"__esModule",{value:!0});Vp1.cc=Vp1.State=Vp1.Parser=Vp1.Kind=void 0;Vp1.describe=$m6;var Sd0=Vd0(),Cd0=uY();Vp1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function $m6($){let Z,X="";switch($.kind){case Vp1.Kind.MSG:Z="MSG";break;case Vp1.Kind.OK:Z="OK";break;case Vp1.Kind.ERR:Z="ERR",X=Cd0.TD.decode($.data);break;case Vp1.Kind.PING:Z="PING";break;case Vp1.Kind.PONG:Z="PONG";break;case Vp1.Kind.INFO:Z="INFO",X=Cd0.TD.decode($.data)}return`${Z}: ${X}`}function qp1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var Mp1=48,Zm6=57,Gb=67108864;class kp1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=Vp1.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 Vp1.State.OP_START:switch(X){case Vp1.cc.M:case Vp1.cc.m:this.state=Vp1.State.OP_M,this.hdr=-1,this.ma=qp1();break;case Vp1.cc.H:case Vp1.cc.h:this.state=Vp1.State.OP_H,this.hdr=0,this.ma=qp1();break;case Vp1.cc.P:case Vp1.cc.p:this.state=Vp1.State.OP_P;break;case Vp1.cc.PLUS:this.state=Vp1.State.OP_PLUS;break;case Vp1.cc.MINUS:this.state=Vp1.State.OP_MINUS;break;case Vp1.cc.I:case Vp1.cc.i:this.state=Vp1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_H:switch(X){case Vp1.cc.M:case Vp1.cc.m:this.state=Vp1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_M:switch(X){case Vp1.cc.S:case Vp1.cc.s:this.state=Vp1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_MS:switch(X){case Vp1.cc.G:case Vp1.cc.g:this.state=Vp1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_MSG:switch(X){case Vp1.cc.SPACE:case Vp1.cc.TAB:this.state=Vp1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_MSG_SPC:switch(X){case Vp1.cc.SPACE:case Vp1.cc.TAB:continue;default:this.state=Vp1.State.MSG_ARG,this.as=Z}break;case Vp1.State.MSG_ARG:switch(X){case Vp1.cc.CR:this.drop=1;break;case Vp1.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=Vp1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case Vp1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:Vp1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=Vp1.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:Vp1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=Vp1.State.MSG_END;break;case Vp1.State.MSG_END:switch(X){case Vp1.cc.NL:this.drop=0,this.as=Z+1,this.state=Vp1.State.OP_START;break;default:continue}break;case Vp1.State.OP_PLUS:switch(X){case Vp1.cc.O:case Vp1.cc.o:this.state=Vp1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_PLUS_O:switch(X){case Vp1.cc.K:case Vp1.cc.k:this.state=Vp1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_PLUS_OK:switch(X){case Vp1.cc.NL:this.dispatcher.push({kind:Vp1.Kind.OK}),this.drop=0,this.state=Vp1.State.OP_START;break}break;case Vp1.State.OP_MINUS:switch(X){case Vp1.cc.E:case Vp1.cc.e:this.state=Vp1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_MINUS_E:switch(X){case Vp1.cc.R:case Vp1.cc.r:this.state=Vp1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_MINUS_ER:switch(X){case Vp1.cc.R:case Vp1.cc.r:this.state=Vp1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_MINUS_ERR:switch(X){case Vp1.cc.SPACE:case Vp1.cc.TAB:this.state=Vp1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_MINUS_ERR_SPC:switch(X){case Vp1.cc.SPACE:case Vp1.cc.TAB:continue;default:this.state=Vp1.State.MINUS_ERR_ARG,this.as=Z}break;case Vp1.State.MINUS_ERR_ARG:switch(X){case Vp1.cc.CR:this.drop=1;break;case Vp1.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:Vp1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=Vp1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case Vp1.State.OP_P:switch(X){case Vp1.cc.I:case Vp1.cc.i:this.state=Vp1.State.OP_PI;break;case Vp1.cc.O:case Vp1.cc.o:this.state=Vp1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_PO:switch(X){case Vp1.cc.N:case Vp1.cc.n:this.state=Vp1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_PON:switch(X){case Vp1.cc.G:case Vp1.cc.g:this.state=Vp1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_PONG:switch(X){case Vp1.cc.NL:this.dispatcher.push({kind:Vp1.Kind.PONG}),this.drop=0,this.state=Vp1.State.OP_START;break}break;case Vp1.State.OP_PI:switch(X){case Vp1.cc.N:case Vp1.cc.n:this.state=Vp1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_PIN:switch(X){case Vp1.cc.G:case Vp1.cc.g:this.state=Vp1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_PING:switch(X){case Vp1.cc.NL:this.dispatcher.push({kind:Vp1.Kind.PING}),this.drop=0,this.state=Vp1.State.OP_START;break}break;case Vp1.State.OP_I:switch(X){case Vp1.cc.N:case Vp1.cc.n:this.state=Vp1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_IN:switch(X){case Vp1.cc.F:case Vp1.cc.f:this.state=Vp1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_INF:switch(X){case Vp1.cc.O:case Vp1.cc.o:this.state=Vp1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_INFO:switch(X){case Vp1.cc.SPACE:case Vp1.cc.TAB:this.state=Vp1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case Vp1.State.OP_INFO_SPC:switch(X){case Vp1.cc.SPACE:case Vp1.cc.TAB:continue;default:this.state=Vp1.State.INFO_ARG,this.as=Z}break;case Vp1.State.INFO_ARG:switch(X){case Vp1.cc.CR:this.drop=1;break;case Vp1.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:Vp1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=Vp1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===Vp1.State.MSG_ARG||this.state===Vp1.State.MINUS_ERR_ARG||this.state===Vp1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new Sd0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===Vp1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new Sd0.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 Sd0.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 Vp1.cc.SPACE:case Vp1.cc.TAB:case Vp1.cc.CR:case Vp1.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],Gb);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],Gb);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}: ${Cd0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case Vp1.cc.SPACE:case Vp1.cc.TAB:case Vp1.cc.CR:case Vp1.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],Gb),this.ma.size=this.protoParseInt(Z[3],Gb);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],Gb),this.ma.size=this.protoParseInt(Z[4],Gb);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]<Mp1||$[Q]>Zm6)return-1;X=X*10+($[Q]-Mp1)}return Z!==void 0&&X>Z?-1:X}}Vp1.Parser=kp1;Vp1.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};Vp1.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 N90=_((Cp1)=>{Object.defineProperty(Cp1,"__esModule",{value:!0});Cp1.MsgHdrsImpl=void 0;Cp1.canonicalMIMEHeaderKey=xd0;Cp1.headers=Ym6;var Sp1=uY(),wJ=Tw(),U90=cY();function xd0($){let U=!0,N=Array($.length);for(let F=0;F<$.length;F++){let w=$.charCodeAt(F);if(w===58||w<33||w>126)throw U90.InvalidArgumentError.format("header",`'${$[F]}' is not a valid character in a header name`);if(U&&97<=w&&w<=122)w-=32;else if(!U&&65<=w&&w<=90)w+=32;N[F]=w,U=w==45}return String.fromCharCode(...N)}function Ym6($=0,Z=""){if($===0&&Z!=="")throw U90.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw U90.InvalidArgumentError.format("description","is required");return new Jb($,Z)}var vd0="NATS/1.0";class Jb{_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 Jb,Q=Sp1.TD.decode($).split(`\r
1337
1337
  `),Y=Q[0];if(Y!==vd0){let G=Y.replace(vd0,"").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 $=vd0;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
1338
1338
  ${Z}: ${X[Q]}`;return`${$}\r
@@ -2726,7 +2726,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2726
2726
 
2727
2727
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2728
2728
 
2729
- Respond with the structured verdict and a short reason.`,x_$;var g_$=B(()=>{k4();dw();p81();O86=t81.object({requiresReview:t81.boolean().describe("true if the changes should go through pull-request review"),reason:t81.string().describe("One short sentence explaining the decision (max ~120 chars)")});x_$={requiresReview:!1,reason:""}});function E86($){if(!$||$.includes(".."))return!1;return L86.test($)}function h_$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!E86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function u_$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var L86;var c_$=B(()=>{L86=/^[\w./@-]+$/});function o81($){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 l_$($,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 d_$($,Z,X,Q){if(!Q.connectionId)throw new mg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new mg(l7);await Tw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:l7;throw new mg(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Rw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=wj0($),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 N=await cw(H,j86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var j86=10485760,mg;var m_$=B(()=>{YN();u81();Ci();of();mg=class mg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function P86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!z86.test(Z))throw Error(`Invalid branch name: ${$}`)}function cC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(T86)])}function lC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function r81($,Z){let Q=(Oj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Oj0.set($,Y),Y.finally(()=>{if(Oj0.get($)===Y)Oj0.delete($)}),Q}async function bZ($,Z,X){let Q=lC($);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 N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.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",...gY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?I86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...gY}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function I86($){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 Bj0($,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)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${G.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${G.status})`)}return JSON.parse(J)}function q86($){return p_$.includes($)}var z86,i_$=524288,A86=65536,T86=1e4,n_$=2000,R86,Oj0,gY,p_$,t_$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",R86),$.post("/:virtualMcpId/:branch/write",(Z)=>bZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>bZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>bZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>bZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>bZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>bZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>bZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return bZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return bZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>bZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>bZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!q86(X))return Z.json({error:`step must be one of: ${p_$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let Y=o(Z.var.studioContext),G=dF0(Q.virtualMcpMetadata);try{await iF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:Y.id,userId:Q.callerUserId,entries:G})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return bZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return XF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return V_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>bZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(n_$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>bZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(n_$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>bZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:Y,connectionIds:G}=Z.get("vmClaim"),J=Z.var.studioContext;return r81(Q,async()=>{try{await c81(J,X,Q);let W=l_$(Y,G);if(W)await d_$(J,X,Q,W)}catch(W){if(W instanceof mg)return Z.json({error:W.message},403,gY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,gY)}return bZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return r81(X,()=>bZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.var.studioContext;return r81(Q,async()=>{try{await c81(Y,X,Q)}catch(G){let J=G instanceof Error?G.message:String(G);return Z.json({error:J},502,gY)}return bZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",WZ({maxSize:i_$,onError:(Z)=>Z.json({error:"Payload too large"},413,gY)}),async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=m81(K)&&N?[K,H]:await Promise.all([Bj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Bj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await f_$(J,F,U);return Z.json(w,200,gY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,gY);return Z.json({error:K},502,gY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",WZ({maxSize:i_$,onError:(Z)=>Z.json({error:"Payload too large"},413,gY)}),async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=m81(K)&&N?[K,H]:await Promise.all([Bj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Bj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await y_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,gY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,gY);return Z.json({error:K},502,gY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let J=G.replace(/\/+$/,""),W=o81(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",WZ({maxSize:A86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let G;try{G=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Z.json({error:"Invalid JSON body"},400);let J=h_$(G);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=u_$(Y,J.resolveType),K=o81(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var o_$=B(()=>{y8();lO();dg();q_$();QN();k_$();B3();yw();S_$();C_$();Rd0();Si();p81();g_$();c_$();m_$();z86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;R86=I_$(async($,Z)=>{let X=$.var.studioContext;try{$0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(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{P86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},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=rm({orgId:Y.id,virtualMcpId:G,branch:J}),H=await wN(X,J,Q),N=M_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await hX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Oj0=new Map;gY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};p_$=["clone","install","start"]});var r_$=($)=>{let Z=new B1;if(Z.use("*",_C),Z.route("/",VE0()),Z.route("/",HS$()),Z.route("/",U_$()),Z.route("/",H_$()),Z.route("/",Nj0()),Z.route("/tools",j_$()),Z.route("/",D_$()),Z.route("/",iC$({kvStorage:$.kvStorage})),Z.route("/",dC$()),Z.route("/fs",X_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",t_$()),Z.route("/",J_$()),Z.route("/deco-sites",_E0()),Z.route("/sso",TE0()),Z.route("/",Fj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ZS$()),$.mountDevAssets)Z.route("/dev-assets",vE0({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("/",rq$()),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",Y_$()),Z.route("/mcp",nw0()),Z.route("/mcp/self",Hj0()),Z.route("/mcp",ow0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var a_$=B(()=>{y8();W$1();XS$();U$1();bE0();Yo();G$1();mC$();nC$();Q_$();Dn();r11();rw0();v81();G_$();W_$();N_$();w_$();L_$();f81();z_$();x81();pw0();o_$()});function k86($){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}}))}async function S86($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(M86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var M86=1e4,V86=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},s_$=()=>{let $=new B1;return $.use("*",V86),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await S86(Q,Y);return Z.json({apps:k86(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var e_$=B(()=>{y8();S$()});import{z as M1}from"zod";function gK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function u86($){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 c86($,Z,X){try{return JSON.parse($)}catch{throw new Xv$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function l86($){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:c86(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 d86($){let Z=$.map((X)=>{let Q=X.function.parameters?EY(X.function.parameters):EY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function m86($){if(!$)return;return{openai:{response_format:$}}}function i86(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function $v$($,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 Zv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var C86=256,_86,v86,b86,f86,x86,y86,g86,h86,Xv$,Qv$,Yv$;var Gv$=B(()=>{k4();y8();dg();fN();_86=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),v86=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),b86=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(v86).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),f86=M1.object({type:M1.literal("text")}),x86=M1.object({type:M1.literal("json_object")}),y86=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()})}),g86=M1.union([f86,x86,y86]),h86=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(b86),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(_86).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:g86.optional(),user:M1.string().optional()});Xv$=class Xv$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Qv$=new B1;Qv$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(gK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(gK("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(gK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=h86.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(gK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=u86(G.model);if(!J)return $.json(gK("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)=>ZD(j.providerId));if(!E)return $.json(gK("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(gK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=l86(G.messages),U=G.tools?d86(G.tools):void 0,w=m86(G.response_format),O=i86(),D=Math.floor(Date.now()/1000);if(G.stream)return XF($,async(L)=>{let E=$v$(N,F,U,G,w,$.req.raw.signal);try{let j=Pw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,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:O,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>=C86)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,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 M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Zv$(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 M(),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=$v$(N,F,U,G,w,$.req.raw.signal),E=await jw(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:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Zv$(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(gK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(gK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(gK(Y.message,"server_error"),500)}});Yv$=Qv$});var Wv$;var Jv$=B(()=>{Wv$={name:"decocms",version:"4.197.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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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 t86(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??p86}}var Kv$,p86="https://ph.studio.decocms.com",Hv$;var Nv$=B(()=>{y8();_x0();IV();LZ();S$();i11();Jv$();Kv$=new B1;Kv$.get("/",($)=>{let Z={version:Wv$.version,theme:oh1(),...iD().logo&&{logo:iD().logo},...WK()&&{internalUrl:Tq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:Dk$(),posthog:t86(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!WK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Hv$=Kv$});function ig($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function a81($){return(ig($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Uv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ig($))}&sz=${Z}`}function Fv$($,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 wv$($){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()?Fv$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Fv$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var dC,o86,r86,a86,s86,Ov$;var Bv$=B(()=>{dC=l0.enum(["good","bad","neutral"]),o86=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:dC.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 $})),r86=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(o86)),a86={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()},s86=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:dC.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:dC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:dC.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:dC.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(r86).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:dC.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:dC.optional()})).min(1)})]),Ov$=l0.object({...a86,template:s86})});function Dj0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ov$.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 s81=B(()=>{Bv$()});import{join as Dv$}from"path";async function $46($){try{let Z=await fetch(`${CW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(e86)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dj0(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()||a81($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function hY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Z46($,Z){let X=ig($),Q=Z?.brand?.trim()||a81(X),Y=Uv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=wv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${hY(W)}</title>`,`<meta name="description" content="${hY(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="${hY(W)}" />`,`<meta property="og:description" content="${hY(K)}" />`,`<meta property="og:url" content="${hY(J)}" />`,`<meta property="og:image" content="${hY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${hY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${hY(W)}" />`,`<meta name="twitter:description" content="${hY(K)}" />`,`<meta name="twitter:image" content="${hY(H)}" />`,`<meta name="twitter:image:alt" content="${hY(N)}" />`,`<link rel="canonical" href="${hY(J)}" />`,`<link rel="icon" href="${hY(Y)}" sizes="any" />`].join(`
2729
+ Respond with the structured verdict and a short reason.`,x_$;var g_$=B(()=>{k4();dw();p81();O86=t81.object({requiresReview:t81.boolean().describe("true if the changes should go through pull-request review"),reason:t81.string().describe("One short sentence explaining the decision (max ~120 chars)")});x_$={requiresReview:!1,reason:""}});function E86($){if(!$||$.includes(".."))return!1;return L86.test($)}function h_$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!E86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function u_$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var L86;var c_$=B(()=>{L86=/^[\w./@-]+$/});function o81($){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 l_$($,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 d_$($,Z,X,Q){if(!Q.connectionId)throw new mg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new mg(l7);await Tw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:l7;throw new mg(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Rw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=wj0($),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 N=await cw(H,j86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var j86=10485760,mg;var m_$=B(()=>{YN();u81();Ci();of();mg=class mg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function P86($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!z86.test(Z))throw Error(`Invalid branch name: ${$}`)}function cC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(T86)])}function lC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function r81($,Z){let Q=(Oj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Oj0.set($,Y),Y.finally(()=>{if(Oj0.get($)===Y)Oj0.delete($)}),Q}async function bZ($,Z,X){let Q=lC($);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 N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.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",...gY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?I86(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...gY}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function I86($){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 Bj0($,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)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${G.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${G.status})`)}return JSON.parse(J)}function q86($){return p_$.includes($)}var z86,i_$=524288,A86=65536,T86=1e4,n_$=2000,R86,Oj0,gY,p_$,t_$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",R86),$.post("/:virtualMcpId/:branch/write",(Z)=>bZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>bZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>bZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>bZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>bZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>bZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>bZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:cC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return bZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return bZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>bZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>bZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!q86(X))return Z.json({error:`step must be one of: ${p_$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let Y=o(Z.var.studioContext),G=dF0(Q.virtualMcpMetadata);try{await iF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:Y.id,userId:Q.callerUserId,entries:G})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return bZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return XF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return V_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>bZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(n_$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>bZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(n_$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>bZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:Y,connectionIds:G}=Z.get("vmClaim"),J=Z.var.studioContext;return r81(Q,async()=>{try{await c81(J,X,Q);let W=l_$(Y,G);if(W)await d_$(J,X,Q,W)}catch(W){if(W instanceof mg)return Z.json({error:W.message},403,gY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,gY)}return bZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return r81(X,()=>bZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.var.studioContext;return r81(Q,async()=>{try{await c81(Y,X,Q)}catch(G){let J=G instanceof Error?G.message:String(G);return Z.json({error:J},502,gY)}return bZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",WZ({maxSize:i_$,onError:(Z)=>Z.json({error:"Payload too large"},413,gY)}),async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=m81(K)&&N?[K,H]:await Promise.all([Bj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Bj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await f_$(J,F,U);return Z.json(w,200,gY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,gY);return Z.json({error:K},502,gY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",WZ({maxSize:i_$,onError:(Z)=>Z.json({error:"Payload too large"},413,gY)}),async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=m81(K)&&N?[K,H]:await Promise.all([Bj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Bj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await y_$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,gY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,gY);return Z.json({error:K},502,gY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let J=G.replace(/\/+$/,""),W=o81(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",WZ({maxSize:A86,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=lC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let G;try{G=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Z.json({error:"Invalid JSON body"},400);let J=h_$(G);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=u_$(Y,J.resolveType),K=o81(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var o_$=B(()=>{y8();lO();dg();q_$();QN();k_$();B3();yw();S_$();C_$();Rd0();Si();p81();g_$();c_$();m_$();z86=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;R86=I_$(async($,Z)=>{let X=$.var.studioContext;try{$0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(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{P86(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},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=rm({orgId:Y.id,virtualMcpId:G,branch:J}),H=await wN(X,J,Q),N=M_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await hX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Oj0=new Map;gY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};p_$=["clone","install","start"]});var r_$=($)=>{let Z=new B1;if(Z.use("*",_C),Z.route("/",VE0()),Z.route("/",HS$()),Z.route("/",U_$()),Z.route("/",H_$()),Z.route("/",Nj0()),Z.route("/tools",j_$()),Z.route("/",D_$()),Z.route("/",iC$({kvStorage:$.kvStorage})),Z.route("/",dC$()),Z.route("/fs",X_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",t_$()),Z.route("/",J_$()),Z.route("/deco-sites",_E0()),Z.route("/sso",TE0()),Z.route("/",Fj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ZS$()),$.mountDevAssets)Z.route("/dev-assets",vE0({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("/",rq$()),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",Y_$()),Z.route("/mcp",nw0()),Z.route("/mcp/self",Hj0()),Z.route("/mcp",ow0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var a_$=B(()=>{y8();W$1();XS$();U$1();bE0();Yo();G$1();mC$();nC$();Q_$();Dn();r11();rw0();v81();G_$();W_$();N_$();w_$();L_$();f81();z_$();x81();pw0();o_$()});function k86($){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}}))}async function S86($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(M86)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var M86=1e4,V86=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},s_$=()=>{let $=new B1;return $.use("*",V86),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await S86(Q,Y);return Z.json({apps:k86(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var e_$=B(()=>{y8();S$()});import{z as M1}from"zod";function gK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function u86($){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 c86($,Z,X){try{return JSON.parse($)}catch{throw new Xv$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function l86($){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:c86(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 d86($){let Z=$.map((X)=>{let Q=X.function.parameters?EY(X.function.parameters):EY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function m86($){if(!$)return;return{openai:{response_format:$}}}function i86(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function $v$($,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 Zv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var C86=256,_86,v86,b86,f86,x86,y86,g86,h86,Xv$,Qv$,Yv$;var Gv$=B(()=>{k4();y8();dg();fN();_86=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),v86=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),b86=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(v86).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),f86=M1.object({type:M1.literal("text")}),x86=M1.object({type:M1.literal("json_object")}),y86=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()})}),g86=M1.union([f86,x86,y86]),h86=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(b86),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(_86).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:g86.optional(),user:M1.string().optional()});Xv$=class Xv$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Qv$=new B1;Qv$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(gK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(gK("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(gK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=h86.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(gK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=u86(G.model);if(!J)return $.json(gK("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)=>ZD(j.providerId));if(!E)return $.json(gK("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(gK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=l86(G.messages),U=G.tools?d86(G.tools):void 0,w=m86(G.response_format),O=i86(),D=Math.floor(Date.now()/1000);if(G.stream)return XF($,async(L)=>{let E=$v$(N,F,U,G,w,$.req.raw.signal);try{let j=Pw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,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:O,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>=C86)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,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 M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Zv$(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 M(),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=$v$(N,F,U,G,w,$.req.raw.signal),E=await jw(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:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Zv$(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(gK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(gK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(gK(Y.message,"server_error"),500)}});Yv$=Qv$});var Wv$;var Jv$=B(()=>{Wv$={name:"decocms",version:"4.197.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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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 t86(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??p86}}var Kv$,p86="https://ph.studio.decocms.com",Hv$;var Nv$=B(()=>{y8();_x0();IV();LZ();S$();i11();Jv$();Kv$=new B1;Kv$.get("/",($)=>{let Z={version:Wv$.version,theme:oh1(),...iD().logo&&{logo:iD().logo},...WK()&&{internalUrl:Tq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:Dk$(),posthog:t86(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!WK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Hv$=Kv$});function ig($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function a81($){return(ig($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Uv$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ig($))}&sz=${Z}`}function Fv$($,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 wv$($){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()?Fv$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Fv$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var dC,o86,r86,a86,s86,Ov$;var Bv$=B(()=>{dC=l0.enum(["good","bad","neutral"]),o86=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:dC.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 $})),r86=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(o86)),a86={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()},s86=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:dC.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:dC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:dC.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:dC.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(r86).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:dC.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:dC.optional()})).min(1)})]),Ov$=l0.object({...a86,template:s86})});function Dj0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ov$.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 s81=B(()=>{Bv$()});import{join as Dv$}from"path";async function $46($){try{let Z=await fetch(`${CW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(e86)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dj0(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()||a81($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function hY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Z46($,Z){let X=ig($),Q=Z?.brand?.trim()||a81(X),Y=Uv$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=wv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${hY(W)}</title>`,`<meta name="description" content="${hY(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="${hY(W)}" />`,`<meta property="og:description" content="${hY(K)}" />`,`<meta property="og:url" content="${hY(J)}" />`,`<meta property="og:image" content="${hY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${hY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${hY(W)}" />`,`<meta name="twitter:description" content="${hY(K)}" />`,`<meta name="twitter:image" content="${hY(H)}" />`,`<meta name="twitter:image:alt" content="${hY(N)}" />`,`<link rel="canonical" href="${hY(J)}" />`,`<link rel="icon" href="${hY(Y)}" sizes="any" />`].join(`
2730
2730
  `)}function X46($,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}
2731
2731
  </head>`)}function Lv$($){let Z=new B1;return Z.get("/:domain/og.png",async(X)=>{let Q=ig(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Dv$($,"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(`${CW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(Q46)}),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=$?Dv$($,"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 $46(ig(Q)),K=Z46(Q,W);return X.html(X46(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var e86=2500,Q46=1e4;var Ev$=B(()=>{y8();s81();GL();S$()});function Co($,Z){return fetch(`${CW({})}${$}`,Z)}async function Y46($,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 Co(`/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}=Dj0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var G46,u3,Lj0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},jv$;var zv$=B(()=>{y8();PG();GL();s81();G46=new Set(["complete","errored","terminated","unknown"]),u3=new B1;u3.use("*",async($,Z)=>{let X=await j8.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});u3.use("/run",Lj0);u3.use("/status",Lj0);u3.use("/link-token/*",Lj0);u3.use("/suggest",Lj0);u3.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 Y46(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)}});u3.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 Co("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${YL({})}`},body:JSON.stringify({url:Q,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)}});u3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Co(`/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:G46.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});u3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Co(`/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)}});u3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Co(`/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:[]})}});jv$=u3});import{createHmac as J46,timingSafeEqual as W46}from"crypto";function Av$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>K46)return!1;let W=J46("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&W46(K,N)})}function Tv$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=eG(Z),Q=eG(eG(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:hK(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 Rv$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function hK($){return typeof $==="string"?$:void 0}function eG($){return typeof $==="object"&&$!==null?$:void 0}function Ej0($){return typeof $==="number"?new Date($*1000):null}function Z41($){return hK($)??hK(eG($)?.id)}function H46($){return Z41($.subscription)??hK(eG(eG($.parent)?.subscription_details)?.subscription)}function N46($){let Z=Ej0($.current_period_end);if(Z)return Z;let X=eG($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=eG(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function e81($,Z){let X=Ej0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function $41($,Z){let X=Ej0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function F46($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=hK(eG(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(hK(eG(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(hK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=hK(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(eG(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:eG(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(hK(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=Z41(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(e81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:Z41(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:$41(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=hK(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&&e81(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Rv$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:N46(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:$41(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=H46(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(e81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Ej0(X.period_end),lastStripeEventAt:$41(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function U46($,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:Rv$(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 Pv$($,Z){let X=U46($,Z);if(!X)return;hH({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Ql1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Iv$($){let Z=new MW(m8().db),X=await F46(Z,$);if(!(X.handled&&X.topUp))Pv$($,X);if(X.handled&&X.topUp)await ZF$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Pv$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Dt1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof eJ&&(Q.status===400||Q.status===404)))throw Q}return X}var K46=300;var qv$=B(()=>{wG();h4();qm();uo0()});var w46=1048576,X41;var Mv$=B(()=>{y8();lO();S$();qv$();X41=new B1;X41.post("/webhook",WZ({maxSize:w46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=c0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Av$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Tv$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Iv$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as O46}from"crypto";function D46($,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 O46(Buffer.from(Y),Buffer.from(Q))}var B46=5242880,Q41;var kv$=B(()=>{y8();lO();qi();Q41=new B1;Q41.post("/webhook",WZ({maxSize:B46,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(!D46(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 Ed0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Sv$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Vv$,L46,E46,Cv$;var _v$=B(()=>{y8();dJ();Ix();kf();Vv$=new B1,L46=["range","if-none-match","if-modified-since"],E46=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Vv$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Rg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Q$(401,{message:"Authentication required"})}if(!X)throw new Q$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Q$(400,{message:"Missing file key"});let Y=await Xn(Q,Z);if(!Y)throw new Q$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&tJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Q$(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Sv$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of L46){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 Q$(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 Q$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of E46){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Sv$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Cv$=Vv$});var _o=C((mC)=>{var j46=mC&&mC.__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]}),z46=mC&&mC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))j46(Z,$,X)};Object.defineProperty(mC,"__esModule",{value:!0});z46(aQ(),mC)});var fv$=C((vv$)=>{Object.defineProperty(vv$,"__esModule",{value:!0});vv$.version=void 0;vv$.version="3.4.0"});var gv$=C((uK)=>{var P46=uK&&uK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(uK,"__esModule",{value:!0});uK.NodeTransport=uK.VERSION=void 0;uK.nodeResolveHost=M46;var d6=_o(),A46=z0("net"),Y41=z0("tls"),T46=z0("path"),xv$=z0("fs"),R46=P46(z0("dns")),I46=fv$();uK.VERSION=I46.version;var q46="nats.js";class yv${socket;version;lang;yields=[];signal=(0,d6.deferred)();closedNotification=(0,d6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=q46,this.version=uK.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,d6.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 d6.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 d6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new d6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,d6.deferred)(),X,Q=(0,A46.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,d6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=d6.DataBuffer.concat(...this.yields),Y=(0,d6.extractProtocolMessage)(Q);if(Y!=="")try{let G=d6.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,d6.deferred)();try{if($=(0,T46.resolve)($),!(0,xv$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,xv$.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,d6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new d6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,d6.deferred)();try{let Y=(0,Y41.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 d6.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,d6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,d6.deferred)();try{let Q=(0,Y41.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 d6.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,d6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d6.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 Y41.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d6.render)($)}`);let Z=(0,d6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,d6.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}}uK.NodeTransport=yv$;function M46($){let Z=(0,d6.deferred)();return R46.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 dv$=C((lv$)=>{Object.defineProperty(lv$,"__esModule",{value:!0});lv$.connect=k46;var hv$=gv$(),uv$=_o(),cv$=_o();function k46($={}){if((0,cv$.hasWsProtocol)($))return Promise.reject(cv$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,uv$.setTransportFactory)({factory:()=>{return new hv$.NodeTransport},dnsResolveFn:hv$.nodeResolveHost}),uv$.NatsConnectionImpl.connect($)}});var mv$=C((QF)=>{var V46=QF&&QF.__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]}),C46=QF&&QF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))V46(Z,$,X)};Object.defineProperty(QF,"__esModule",{value:!0});QF.connect=void 0;var _46=dv$();Object.defineProperty(QF,"connect",{enumerable:!0,get:function(){return _46.connect}});C46(_o(),QF)});function tv$($){let Z=$?.connectFn??x46,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 N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:f46,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=KX(b46,v46,O-1,2,0.5);await y$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?iv$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=pv$.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 x46($){return nv$.connect($)}var iv$,nv$,pv$,v46=100,b46=3000,f46=3000;var ov$=B(()=>{L6();iv$=S(Lh(),1),nv$=S(mv$(),1),pv$=S(HB(),1)});function G41($,Z){return`${$}.${Z}`}class J41{cache;constructor($){this.cache=Ng({ttlMs:$?.ttlMs??y46,maxSize:$?.maxSize??g46})}async get($,Z){return this.cache.get(G41($,Z))??null}async set($,Z,X){this.cache.set(G41($,Z),X)}async invalidate($,Z){this.cache.delete(G41($,Z))}teardown(){this.cache.clear()}}var y46=600000,g46=5000;var rv$=()=>{};function jj0($,Z){return`${$}:${Z}`}function W41($){let Z=Ng({ttlMs:$?.ttlMs??h46,maxSize:$?.maxSize??u46}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(av$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(jj0(K,H))},set(K,H,N){Z.set(jj0(K,H),N)},invalidate(K,H){Z.delete(jj0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(av$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(jj0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var av$="studio.ai-provider-keys.invalidate",h46=30000,u46=5000;var sv$=()=>{};class K41{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=ev$.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 ev$)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 ev$;var $b$=B(()=>{ev$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Zb$=($)=>{let Z;return()=>Z??=$()},H41,N41;var Xb$=B(()=>{U5();H41=Zb$(()=>K8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),N41=Zb$(()=>K8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function p46(){return{name:RN,subjects:[`${Bw0}.>`],storage:c3.StorageType.File,max_age:d46,max_bytes:i46,max_msgs_per_subject:n46,discard:c3.DiscardPolicy.Old,retention:c3.RetentionPolicy.Limits,duplicate_window:m46,num_replicas:1}}class Gb${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 Qb$($){let Z=Yb$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function a46($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,l46().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 s46($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class F41{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=p46(),X=await yZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await c3.jetstreamManager($);try{await Q.streams.info(RN),await Q.streams.update(RN,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(RN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:s46});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=a46(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=iJ$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=hi0(H,{runId:Z}),U=performance.now()-N;if(H41().record(U),N41().add(1,{"org.id":Q??"unknown"}),r46?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)G.publish(Y,w.subject,w.data,w.headers?Qb$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),o46)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,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=hi0(Z,{runId:$,dedup:X});if(H41().record(performance.now()-Y),N41().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:Qb$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=mJ$({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"?c3.DeliverPolicy.New:c3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=XO($),W;try{W=await(await Q.consumers.get(RN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=zw0({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(Lw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(RN,{filter:XO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var c3,Yb$,c46=($)=>{let Z;return()=>Z??=$()},l46,d46=86400000000000,m46=120000000000,i46=4294967296,n46=500000,t46,o46,r46;var Jb$=B(()=>{L6();ui0();Pw0();Ew0();U5();Xb$();c3=S(HB(),1),Yb$=S(Lh(),1),l46=c46(()=>K8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));t46=process.env.STREAM_ENCODE_TRACE==="1",o46=process.env.DECOPILOT_STREAM_TRACE==="1";r46=t46?new Gb$:null});function zj0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,NW(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 Wb$=B(()=>{L8()});class U41{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}}class w41{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,X={}){this.taskBoard=$;this.contextFactory=Z;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??e46;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??Z66,X=this.options.itemIntervalMs??$66,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}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()-lY$),Pn0);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()-Q66));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 Ni0(this.taskBoard,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!==o4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await IN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+X66)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==o4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z);if(Q.length===0)return!1;let Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;let G=await Promise.all(Q.map(async(J)=>({...J,...await En0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!Ln0(G))return!1;return await Mw0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var e46=60000,$66=300000,Z66=50,X66=60000,Q66=120000;var Kb$=B(()=>{Z7();Nn0();QO();SZ();An0();xx()});import{readdir as Y66,rm as Pj0}from"fs/promises";import{join as Aj0}from"path";async function Tj0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-G66),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await iC($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Hb$($,Y,Z);else if(!Y.startsWith(".")){let G=Aj0($,Y),J=await iC(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Hb$(G,K,Z)}if((await iC(G)).length===0)await Pj0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Hb$($,Z,X){let Q=0,Y=Aj0($,Z),G=await iC(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=Aj0(Y,W),H=await iC(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Aj0(K,F);await Pj0(w,{recursive:!0,force:!0}),Q++}}if((await iC(K)).length===0)await Pj0(K,{recursive:!0,force:!0})}if((await iC(Y)).length===0)await Pj0(Y,{recursive:!0,force:!0});return Q}async function iC($){try{return(await Y66($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var G66=30;var O41=()=>{};import{DBOS as B41,SchedulerMode as J66}from"@dbos-inc/dbos-sdk";async function K66(){let $=[YJ(),nC(),lK()],Z=0;for(let X of $)try{Z+=await Tj0(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 H66($,Z){await B41.runStep(()=>K66(),{name:"monitoringRetention"})}function Fb$(){if(Nb$)return;Nb$=!0;let $=B41.registerWorkflow(H66,{name:"monitoringRetentionWorkflow"});B41.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:W66,mode:J66.ExactlyOncePerIntervalWhenActive})}var W66="23 4 * * *",Nb$=!1;var Ub$=B(()=>{pQ();O41()});function wb$($){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 _K.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await _11($.db,Z,Q.role);return Y.boundAuth=C11({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new cD(X,void 0,Y.boundAuth,Q.role,"self"),Ag(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Ob$=B(()=>{lD();Bg()});function N66(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function U66(){for(let $ of F66)$()}function Bb$($){let Z=[...D41.logs,$];D41={...D41,logs:Z.length>500?Z.slice(-500):Z},U66()}function L41(){return w66}var D41,F66,w66=!1;var E41=B(()=>{D41=N66(),F66=new Set});import{EventEmitter as O66}from"events";var j41;var Db$=B(()=>{E41();j41=new O66;j41.on("request",($)=>{Bb$($)})});function Lb$(){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 w=ng(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>ng(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${e6.tool}${w}${e6.dim}(${L})${e6.reset}`}else if(U.method)G=`${e6.dim}${ng(U.method)}${e6.reset}`}}catch{}}let W=ng(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${e6.mcp}${ng(N.slice(0,12))}\u2026${e6.reset}`}else if(Y==="/mcp")W=`${e6.mcp}/mcp${e6.reset}`;else if(Y==="/mcp/registry")W=`${e6.mcp}/mcp/registry${e6.reset}`;let K=D66(Q),H=J?"\u25C0":"\u2190";if(!L41())console.log(`${e6.dim}${H}${e6.reset} ${K}${Q}${e6.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=B66(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!L41())console.log(`${e6.dim}${O}${e6.reset} ${K}${Q}${e6.reset} ${W}${G?` ${G}`:""} ${U}${F}${e6.reset} ${e6.duration}${w}${e6.reset}`);j41.emit("request",{method:Q,path:ng(Y),status:F,duration:N,timestamp:new Date})}}}var e6,B66=($)=>{if($>=500)return e6.serverError;if($>=400)return e6.clientError;if($>=300)return e6.redirect;return e6.ok},D66=($)=>{return e6[$]||e6.reset},ng=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Eb$=B(()=>{E41();Db$();e6={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 Ab$}from"crypto";import{mkdir as L66,readdir as E66,rm as jb$,stat as Tb$}from"fs/promises";import{join as P41,relative as j66}from"path";import{z as L$}from"zod";function Ib$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return P41(z66,Z)}function qb$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function z41($,Z){let X=Ib$($),Q=qb$(Z);return P41(X,Q)}function P66($,Z,X,Q){let Y=c0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Ab$("sha256",Y).update(G).digest("hex")}function Pb$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=P66(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${qb$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Mb$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Ab$("md5","etag").update(Q).digest("hex")}"`}async function kb$($,Z,X,Q,Y){try{let G=await E66($,{withFileTypes:!0});for(let J of G){let W=P41($,J.name),H=j66(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await kb$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await Tb$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:Mb$(W,N.mtime,N.size)})}catch{}}}}catch{}}function Sb$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=Ib$(Q);await L66(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await kb$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let G=Y,J=z41(Q,G.key),W=await Tb$(J);return{contentType:O$1(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Mb$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??zb$;return{url:Pb$(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:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??zb$;return{url:Pb$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let G=Y,J=z41(Q,G.key);try{return await jb$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=z41(Q,K);try{await jb$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function A41($,Z,X){let Q=Sb$(Z,X),Y=new LW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:Y5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new cX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),hG(Y,G,$,"mcp:dev-assets")}async function Vb$($,Z,X,Q){let G=Sb$(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 z66="./data/assets",zb$=3600,Rb$,Cb$;var _b$=B(()=>{S$();cx();y8();lc();vV();TX();bE0();Rb$=new B1;Rb$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return A41($.req.raw,Z,Q)});Cb$=Rb$});var vb$={};N4(vb$,{mountDevRoutes:()=>A66});function A66($,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 A41(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 Vb$(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",Cb$);let X=new B1;X.use("*",g3({mountPath:"/api/dev-assets"})),X.route("/",vE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var bb$=B(()=>{y8();J$1();bE0();_b$()});import{sql as T66}from"kysely";import{randomUUID as fb$}from"crypto";import{z as R66}from"zod";async function q66($){let Z=new Date().toISOString(),X=fb$(),Q=y4.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:fb$(),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 T66`SELECT
2732
2732
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.197.2",
3
+ "version": "4.197.3",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {