decocms 4.320.0 → 4.321.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/dist/client/assets/{AlertCircle-DZjE_Y0H.js → AlertCircle-DTA-xmN8.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DIFD2336.js → AreaChart-DWzH4cl2.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BsR-6m6j.js → ArrowLeft-DJHyaGVg.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-UBHjzAp-.js → ArrowUp-B56zz92l.js} +1 -1
  5. package/dist/client/assets/{Check-CA6oOwnk.js → Check-yANPvlWH.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-BaphLiUh.js → CheckCircle-CEm5M3Tl.js} +1 -1
  7. package/dist/client/assets/{ChevronRight-C1PKtWq_.js → ChevronRight-D_8iRnVD.js} +1 -1
  8. package/dist/client/assets/{ChevronSelectorVertical-uLPnhvHf.js → ChevronSelectorVertical-CDr8Ovfg.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-BWJ43Ad_.js → ChevronUp-D9JVuW7G.js} +1 -1
  10. package/dist/client/assets/{Copy01-DHhdbM_J.js → Copy01-ZnkwptEM.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-BewJRmPb.js → CreditCard01-DBOo-aYq.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-CuAwCaPW.js → DotsVertical-mvRvTh6x.js} +1 -1
  13. package/dist/client/assets/{Download01-R47mE7bD.js → Download01-CeBHR-fX.js} +1 -1
  14. package/dist/client/assets/{ErrorBarContext-eD_UIVvY.js → ErrorBarContext-CMbUifoM.js} +1 -1
  15. package/dist/client/assets/{Eye-D3bCBJMo.js → Eye-ggEjyhYq.js} +1 -1
  16. package/dist/client/assets/{GitBranch01-CjfnHX9l.js → GitBranch01-DZEodcVR.js} +1 -1
  17. package/dist/client/assets/{Globe01-DeCmIrD5.js → Globe01-Dj13xfTI.js} +1 -1
  18. package/dist/client/assets/{HardDrive-BpRcIm2Z.js → HardDrive-Bkrrs0FV.js} +1 -1
  19. package/dist/client/assets/{Image01-CStOAxG7.js → Image01-DfTbYbFE.js} +1 -1
  20. package/dist/client/assets/{Key01-ICcTBF9U.js → Key01-BBxtRrGm.js} +1 -1
  21. package/dist/client/assets/{Link01-CLzBJa_Z.js → Link01-DUUbBvGo.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-w2j8lCTU.js → LinkExternal01-61qG-hFo.js} +1 -1
  23. package/dist/client/assets/{LockUnlocked01-CbuTs0EA.js → LockUnlocked01-BfX9zVyU.js} +1 -1
  24. package/dist/client/assets/{Monitor01-CMjB6a1I.js → Monitor01-Cvj67Ryv.js} +1 -1
  25. package/dist/client/assets/{Package-BOH9DZQ0.js → Package-B4jzjbE8.js} +1 -1
  26. package/dist/client/assets/{Palette-CVvoWFYM.js → Palette-CXReGsk_.js} +1 -1
  27. package/dist/client/assets/{Play-Bn8_HZzx.js → Play-kr1GKsAc.js} +1 -1
  28. package/dist/client/assets/{Plus-DZ-r7ICl.js → Plus-Bz1cAYCY.js} +1 -1
  29. package/dist/client/assets/{SearchMd-BpXAT-eZ.js → SearchMd-DN6cu6SZ.js} +1 -1
  30. package/dist/client/assets/{Sector-fzRIcAmV.js → Sector-DidaJ4gW.js} +1 -1
  31. package/dist/client/assets/{Settings02-CkPf5bSQ.js → Settings02-C39ViKVB.js} +1 -1
  32. package/dist/client/assets/{Share07-P3qF7VX0.js → Share07-vMCtuazW.js} +1 -1
  33. package/dist/client/assets/{Shield01-BhVJtpaL.js → Shield01-SPzOFIU1.js} +1 -1
  34. package/dist/client/assets/{Stars01-Dxt-GRKF.js → Stars01-q62Ogx-P.js} +1 -1
  35. package/dist/client/assets/{Sun-ZKlmnxLK.js → Sun-B3CG15-H.js} +1 -1
  36. package/dist/client/assets/{ThumbsUp-BFZZTKVU.js → ThumbsUp-DV6K5Csu.js} +1 -1
  37. package/dist/client/assets/{Tool01-Cz6q9HPW.js → Tool01-DP3BW23e.js} +1 -1
  38. package/dist/client/assets/{Tool02-Dh-KcCDo.js → Tool02-DT-zZ1ks.js} +1 -1
  39. package/dist/client/assets/{Trash01-BDaDkc_-.js → Trash01-D5j2YoAs.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-gaB_ebZy.js → TrendUp01-CaNIYwx8.js} +1 -1
  41. package/dist/client/assets/{Upload01-BaOVc9nV.js → Upload01-DSJ1fWRp.js} +1 -1
  42. package/dist/client/assets/{User01-CvjutW7d.js → User01-Bq-AsdvG.js} +1 -1
  43. package/dist/client/assets/{UserSquare-DXupINNG.js → UserSquare-DGuYrk9Q.js} +1 -1
  44. package/dist/client/assets/{Users01-BYJLxdvv.js → Users01-CS6rfCga.js} +1 -1
  45. package/dist/client/assets/{Users03-DOh7pHdk.js → Users03-BnbWbfJy.js} +1 -1
  46. package/dist/client/assets/{XCircle-DQV3a8ui.js → XCircle-Dlv7pZja.js} +1 -1
  47. package/dist/client/assets/{XClose-Dciq0-47.js → XClose-BNIppwTn.js} +1 -1
  48. package/dist/client/assets/{Zap-BeDIMc43.js → Zap-CywbYsFI.js} +1 -1
  49. package/dist/client/assets/{ZoomOut-C3_0q9Na.js → ZoomOut-jLe5z2Gu.js} +1 -1
  50. package/dist/client/assets/{access-gate-asM9jXYM.js → access-gate-CgF7Ajgl.js} +1 -1
  51. package/dist/client/assets/{agent-icon-C7HwxMy2.js → agent-icon-D-9pJpLD.js} +1 -1
  52. package/dist/client/assets/{agents-list-BDCETOyD.js → agents-list-Bp5Z7NYF.js} +1 -1
  53. package/dist/client/assets/{ai-providers-DAeDnbZL.js → ai-providers-BxXtxvrC.js} +1 -1
  54. package/dist/client/assets/{alert-kAvO_IQi.js → alert-DlKRUXrR.js} +1 -1
  55. package/dist/client/assets/{alert-dialog-1uO7Q1_D.js → alert-dialog-D3FLXTEj.js} +1 -1
  56. package/dist/client/assets/{analytics-tab-DGo7bHoB.js → analytics-tab-BfjNGR6F.js} +1 -1
  57. package/dist/client/assets/api-keys-DpAgTJhn.js +1 -0
  58. package/dist/client/assets/{api-keys-BMnD4InK.js → api-keys-DyNVpi-W.js} +1 -1
  59. package/dist/client/assets/app-editor-Zo3b9Buj.js +1 -0
  60. package/dist/client/assets/{auth-CyxtW7VU.js → auth-CeWlFDdC.js} +1 -1
  61. package/dist/client/assets/{auth-catchall-BgPXl6l7.js → auth-catchall-D7POTu6Q.js} +1 -1
  62. package/dist/client/assets/{auth-entry-itFULZ8Z.js → auth-entry-COCcX5A_.js} +1 -1
  63. package/dist/client/assets/{auth-split-layout-BsnYR-yK.js → auth-split-layout-BG8u1Dhb.js} +1 -1
  64. package/dist/client/assets/{authenticate-and-persist-oauth-BH26XKT9.js → authenticate-and-persist-oauth-CxGKh8aj.js} +1 -1
  65. package/dist/client/assets/{automation-list-row-fcDYKNgJ.js → automation-list-row-Dr9aH5cl.js} +1 -1
  66. package/dist/client/assets/{automation-runs-BPY4nydY.js → automation-runs-D-MsqDZA.js} +1 -1
  67. package/dist/client/assets/{automations-BfJlUnUa.js → automations-DmzNjC10.js} +1 -1
  68. package/dist/client/assets/{avatar-CxjMK0xh.js → avatar-CsipcR4h.js} +1 -1
  69. package/dist/client/assets/{badge-Dx14P1uf.js → badge-Cr2fQRq8.js} +1 -1
  70. package/dist/client/assets/{block-document-6TSCP-wD.js → block-document-CPpzuDJ1.js} +1 -1
  71. package/dist/client/assets/{breadcrumb-B9-pZnD9.js → breadcrumb-BOw37uby.js} +1 -1
  72. package/dist/client/assets/{buckets-Dtq5LgxY.js → buckets-BhMvQpB6.js} +1 -1
  73. package/dist/client/assets/{bulk-category-panel-Clsi9QbK.js → bulk-category-panel-lgnUhRZs.js} +1 -1
  74. package/dist/client/assets/{capability-load-error-CUNqj87m.js → capability-load-error-D2I8YlS5.js} +1 -1
  75. package/dist/client/assets/{cards-BLVEB5RL.js → cards-Ckz_jSmB.js} +1 -1
  76. package/dist/client/assets/{category-editor-DmSBVcZu.js → category-editor-CUeNF_8r.js} +1 -1
  77. package/dist/client/assets/{cdn-tab-CBrImPtE.js → cdn-tab-EuSTLp5_.js} +1 -1
  78. package/dist/client/assets/{chart-DlBzaqfk.js → chart-BIwqiDqG.js} +1 -1
  79. package/dist/client/assets/{chat-context-mKzm57ri.js → chat-context-oSgRN_kR.js} +1 -1
  80. package/dist/client/assets/{checkbox-BtMOjQuM.js → checkbox-DRf1c0rh.js} +1 -1
  81. package/dist/client/assets/{choose-editor-CorMEUQ9.js → choose-editor-Pdurttdh.js} +1 -1
  82. package/dist/client/assets/{cli-auth-success-DgbatUEd.js → cli-auth-success-CAWRFjR6.js} +1 -1
  83. package/dist/client/assets/{client-icons-D7u-J_pd.js → client-icons-BFT3ByhX.js} +1 -1
  84. package/dist/client/assets/{collection-detail-GCT3_w-Q.js → collection-detail-B9Md04g8.js} +1 -1
  85. package/dist/client/assets/{collection-display-button-CUDW0vsP.js → collection-display-button-DWOMOsAO.js} +1 -1
  86. package/dist/client/assets/{collection-search-DytvMFFj.js → collection-search-lJZ_AiYh.js} +1 -1
  87. package/dist/client/assets/{collection-table-wrapper-jnHSZP_b.js → collection-table-wrapper-DvYmVRqQ.js} +1 -1
  88. package/dist/client/assets/{collection-tabs-F2v4cUxR.js → collection-tabs-BCClisiC.js} +1 -1
  89. package/dist/client/assets/{command-CeKckObX.js → command-BvTOvAwX.js} +1 -1
  90. package/dist/client/assets/{commerce-onboarding-CLnMQurr.js → commerce-onboarding-BVfRsUSf.js} +1 -1
  91. package/dist/client/assets/{config-DAEl2Fwz.js → config-ykFar5kq.js} +1 -1
  92. package/dist/client/assets/{connect-URRIS0oz.js → connect-C2gWPZrC.js} +1 -1
  93. package/dist/client/assets/{connect-layout-CmmdxzFu.js → connect-layout-DPz52OVW.js} +1 -1
  94. package/dist/client/assets/{connection-card-D3s_4e6c.js → connection-card-CLVO7gWM.js} +1 -1
  95. package/dist/client/assets/{connection-detail-DkuBO-o6.js → connection-detail-BUdncL7r.js} +1 -1
  96. package/dist/client/assets/{connection-form-helpers-CgOgzhG0.js → connection-form-helpers-BhB23GqA.js} +1 -1
  97. package/dist/client/assets/{connection-f2REUt95.js → connection-q0Pvw2B2.js} +1 -1
  98. package/dist/client/assets/{connections-DWVrQ0vB.js → connections-B8VbHw_f.js} +1 -1
  99. package/dist/client/assets/{create-organization-dialog-DUT9TDnz.js → create-organization-dialog-CfcRT_JW.js} +1 -1
  100. package/dist/client/assets/{decopilot-sse-pool-CugtSLrr.js → decopilot-sse-pool-_NQmGFbS.js} +1 -1
  101. package/dist/client/assets/{dialog-CCRr4CCv.js → dialog-C7M7JvTo.js} +1 -1
  102. package/dist/client/assets/{domain-settings-BDk0JrwV.js → domain-settings-9aEPBIWO.js} +1 -1
  103. package/dist/client/assets/{drawer-EJ0baEzN.js → drawer-CMB3kWdd.js} +1 -1
  104. package/dist/client/assets/{dropdown-menu-iq7an5CR.js → dropdown-menu-D4_fxfOo.js} +1 -1
  105. package/dist/client/assets/{e2e-tab-DaxRZwTM.js → e2e-tab-C_eFWdmQ.js} +1 -1
  106. package/dist/client/assets/{editor-CLQxxGs0.js → editor-D9KXkL69.js} +1 -1
  107. package/dist/client/assets/{empty-state-sOUWi52v.js → empty-state-CMqWP7WN.js} +1 -1
  108. package/dist/client/assets/{empty-state-B-hkvNGZ.js → empty-state-CXTU0Gr5.js} +1 -1
  109. package/dist/client/assets/{extract-connection-data-Bgz74dk7.js → extract-connection-data-D_rrQk5k.js} +1 -1
  110. package/dist/client/assets/{file-explorer-DL2c5OeX.js → file-explorer-_NdkqYe1.js} +1 -1
  111. package/dist/client/assets/{file-type-icon-BZyWvek2.js → file-type-icon-BnnSdDsH.js} +1 -1
  112. package/dist/client/assets/{folder-icon-oUyx5_4o.js → folder-icon-DlTz7QPL.js} +1 -1
  113. package/dist/client/assets/{form-CJy6gOK9.js → form-kmhrAcMq.js} +1 -1
  114. package/dist/client/assets/{general-CpyZsf17.js → general-Ds56K9tp.js} +1 -1
  115. package/dist/client/assets/{github-repo-picker-BNDot8ZD.js → github-repo-picker-CG5N8uO0.js} +1 -1
  116. package/dist/client/assets/{hooks-Ba0JKlx2.js → hooks-D05F-stG.js} +1 -1
  117. package/dist/client/assets/{hosting-tab-DNw8iXPA.js → hosting-tab-r6isx4QP.js} +1 -1
  118. package/dist/client/assets/{index-iMHThdI5.js → index-B8v6bpri.js} +2 -2
  119. package/dist/client/assets/{index-DyCofZuZ.js → index-BSbcWYFA.js} +1 -1
  120. package/dist/client/assets/{index-De2AiSst.js → index-BWEmC9U0.js} +57 -57
  121. package/dist/client/assets/{index-B3BkyrSZ.js → index-BoKx8Diy.js} +1 -1
  122. package/dist/client/assets/{index-cHwobFpD.js → index-Br8dpGPA.js} +1 -1
  123. package/dist/client/assets/{index-IILVq28E.js → index-BsAjbvxf.js} +1 -1
  124. package/dist/client/assets/{index-CZz8FtjU.js → index-CgPdM9sX.js} +1 -1
  125. package/dist/client/assets/{index-tM1x2fLe.js → index-CthsQzIN.js} +1 -1
  126. package/dist/client/assets/{index-DPb8WR51.js → index-DY3dr3k9.js} +1 -1
  127. package/dist/client/assets/index-DxxWRegm.css +1 -0
  128. package/dist/client/assets/{index-CFf7ypk5.js → index-M-Ir9x4g.js} +1 -1
  129. package/dist/client/assets/{index-redirect-BCAa2bPs.js → index-redirect-CUiCthS_.js} +1 -1
  130. package/dist/client/assets/{infra-billing-DyPww6_T.js → infra-billing-DhUuoMMN.js} +1 -1
  131. package/dist/client/assets/{input-CbnXHcO6.js → input-DW2ahhtH.js} +1 -1
  132. package/dist/client/assets/{integration-icon-C0qvOPer.js → integration-icon-B89DtTTF.js} +1 -1
  133. package/dist/client/assets/{invite-member-dialog-C5n5eTov.js → invite-member-dialog-BVqSRdPq.js} +1 -1
  134. package/dist/client/assets/{label-DRWhO--x.js → label-BhS7vsEg.js} +1 -1
  135. package/dist/client/assets/{layout-kSadgve2.js → layout-CCn5VLb4.js} +1 -1
  136. package/dist/client/assets/{login-xbLijAW2.js → login-DUuhqIbA.js} +1 -1
  137. package/dist/client/assets/{markdown-22Db80L5.js → markdown-C3hAzezL.js} +1 -1
  138. package/dist/client/assets/{mcp-oauth-EeLwp5eX.js → mcp-oauth-DLj5d3Vy.js} +1 -1
  139. package/dist/client/assets/{members-oSmXDq3z.js → members-DwYXjhhh.js} +1 -1
  140. package/dist/client/assets/{monaco-editor-CZowCy14.js → monaco-editor-Vy_rhpBS.js} +1 -1
  141. package/dist/client/assets/{monitoring-stats-row-CJCndUnv.js → monitoring-stats-row-D_d5RjHF.js} +1 -1
  142. package/dist/client/assets/{multi-select-Cj-97iNR.js → multi-select-peQ8D8Pu.js} +1 -1
  143. package/dist/client/assets/{oauth-callback-DSFqfe09.js → oauth-callback-D4zEQe6g.js} +1 -1
  144. package/dist/client/assets/{oauth-callback-ai-provider-Bwn4b05z.js → oauth-callback-ai-provider-9a41pxZK.js} +1 -1
  145. package/dist/client/assets/{onboarding-DLx1hdsY.js → onboarding-CUeeEM4A.js} +1 -1
  146. package/dist/client/assets/org-layout-C14JwsL-.js +1 -0
  147. package/dist/client/assets/{organization-choice-C5KwMY-x.js → organization-choice-CufRbPCe.js} +1 -1
  148. package/dist/client/assets/{orgs-D23D7LG1.js → orgs-DOJ311_K.js} +1 -1
  149. package/dist/client/assets/page-seo-form-Bzm5UnJ9.js +1 -0
  150. package/dist/client/assets/{popover-BYvt0bxB.js → popover-t_ZIm7eh.js} +1 -1
  151. package/dist/client/assets/{post-calendar-H3AIoZ0y.js → post-calendar-Bmj9kbgm.js} +1 -1
  152. package/dist/client/assets/{post-editor-DVZgxPIm.js → post-editor-B04BBFsL.js} +1 -1
  153. package/dist/client/assets/{primitives-B_XA7nYX.js → primitives-B8PIMqZF.js} +1 -1
  154. package/dist/client/assets/{profile-CFxhdDQq.js → profile-2ky8_NJs.js} +1 -1
  155. package/dist/client/assets/{project-app-view-M4vM1Rym.js → project-app-view-CPyowKnA.js} +1 -1
  156. package/dist/client/assets/{prompts-fZ1o4zpB.js → prompts-DF_PvFvF.js} +1 -1
  157. package/dist/client/assets/record-editor-CdeH0PSN.js +1 -0
  158. package/dist/client/assets/redirect-editor-DNQScjsS.js +1 -0
  159. package/dist/client/assets/registry-DXjIrXbl.js +2 -0
  160. package/dist/client/assets/{registry-layout-BzRjJS6o.js → registry-layout-CxgAdcGY.js} +1 -1
  161. package/dist/client/assets/{reports-DfMErjxR.js → reports-Cfr_ooDi.js} +1 -1
  162. package/dist/client/assets/{require-capability-BeFbF8pl.js → require-capability-C3U03ONf.js} +1 -1
  163. package/dist/client/assets/{required-auth-layout-DKUUs0wv.js → required-auth-layout-BFd3YKM1.js} +1 -1
  164. package/dist/client/assets/{reset-password-4AF23Xvh.js → reset-password-CB7WpCLR.js} +1 -1
  165. package/dist/client/assets/{review-settings-_vscni8V.js → review-settings-BWlNqIKi.js} +1 -1
  166. package/dist/client/assets/{roles-Hc7gjchO.js → roles-BypxpQys.js} +1 -1
  167. package/dist/client/assets/{schema-CalSBGUA.js → schema-BuoIK2NM.js} +1 -1
  168. package/dist/client/assets/{scroll-area-DmdvWjmC.js → scroll-area-CF5KP4xT.js} +1 -1
  169. package/dist/client/assets/{search-input-aRZQtrr1.js → search-input-l9JmQN1V.js} +1 -1
  170. package/dist/client/assets/{secrets-rcSAU0MH.js → secrets-mUX1ZJSA.js} +1 -1
  171. package/dist/client/assets/sections-editor-DkA5v4Ou.js +2 -0
  172. package/dist/client/assets/{select-DVuboUqa.js → select-BeM39jjH.js} +1 -1
  173. package/dist/client/assets/{select-model-C1B_bzfv.js → select-model-rW6YwKIw.js} +1 -1
  174. package/dist/client/assets/{self-tool-result-DDDE2dgE.js → self-tool-result-BOY_ezHR.js} +1 -1
  175. package/dist/client/assets/{seo-editor-45deCW0B.js → seo-editor-ARl87ZpS.js} +1 -1
  176. package/dist/client/assets/settings-layout-DYs5pwaZ.js +1 -0
  177. package/dist/client/assets/settings-sidebar-qm5r11nz.js +1 -0
  178. package/dist/client/assets/{shell-controls-kOkRLWtG.js → shell-controls-Dtx9w7-l.js} +1 -1
  179. package/dist/client/assets/{shell-layout-fxaPPTq-.js → shell-layout-CGFwfHMp.js} +1 -1
  180. package/dist/client/assets/{skill-preview-bjmuW_A1.js → skill-preview-hysKC1kO.js} +1 -1
  181. package/dist/client/assets/{skills-0J4B09Ux.js → skills-C7wLCrdg.js} +1 -1
  182. package/dist/client/assets/{sso-D-lMBKRN.js → sso-b4d7V5F8.js} +1 -1
  183. package/dist/client/assets/{store-Bzve1GXV.js → store-BPxn9mDU.js} +1 -1
  184. package/dist/client/assets/store-registry-BtXrmEhT.js +2 -0
  185. package/dist/client/assets/{switch-D5j2S-4i.js → switch-BTJg1O9U.js} +1 -1
  186. package/dist/client/assets/{synced-repos-CL7kgLGW.js → synced-repos-iq5etoTM.js} +1 -1
  187. package/dist/client/assets/{table-Bdl9_Fhf.js → table-B_EStcLQ.js} +1 -1
  188. package/dist/client/assets/{tabs-CJeYzOxp.js → tabs-BjBxcmhp.js} +1 -1
  189. package/dist/client/assets/{task-board-2M_cICbv.js → task-board-BHMys9hW.js} +1 -1
  190. package/dist/client/assets/{task-route-CheWHifs.js → task-route-r-W3qHvB.js} +1 -1
  191. package/dist/client/assets/{tasks-CkY0zKmU.js → tasks-Dz1vfh1l.js} +1 -1
  192. package/dist/client/assets/{textarea-CQu-QtAR.js → textarea-ByOwMVOP.js} +1 -1
  193. package/dist/client/assets/{thread-intent-D8J4loNV.js → thread-intent-DeAJERp8.js} +1 -1
  194. package/dist/client/assets/{thread-route-CYrRQzf6.js → thread-route-JP_jBQl2.js} +1 -1
  195. package/dist/client/assets/{toggle-group-B5yffd6B.js → toggle-group-BQMbtzfI.js} +1 -1
  196. package/dist/client/assets/{toolbar-BYn6hWQJ.js → toolbar-CR_lIJhX.js} +1 -1
  197. package/dist/client/assets/{toolbar-icon-button-V4uX1cT4.js → toolbar-icon-button-CyVRuDcs.js} +1 -1
  198. package/dist/client/assets/{track-DqsuBc-w.js → track-BzrD-gEE.js} +1 -1
  199. package/dist/client/assets/{types-CSh-_-A-.js → types-DdehnnVY.js} +1 -1
  200. package/dist/client/assets/{use-ai-providers-DNmUp1KH.js → use-ai-providers-VRUuTRhq.js} +1 -1
  201. package/dist/client/assets/{use-automations-BAS2bqab.js → use-automations-1X67KfoT.js} +1 -1
  202. package/dist/client/assets/{use-autosave-DAzXy6V3.js → use-autosave-DCQJH_gL.js} +1 -1
  203. package/dist/client/assets/{use-connection-BIoGt2fV.js → use-connection-C-dhEQVr.js} +1 -1
  204. package/dist/client/assets/{use-copy-Bqne_Qou.js → use-copy-B1L1W9s2.js} +1 -1
  205. package/dist/client/assets/{use-create-virtual-mcp-C5jE4Qbf.js → use-create-virtual-mcp-DiQNHYEZ.js} +1 -1
  206. package/dist/client/assets/{use-debounced-autosave-kIKO71Tg.js → use-debounced-autosave-BMYZ2YGs.js} +1 -1
  207. package/dist/client/assets/{use-debounced-value-B8nRETfv.js → use-debounced-value-D1N9FCWc.js} +1 -1
  208. package/dist/client/assets/{use-decopilot-events-Du05HBL-.js → use-decopilot-events-q6jF3KyR.js} +1 -1
  209. package/dist/client/assets/{use-delete-connection-B9swLPMU.js → use-delete-connection-DjOX5zhj.js} +1 -1
  210. package/dist/client/assets/{use-deployment-admin-BlhXkuuE.js → use-deployment-admin-DnmqgnN7.js} +1 -1
  211. package/dist/client/assets/{use-destination-route-BjLqPQzR.js → use-destination-route-BZnZlxip.js} +1 -1
  212. package/dist/client/assets/{use-file-configs-BWXflqeG.js → use-file-configs-RNJYyxdo.js} +1 -1
  213. package/dist/client/assets/{use-infinite-scroll-CKdXAA8A.js → use-infinite-scroll-BkUvStlN.js} +1 -1
  214. package/dist/client/assets/{use-join-requests-BKm-Euhh.js → use-join-requests-D243QYrm.js} +1 -1
  215. package/dist/client/assets/{use-mcp-auth-status-BBJKM7f_.js → use-mcp-auth-status-B_NYbaoD.js} +1 -1
  216. package/dist/client/assets/{use-mcp-client-Cb-7Tc46.js → use-mcp-client-DJ3fa1xp.js} +1 -1
  217. package/dist/client/assets/{use-mcp-prompts-B4teZ13r.js → use-mcp-prompts-EDCEFkva.js} +1 -1
  218. package/dist/client/assets/{use-mcp-tools-yMcjeDP1.js → use-mcp-tools-CSF0Nzff.js} +1 -1
  219. package/dist/client/assets/{use-members-BfBQJknB.js → use-members-CfnD8M7u.js} +1 -1
  220. package/dist/client/assets/{use-navigate-to-agent-BagpOb6G.js → use-navigate-to-agent-Bfd85iwi.js} +1 -1
  221. package/dist/client/assets/{use-org-auth-client-B4SqGhOd.js → use-org-auth-client-C0QDcwVK.js} +1 -1
  222. package/dist/client/assets/{use-org-repo-syncs-OgvPGokO.js → use-org-repo-syncs-D_mgvf_i.js} +1 -1
  223. package/dist/client/assets/{use-org-sso-BOX8tS6G.js → use-org-sso-DMI8WwP0.js} +1 -1
  224. package/dist/client/assets/{use-organization-roles-DWjijF9p.js → use-organization-roles-D8aZ-ZR_.js} +1 -1
  225. package/dist/client/assets/{use-organization-settings-LGG-1duj.js → use-organization-settings-BA2lxbR3.js} +1 -1
  226. package/dist/client/assets/{use-panel-navigate-BbrwVdUf.js → use-panel-navigate-Bd6QXiJy.js} +1 -1
  227. package/dist/client/assets/{use-project-scope-BJGCHDw2.js → use-project-scope-l_KFftl6.js} +1 -1
  228. package/dist/client/assets/{use-registry-connections-AvU1e53j.js → use-registry-connections-DXPYxL2r.js} +1 -1
  229. package/dist/client/assets/{use-secrets-C7MTfbp9.js → use-secrets-Bgkr4W3S.js} +1 -1
  230. package/dist/client/assets/{use-section-preview-base-CNJRRsrA.js → use-section-preview-base-BV3vay05.js} +1 -1
  231. package/dist/client/assets/{use-status-sounds-yJcdYzkO.js → use-status-sounds-BBTrZxa1.js} +1 -1
  232. package/dist/client/assets/{use-tags-CIfiPRHF.js → use-tags-CehLjUea.js} +1 -1
  233. package/dist/client/assets/{use-view-mode-C34ZcfuA.js → use-view-mode-DhfDSglh.js} +1 -1
  234. package/dist/client/assets/{use-virtual-mcp-DfwA3vbI.js → use-virtual-mcp-7JAczJJM.js} +1 -1
  235. package/dist/client/assets/useInfiniteQuery-CVCgU7w5.js +1 -0
  236. package/dist/client/assets/useSuspenseInfiniteQuery-BONtGFny.js +1 -0
  237. package/dist/client/assets/{users-BNFV8Nap.js → users-DlROvta_.js} +1 -1
  238. package/dist/client/assets/{variant-calendar-CRmTwjv7.js → variant-calendar-BL03vejT.js} +1 -1
  239. package/dist/client/assets/{view-mode-toggle-CCqJfRrB.js → view-mode-toggle-DITqQxrp.js} +1 -1
  240. package/dist/client/index.html +2 -2
  241. package/dist/server/cli.js +1 -1
  242. package/dist/server/server.js +1 -1
  243. package/package.json +1 -1
  244. package/dist/client/assets/api-keys-BLJwaRIG.js +0 -1
  245. package/dist/client/assets/app-editor-3ukfAjBA.js +0 -1
  246. package/dist/client/assets/index-owpBJsp0.css +0 -1
  247. package/dist/client/assets/org-layout-gpkA9U-U.js +0 -1
  248. package/dist/client/assets/page-seo-form-BI1ZnjGb.js +0 -1
  249. package/dist/client/assets/record-editor-7dypTFm2.js +0 -1
  250. package/dist/client/assets/redirect-editor-BRzcJWDt.js +0 -1
  251. package/dist/client/assets/registry-DcsfzNo4.js +0 -2
  252. package/dist/client/assets/sections-editor-DCp2vwD_.js +0 -2
  253. package/dist/client/assets/settings-layout-BSdBJN-5.js +0 -1
  254. package/dist/client/assets/settings-sidebar-CYw8r_vv.js +0 -1
  255. package/dist/client/assets/store-registry-BM8xhd8d.js +0 -2
  256. package/dist/client/assets/useInfiniteQuery-9JeN2e62.js +0 -1
  257. package/dist/client/assets/useSuspenseInfiniteQuery-tto2zjOo.js +0 -1
@@ -2981,7 +2981,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
2981
2981
  ${G.join(`
2982
2982
  `)}`:Y}function JO6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2983
2983
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Xm$=200,rB6=12,aB6,$O6=300,LX1=3;var wX1=D(()=>{XL();sT0();aB6={aheadBy:0,behindBy:0,files:[]}});function KO6($){if(!$||$.includes(".."))return!1;return WO6.test($)}function Ym$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!KO6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Gm$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var WO6;var Jm$=D(()=>{WO6=/^[\w./@-]+$/});function ya($,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 Wm$($,Z,X,Q){if(!Q.connectionId)throw new Sv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Sv(F9);await lO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:F9;throw new Sv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await fK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=M9$(F instanceof Error?F.message:String(F));throw N?new Sv(U):F}),K=Kl($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await uO(H,HO6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var HO6=10485760,Sv;var EX1=D(()=>{NJ();uT0();An();ri0();py();Sv=class Sv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function NO6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!FO6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Cv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(BO6)])}async function DO6($,Z){let X=$.var.studioContext,Q=HJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=SC(J?.metadata?.runtime);if(W)return W;let K=PD0(Z.virtualMcpMetadata),H=K==="cms"?await a71(X,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)an(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function LO6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await WQ($.var.studioContext)}catch{return null}}function _v($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Bl($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=ya(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=n(Q);return lT0(Q,G.id,Y)}function jX1($,Z){if(Z instanceof dA0)return $.json({error:Z.message},429,{...R5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,R5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,R5)}async function Fm$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Nm$($){try{let Z=await Bl($),X=await aT0(Z,$.get("vmClaim").branch);return $.json(X,200,R5)}catch(Z){return jX1($,Z)}}function ga($,Z){let Q=(Z20.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Z20.set($,Y),Y.finally(()=>{if(Z20.get($)===Y)Z20.delete($)}),Q}async function $7($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,R5);let Q=X?.runner??_v($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.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",...R5}})}}let O=await B.text(),L=X?.redactRepoDir?wO6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...R5}})};try{if(F){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function wO6($){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 X20($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function EO6($){return Um$.includes($)}var FO6,Km$=524288,UO6=65536,BO6=1e4,Hm$=2000,OO6,Z20,R5,Um$,Bm$=()=>{let $=new W1;$.use("/:virtualMcpId/:branch/*",OO6),$.post("/:virtualMcpId/:branch/write",(X)=>$7(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Cv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>$7(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Cv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>$7(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Cv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>$7(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Cv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>$7(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Cv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>$7(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Cv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>$7(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Cv(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return $7(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return $7(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>$7(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>$7(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!EO6(Q))return X.json({error:`step must be one of: ${Um$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await a71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await LO6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,R5);if(Q==="start"){let J=n(X.var.studioContext),W=my(Y.virtualMcpMetadata);try{await y70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return $7(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return XU(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Bd$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Nm$(X);return Z(X)});let Z=(X)=>$7(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hm$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Nm$(X);return $7(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hm$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Bl(X),J=await eT0(G,Q.branch,Y.base);return X.json(J,200,R5)}catch(Y){return jX1(X,Y)}return $7(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,R5);let Q=_v(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return ga(Y,async()=>{try{await e71(W,Q,Y);let K=ya(G,J);if(K)await Wm$(W,Q,Y,K)}catch(K){if(K instanceof Sv)return X.json({error:K.message},403,R5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,R5)}return $7(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ga(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,R5);try{let J=await Bl(X);return await Qm$(J,Q.branch,G),X.json({ok:!0},200,R5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,R5)}});return ga(Q.claimName,()=>$7(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ga(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Bl(X),H=W.base??await K.getDefaultBranch();return await $20(K,Q.branch,H),X.json({ok:!0},200,R5)}catch(W){return jX1(X,W)}});let Y=_v(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return ga(G,async()=>{try{await e71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,R5)}return $7(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",r5({maxSize:Km$,onError:(X)=>X.json({error:"Payload too large"},413,R5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=_v(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=XX1(F)&&U?[F,N]:Y?await Promise.all([X20(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),X20(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Bl(X);return Promise.all([aT0(w,Q.branch),eT0(w,Q.branch)])})(),L=await Ed$(K,B,O);return X.json(L,200,R5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return X.json({error:F},502,R5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",r5({maxSize:Km$,onError:(X)=>X.json({error:"Payload too large"},413,R5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=_v(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=XX1(F)&&U?[F,N]:Y?await Promise.all([X20(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),X20(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Bl(X);return Promise.all([aT0(w,Q.branch),eT0(w,Q.branch)])})(),L=await zd$(K,B,O,typeof H.language==="string"?H.language:void 0);return X.json(L,200,R5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return X.json({error:F},502,R5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=_v(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return Fm$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",r5({maxSize:UO6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=_v(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Ym$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Gm$(G,W.resolveType);return Fm$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Om$=D(()=>{r$();kH();Wl();s71();wn();Fd$();n3();Hg();Nd$();a3();Ud$();Od$();ni0();zn();GX1();Pd$();WX1();XL();wX1();Jm$();EX1();FO6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;OO6=hT0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{NO6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Dn({orgId:Y.id,virtualMcpId:G,branch:J}),H=await li0(X,J),F=ci0(H,Q),N=Hd$({userId:F,projectRef:K}),U=W.metadata??null,B=await DO6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await WQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});Z20=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Um$=["clone","install","start"]});function Dm$($,Z,X){let Q=zX1.get($);if(!Q)Q={pending:null,running:!1},zX1.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)zO6($,Q);return G}async function zO6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await PO6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)zX1.delete($)}}async function PO6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Ul(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=OX1(W,Q),H=[],F=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=DX1(K,O),E=`${JSON.stringify(L,null,2)}
2984
- `,j=await Z.createBlob(E);await ed$(Z.owner,Z.repo,j,E);let z=w[0]??`${rT0(Q)}/${HX1(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let P=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:P,sha:j,content:E});for(let A of w.slice(1))H.push({path:A,mode:"100644",type:"blob",sha:null}),F.delete(A)}for(let O of $.del)for(let L of DX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=va(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:AO6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=jO6-1)throw O;await w$(Q7(2000,200,Y,2,0.5))}}}function AO6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return bi0(Q,$.deps.coAuthor)}var jO6=3,zX1;var Lm$=D(()=>{DD0();dT0();Z4();XL();sT0();zX1=new Map});import{createHmac as wm$,randomBytes as TO6,timingSafeEqual as RO6}from"crypto";function Em$(){if(Q20)return Q20;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Q20=$?Buffer.from($):TO6(32),Q20}function PX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+IO6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=wm$("sha256",Em$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jm$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(wm$("sha256",Em$()).update(Q).digest("base64url"));if(Y.length!==G.length||!RO6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var IO6=21600000,Q20=null;var zm$=D(()=>{E$()});import{z as Ol}from"zod";function MO6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&qO6.test($)}function Im$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function ha($){let Z=$.get("decofileScope");return lT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ua($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function qm$(){let $=new W1;return $.use("/:virtualMcpId/:branch",Rm$),$.use("/:virtualMcpId/:branch/*",Rm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ha(Z),Y=await $m$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=PX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Im$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ua(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await ha(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ua(Z,Y)}}),$.patch("/:virtualMcpId/:branch",VO6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=SO6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{cT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(KX1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await ha(Z),W=await Dm$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Kl(Q)},G),K=PX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Im$(Z)})}catch(J){return ua(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ha(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await $20(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ua(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ha(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ua(Z,Q)}}),$}var qO6,Pm$=500,Am$=1048576,Tm$=1024,kO6=8388608,VO6,SO6,Rm$;var Mm$=D(()=>{Et0();dT0();r$();kH();s71();uT0();EX1();WX1();Lm$();zm$();wX1();XL();sT0();qO6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;VO6=r5({maxSize:kO6,onError:($)=>$.json({error:"Payload too large"},413)}),SO6=Ol.object({set:Ol.record(Ol.string(),Ol.unknown()).optional(),delete:Ol.array(Ol.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Pm$,{message:`Patch cannot touch more than ${Pm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Am$),{message:`Each block must be at most ${Am$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Tm$),{message:`Each block key must be at most ${Tm$} characters`}),Rm$=hT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!MO6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!jm$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!zD0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=ya(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var km$=($)=>{let Z=new W1;if(Z.use("*",Ev),Z.route("/",eA0()),Z.route("/",mh$()),Z.route("/",rc$()),Z.route("/",nc$()),Z.route("/",xT0()),Z.route("/tools",Qd$()),Z.route("/",$d$()),Z.route("/",qc$({kvStorage:$.kvStorage})),Z.route("/",Rc$()),Z.route("/fs",uc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Bm$()),Z.route("/decofile",qm$()),Z.route("/",mc$()),Z.route("/deco-sites",ZT0()),Z.route("/hosting",vh$()),Z.route("/monitor",uh$()),Z.route("/sso",nA0()),Z.route("/",yT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kh$()),$.mountDevAssets)Z.route("/dev-assets",GT0({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("/",ax$()),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",cc$()),Z.route("/mcp",ZE0()),Z.route("/mcp/self",bT0()),Z.route("/mcp",YE0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Vm$=D(()=>{r$();lA0();Vh$();PZ1();fh$();lh$();JT0();Ga();LZ1();Ic$();Mc$();lc$();Ko();FZ1();GE0();m71();dc$();ic$();tc$();sc$();Zd$();p71();Yd$();n71();XE0();Om$();Mm$()});function CO6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var _O6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Sm$=()=>{let $=new W1;return $.use("*",_O6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await RY(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:CO6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Cm$=D(()=>{r$();E$();oP0()});import{z as k1}from"zod";function fH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function cO6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function dO6($,Z,X){try{return JSON.parse($)}catch{throw new fm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function mO6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:dO6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function iO6($){let Z=$.map((X)=>{let Q=X.function.parameters?XG(X.function.parameters):XG({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function pO6($){if(!$)return;return{openai:{response_format:$}}}function nO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function _m$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function vm$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var vO6=256,fO6,bO6,xO6,yO6,gO6,hO6,uO6,lO6,fm$,bm$,xm$;var ym$=D(()=>{c4();r$();Wl();bN();fO6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),bO6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),xO6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(bO6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),yO6=k1.object({type:k1.literal("text")}),gO6=k1.object({type:k1.literal("json_object")}),hO6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),uO6=k1.union([yO6,gO6,hO6]),lO6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(xO6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(fO6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:uO6.optional(),user:k1.string().optional()});fm$=class fm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};bm$=new W1;bm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(fH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(fH("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(fH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=lO6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(fH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=cO6(G.model);if(!J)return $.json(fH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Ew(j.providerId));if(!E)return $.json(fH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(fH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=mO6(G.messages),U=G.tools?iO6(G.tools):void 0,B=pO6(G.response_format),O=nO6(),L=Math.floor(Date.now()/1000);if(G.stream)return XU($,async(w)=>{let E=_m$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,P=0,A="",I=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=vO6)await I()}else if(k.type==="tool-call"){await I();let M=P++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:vm$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=_m$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:vm$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(fH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(fH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(fH(Y.message,"server_error"),500)}});xm$=bm$});function tO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function gm$(){let $=new W1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!sX(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||p9(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(Y0$(N)!==G)continue;if(!tO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var hm$=D(()=>{r$();cF()});var lm$;var um$=D(()=>{lm$={name:"decocms",version:"4.320.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 sO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??rO6}}var cm$,rO6="https://ph.studio.decocms.com",dm$;var mm$=D(()=>{r$();B90();Z_();Y9();E$();a91();um$();cm$=new W1;cm$.get("/",($)=>{let Z={version:lm$.version,theme:zp1(),...bF().logo&&{logo:bF().logo},...AN()&&{internalUrl:r_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:bg$(),posthog:sO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:ta()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});dm$=cm$});function Dl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function AX1($){return(Dl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function pm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Dl($))}&sz=${Z}`}function im$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function nm$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?im$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):im$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var vv,aO6,eO6,$D6,ZD6,tm$;var om$=D(()=>{vv=c0.enum(["good","bad","neutral"]),aO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:vv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),eO6=c0.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},c0.array(aO6)),$D6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},ZD6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:vv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:vv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:vv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:vv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(eO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:vv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:vv.optional()})).min(1)})]),tm$=c0.object({...$D6,template:ZD6})});function Y20($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=tm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var TX1=D(()=>{om$()});import{join as rm$}from"path";async function QD6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(XD6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Y20(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||AX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function IG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function YD6($,Z){let X=Dl($),Q=Z?.brand?.trim()||AX1(X),Y=pm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=nm$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${IG(W)}</title>`,`<meta name="description" content="${IG(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="${IG(W)}" />`,`<meta property="og:description" content="${IG(K)}" />`,`<meta property="og:url" content="${IG(J)}" />`,`<meta property="og:image" content="${IG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${IG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${IG(W)}" />`,`<meta name="twitter:description" content="${IG(K)}" />`,`<meta name="twitter:image" content="${IG(H)}" />`,`<meta name="twitter:image:alt" content="${IG(F)}" />`,`<link rel="canonical" href="${IG(J)}" />`,`<link rel="icon" href="${IG(Y)}" sizes="any" />`].join(`
2984
+ `,j=await Z.createBlob(E);await ed$(Z.owner,Z.repo,j,E);let z=w[0]??`${rT0(Q)}/${HX1(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let P=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:P,sha:j,content:E});for(let A of w.slice(1))H.push({path:A,mode:"100644",type:"blob",sha:null}),F.delete(A)}for(let O of $.del)for(let L of DX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=va(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:AO6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=jO6-1)throw O;await w$(Q7(2000,200,Y,2,0.5))}}}function AO6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return bi0(Q,$.deps.coAuthor)}var jO6=3,zX1;var Lm$=D(()=>{DD0();dT0();Z4();XL();sT0();zX1=new Map});import{createHmac as wm$,randomBytes as TO6,timingSafeEqual as RO6}from"crypto";function Em$(){if(Q20)return Q20;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Q20=$?Buffer.from($):TO6(32),Q20}function PX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+IO6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=wm$("sha256",Em$()).update(Q).digest("base64url");return`${Q}.${Y}`}function jm$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(wm$("sha256",Em$()).update(Q).digest("base64url"));if(Y.length!==G.length||!RO6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var IO6=21600000,Q20=null;var zm$=D(()=>{E$()});import{z as Ol}from"zod";function MO6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&qO6.test($)}function Im$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function ha($){let Z=$.get("decofileScope");return lT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ua($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function qm$(){let $=new W1;return $.use("/:virtualMcpId/:branch",Rm$),$.use("/:virtualMcpId/:branch/*",Rm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ha(Z),Y=await $m$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=PX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Im$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ua(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await ha(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ua(Z,Y)}}),$.patch("/:virtualMcpId/:branch",VO6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=SO6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{cT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(KX1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await ha(Z),W=await Dm$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Kl(Q)},G),K=PX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Im$(Z)})}catch(J){return ua(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ha(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await $20(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ua(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ha(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ua(Z,Q)}}),$}var qO6,Pm$=500,Am$=1048576,Tm$=1024,kO6=8388608,VO6,SO6,Rm$;var Mm$=D(()=>{Et0();dT0();r$();kH();s71();uT0();EX1();WX1();Lm$();zm$();wX1();XL();sT0();qO6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;VO6=r5({maxSize:kO6,onError:($)=>$.json({error:"Payload too large"},413)}),SO6=Ol.object({set:Ol.record(Ol.string(),Ol.unknown()).optional(),delete:Ol.array(Ol.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Pm$,{message:`Patch cannot touch more than ${Pm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Am$),{message:`Each block must be at most ${Am$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Tm$),{message:`Each block key must be at most ${Tm$} characters`}),Rm$=hT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!MO6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!jm$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!zD0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=ya(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var km$=($)=>{let Z=new W1;if(Z.use("*",Ev),Z.route("/",eA0()),Z.route("/",mh$()),Z.route("/",rc$()),Z.route("/",nc$()),Z.route("/",xT0()),Z.route("/tools",Qd$()),Z.route("/",$d$()),Z.route("/",qc$({kvStorage:$.kvStorage})),Z.route("/",Rc$()),Z.route("/fs",uc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Bm$()),Z.route("/decofile",qm$()),Z.route("/",mc$()),Z.route("/deco-sites",ZT0()),Z.route("/hosting",vh$()),Z.route("/monitor",uh$()),Z.route("/sso",nA0()),Z.route("/",yT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kh$()),$.mountDevAssets)Z.route("/dev-assets",GT0({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("/",ax$()),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",cc$()),Z.route("/mcp",ZE0()),Z.route("/mcp/self",bT0()),Z.route("/mcp",YE0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Vm$=D(()=>{r$();lA0();Vh$();PZ1();fh$();lh$();JT0();Ga();LZ1();Ic$();Mc$();lc$();Ko();FZ1();GE0();m71();dc$();ic$();tc$();sc$();Zd$();p71();Yd$();n71();XE0();Om$();Mm$()});function CO6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var _O6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Sm$=()=>{let $=new W1;return $.use("*",_O6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await RY(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:CO6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Cm$=D(()=>{r$();E$();oP0()});import{z as k1}from"zod";function fH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function cO6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function dO6($,Z,X){try{return JSON.parse($)}catch{throw new fm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function mO6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:dO6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function iO6($){let Z=$.map((X)=>{let Q=X.function.parameters?XG(X.function.parameters):XG({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function pO6($){if(!$)return;return{openai:{response_format:$}}}function nO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function _m$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function vm$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var vO6=256,fO6,bO6,xO6,yO6,gO6,hO6,uO6,lO6,fm$,bm$,xm$;var ym$=D(()=>{c4();r$();Wl();bN();fO6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),bO6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),xO6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(bO6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),yO6=k1.object({type:k1.literal("text")}),gO6=k1.object({type:k1.literal("json_object")}),hO6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),uO6=k1.union([yO6,gO6,hO6]),lO6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(xO6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(fO6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:uO6.optional(),user:k1.string().optional()});fm$=class fm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};bm$=new W1;bm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(fH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(fH("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(fH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=lO6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(fH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=cO6(G.model);if(!J)return $.json(fH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Ew(j.providerId));if(!E)return $.json(fH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(fH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=mO6(G.messages),U=G.tools?iO6(G.tools):void 0,B=pO6(G.response_format),O=nO6(),L=Math.floor(Date.now()/1000);if(G.stream)return XU($,async(w)=>{let E=_m$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,P=0,A="",I=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=vO6)await I()}else if(k.type==="tool-call"){await I();let M=P++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:vm$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=_m$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:vm$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(fH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(fH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(fH(Y.message,"server_error"),500)}});xm$=bm$});function tO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function gm$(){let $=new W1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!sX(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||p9(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(Y0$(N)!==G)continue;if(!tO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var hm$=D(()=>{r$();cF()});var lm$;var um$=D(()=>{lm$={name:"decocms",version:"4.321.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 sO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??rO6}}var cm$,rO6="https://ph.studio.decocms.com",dm$;var mm$=D(()=>{r$();B90();Z_();Y9();E$();a91();um$();cm$=new W1;cm$.get("/",($)=>{let Z={version:lm$.version,theme:zp1(),...bF().logo&&{logo:bF().logo},...AN()&&{internalUrl:r_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:bg$(),posthog:sO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:ta()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});dm$=cm$});function Dl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function AX1($){return(Dl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function pm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Dl($))}&sz=${Z}`}function im$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function nm$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?im$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):im$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var vv,aO6,eO6,$D6,ZD6,tm$;var om$=D(()=>{vv=c0.enum(["good","bad","neutral"]),aO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:vv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),eO6=c0.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},c0.array(aO6)),$D6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},ZD6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:vv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:vv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:vv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:vv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(eO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:vv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:vv.optional()})).min(1)})]),tm$=c0.object({...$D6,template:ZD6})});function Y20($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=tm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var TX1=D(()=>{om$()});import{join as rm$}from"path";async function QD6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(XD6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Y20(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||AX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function IG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function YD6($,Z){let X=Dl($),Q=Z?.brand?.trim()||AX1(X),Y=pm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=nm$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${IG(W)}</title>`,`<meta name="description" content="${IG(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="${IG(W)}" />`,`<meta property="og:description" content="${IG(K)}" />`,`<meta property="og:url" content="${IG(J)}" />`,`<meta property="og:image" content="${IG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${IG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${IG(W)}" />`,`<meta name="twitter:description" content="${IG(K)}" />`,`<meta name="twitter:image" content="${IG(H)}" />`,`<meta name="twitter:image:alt" content="${IG(F)}" />`,`<link rel="canonical" href="${IG(J)}" />`,`<link rel="icon" href="${IG(Y)}" sizes="any" />`].join(`
2985
2985
  `)}function GD6($,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}
2986
2986
  </head>`)}function sm$($){let Z=new W1;return Z.get("/:domain/og.png",async(X)=>{let Q=Dl(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(rm$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(JD6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?rm$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await QD6(Dl(Q)),K=YD6(Q,W);return X.html(GD6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var XD6=2500,JD6=1e4;var am$=D(()=>{r$();TX1();AE();E$()});function la($,Z){return fetch(`${DK({})}${$}`,Z)}async function WD6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await la(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=Y20(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var KD6,YU,em$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},$i$;var Zi$=D(()=>{r$();aY();AE();TX1();KD6=new Set(["complete","errored","terminated","unknown"]),YU=new W1;YU.use("*",async($,Z)=>{let X=await e$.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});YU.use("/link-token/*",em$);YU.use("/suggest",em$);YU.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await WD6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});YU.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await la("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${PE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});YU.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await la(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${PE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:KD6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});YU.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await la(`/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)}});YU.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await la(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});$i$=YU});import{createHmac as HD6,timingSafeEqual as FD6}from"crypto";function Qi$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>ND6)return!1;let W=HD6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&FD6(K,F)})}function Yi$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=mJ(Z),Q=mJ(mJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:bH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Gi$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function bH($){return typeof $==="string"?$:void 0}function mJ($){return typeof $==="object"&&$!==null?$:void 0}function G20($){return typeof $==="number"?new Date($*1000):null}function qX1($){return bH($)??bH(mJ($)?.id)}function UD6($){return qX1($.subscription)??bH(mJ(mJ($.parent)?.subscription_details)?.subscription)}function BD6($){let Z=G20($.current_period_end);if(Z)return Z;let X=mJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=mJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function RX1($,Z){let X=G20($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function IX1($,Z){let X=G20($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function OD6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=bH(mJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(bH(mJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(bH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=bH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(mJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:mJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(bH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=qX1(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(RX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:qX1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:IX1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=bH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&RX1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Gi$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:BD6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:IX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=UD6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(RX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:G20(X.period_end),lastStripeEventAt:IX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function DD6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Gi$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function Xi$($,Z){let X=DD6($,Z);if(!X)return;tY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:kt1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Ji$($){let Z=new NK(B8().db),X=await OD6(Z,$);if(!(X.handled&&X.topUp))Xi$($,X);if(X.handled&&X.topUp)await Az$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Xi$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await X1$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof eY&&(Q.status===400||Q.status===404)))throw Q}return X}var ND6=300;var Wi$=D(()=>{aG();S4();p50();fE();x11()});var LD6=1048576,MX1;var Ki$=D(()=>{r$();kH();E$();Wi$();MX1=new W1;MX1.post("/webhook",r5({maxSize:LD6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=C0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Qi$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Yi$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Ji$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as wD6}from"crypto";function jD6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return wD6(Buffer.from(Y),Buffer.from(Q))}var ED6=5242880,kX1;var Hi$=D(()=>{r$();kH();a3();kX1=new W1;kX1.post("/webhook",r5({maxSize:ED6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!jD6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Lt0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Fi$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ni$,zD6,PD6,Ui$;var Bi$=D(()=>{r$();S3();bg();VE();Ni$=new W1,zD6=["range","if-none-match","if-modified-since"],PD6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ni$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(uu($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await vt(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&gQ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Fi$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of zD6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of PD6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Fi$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Ui$=Ni$});var ca=_((fv)=>{var AD6=fv&&fv.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),TD6=fv&&fv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))AD6(Z,$,X)};Object.defineProperty(fv,"__esModule",{value:!0});TD6(vY(),fv)});var Li$=_((Oi$)=>{Object.defineProperty(Oi$,"__esModule",{value:!0});Oi$.version=void 0;Oi$.version="3.4.0"});var ji$=_((xH)=>{var RD6=xH&&xH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(xH,"__esModule",{value:!0});xH.NodeTransport=xH.VERSION=void 0;xH.nodeResolveHost=SD6;var Z5=ca(),ID6=A0("net"),VX1=A0("tls"),qD6=A0("path"),wi$=A0("fs"),MD6=RD6(A0("dns")),kD6=Li$();xH.VERSION=kD6.version;var VD6="nats.js";class Ei${socket;version;lang;yields=[];signal=(0,Z5.deferred)();closedNotification=(0,Z5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=VD6,this.version=xH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,Z5.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw Z5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new Z5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new Z5.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,Z5.deferred)(),X,Q=(0,ID6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,Z5.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=Z5.DataBuffer.concat(...this.yields),Y=(0,Z5.extractProtocolMessage)(Q);if(Y!=="")try{let G=Z5.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,Z5.deferred)();try{if($=(0,qD6.resolve)($),!(0,wi$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,wi$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,Z5.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new Z5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,Z5.deferred)();try{let Y=(0,VX1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new Z5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,Z5.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new Z5.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,Z5.deferred)();try{let Q=(0,VX1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new Z5.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,Z5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,Z5.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 VX1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,Z5.render)($)}`);let Z=(0,Z5.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,Z5.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,Z5.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}}xH.NodeTransport=Ei$;function SD6($){let Z=(0,Z5.deferred)();return MD6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Ri$=_((Ti$)=>{Object.defineProperty(Ti$,"__esModule",{value:!0});Ti$.connect=CD6;var zi$=ji$(),Pi$=ca(),Ai$=ca();function CD6($={}){if((0,Ai$.hasWsProtocol)($))return Promise.reject(Ai$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Pi$.setTransportFactory)({factory:()=>{return new zi$.NodeTransport},dnsResolveFn:zi$.nodeResolveHost}),Pi$.NatsConnectionImpl.connect($)}});var Ii$=_((GU)=>{var vD6=GU&&GU.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),fD6=GU&&GU.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))vD6(Z,$,X)};Object.defineProperty(GU,"__esModule",{value:!0});GU.connect=void 0;var bD6=Ri$();Object.defineProperty(GU,"connect",{enumerable:!0,get:function(){return bD6.connect}});fD6(ca(),GU)});function Vi$($){let Z=$?.connectFn??hD6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:gD6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{O++;let L=Q7(yD6,xD6,O-1,2,0.5);await w$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?qi$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=ki$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function hD6($){return Mi$.connect($)}var qi$,Mi$,ki$,xD6=100,yD6=3000,gD6=3000;var Si$=D(()=>{Z4();qi$=V(ul(),1),Mi$=V(Ii$(),1),ki$=V(LU(),1)});function SX1($,Z){return`${$}.${Z}`}class CX1{cache;constructor($){this.cache=Tu({ttlMs:$?.ttlMs??uD6,maxSize:$?.maxSize??lD6})}async get($,Z){return this.cache.get(SX1($,Z))??null}async set($,Z,X){this.cache.set(SX1($,Z),X)}async invalidate($,Z){this.cache.delete(SX1($,Z))}teardown(){this.cache.clear()}}var uD6=600000,lD6=5000;var Ci$=()=>{};function J20($,Z){return`${$}:${Z}`}function _X1($){let Z=Tu({ttlMs:$?.ttlMs??cD6,maxSize:$?.maxSize??dD6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(_i$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(J20(K,H))},set(K,H,F){Z.set(J20(K,H),F)},invalidate(K,H){Z.delete(J20(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(_i$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(J20(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var _i$="studio.ai-provider-keys.invalidate",cD6=30000,dD6=5000;var vi$=()=>{};class vX1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var fi$=($)=>{let Z;return()=>Z??=$()},fX1,bX1;var bi$=D(()=>{G6();fX1=fi$(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),bX1=fi$(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function rD6($=gi$){return{name:XH,subjects:[`${ps0}.>`],storage:IW.StorageType.File,max_age:pD6,max_bytes:tD6,max_msgs_per_subject:oD6,discard:IW.DiscardPolicy.Old,retention:IW.RetentionPolicy.Limits,duplicate_window:nD6,num_replicas:$}}class hi${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 xi$($){let Z=yi$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function $L6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,iD6().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 ZL6($,Z){return $.info?.cluster?Z:1}function XL6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class xX1{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=async(Q,Y)=>{let G=rD6(Y);try{await Q.streams.info(XH),await Q.streams.update(XH,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(XH,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(XH),await Q.streams.add(G);else throw J}},X=await O6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await IW.jetstreamManager($),Y=ZL6($,gi$);try{await Z(Q,Y)}catch(G){if(Y<=1||!XL6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:pg});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=$L6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=KD$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=ts0(H,{runId:Z}),U=performance.now()-F;fX1().record(U),bX1().add(1,{"org.id":Q??"unknown"}),eD6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?xi$(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),N++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),aD6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await O6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:xi$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:pg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=ts0(Z,{runId:$,dedup:X});fX1().record(performance.now()-Y),bX1().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=WD$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?IW.DeliverPolicy.New:IW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=ED($),W;try{W=await O6(async()=>{return(await Q.consumers.get(XH,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:pg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=bw0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Cw0()).pipeThrough(_w0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await F.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(XH,{filter:ED($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var IW,yi$,mD6=($)=>{let Z;return()=>Z??=$()},iD6,pD6=86400000000000,nD6=120000000000,tD6=4294967296,gi$,oD6=500000,sD6,aD6,eD6;var ui$=D(()=>{Z4();os0();xw0();vw0();G6();bi$();IW=V(LU(),1),yi$=V(ul(),1),iD6=mD6(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),gi$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);sD6=process.env.STREAM_ENCODE_TRACE==="1",aD6=process.env.DECOPILOT_STREAM_TRACE==="1";eD6=sD6?new hi$:null});function W20($,Z,X,Q){if(!Q)return!1;return $.emit(Z,tW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var li$=D(()=>{R8()});class yX1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function ci$($,Z,X){let Q=Z.organizationId;if(!YY(Z,(await r9($,Q)).review))return!1;if(!iC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=IK(Y?.flags),J=await T6($,Q),W=await $.storage.taskBoard.update(Z.id,Q,QY(J,G),Z.updatedBy);return await R6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),x$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var di$=D(()=>{z6();UX();kg();f5();nK();P5()});function HL6($){return $ instanceof $Q}function FL6($,Z){return Z-$>=WL6}class gX1{taskBoard;contextFactory;billing;db;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.db=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??QL6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??GL6,X=this.options.itemIntervalMs??YL6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-Ko0),Vr0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-KL6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await qr0(this.taskBoard,Y,Q,await lK(this.db,Q)),await Mr0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y),W=await lK(this.db,Y);if(!J||J.status!==W.progress||J.assigneeId!==Q8)continue;let K=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!K)continue;await jN(K,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),HL6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+JL6),(await lK(this.db,Y)).progress).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await lK(this.db,Z),Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==Q.progress)return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy,Q);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),x$(Z,G)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!FL6(pF(X,Z.reviewCycleStartedAt),Date.now()))return;await oK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;let Y=await lK(this.db,Z);if(!YY(Q,Y.review))return!1;let G=Q.assigneeId===Q8,J=await this.taskBoard.listPrs($,Z),W=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!W)return!1;if(J.length===0){if(G)await this.handOffReviewWithoutPr(W,Q);return!1}let K=await Promise.all(J.map(async(H)=>({...H,...await Sg(Z,H)})));if(K.every((H)=>H.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await ci$(W,Q,K))return!0;if(await eD$(W,Q))return!0;if(await this.resolveConflictFromSweep(W,Q,K))return!0;if(!G)return!1;if(!Br0(K))return!1;return await hL0(W,Q,{previewMatchesHead:Or0(K)}),!0}async resolveConflictFromSweep($,Z,X){let Q=X.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!Q)return!1;return await FD($,Z.organizationId,Z,{pr:{number:Q.number,url:Q.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var QL6=60000,YL6=300000,GL6=50,JL6=60000,WL6=900000,KL6=120000;var mi$=D(()=>{f5();z6();Gr0();zN();$o();nK();di$();P5();JJ();Sr0();GY();Vt();Vg()});import{readdir as NL6,rm as K20}from"fs/promises";import{join as H20}from"path";async function F20($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-UL6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await bv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await ii$($,Y,Z);else if(!Y.startsWith(".")){let G=H20($,Y),J=await bv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await ii$(G,K,Z)}if((await bv(G)).length===0)await K20(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function ii$($,Z,X){let Q=0,Y=H20($,Z),G=await bv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=H20(Y,W),H=await bv(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=H20(K,N);await K20(B,{recursive:!0,force:!0}),Q++}}if((await bv(K)).length===0)await K20(K,{recursive:!0,force:!0})}if((await bv(Y)).length===0)await K20(Y,{recursive:!0,force:!0});return Q}async function bv($){try{return(await NL6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var UL6=30;var hX1=()=>{};import{DBOS as uX1,SchedulerMode as BL6}from"@dbos-inc/dbos-sdk";async function DL6(){let $=[nJ(),xv(),uH()],Z=0;for(let X of $)try{Z+=await F20(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function LL6($,Z){await uX1.runStep(()=>DL6(),{name:"monitoringRetention"})}function ni$(){if(pi$)return;pi$=!0;let $=uX1.registerWorkflow(LL6,{name:"monitoringRetentionWorkflow"});uX1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:OL6,mode:BL6.ExactlyOncePerIntervalWhenActive})}var OL6="23 4 * * *",pi$=!1;var ti$=D(()=>{VY();hX1()});function oi$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await EJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await yt($.db,Z,Q.role);return Y.boundAuth=b91({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new JE(X,void 0,Y.boundAuth,Q.role,"self"),WD(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var ri$=D(()=>{nB();KD()});function wL6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function EL6(){return{services:wL6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function zL6(){for(let $ of jL6)$()}function si$($){let Z=[...lX1.logs,$];lX1={...lX1,logs:Z.length>500?Z.slice(-500):Z},zL6()}function cX1(){return PL6}var lX1,jL6,PL6=!1;var dX1=D(()=>{lX1=EL6(),jL6=new Set});import{EventEmitter as AL6}from"events";var mX1;var ai$=D(()=>{dX1();mX1=new AL6;mX1.on("request",($)=>{si$($)})});function ei$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let B=Ll(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>Ll(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${H5.tool}${B}${H5.dim}(${w})${H5.reset}`}else if(U.method)G=`${H5.dim}${Ll(U.method)}${H5.reset}`}}catch{}}let W=Ll(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${H5.mcp}${Ll(F.slice(0,12))}\u2026${H5.reset}`}else if(Y==="/mcp")W=`${H5.mcp}/mcp${H5.reset}`;else if(Y==="/mcp/registry")W=`${H5.mcp}/mcp/registry${H5.reset}`;let K=RL6(Q),H=J?"\u25C0":"\u2190";if(!cX1())console.log(`${H5.dim}${H}${H5.reset} ${K}${Q}${H5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=TL6(N),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!cX1())console.log(`${H5.dim}${O}${H5.reset} ${K}${Q}${H5.reset} ${W}${G?` ${G}`:""} ${U}${N}${H5.reset} ${H5.duration}${B}${H5.reset}`);mX1.emit("request",{method:Q,path:Ll(Y),status:N,duration:F,timestamp:new Date})}}}var H5,TL6=($)=>{if($>=500)return H5.serverError;if($>=400)return H5.clientError;if($>=300)return H5.redirect;return H5.ok},RL6=($)=>{return H5[$]||H5.reset},Ll=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var $p$=D(()=>{dX1();ai$();H5={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 Yp$}from"crypto";import{mkdir as IL6,readdir as qL6,rm as Zp$,stat as Gp$}from"fs/promises";import{join as pX1,relative as ML6}from"path";import{z as T$}from"zod";function Wp$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return pX1(kL6,Z)}function Kp$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function iX1($,Z){let X=Wp$($),Q=Kp$(Z);return pX1(X,Q)}function VL6($,Z,X,Q){let Y=C0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Yp$("sha256",Y).update(G).digest("hex")}function Qp$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=VL6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Kp$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Hp$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Yp$("md5","etag").update(Q).digest("hex")}"`}async function Fp$($,Z,X,Q,Y){try{let G=await qL6($,{withFileTypes:!0});for(let J of G){let W=pX1($,J.name),H=ML6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Fp$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Gp$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Hp$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Np$($,Z){let Q=n($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:T$.object({prefix:T$.string().optional(),maxKeys:T$.number().optional().default(1000),continuationToken:T$.string().optional(),delimiter:T$.string().optional()}),outputSchema:T$.object({objects:T$.array(T$.object({key:T$.string(),size:T$.number(),lastModified:T$.string(),etag:T$.string()})),nextContinuationToken:T$.string().optional(),isTruncated:T$.boolean(),commonPrefixes:T$.array(T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Wp$(Q);await IL6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Fp$(F,F,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((w)=>w.key>H),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({contentType:T$.string().optional(),contentLength:T$.number(),lastModified:T$.string(),etag:T$.string(),metadata:T$.record(T$.string(),T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=iX1(Q,G.key),W=await Gp$(J);return{contentType:IZ1(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Hp$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Xp$;return{url:Qp$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional(),contentType:T$.string().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Xp$;return{url:Qp$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({success:T$.boolean(),key:T$.string()}),handler:async(Y)=>{let G=Y,J=iX1(Q,G.key);try{return await Zp$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:T$.object({keys:T$.array(T$.string()).max(1000)}),outputSchema:T$.object({deleted:T$.array(T$.string()),errors:T$.array(T$.object({key:T$.string(),message:T$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=iX1(Q,K);try{await Zp$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function nX1($,Z,X){let Q=Np$(Z,X),Y=new ZK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:O5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:T$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:T$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new FQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),MJ(Y,G,$,"mcp:dev-assets")}async function Up$($,Z,X,Q){let G=Np$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var kL6="./data/assets",Xp$=3600,Jp$,Bp$;var Op$=D(()=>{E$();eg();r$();Hm();j_();dX();JT0();Jp$=new W1;Jp$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return nX1($.req.raw,Z,Q)});Bp$=Jp$});var Dp$={};W4(Dp$,{mountDevRoutes:()=>SL6});function SL6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return nX1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Up$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Bp$);let X=new W1;X.use("*",TW({mountPath:"/api/dev-assets"})),X.route("/",GT0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Lp$=D(()=>{r$();wZ1();JT0();Op$()});import{sql as CL6}from"kysely";import{randomUUID as wp$}from"crypto";import{z as _L6}from"zod";async function fL6($){let Z=new Date().toISOString(),X=wp$(),Q=v8.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:wp$(),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 CL6`SELECT
2987
2987
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.320.0",
3
+ "version": "4.321.1",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as o,j as r}from"./index-iMHThdI5.js";import{O as m}from"./api-keys-BMnD4InK.js";import{R as p}from"./require-capability-BeFbF8pl.js";import"./AlertCircle-DZjE_Y0H.js";import"./Copy01-DHhdbM_J.js";import"./Key01-ICcTBF9U.js";import"./Plus-DZ-r7ICl.js";import"./Trash01-BDaDkc_-.js";import"./alert-dialog-1uO7Q1_D.js";import"./dialog-CCRr4CCv.js";import"./input-CbnXHcO6.js";import"./label-DRWhO--x.js";import"./use-mcp-client-Cb-7Tc46.js";import"./constants-DNuUCxmW.js";import"./auth-CyxtW7VU.js";import"./access-gate-asM9jXYM.js";import"./capability-load-error-CUNqj87m.js";function A(){const t=o.c(1);let i;return t[0]===Symbol.for("react.memo_cache_sentinel")?(i=r.jsx(p,{capability:"api-keys:manage",area:"api-keys",children:r.jsx(m,{})}),t[0]=i):i=t[0],i}export{A as default};
@@ -1 +0,0 @@
1
- import{c as jt,b as Bt,r as A,j as o,l as _t,h as wt,t as ht}from"./index-iMHThdI5.js";import{b as At}from"./chat-context-mKzm57ri.js";import{i as Et}from"./ChevronRight-C1PKtWq_.js";import{S as Nt}from"./scroll-area-DmdvWjmC.js";import{u as Rt,A as Tt}from"./use-section-preview-base-CNJRRsrA.js";import{n as Ct,r as Kt,c as Pt,d as Ft,e as Ot,g as Ut,h as $t,S as It,i as zt,j as Lt}from"./index-De2AiSst.js";import"./use-panel-navigate-BbrwVdUf.js";import"./use-destination-route-BjLqPQzR.js";import"./thread-route-CYrRQzf6.js";import"./dialog-CCRr4CCv.js";import"./Check-CA6oOwnk.js";import"./Copy01-DHhdbM_J.js";import"./Download01-R47mE7bD.js";import"./constants-DNuUCxmW.js";import"./thread-intent-D8J4loNV.js";import"./slugify-CEUa2lfQ.js";import"./hooks-Ba0JKlx2.js";import"./use-mcp-client-Cb-7Tc46.js";import"./auth-CyxtW7VU.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-CugtSLrr.js";import"./task-board-2M_cICbv.js";import"./schema-CalSBGUA.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DfwA3vbI.js";import"./use-ai-providers-DNmUp1KH.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-Du05HBL-.js";import"./use-organization-settings-LGG-1duj.js";import"./select-DVuboUqa.js";import"./ChevronUp-BWJ43Ad_.js";import"./agent-icon-C7HwxMy2.js";import"./AlertCircle-DZjE_Y0H.js";import"./ThumbsUp-BFZZTKVU.js";import"./Tool01-Cz6q9HPW.js";import"./ArrowUp-UBHjzAp-.js";import"./ArrowLeft-BsR-6m6j.js";import"./Tool02-Dh-KcCDo.js";import"./XCircle-DQV3a8ui.js";import"./TrendUp01-gaB_ebZy.js";import"./ZoomOut-C3_0q9Na.js";import"./Users03-DOh7pHdk.js";import"./CheckCircle-BaphLiUh.js";import"./ChevronSelectorVertical-uLPnhvHf.js";import"./DotsVertical-CuAwCaPW.js";import"./UserSquare-DXupINNG.js";import"./CreditCard01-BewJRmPb.js";import"./Settings02-CkPf5bSQ.js";import"./Eye-D3bCBJMo.js";import"./Share07-P3qF7VX0.js";import"./GitBranch01-CjfnHX9l.js";import"./Globe01-DeCmIrD5.js";import"./XClose-Dciq0-47.js";import"./HardDrive-BpRcIm2Z.js";import"./Image01-CStOAxG7.js";import"./Key01-ICcTBF9U.js";import"./Link01-CLzBJa_Z.js";import"./LinkExternal01-w2j8lCTU.js";import"./LockUnlocked01-CbuTs0EA.js";import"./Monitor01-CMjB6a1I.js";import"./Sun-ZKlmnxLK.js";import"./Package-BOH9DZQ0.js";import"./Palette-CVvoWFYM.js";import"./Play-Bn8_HZzx.js";import"./Plus-DZ-r7ICl.js";import"./SearchMd-BpXAT-eZ.js";import"./Shield01-BhVJtpaL.js";import"./Stars01-Dxt-GRKF.js";import"./Trash01-BDaDkc_-.js";import"./Upload01-BaOVc9nV.js";import"./User01-CvjutW7d.js";import"./Users01-BYJLxdvv.js";import"./Zap-BeDIMc43.js";import"./input-CbnXHcO6.js";import"./automation-runs-BPY4nydY.js";import"./useInfiniteQuery-9JeN2e62.js";import"./use-infinite-scroll-CKdXAA8A.js";import"./use-connection-BIoGt2fV.js";import"./table-Bdl9_Fhf.js";import"./empty-state-sOUWi52v.js";import"./use-members-BfBQJknB.js";import"./use-org-auth-client-B4SqGhOd.js";import"./use-automations-BAS2bqab.js";import"./useSuspenseInfiniteQuery-tto2zjOo.js";import"./avatar-CxjMK0xh.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-Bqne_Qou.js";import"./markdown-22Db80L5.js";import"./monaco-editor-CZowCy14.js";import"./editor-CLQxxGs0.js";import"./types-CSh-_-A-.js";import"./shell-layout-fxaPPTq-.js";import"./use-project-scope-BJGCHDw2.js";import"./github-repo-BpKUwJal.js";import"./command-CeKckObX.js";import"./index-B3BkyrSZ.js";import"./required-auth-layout-DKUUs0wv.js";import"./use-org-sso-BOX8tS6G.js";import"./integration-icon-C0qvOPer.js";import"./use-navigate-to-agent-BagpOb6G.js";import"./use-mcp-prompts-B4teZ13r.js";import"./form-CJy6gOK9.js";import"./label-DRWhO--x.js";import"./file-type-icon-BZyWvek2.js";import"./drawer-EJ0baEzN.js";import"./collection-search-DytvMFFj.js";import"./use-mcp-tools-yMcjeDP1.js";import"./tabs-CJeYzOxp.js";import"./toggle-group-B5yffd6B.js";import"./task-route-CheWHifs.js";import"./toolbar-icon-button-V4uX1cT4.js";import"./popover-BYvt0bxB.js";import"./github-repo-picker-BNDot8ZD.js";import"./use-debounced-value-B8nRETfv.js";import"./authenticate-and-persist-oauth-BH26XKT9.js";import"./mcp-oauth-EeLwp5eX.js";import"./extract-connection-data-Bgz74dk7.js";import"./metadata-dUsYcpuu.js";import"./connection-f2REUt95.js";import"./provision-repo-scoped-github-connection-WQFARyHG.js";import"./connection-card-D3s_4e6c.js";import"./use-registry-connections-AvU1e53j.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./textarea-CQu-QtAR.js";import"./connection-form-helpers-CgOgzhG0.js";import"./collection-tabs-F2v4cUxR.js";import"./badge-Dx14P1uf.js";import"./dropdown-menu-iq7an5CR.js";import"./get-initials-D-f_fDFw.js";import"./config-DAEl2Fwz.js";import"./select-model-C1B_bzfv.js";import"./checkbox-BtMOjQuM.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-oUyx5_4o.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-yJcdYzkO.js";import"./toolbar-BYn6hWQJ.js";import"./use-file-configs-BWXflqeG.js";import"./site-slug-uya6Wp4-.js";import"./skill-preview-bjmuW_A1.js";import"./pt-BR-CLy76QW2.js";import"./alert-dialog-1uO7Q1_D.js";import"./use-debounced-autosave-kIKO71Tg.js";import"./search-input-aRZQtrr1.js";import"./use-mcp-auth-status-BBJKM7f_.js";import"./switch-D5j2S-4i.js";import"./use-secrets-C7MTfbp9.js";import"./client-icons-D7u-J_pd.js";import"./connect-layout-CmmdxzFu.js";import"./self-tool-result-DDDE2dgE.js";import"./track-DqsuBc-w.js";import"./use-tags-CIfiPRHF.js";import"./breadcrumb-B9-pZnD9.js";import"./safe-image-url-D5z803Ot.js";import"./automation-list-row-fcDYKNgJ.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-OgvPGokO.js";import"./cards-BLVEB5RL.js";function Vt(n,t){const s=(n.title||n.resolveType.split("/").pop()||"").replace(/\.(tsx?|jsx?)$/,"").replace(/[^A-Za-z0-9_-]/g,""),i=/^[A-Za-z]/.test(s)&&s.length>0?s:"Section",m=Ct(t,i);return{blockKey:m,data:{__resolveType:n.resolveType,name:m}}}function Zr(n){const t=jt.c(79),{orgSlug:s,virtualMcpId:i,branch:m,blockKey:p,block:x,meta:a,decofile:l,title:bt,excludeFields:Z,schemaPending:lt,previewBaseUrl:ct}=n,D=lt===void 0?!1:lt,H=ct===void 0?null:ct,G=At()?.taskId??null,c=Bt();let N;t[0]!==H||t[1]!==i?(N={virtualMcpId:i,sandboxUrl:H},t[0]=H,t[1]=i,t[2]=N):N=t[2];const h=Rt(N),v=typeof x?.__resolveType=="string"?x.__resolveType:"";let R;t[3]!==Z||t[4]!==a||t[5]!==v?(R=Kt(v,a,Z),t[3]=Z,t[4]=a,t[5]=v,t[6]=R):R=t[6];const b=R;let T;t[7]!==b?(T=!!b&&Object.keys(b.properties??{}).length>0,t[7]=b,t[8]=T):T=t[8];const J=T,dt=bt??(x?Pt(p,x,a):p);let C;t[9]!==m||t[10]!==s||t[11]!==i?(C={orgSlug:s,virtualMcpId:i,branch:m},t[9]=m,t[10]=s,t[11]=i,t[12]=C):C=t[12];const{save:S,flush:Q,isPending:W}=Ft(C);let K;t[13]!==m||t[14]!==s||t[15]!==i?(K={orgSlug:s,virtualMcpId:i,branch:m},t[13]=m,t[14]=s,t[15]=i,t[16]=K):K=t[16];const X=Ot(K);let P;t[17]!==S?(P=zt((e,r)=>S(e,r)),t[17]=S,t[18]=P):P=t[18];const Y=P,[vt,St]=A.useState(p),[tt,ut]=A.useState(null),[et,ft]=A.useState(0);let F;t[19]===Symbol.for("react.memo_cache_sentinel")?(F=[],t[19]=F):F=t[19];const[g,xt]=A.useState(F),[ot,d]=A.useState(!1),O=A.useRef(null);vt!==p&&(St(p),ut(null),ft(Mt),xt([]));let U;t[20]!==x?(U=x??{},t[20]=x,t[21]=U):U=t[21];const rt=U;let y;t[22]!==tt?(y=tt??{},t[22]=tt,t[23]=y):y=t[23];let $;t[24]!==rt||t[25]!==y?($={...rt,...y},t[24]=rt,t[25]=y,t[26]=$):$=t[26];const it=$;let I;t[27]!==p||t[28]!==v||t[29]!==S?(I=e=>{const r=e;ut(r),S(p,{...r,__resolveType:v})},t[27]=p,t[28]=v,t[29]=S,t[30]=I):I=t[30];const st=I;let z;t[31]===Symbol.for("react.memo_cache_sentinel")?(z=e=>{xt(e)},t[31]=z):z=t[31];const E=z;let L;t[32]!==l||t[33]!==Q||t[34]!==X||t[35]!==c?(L=async(e,r)=>{try{const{blockKey:u,data:f}=Vt(e,l);await X.mutateAsync({blockKey:u,data:f}),ht.success(c("sandbox.appEditor.createdSection",{name:u})),r({__resolveType:u}),Q()}catch(u){const f=u,kt=f instanceof Error?f.message:c("sandbox.appEditor.failedAddSection");throw ht.error(kt),f}},t[32]=l,t[33]=Q,t[34]=X,t[35]=c,t[36]=L):L=t[36];const k=L;let V;t[37]!==d?(V=e=>{O.current=e.append,d(!0)},t[37]=d,t[38]=V):V=t[38];const mt=V;let q;t[39]!==k||t[40]!==d?(q=async e=>{const r=O.current;if(r)try{await k(e,u=>{r(u),d(!1),O.current=null})}catch{}},t[39]=k,t[40]=d,t[41]=q):q=t[41];const pt=q,at=g.length>0?[dt,...g]:[],gt="flex h-full flex-col",yt="flex h-12 shrink-0 items-center justify-between border-b px-6",nt=at.length>0?o.jsx("nav",{"aria-label":c("sandbox.appEditor.editingBreadcrumb"),className:"flex min-w-0 flex-1 items-center gap-1 overflow-hidden text-sm",children:at.map((e,r)=>{const u=r===at.length-1,f=Ut(e);return o.jsxs("span",{className:"flex min-w-0 items-center gap-1 overflow-hidden",children:[r>0&&o.jsx(Et,{className:"size-3 shrink-0 text-muted-foreground/60"}),o.jsx("button",{type:"button",onClick:()=>{E(r===0?[]:$t(g,r)),ft(qt)},title:f,className:_t("min-w-0 truncate rounded-md px-1 py-0.5 text-left transition-colors",u?"font-medium text-foreground":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),children:f})]},`${f}-${r}`)})}):o.jsx("span",{className:"text-sm font-medium",children:dt});let j;t[42]!==W?(j=o.jsx(Lt,{isPending:W,isError:!1}),t[42]=W,t[43]=j):j=t[43];let B;t[44]!==nt||t[45]!==j?(B=o.jsxs("div",{className:yt,children:[nt,j]}),t[44]=nt,t[45]=j,t[46]=B):B=t[46];let _;t[47]!==p||t[48]!==m||t[49]!==g||t[50]!==l||t[51]!==it||t[52]!==et||t[53]!==k||t[54]!==E||t[55]!==st||t[56]!==mt||t[57]!==J||t[58]!==a||t[59]!==s||t[60]!==Y||t[61]!==b||t[62]!==D||t[63]!==h||t[64]!==c||t[65]!==G||t[66]!==i?(_=o.jsx(Nt,{className:"min-h-0 min-w-0 flex-1 [&_[data-slot=scroll-area-viewport]>div]:!block",children:o.jsx("div",{className:"px-6 py-6",children:o.jsx("div",{className:"mx-auto max-w-xl",children:J?o.jsx(It,{schema:b,value:it,onChange:st,basePath:"",breadcrumbPath:g,onBreadcrumbChange:E,decofile:l,meta:a,onSaveReferencedBlock:Y,previewBaseUrl:h,onAddSectionItem:k,onRequestAddSection:mt,sandbox:{orgSlug:s,virtualMcpId:i,branch:m,threadId:G}},`${p}:${et}`):D?o.jsxs("div",{className:"flex flex-col items-center gap-2 py-6 text-center text-xs text-muted-foreground",children:[o.jsx(wt,{className:"size-4"}),c("sandbox.appEditor.loadingSchema")]}):o.jsx("div",{className:"py-6 text-center text-xs text-muted-foreground",children:c("sandbox.appEditor.noEditableSchema")})})})}),t[47]=p,t[48]=m,t[49]=g,t[50]=l,t[51]=it,t[52]=et,t[53]=k,t[54]=E,t[55]=st,t[56]=mt,t[57]=J,t[58]=a,t[59]=s,t[60]=Y,t[61]=b,t[62]=D,t[63]=h,t[64]=c,t[65]=G,t[66]=i,t[67]=_):_=t[67];let w;t[68]!==ot||t[69]!==l||t[70]!==pt||t[71]!==a||t[72]!==h||t[73]!==d?(w=h&&o.jsx(Tt,{open:ot,onOpenChange:e=>{d(e),e||(O.current=null)},meta:a,decofile:l,previewBaseUrl:h,onSelect:e=>{pt(e)}}),t[68]=ot,t[69]=l,t[70]=pt,t[71]=a,t[72]=h,t[73]=d,t[74]=w):w=t[74];let M;return t[75]!==B||t[76]!==_||t[77]!==w?(M=o.jsxs("div",{className:gt,children:[B,_,w]}),t[75]=B,t[76]=_,t[77]=w,t[78]=M):M=t[78],M}function qt(n){return n+1}function Mt(n){return n+1}export{Zr as AppEditor};