decocms 4.184.1 → 4.185.0

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 (223) hide show
  1. package/dist/client/assets/{AlertCircle-Bz9Z8C-N.js → AlertCircle-V085S0Pa.js} +1 -1
  2. package/dist/client/assets/{AreaChart-BO-Oz6Fc.js → AreaChart-Dk805qn_.js} +1 -1
  3. package/dist/client/assets/{ArrowUp-DJiDLWML.js → ArrowUp-C9UWPdVM.js} +1 -1
  4. package/dist/client/assets/{ArrowUpRight-BR0yjVLa.js → ArrowUpRight-C8ZO6yTj.js} +1 -1
  5. package/dist/client/assets/{Check-BwZxlUfk.js → Check-Cqu1sm5i.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-zUHQNE6z.js → CheckCircle-58nsPrz3.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-hR7QadkT.js → ChevronDown-CWZ3qf02.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-B4LTN0_t.js → ChevronRight-ClixI25K.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-Df-IsTfg.js → ChevronUp-BCfyXEAY.js} +1 -1
  10. package/dist/client/assets/{Copy01-o86XSgAy.js → Copy01-89aQXb7e.js} +1 -1
  11. package/dist/client/assets/{CpuChip01-kcc8iFyM.js → CpuChip01-DvaYOhxd.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-BbPSIg0E.js → CreditCard01--RHiUbi0.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-DTJqLT6k.js → DotsVertical-baaFmJMo.js} +1 -1
  14. package/dist/client/assets/{Eye-DY6U3WbB.js → Eye-DxFQatat.js} +1 -1
  15. package/dist/client/assets/{FilterLines-aDahacyh.js → FilterLines-Dc-pqizf.js} +1 -1
  16. package/dist/client/assets/{HardDrive-BgLjRl7q.js → HardDrive-C0i1Llub.js} +1 -1
  17. package/dist/client/assets/{Key01-BUnlclZN.js → Key01-oNriuSfC.js} +1 -1
  18. package/dist/client/assets/{LayoutLeft-DRSZbZk1.js → LayoutLeft-DqZQYyx2.js} +1 -1
  19. package/dist/client/assets/{LinkExternal01-av_uUApJ.js → LinkExternal01-Bgj6Xen5.js} +1 -1
  20. package/dist/client/assets/{LogOut01-Cz13DEL-.js → LogOut01-CFBzaCRF.js} +1 -1
  21. package/dist/client/assets/{Monitor01-mpS2Qo13.js → Monitor01-WABvYToh.js} +1 -1
  22. package/dist/client/assets/{Palette-8BbajoF7.js → Palette-CkTgNE83.js} +1 -1
  23. package/dist/client/assets/{Play-h-suGAWe.js → Play-BsgE30l1.js} +1 -1
  24. package/dist/client/assets/{Plus-BcnQMgSr.js → Plus-B4ad1Xzu.js} +1 -1
  25. package/dist/client/assets/{SearchLg-QJypW5bF.js → SearchLg-C-KlruU1.js} +1 -1
  26. package/dist/client/assets/{SearchMd-9hsu66yn.js → SearchMd-rT38ISix.js} +1 -1
  27. package/dist/client/assets/{Settings02-CIxx849a.js → Settings02-DB25sFsF.js} +1 -1
  28. package/dist/client/assets/{Shield01-Cr8D6chv.js → Shield01-BylB6rER.js} +1 -1
  29. package/dist/client/assets/{Star01-DnoQvNp9.js → Star01--sqF6mpt.js} +1 -1
  30. package/dist/client/assets/{Stars01-B7Pf6N-z.js → Stars01-NIErpwdy.js} +1 -1
  31. package/dist/client/assets/{Stars02-B5fSRoV2.js → Stars02-CcT6UTOD.js} +1 -1
  32. package/dist/client/assets/{Sun-DinJm7xl.js → Sun-C95T18Lj.js} +1 -1
  33. package/dist/client/assets/{SwitchHorizontal01-By6FklEw.js → SwitchHorizontal01-CZ_I6szQ.js} +1 -1
  34. package/dist/client/assets/{Tool01-lSPz0ZF2.js → Tool01-CS7usoIz.js} +1 -1
  35. package/dist/client/assets/{Tool02-D1SnYSE4.js → Tool02-CTuV70QB.js} +1 -1
  36. package/dist/client/assets/{Trash01-D5TysWGQ.js → Trash01-CG7LoM8O.js} +1 -1
  37. package/dist/client/assets/{TrendUp01--bNrDwoN.js → TrendUp01-CIsNY6CN.js} +1 -1
  38. package/dist/client/assets/{Upload01-B_IDaLxl.js → Upload01-DcmkD5kc.js} +1 -1
  39. package/dist/client/assets/{User01-B4Dbto9v.js → User01-DZkrYOhm.js} +1 -1
  40. package/dist/client/assets/{Users01-Cu7j2TT9.js → Users01-C7ex4BR1.js} +1 -1
  41. package/dist/client/assets/{Users03-CAU0pmmp.js → Users03-C4Ud2US3.js} +1 -1
  42. package/dist/client/assets/{X-DDGC_Rai.js → X-DpuJ_Jz0.js} +1 -1
  43. package/dist/client/assets/{XCircle-kIoRNssb.js → XCircle-DI1tEi91.js} +1 -1
  44. package/dist/client/assets/{XClose-_0P6H3X5.js → XClose-Cr7wdfRL.js} +1 -1
  45. package/dist/client/assets/{Zap-H-n7Cbpx.js → Zap-BQVen7xN.js} +1 -1
  46. package/dist/client/assets/{ZapSquare-qXNldemU.js → ZapSquare-FefSSr5u.js} +1 -1
  47. package/dist/client/assets/{access-gate-Br0Eb9VI.js → access-gate-BZKafDXH.js} +1 -1
  48. package/dist/client/assets/{add-section-modal-CJNh-g44.js → add-section-modal-C8cUIbZA.js} +1 -1
  49. package/dist/client/assets/{agent-icon-58PNZ1k1.js → agent-icon-D7Gh_Q1A.js} +1 -1
  50. package/dist/client/assets/{agents-list-CBTbPhbU.js → agents-list-BkE_0HIA.js} +1 -1
  51. package/dist/client/assets/{ai-providers-ETIilJ2K.js → ai-providers-XwtrfgWc.js} +1 -1
  52. package/dist/client/assets/{alert-xWGgy7rS.js → alert-BXi4BHby.js} +1 -1
  53. package/dist/client/assets/{alert-dialog-RjyOPZNB.js → alert-dialog-BoFINk0L.js} +1 -1
  54. package/dist/client/assets/{app-editor-ord6argq.js → app-editor-DIjcRLYw.js} +1 -1
  55. package/dist/client/assets/{auth-CRUgOMvN.js → auth-VOng5GIV.js} +1 -1
  56. package/dist/client/assets/{auth-catchall-B3ah_g6N.js → auth-catchall-Bp3q4MsQ.js} +1 -1
  57. package/dist/client/assets/{auth-entry-D9R67aCr.js → auth-entry-D8k5tpw8.js} +1 -1
  58. package/dist/client/assets/{auth-split-layout-CdW10mwV.js → auth-split-layout-CiU5Qi4j.js} +1 -1
  59. package/dist/client/assets/{authenticate-and-persist-oauth-DObSb0HF.js → authenticate-and-persist-oauth-DcejIP47.js} +1 -1
  60. package/dist/client/assets/{automation-list-row-DaH1g49k.js → automation-list-row-CIceR1Sb.js} +1 -1
  61. package/dist/client/assets/{automation-runs-DbRddLhs.js → automation-runs-CpA2veTM.js} +1 -1
  62. package/dist/client/assets/{automations-BiOEhDgp.js → automations-B0Pw0_ty.js} +1 -1
  63. package/dist/client/assets/{avatar-cLqiD8B6.js → avatar-BROFoyC0.js} +1 -1
  64. package/dist/client/assets/{badge-EQ4IMmyF.js → badge-BLjTnm5D.js} +1 -1
  65. package/dist/client/assets/{billing-JfAVtIBy.js → billing-BKX1yKrV.js} +1 -1
  66. package/dist/client/assets/{block-document-BVc3uDUU.js → block-document-CYGqdKWr.js} +1 -1
  67. package/dist/client/assets/{brand-context-DRCmCTc1.js → brand-context-C35BgeXD.js} +1 -1
  68. package/dist/client/assets/{buckets-C3IyjI5S.js → buckets-Bj3iG8Wr.js} +1 -1
  69. package/dist/client/assets/{bulk-category-panel-CTipWaor.js → bulk-category-panel-CIxpzp-a.js} +1 -1
  70. package/dist/client/assets/{calendar-vFNCIkCw.js → calendar-BF2oF791.js} +1 -1
  71. package/dist/client/assets/{capability-load-error-CinT_hcQ.js → capability-load-error-Dp1Om1oX.js} +1 -1
  72. package/dist/client/assets/{card-gT1NecrF.js → card-Coa4wNbO.js} +1 -1
  73. package/dist/client/assets/{category-editor-K6xsrQ7_.js → category-editor-Cu6zGcng.js} +1 -1
  74. package/dist/client/assets/{chat-context-DbPywygr.js → chat-context-CXkstrYM.js} +1 -1
  75. package/dist/client/assets/{checkbox-BypEizbv.js → checkbox-DIpcufAb.js} +1 -1
  76. package/dist/client/assets/{cli-auth-success-MD6qJe7V.js → cli-auth-success-CJm98zHz.js} +1 -1
  77. package/dist/client/assets/{collection-detail-CLnVsvLu.js → collection-detail-DJUynLOP.js} +1 -1
  78. package/dist/client/assets/{collection-display-button-D7JgLK-H.js → collection-display-button-uBI2AIT5.js} +1 -1
  79. package/dist/client/assets/{collection-search-CZssB4KC.js → collection-search-B3KKPIB9.js} +1 -1
  80. package/dist/client/assets/{collection-table-wrapper-o5Fv3FVe.js → collection-table-wrapper-k41FK7S4.js} +1 -1
  81. package/dist/client/assets/{collection-tabs-DMN9i3Ws.js → collection-tabs-Bi0FlI8a.js} +1 -1
  82. package/dist/client/assets/{command-B_QMk7Cj.js → command-WpgNBnc2.js} +1 -1
  83. package/dist/client/assets/{commerce-onboarding-Cv1DCu63.js → commerce-onboarding-D8AQ4VKB.js} +1 -1
  84. package/dist/client/assets/{companions-core-Dho4RHbp.js → companions-core-CFVll6Bf.js} +1 -1
  85. package/dist/client/assets/{connect-CDq809xJ.js → connect-CTqNL_Ym.js} +1 -1
  86. package/dist/client/assets/{connection-card-Dz_HVrlq.js → connection-card-nLj5nbVg.js} +1 -1
  87. package/dist/client/assets/{connection-detail-BAnTqnvf.js → connection-detail-sPst4s2S.js} +1 -1
  88. package/dist/client/assets/{connection-B32gO6YD.js → connection-ei83FdSP.js} +1 -1
  89. package/dist/client/assets/{connection-form-helpers-CkkZgaEn.js → connection-form-helpers-CeQpx7MT.js} +1 -1
  90. package/dist/client/assets/{connections-CxUsI7Sp.js → connections-dBFZBurH.js} +1 -1
  91. package/dist/client/assets/{decopilot-sse-pool-B5pgCuKO.js → decopilot-sse-pool-BmtYuZmd.js} +1 -1
  92. package/dist/client/assets/{dialog-CN8u3XFD.js → dialog-2nTD6kuI.js} +1 -1
  93. package/dist/client/assets/{domain-settings-CiAa4Vn0.js → domain-settings-L3LeYceQ.js} +1 -1
  94. package/dist/client/assets/{drawer-CMcuia-e.js → drawer-rbQfHOO1.js} +1 -1
  95. package/dist/client/assets/{dropdown-menu-CeHimgIc.js → dropdown-menu-DmdPtTwS.js} +1 -1
  96. package/dist/client/assets/{empty-state-BkAFvfFD.js → empty-state-DjFwkp1m.js} +1 -1
  97. package/dist/client/assets/{extract-connection-data-DEnPtL7s.js → extract-connection-data-Cq8QzV7f.js} +1 -1
  98. package/dist/client/assets/{file-explorer-CIvEsNNB.js → file-explorer-DTi7XMfy.js} +1 -1
  99. package/dist/client/assets/{form-CNemRhN0.js → form-8wzS9l69.js} +1 -1
  100. package/dist/client/assets/{general-BKGiiune.js → general-BRDNqzE0.js} +1 -1
  101. package/dist/client/assets/{github-repo-picker-Bky3FIOd.js → github-repo-picker-sR97GYma.js} +1 -1
  102. package/dist/client/assets/{hooks-CpBGxXk4.js → hooks-EUE8Lqb7.js} +1 -1
  103. package/dist/client/assets/{index-qVdtcp_t.js → index-B-iEqSLP.js} +1 -1
  104. package/dist/client/assets/{index-DCsjsww9.js → index-BEICz9lN.js} +1 -1
  105. package/dist/client/assets/{index-C3tS2MAr.js → index-BRNCnKUf.js} +5 -5
  106. package/dist/client/assets/index-BYFv2F-Q.js +77 -0
  107. package/dist/client/assets/{index-DQx6NUre.js → index-CM8cE8Rw.js} +1 -1
  108. package/dist/client/assets/{index-DGIBBiuS.js → index-CNqUH5Px.js} +1 -1
  109. package/dist/client/assets/{index-B2-YTsBO.js → index-CUymriQl.js} +1 -1
  110. package/dist/client/assets/{index-Cdl7N6Lx.js → index-D0MtYpa_.js} +5 -5
  111. package/dist/client/assets/{index-BrYgzuni.js → index-DLFzQzyI.js} +1 -1
  112. package/dist/client/assets/{index-nHWNjKPE.js → index-DklqYEeT.js} +1 -1
  113. package/dist/client/assets/{index-BgfQIl-t.js → index-WiMeebBR.js} +1 -1
  114. package/dist/client/assets/{index-BtuwEo6f.js → index-YhlrNQ24.js} +1 -1
  115. package/dist/client/assets/{index-redirect-mu7RQFlF.js → index-redirect-BZjy7s0n.js} +1 -1
  116. package/dist/client/assets/{input-CkHkzy3S.js → input-DkIop2Qy.js} +1 -1
  117. package/dist/client/assets/{integration-icon-BaHKCXZE.js → integration-icon-347yAb5X.js} +1 -1
  118. package/dist/client/assets/{invite-member-dialog-B9Mqn7CI.js → invite-member-dialog-Da5GRBtU.js} +1 -1
  119. package/dist/client/assets/{label-q9x-6xOA.js → label-BDEnqf7j.js} +1 -1
  120. package/dist/client/assets/{layout-B34aVySm.js → layout-CJDpvFEC.js} +1 -1
  121. package/dist/client/assets/{login-B_ioyPwQ.js → login-BlaoThly.js} +1 -1
  122. package/dist/client/assets/{mcp-oauth-BSRVOuD1.js → mcp-oauth-CchZWCXC.js} +1 -1
  123. package/dist/client/assets/{members-SaDyGogN.js → members-DIppIc_X.js} +1 -1
  124. package/dist/client/assets/{monaco-editor-OXgYpbz_.js → monaco-editor-aCXlVkJM.js} +1 -1
  125. package/dist/client/assets/{monitoring-stats-row-BYLpPJgb.js → monitoring-stats-row-Ddg7lG23.js} +1 -1
  126. package/dist/client/assets/{multi-select-Bmf5QyUe.js → multi-select-Bigh7FnP.js} +1 -1
  127. package/dist/client/assets/{oauth-callback-CssVtXQW.js → oauth-callback-XIZAeINW.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-ai-provider-BpoZxOGA.js → oauth-callback-ai-provider-B4KVa6hX.js} +1 -1
  129. package/dist/client/assets/{onboarding-WxcVb5nh.js → onboarding-C0WCY2Zg.js} +1 -1
  130. package/dist/client/assets/{org-layout-LKFIeRn6.js → org-layout-BksITo3b.js} +1 -1
  131. package/dist/client/assets/{organization-choice-DNpDbId-.js → organization-choice-BQDOUzaG.js} +1 -1
  132. package/dist/client/assets/{orgs-BEiJ_9nz.js → orgs-D9h9ceC8.js} +1 -1
  133. package/dist/client/assets/{page-seo-form-Bd94yEy5.js → page-seo-form-BgMtyEyw.js} +1 -1
  134. package/dist/client/assets/{popover-AXaTZsb8.js → popover-p3i6fRNM.js} +1 -1
  135. package/dist/client/assets/{post-editor-BvKZL-5Y.js → post-editor-Dy7IbbFs.js} +1 -1
  136. package/dist/client/assets/{primitives-y1LFpCDL.js → primitives-CzyRHqXD.js} +1 -1
  137. package/dist/client/assets/{profile-D4S5vHPc.js → profile-Dml9wk8T.js} +1 -1
  138. package/dist/client/assets/project-app-view-b2xvSZO9.js +1 -0
  139. package/dist/client/assets/record-editor-CqsDr4v5.js +1 -0
  140. package/dist/client/assets/{redirect-editor-Bc8yy63G.js → redirect-editor-B58bSaJ8.js} +1 -1
  141. package/dist/client/assets/registry-DHbVpAxH.js +2 -0
  142. package/dist/client/assets/{registry-layout-CaseSast.js → registry-layout-DcMavOwC.js} +1 -1
  143. package/dist/client/assets/{reports-CtPlKcfT.js → reports-B6b2CIl_.js} +1 -1
  144. package/dist/client/assets/{require-capability-CP1IJ6ba.js → require-capability-CBHqSknu.js} +1 -1
  145. package/dist/client/assets/{required-auth-layout-CrsfZLOn.js → required-auth-layout-D09Ls--w.js} +1 -1
  146. package/dist/client/assets/{reset-password-H6dFKcg0.js → reset-password-CZdEUJIF.js} +1 -1
  147. package/dist/client/assets/{roles-LyFIloYH.js → roles-C0Fyj9ow.js} +1 -1
  148. package/dist/client/assets/{search-input-C_5VvQQC.js → search-input-DEvkqrly.js} +1 -1
  149. package/dist/client/assets/{secrets-C-wMpoS1.js → secrets-DvtLuM9q.js} +1 -1
  150. package/dist/client/assets/{sections-editor-B2LCUsiU.js → sections-editor-QPK36tiU.js} +1 -1
  151. package/dist/client/assets/{select-BIDy2x8b.js → select-7vCEMiqL.js} +1 -1
  152. package/dist/client/assets/{select-model-Boh2tlQl.js → select-model-B0Rtytw1.js} +1 -1
  153. package/dist/client/assets/{self-tool-result-DBnpRXfH.js → self-tool-result-za_4Yvt1.js} +1 -1
  154. package/dist/client/assets/{seo-editor-7dYwhPdx.js → seo-editor-CUXrkmLA.js} +1 -1
  155. package/dist/client/assets/{settings-layout-C5PCtd5Q.js → settings-layout-DjnNOc9x.js} +1 -1
  156. package/dist/client/assets/{settings-section-cyp49dKd.js → settings-section-DldCtl7r.js} +1 -1
  157. package/dist/client/assets/{shell-controls-BgyiafPq.js → shell-controls-Dn1bzliw.js} +1 -1
  158. package/dist/client/assets/{shell-layout-BJc1OBLF.js → shell-layout-BOoDcQ7s.js} +1 -1
  159. package/dist/client/assets/{sidebar-BraZ6Sy0.js → sidebar-DRvWK2Ea.js} +1 -1
  160. package/dist/client/assets/{skeleton-C-gtJVgV.js → skeleton-BYbzmvXZ.js} +1 -1
  161. package/dist/client/assets/{spinner-CkjG6Ot2.js → spinner-bMuJIZjw.js} +1 -1
  162. package/dist/client/assets/{sso-DIl37S3p.js → sso-D7KugfpW.js} +1 -1
  163. package/dist/client/assets/{store-BNfxnVWc.js → store-CO6cAkyl.js} +1 -1
  164. package/dist/client/assets/store-registry-DKSW3dHB.js +2 -0
  165. package/dist/client/assets/{studio-tools-BjIrs4EE.js → studio-tools-BkYUkkXB.js} +1 -1
  166. package/dist/client/assets/{switch-CUhaOYd8.js → switch-ZAofmEnR.js} +1 -1
  167. package/dist/client/assets/{tab-id-DMsAFHWJ.js → tab-id-D5rI6vVb.js} +1 -1
  168. package/dist/client/assets/{table-B-R0Bu2l.js → table-Dno7EMp1.js} +1 -1
  169. package/dist/client/assets/{tabs-fyNI6e-F.js → tabs-BOIXOLYE.js} +1 -1
  170. package/dist/client/assets/{textarea-BJEpJLZH.js → textarea-CRxE7M7J.js} +1 -1
  171. package/dist/client/assets/{toggle-group-KqH4z9fM.js → toggle-group-DeAKEpbg.js} +1 -1
  172. package/dist/client/assets/{toolbar-rRhPKBjo.js → toolbar-CXgOn6y9.js} +1 -1
  173. package/dist/client/assets/{tooltip-DgjRneM3.js → tooltip-fl1xzViS.js} +1 -1
  174. package/dist/client/assets/{use-ai-providers-COEEg9_7.js → use-ai-providers-Bb64oFKS.js} +1 -1
  175. package/dist/client/assets/{use-automations-BPnE6XSf.js → use-automations-Bhs4wNxc.js} +1 -1
  176. package/dist/client/assets/{use-autosave-CM73N3_t.js → use-autosave-CEdct9dQ.js} +1 -1
  177. package/dist/client/assets/{use-capability-B3F4G6h-.js → use-capability-BnycW9CT.js} +1 -1
  178. package/dist/client/assets/{use-clock-tick-w0RZZTyH.js → use-clock-tick-DLykrXFL.js} +1 -1
  179. package/dist/client/assets/{use-connection-_Vt-LBqe.js → use-connection-Df3y6AO1.js} +1 -1
  180. package/dist/client/assets/{use-copy-Byo-5XA4.js → use-copy-aVHJtjAw.js} +1 -1
  181. package/dist/client/assets/{use-create-virtual-mcp-CM8R9Sxz.js → use-create-virtual-mcp-C_CY0w7m.js} +1 -1
  182. package/dist/client/assets/{use-debounced-autosave-vvUne41i.js → use-debounced-autosave-Bb6h4dQ2.js} +1 -1
  183. package/dist/client/assets/{use-debounced-value-a0Vdy7Tw.js → use-debounced-value-jnidUBIv.js} +1 -1
  184. package/dist/client/assets/{use-deco-credits-DBOCYuGr.js → use-deco-credits-B2dXM2_l.js} +1 -1
  185. package/dist/client/assets/{use-decopilot-events-De3qEvP9.js → use-decopilot-events--g_MduAT.js} +1 -1
  186. package/dist/client/assets/{use-delete-connection-B5efAp3g.js → use-delete-connection-Crs7O1-T.js} +1 -1
  187. package/dist/client/assets/{use-deployment-admin-BSF3xELl.js → use-deployment-admin-2H23kJxF.js} +1 -1
  188. package/dist/client/assets/{use-file-configs-wV3SZ4DU.js → use-file-configs-qKumaJ2B.js} +1 -1
  189. package/dist/client/assets/{use-infinite-scroll-Bqd0t4Md.js → use-infinite-scroll-B4ZgI6uy.js} +1 -1
  190. package/dist/client/assets/{use-join-requests-BelHkM2d.js → use-join-requests-dcYN8JB8.js} +1 -1
  191. package/dist/client/assets/{use-mcp-client-Z5eoySnN.js → use-mcp-client-D9UGONLu.js} +1 -1
  192. package/dist/client/assets/{use-mcp-tools-BJrKiQmp.js → use-mcp-tools-FBmzZbPl.js} +1 -1
  193. package/dist/client/assets/{use-members-DumzA3sT.js → use-members-D_nOcmS_.js} +1 -1
  194. package/dist/client/assets/{use-mobile-CiAG3rCc.js → use-mobile-DknLG6Ru.js} +1 -1
  195. package/dist/client/assets/{use-navigate-to-agent-zqqF194p.js → use-navigate-to-agent-CcrKawbg.js} +1 -1
  196. package/dist/client/assets/{use-open-billing-url-QDMifG15.js → use-open-billing-url-DyN8EUU-.js} +1 -1
  197. package/dist/client/assets/{use-org-auth-client-Dyw8AZup.js → use-org-auth-client-BPaqoCNz.js} +1 -1
  198. package/dist/client/assets/{use-org-sso-CIviJj0q.js → use-org-sso-CbObV4Jy.js} +1 -1
  199. package/dist/client/assets/{use-organization-roles-wgtIIqoA.js → use-organization-roles-a6_ShiPq.js} +1 -1
  200. package/dist/client/assets/{use-organization-settings-DrxQ1ZK_.js → use-organization-settings-CgndneJg.js} +1 -1
  201. package/dist/client/assets/{use-registry-connections-Feh2IqQj.js → use-registry-connections-D14lN-e9.js} +1 -1
  202. package/dist/client/assets/{use-secrets-2OSzLnXJ.js → use-secrets-Db3rlvJY.js} +1 -1
  203. package/dist/client/assets/{use-status-sounds-BW04ONXV.js → use-status-sounds-CvdfxQWf.js} +1 -1
  204. package/dist/client/assets/{use-tags-C0facn6n.js → use-tags-DNCqx0kn.js} +1 -1
  205. package/dist/client/assets/{use-view-mode-D9pOqfLy.js → use-view-mode-C7Za1ElL.js} +1 -1
  206. package/dist/client/assets/{use-virtual-mcp-oKJ1QLuA.js → use-virtual-mcp-BoBOLkTK.js} +1 -1
  207. package/dist/client/assets/useInfiniteQuery-UZ4MS_PK.js +1 -0
  208. package/dist/client/assets/{useRouterState-BllA107Q.js → useRouterState-BxqnPUql.js} +1 -1
  209. package/dist/client/assets/useSuspenseInfiniteQuery-D0yeSOC6.js +1 -0
  210. package/dist/client/assets/{users-BGx4IlvT.js → users-Y8Lfdd61.js} +1 -1
  211. package/dist/client/assets/{variant-calendar-B2dTtHPN.js → variant-calendar-zeyNWlli.js} +1 -1
  212. package/dist/client/assets/{view-mode-toggle-BBT21OJ_.js → view-mode-toggle-OLN4pw9l.js} +1 -1
  213. package/dist/client/index.html +1 -1
  214. package/dist/server/cli.js +1 -1
  215. package/dist/server/server.js +1 -1
  216. package/package.json +1 -1
  217. package/dist/client/assets/index-CFgEWjUi.js +0 -77
  218. package/dist/client/assets/project-app-view-B8hxjA4S.js +0 -1
  219. package/dist/client/assets/record-editor-CDcZtA46.js +0 -1
  220. package/dist/client/assets/registry-AGS3WSea.js +0 -2
  221. package/dist/client/assets/store-registry-TFL4LN-C.js +0 -2
  222. package/dist/client/assets/useInfiniteQuery-yu7-4gt5.js +0 -1
  223. package/dist/client/assets/useSuspenseInfiniteQuery-DIuSZwVi.js +0 -1
@@ -2728,7 +2728,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2728
2728
 
2729
2729
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2730
2730
 
2731
- Respond with the structured verdict and a short reason.`,ZC$;var GC$=B(()=>{S4();aw();s$1();$16=e$1.object({requiresReview:e$1.boolean().describe("true if the changes should go through pull-request review"),reason:e$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});ZC$={requiresReview:!1,reason:""}});function Y16($){if(!$||$.includes(".."))return!1;return G16.test($)}function YC$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Y16(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function QC$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var G16;var JC$=B(()=>{G16=/^[\w./@-]+$/});function $81($){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 WC$($,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 KC$($,Z,X,G){if(!G.connectionId)throw new _g("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new _g(u7);await qx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new _g(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await vw(G.connectionId,G.owner,G.name,$.db,$.vault),K=lE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await rw(N,Q16).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var Q16=10485760,_g;var NC$=B(()=>{Dw();i$1();sn();Tn();_g=class _g extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function W16($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!J16.test(Z))throw Error(`Invalid branch name: ${$}`)}function _C($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(N16)])}function vC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function Z81($,Z){let G=(dE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return dE0.set($,Y),Y.finally(()=>{if(dE0.get($)===Y)dE0.delete($)}),G}async function SZ($,Z,X){let G=vC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.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",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?F16(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.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 F16($){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 mE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function U16($){return UC$.includes($)}var J16,HC$=524288,K16=65536,N16=1e4,FC$=2000,H16,dE0,fY,UC$,wC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",H16),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:_C(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 SZ(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 SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!U16(X))return Z.json({error:`step must be one of: ${UC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=s(Z.var.studioContext),Q=sU0(G.virtualMcpMetadata);try{await eU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(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 nH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return oV$(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)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(FC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(FC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return Z81(G,async()=>{try{await n$1(J,X,G);let W=WC$(Y,Q);if(W)await KC$(J,X,G,W)}catch(W){if(W instanceof _g)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return Z81(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return Z81(G,async()=>{try{await n$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:HC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=o$1(K)&&H?[K,N]:await Promise.all([mE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),mE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await $C$(J,F,U);return Z.json(w,200,fY)}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,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:HC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=o$1(K)&&H?[K,N]:await Promise.all([mE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),mE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await XC$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}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,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=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 Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=$81(`${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 N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:K16,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=YC$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=QC$(Y,J.resolveType),K=$81(W),N;try{N=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 H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var OC$=B(()=>{u8();TC();Cg();iV$();WH();pV$();O3();pw();tV$();rV$();zn0();an();s$1();GC$();JC$();NC$();J16=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;H16=mV$(async($,Z)=>{let X=$.var.studioContext;try{X0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=W1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=s(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{W16(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=En({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await BH(X,J,G),H=nV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await yX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});dE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};UC$=["clone","install","start"]});var BC$=($)=>{let Z=new D1;if(Z.use("*",AC),Z.route("/",QE0()),Z.route("/",SM$()),Z.route("/",CV$()),Z.route("/",SV$()),Z.route("/",hE0()),Z.route("/tools",gV$()),Z.route("/",fV$()),Z.route("/",FV$({kvStorage:$.kvStorage})),Z.route("/",NV$()),Z.route("/fs",AV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",wC$()),Z.route("/",qV$()),Z.route("/deco-sites",WE0()),Z.route("/sso",sL0()),Z.route("/",uE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",PM$()),$.mountDevAssets)Z.route("/dev-assets",KE0({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("/",Fs1()),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",RV$()),Z.route("/mcp",vO0()),Z.route("/mcp/self",gE0()),Z.route("/mcp",xO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var DC$=B(()=>{u8();U11();AM$();L11();NE0();mt();H11();HV$();UV$();TV$();Mi();Z11();yO0();g$1();IV$();MV$();VV$();_V$();xV$();u$1();hV$();c$1();bO0();OC$()});function O16($){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 B16($,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(w16)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var w16=1e4,D16=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},LC$=()=>{let $=new D1;return $.use("*",D16),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await B16(G,Y);return Z.json({apps:O16(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var EC$=B(()=>{u8();V$()});import{z as I1}from"zod";function MK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function q16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function M16($,Z,X){try{return JSON.parse($)}catch{throw new PC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function k16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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:M16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function S16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function V16($){if(!$)return;return{openai:{response_format:$}}}function C16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function zC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function jC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var L16=256,E16,z16,j16,P16,A16,T16,R16,I16,PC$,AC$,TC$;var RC$=B(()=>{S4();u8();Cg();IH();E16=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),z16=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),j16=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(z16).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),P16=I1.object({type:I1.literal("text")}),A16=I1.object({type:I1.literal("json_object")}),T16=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),R16=I1.union([P16,A16,T16]),I16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(j16),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(E16).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:R16.optional(),user:I1.string().optional()});PC$=class PC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};AC$=new D1;AC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(MK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(MK("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(MK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=I16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(MK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=q16(Q.model);if(!J)return $.json(MK("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((z)=>iB(z.providerId));if(!E)return $.json(MK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(MK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=k16(Q.messages),U=Q.tools?S16(Q.tools):void 0,w=V16(Q.response_format),O=C16(),D=Math.floor(Date.now()/1000);if(Q.stream)return nH($,async(L)=>{let E=zC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Cw(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=L16)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:jC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=zC$(H,F,U,Q,w,$.req.raw.signal),E=await Sw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:jC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(MK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(MK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(MK(Y.message,"server_error"),500)}});TC$=AC$});var qC$;var IC$=B(()=>{qC$={name:"decocms",version:"4.184.1",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 b16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??v16}}var MC$,v16="https://ph.studio.decocms.com",kC$;var SC$=B(()=>{u8();MC0();MV();OZ();V$();r01();IC$();MC$=new D1;MC$.get("/",($)=>{let Z={version:qC$.version,theme:DM1(),...rB().logo&&{logo:rB().logo},...XK()&&{internalUrl:E21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:xq$(),posthog:b16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!XK()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});kC$=MC$});function vg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function X81($){return(vg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function CC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(vg($))}&sz=${Z}`}function VC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function _C$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/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()?VC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):VC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var bC,f16,x16,y16,g16,vC$;var bC$=B(()=>{bC=h0.enum(["good","bad","neutral"]),f16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:bC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),x16=h0.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},h0.array(f16)),y16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},g16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:bC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:bC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:bC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:bC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(x16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:bC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:bC.optional()})).min(1)})]),vC$=h0.object({...y16,template:g16})});function iE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=vC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var G81=B(()=>{bC$()});import{join as fC$}from"path";async function u16($){try{let Z=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(h16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=iE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||X81($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function c16($,Z){let X=vg($),G=Z?.brand?.trim()||X81(X),Y=CC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=_C$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(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="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
2731
+ Respond with the structured verdict and a short reason.`,ZC$;var GC$=B(()=>{S4();aw();s$1();$16=e$1.object({requiresReview:e$1.boolean().describe("true if the changes should go through pull-request review"),reason:e$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});ZC$={requiresReview:!1,reason:""}});function Y16($){if(!$||$.includes(".."))return!1;return G16.test($)}function YC$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Y16(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function QC$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var G16;var JC$=B(()=>{G16=/^[\w./@-]+$/});function $81($){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 WC$($,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 KC$($,Z,X,G){if(!G.connectionId)throw new _g("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new _g(u7);await qx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new _g(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await vw(G.connectionId,G.owner,G.name,$.db,$.vault),K=lE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await rw(N,Q16).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var Q16=10485760,_g;var NC$=B(()=>{Dw();i$1();sn();Tn();_g=class _g extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function W16($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!J16.test(Z))throw Error(`Invalid branch name: ${$}`)}function _C($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(N16)])}function vC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function Z81($,Z){let G=(dE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return dE0.set($,Y),Y.finally(()=>{if(dE0.get($)===Y)dE0.delete($)}),G}async function SZ($,Z,X){let G=vC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.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",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?F16(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.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 F16($){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 mE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function U16($){return UC$.includes($)}var J16,HC$=524288,K16=65536,N16=1e4,FC$=2000,H16,dE0,fY,UC$,wC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",H16),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:_C(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 SZ(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 SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!U16(X))return Z.json({error:`step must be one of: ${UC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=s(Z.var.studioContext),Q=sU0(G.virtualMcpMetadata);try{await eU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(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 nH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return oV$(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)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(FC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(FC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return Z81(G,async()=>{try{await n$1(J,X,G);let W=WC$(Y,Q);if(W)await KC$(J,X,G,W)}catch(W){if(W instanceof _g)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return Z81(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return Z81(G,async()=>{try{await n$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:HC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=o$1(K)&&H?[K,N]:await Promise.all([mE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),mE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await $C$(J,F,U);return Z.json(w,200,fY)}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,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:HC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=o$1(K)&&H?[K,N]:await Promise.all([mE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),mE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await XC$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}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,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=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 Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=$81(`${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 N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:K16,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=YC$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=QC$(Y,J.resolveType),K=$81(W),N;try{N=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 H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var OC$=B(()=>{u8();TC();Cg();iV$();WH();pV$();O3();pw();tV$();rV$();zn0();an();s$1();GC$();JC$();NC$();J16=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;H16=mV$(async($,Z)=>{let X=$.var.studioContext;try{X0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=W1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=s(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{W16(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=En({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await BH(X,J,G),H=nV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await yX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});dE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};UC$=["clone","install","start"]});var BC$=($)=>{let Z=new D1;if(Z.use("*",AC),Z.route("/",QE0()),Z.route("/",SM$()),Z.route("/",CV$()),Z.route("/",SV$()),Z.route("/",hE0()),Z.route("/tools",gV$()),Z.route("/",fV$()),Z.route("/",FV$({kvStorage:$.kvStorage})),Z.route("/",NV$()),Z.route("/fs",AV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",wC$()),Z.route("/",qV$()),Z.route("/deco-sites",WE0()),Z.route("/sso",sL0()),Z.route("/",uE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",PM$()),$.mountDevAssets)Z.route("/dev-assets",KE0({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("/",Fs1()),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",RV$()),Z.route("/mcp",vO0()),Z.route("/mcp/self",gE0()),Z.route("/mcp",xO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var DC$=B(()=>{u8();U11();AM$();L11();NE0();mt();H11();HV$();UV$();TV$();Mi();Z11();yO0();g$1();IV$();MV$();VV$();_V$();xV$();u$1();hV$();c$1();bO0();OC$()});function O16($){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 B16($,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(w16)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var w16=1e4,D16=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},LC$=()=>{let $=new D1;return $.use("*",D16),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await B16(G,Y);return Z.json({apps:O16(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var EC$=B(()=>{u8();V$()});import{z as I1}from"zod";function MK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function q16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function M16($,Z,X){try{return JSON.parse($)}catch{throw new PC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function k16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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:M16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function S16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function V16($){if(!$)return;return{openai:{response_format:$}}}function C16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function zC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function jC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var L16=256,E16,z16,j16,P16,A16,T16,R16,I16,PC$,AC$,TC$;var RC$=B(()=>{S4();u8();Cg();IH();E16=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),z16=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),j16=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(z16).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),P16=I1.object({type:I1.literal("text")}),A16=I1.object({type:I1.literal("json_object")}),T16=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),R16=I1.union([P16,A16,T16]),I16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(j16),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(E16).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:R16.optional(),user:I1.string().optional()});PC$=class PC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};AC$=new D1;AC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(MK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(MK("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(MK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=I16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(MK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=q16(Q.model);if(!J)return $.json(MK("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((z)=>iB(z.providerId));if(!E)return $.json(MK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(MK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=k16(Q.messages),U=Q.tools?S16(Q.tools):void 0,w=V16(Q.response_format),O=C16(),D=Math.floor(Date.now()/1000);if(Q.stream)return nH($,async(L)=>{let E=zC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Cw(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=L16)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:jC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=zC$(H,F,U,Q,w,$.req.raw.signal),E=await Sw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:jC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(MK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(MK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(MK(Y.message,"server_error"),500)}});TC$=AC$});var qC$;var IC$=B(()=>{qC$={name:"decocms",version:"4.185.0",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 b16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??v16}}var MC$,v16="https://ph.studio.decocms.com",kC$;var SC$=B(()=>{u8();MC0();MV();OZ();V$();r01();IC$();MC$=new D1;MC$.get("/",($)=>{let Z={version:qC$.version,theme:DM1(),...rB().logo&&{logo:rB().logo},...XK()&&{internalUrl:E21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:xq$(),posthog:b16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!XK()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});kC$=MC$});function vg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function X81($){return(vg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function CC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(vg($))}&sz=${Z}`}function VC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function _C$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/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()?VC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):VC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var bC,f16,x16,y16,g16,vC$;var bC$=B(()=>{bC=h0.enum(["good","bad","neutral"]),f16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:bC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),x16=h0.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},h0.array(f16)),y16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},g16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:bC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:bC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:bC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:bC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(x16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:bC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:bC.optional()})).min(1)})]),vC$=h0.object({...y16,template:g16})});function iE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=vC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var G81=B(()=>{bC$()});import{join as fC$}from"path";async function u16($){try{let Z=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(h16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=iE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||X81($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function c16($,Z){let X=vg($),G=Z?.brand?.trim()||X81(X),Y=CC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=_C$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(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="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
2732
2732
  `)}function l16($,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}
2733
2733
  </head>`)}function xC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=vg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(fC$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(d16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?fC$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await u16(vg(G)),K=c16(G,W);return X.html(l16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var h16=2500,d16=1e4;var yC$=B(()=>{u8();G81();TD();V$()});function Lo($,Z){return fetch(`${UW({})}${$}`,Z)}async function m16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Lo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=iE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var i16,C3,nE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},gC$;var hC$=B(()=>{u8();IQ();TD();G81();i16=new Set(["complete","errored","terminated","unknown"]),C3=new D1;C3.use("*",async($,Z)=>{let X=await L8.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});C3.use("/run",nE0);C3.use("/status",nE0);C3.use("/link-token/*",nE0);C3.use("/suggest",nE0);C3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await m16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});C3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Lo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${AD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});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)}});C3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Lo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${AD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:i16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});C3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Lo(`/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)}});C3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Lo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});gC$=C3});import{createHmac as n16,timingSafeEqual as p16}from"crypto";function uC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>t16)return!1;let W=n16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&p16(K,H)})}function cC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=tQ(Z),G=tQ(tQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:kK(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:G}}}function o16($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function kK($){return typeof $==="string"?$:void 0}function tQ($){return typeof $==="object"&&$!==null?$:void 0}function pE0($){return typeof $==="number"?new Date($*1000):null}function J81($){return kK($)??kK(tQ($)?.id)}function r16($){return J81($.subscription)??kK(tQ(tQ($.parent)?.subscription_details)?.subscription)}function a16($){let Z=pE0($.current_period_end);if(Z)return Z;let X=tQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=tQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function Y81($,Z){let X=pE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function Q81($,Z){let X=pE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function s16($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=kK(tQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(kK(tQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(kK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=kK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(tQ(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:G,creditCents:tQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(kK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=J81(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(Y81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:J81(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:Q81(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=kK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&Y81(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":o16(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:a16(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:Q81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=r16(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(Y81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:pE0(X.period_end),lastStripeEventAt:Q81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function lC$($){let Z=new fN(c8().db),X=await s16(Z,$);if(X.handled&&X.topUp)await nH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await s0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof Q3&&(G.status===400||G.status===404)))throw G}return X}var t16=300;var dC$=B(()=>{YQ();ei();xo0()});var e16=1048576,W81;var mC$=B(()=>{u8();TC();V$();dC$();W81=new D1;W81.post("/webhook",F7({maxSize:e16,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=d0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!uC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=cC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await lC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function iC$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var nC$,$$6,Z$6,pC$;var tC$=B(()=>{u8();PJ();sx();Ev();nC$=new D1,$$6=["range","if-none-match","if-modified-since"],Z$6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];nC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Ug($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Y=await Wp(G,Z);if(!Y)throw new G$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&jJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return iC$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of $$6){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new G$(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:`,G),new G$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Z$6){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),iC$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});pC$=nC$});var Eo=_((fC)=>{var X$6=fC&&fC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),G$6=fC&&fC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))X$6(Z,$,X)};Object.defineProperty(fC,"__esModule",{value:!0});G$6(tG(),fC)});var aC$=_((oC$)=>{Object.defineProperty(oC$,"__esModule",{value:!0});oC$.version=void 0;oC$.version="3.4.0"});var $_$=_((SK)=>{var Y$6=SK&&SK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(SK,"__esModule",{value:!0});SK.NodeTransport=SK.VERSION=void 0;SK.nodeResolveHost=H$6;var h6=Eo(),Q$6=j0("net"),K81=j0("tls"),J$6=j0("path"),sC$=j0("fs"),W$6=Y$6(j0("dns")),K$6=aC$();SK.VERSION=K$6.version;var N$6="nats.js";class eC${socket;version;lang;yields=[];signal=(0,h6.deferred)();closedNotification=(0,h6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=N$6,this.version=SK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,h6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw h6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new h6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new h6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,h6.deferred)(),X,G=(0,Q$6.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,h6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=h6.DataBuffer.concat(...this.yields),Y=(0,h6.extractProtocolMessage)(G);if(Y!=="")try{let Q=h6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}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,h6.deferred)();try{if($=(0,J$6.resolve)($),!(0,sC$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,sC$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);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,h6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new h6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,h6.deferred)();try{let Y=(0,K81.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new h6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,h6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new h6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,h6.deferred)();try{let G=(0,K81.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new h6.errors.ConnectionError(G.message,{cause:G}))}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,h6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,h6.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 K81.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,h6.render)($)}`);let Z=(0,h6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,h6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,h6.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}}SK.NodeTransport=eC$;function H$6($){let Z=(0,h6.deferred)();return W$6.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Q_$=_((Y_$)=>{Object.defineProperty(Y_$,"__esModule",{value:!0});Y_$.connect=F$6;var Z_$=$_$(),X_$=Eo(),G_$=Eo();function F$6($={}){if((0,G_$.hasWsProtocol)($))return Promise.reject(G_$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,X_$.setTransportFactory)({factory:()=>{return new Z_$.NodeTransport},dnsResolveFn:Z_$.nodeResolveHost}),X_$.NatsConnectionImpl.connect($)}});var J_$=_((pH)=>{var w$6=pH&&pH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),O$6=pH&&pH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))w$6(Z,$,X)};Object.defineProperty(pH,"__esModule",{value:!0});pH.connect=void 0;var B$6=Q_$();Object.defineProperty(pH,"connect",{enumerable:!0,get:function(){return B$6.connect}});O$6(Eo(),pH)});function H_$($){let Z=$?.connectFn??z$6,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(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,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:E$6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=lG(L$6,D$6,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?W_$.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(!G)G=N_$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function z$6($){return K_$.connect($)}var W_$,K_$,N_$,D$6=100,L$6=3000,E$6=3000;var F_$=B(()=>{K5();W_$=k(Jh(),1),K_$=k(J_$(),1),N_$=k(eO(),1)});function N81($,Z){return`${$}.${Z}`}class H81{cache;constructor($){this.cache=Kg({ttlMs:$?.ttlMs??j$6,maxSize:$?.maxSize??P$6})}async get($,Z){return this.cache.get(N81($,Z))??null}async set($,Z,X){this.cache.set(N81($,Z),X)}async invalidate($,Z){this.cache.delete(N81($,Z))}teardown(){this.cache.clear()}}var j$6=600000,P$6=5000;var U_$=()=>{};function tE0($,Z){return`${$}:${Z}`}function F81($){let Z=Kg({ttlMs:$?.ttlMs??A$6,maxSize:$?.maxSize??T$6}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish(w_$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(tE0(K,N))},set(K,N,H){Z.set(tE0(K,N),H)},invalidate(K,N){Z.delete(tE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(w_$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(tE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var w_$="studio.ai-provider-keys.invalidate",A$6=30000,T$6=5000;var O_$=()=>{};class U81{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=B_$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.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 G of B_$)Z.publish(G,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 B_$;var D_$=B(()=>{B_$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var L_$=($)=>{let Z;return()=>Z??=$()},w81,O81;var E_$=B(()=>{N5();w81=L_$(()=>J8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),O81=L_$(()=>J8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function V$6(){return{name:jH,subjects:[`${GO0}.>`],storage:_3.StorageType.File,max_age:q$6,max_bytes:k$6,max_msgs_per_subject:S$6,discard:_3.DiscardPolicy.Old,retention:_3.RetentionPolicy.Limits,duplicate_window:M$6,num_replicas:1}}class P_${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 z_$($){let Z=j_$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function b$6($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,I$6().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 f$6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class B81{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=V$6(),X=await dG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await _3.jetstreamManager($);try{await G.streams.info(jH),await G.streams.update(jH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(jH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:f$6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){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 Q=b$6(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=kK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=np0(N,{runId:Z}),U=performance.now()-H;if(w81().record(U),O81().add(1,{"org.id":G??"unknown"}),v$6?.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)Q.publish(Y,w.subject,w.data,w.headers?z_$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=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(N.releaseLock(),W(),_$6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=np0(Z,{runId:$,dedup:X});if(w81().record(performance.now()-Y),O81().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:z_$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=MK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?_3.DeliverPolicy.New:_3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=QO($),W;try{W=await(await G.consumers.get(jH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=KO0({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(YO0()).pipeThrough(QO0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(jH,{filter:QO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var _3,j_$,R$6=($)=>{let Z;return()=>Z??=$()},I$6,q$6=86400000000000,M$6=120000000000,k$6=4294967296,S$6=500000,C$6,_$6,v$6;var A_$=B(()=>{K5();pp0();NO0();JO0();N5();E_$();_3=k(eO(),1),j_$=k(Jh(),1),I$6=R$6(()=>J8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));C$6=process.env.STREAM_ENCODE_TRACE==="1",_$6=process.env.DECOPILOT_STREAM_TRACE==="1";v$6=C$6?new P_$:null});function oE0($,Z,X,G){if(!G)return!1;return $.emit(Z,e3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var T_$=B(()=>{O8()});class D81{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}}import{readdir as x$6,rm as rE0}from"fs/promises";import{join as aE0}from"path";async function sE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-y$6),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await xC($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await R_$($,Y,Z);else if(!Y.startsWith(".")){let Q=aE0($,Y),J=await xC(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await R_$(Q,K,Z)}if((await xC(Q)).length===0)await rE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function R_$($,Z,X){let G=0,Y=aE0($,Z),Q=await xC(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=aE0(Y,W),N=await xC(K);for(let F of N){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=aE0(K,F);await rE0(w,{recursive:!0,force:!0}),G++}}if((await xC(K)).length===0)await rE0(K,{recursive:!0,force:!0})}if((await xC(Y)).length===0)await rE0(Y,{recursive:!0,force:!0});return G}async function xC($){try{return(await x$6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var y$6=30;var L81=()=>{};import{DBOS as E81,SchedulerMode as g$6}from"@dbos-inc/dbos-sdk";async function u$6(){let $=[aQ(),yC(),vK()],Z=0;for(let X of $)try{Z+=await sE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function c$6($,Z){await E81.runStep(()=>u$6(),{name:"monitoringRetention"})}function q_$(){if(I_$)return;I_$=!0;let $=E81.registerWorkflow(c$6,{name:"monitoringRetentionWorkflow"});E81.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:h$6,mode:g$6.ExactlyOncePerIntervalWhenActive})}var h$6="23 4 * * *",I_$=!1;var M_$=B(()=>{mG();L81()});function k_$($){return async(Z,X)=>{let G=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(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Bw.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await Lc0($.db,Z,G.role);return Y.boundAuth=Dc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new oD(X,void 0,Y.boundAuth,G.role,"self"),N50(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var S_$=B(()=>{rD();Ri()});function l$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function m$6(){for(let $ of d$6)$()}function V_$($){let Z=[...z81.logs,$];z81={...z81,logs:Z.length>500?Z.slice(-500):Z},m$6()}function j81(){return i$6}var z81,d$6,i$6=!1;var P81=B(()=>{z81=l$6(),d$6=new Set});import{EventEmitter as n$6}from"events";var A81;var C_$=B(()=>{P81();A81=new n$6;A81.on("request",($)=>{V_$($)})});function __$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="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=bg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>bg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${o6.tool}${w}${o6.dim}(${L})${o6.reset}`}else if(U.method)Q=`${o6.dim}${bg(U.method)}${o6.reset}`}}catch{}}let W=bg(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${o6.mcp}${bg(H.slice(0,12))}\u2026${o6.reset}`}else if(Y==="/mcp")W=`${o6.mcp}/mcp${o6.reset}`;else if(Y==="/mcp/registry")W=`${o6.mcp}/mcp/registry${o6.reset}`;let K=t$6(G),N=J?"\u25C0":"\u2190";if(!j81())console.log(`${o6.dim}${N}${o6.reset} ${K}${G}${o6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=p$6(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!j81())console.log(`${o6.dim}${O}${o6.reset} ${K}${G}${o6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${o6.reset} ${o6.duration}${w}${o6.reset}`);A81.emit("request",{method:G,path:bg(Y),status:F,duration:H,timestamp:new Date})}}}var o6,p$6=($)=>{if($>=500)return o6.serverError;if($>=400)return o6.clientError;if($>=300)return o6.redirect;return o6.ok},t$6=($)=>{return o6[$]||o6.reset},bg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var v_$=B(()=>{P81();C_$();o6={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 y_$}from"crypto";import{mkdir as o$6,readdir as r$6,rm as b_$,stat as g_$}from"fs/promises";import{join as R81,relative as a$6}from"path";import{z as L$}from"zod";function u_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return R81(s$6,Z)}function c_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function T81($,Z){let X=u_$($),G=c_$(Z);return R81(X,G)}function e$6($,Z,X,G){let Y=d0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return y_$("sha256",Y).update(Q).digest("hex")}function x_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=e$6(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${c_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function l_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${y_$("md5","etag").update(G).digest("hex")}"`}async function d_$($,Z,X,G,Y){try{let Q=await r$6($,{withFileTypes:!0});for(let J of Q){let W=R81($,J.name),N=a$6(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await d_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await g_$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:l_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function m_$($,Z){let G=s($).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 Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=u_$(G);await o$6(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await d_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),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 Q=Y,J=T81(G,Q.key),W=await g_$(J);return{contentType:z11(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:l_$(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 Q=Y,J=Q.expiresIn??f_$;return{url:x_$(Z,G,Q.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 Q=Y,J=Q.expiresIn??f_$;return{url:x_$(Z,G,Q.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 Q=Y,J=T81(G,Q.key);try{return await b_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.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 Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=T81(G,K);try{await b_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function I81($,Z,X){let G=m_$(Z,X),Y=new NW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:$5});for(let J of G){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(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new hX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),hQ(Y,Q,$,"mcp:dev-assets")}async function i_$($,Z,X,G){let Q=m_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.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 s$6="./data/assets",f_$=3600,h_$,n_$;var p_$=B(()=>{V$();wy();u8();Ql();cV();TX();NE0();h_$=new D1;h_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return I81($.req.raw,Z,G)});n_$=h_$});var t_$={};N4(t_$,{mountDevRoutes:()=>$86});function $86($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return I81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await i_$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",n_$);let X=new D1;X.use("*",S3({mountPath:"/api/dev-assets"})),X.route("/",KE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var o_$=B(()=>{u8();F11();NE0();p_$()});import{sql as Z86}from"kysely";import{randomUUID as r_$}from"crypto";import{z as X86}from"zod";async function Y86($){let Z=new Date().toISOString(),X=r_$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={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:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),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","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:r_$(),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 Z86`SELECT
2734
2734
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.184.1",
3
+ "version": "4.185.0",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {