decocms 4.267.3 → 4.267.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/client/assets/{AlertCircle-BcdDh0hz.js → AlertCircle-C4XX0QIa.js} +1 -1
  2. package/dist/client/assets/{AreaChart-B92MGo-1.js → AreaChart-Dy7L5tPm.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-CGGYePfw.js → ArrowLeft-Bt_30UpC.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-BrS4Rai7.js → ArrowUp-CaCUhhdv.js} +1 -1
  5. package/dist/client/assets/{Check-Bfvdx2ik.js → Check-kay60hnK.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-uXNxSKut.js → CheckCircle-CswgJt-E.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-0qmbsAkY.js → ChevronDown-D1P4R1sU.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-B1AfGmeS.js → ChevronRight-rCtaEpLm.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-DuKKMTky.js → ChevronSelectorVertical-pI7WgSGg.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-D42_kHn4.js → ChevronUp-B5MTclIR.js} +1 -1
  11. package/dist/client/assets/{Copy01-CrJpdmy5.js → Copy01-BlEeH4v9.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-DLAX1s9j.js → CreditCard01-Bzq-jjVF.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-CIPB-iI8.js → DotsVertical-B2-UTUHn.js} +1 -1
  14. package/dist/client/assets/{Download01-CDWU_q-0.js → Download01-Thczd8Um.js} +1 -1
  15. package/dist/client/assets/{Eye-4JobAreO.js → Eye-BmeGqeBD.js} +1 -1
  16. package/dist/client/assets/{FilterLines-D0gOjH6D.js → FilterLines-7mJgeY3r.js} +1 -1
  17. package/dist/client/assets/{Globe01-DWZPBM__.js → Globe01-BjJlKpnr.js} +1 -1
  18. package/dist/client/assets/{Globe04-aFzXw__x.js → Globe04-BrEt-HR7.js} +1 -1
  19. package/dist/client/assets/{HardDrive-bDbzmqUc.js → HardDrive-ccc-I9Zu.js} +1 -1
  20. package/dist/client/assets/{Key01-fLHNrpdq.js → Key01-VC1g4lpd.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-DqtMHDDi.js → LinkExternal01-TeGzdSG5.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-DNfF0L7z.js → LockUnlocked01-Cu8EU1pk.js} +1 -1
  23. package/dist/client/assets/{LogOut01-DB9WNWtM.js → LogOut01-BZceCxZq.js} +1 -1
  24. package/dist/client/assets/{Monitor01-CPJAw97Q.js → Monitor01-Dzuwu6u7.js} +1 -1
  25. package/dist/client/assets/{Palette-4skw_USQ.js → Palette-C4wHovgb.js} +1 -1
  26. package/dist/client/assets/{Play-CWeo_hbf.js → Play-Cb8rKhr1.js} +1 -1
  27. package/dist/client/assets/{Plus-Cseuwnnd.js → Plus-ro5H4A4z.js} +1 -1
  28. package/dist/client/assets/{SearchLg-DEORVesj.js → SearchLg-vQ65pTsK.js} +1 -1
  29. package/dist/client/assets/{SearchMd-CxSMkM3k.js → SearchMd-CHoJNgmN.js} +1 -1
  30. package/dist/client/assets/{Settings02-BZXv3kRz.js → Settings02-_lJLiTEf.js} +1 -1
  31. package/dist/client/assets/{Share07-DhZ7I-dT.js → Share07-Cjka6x40.js} +1 -1
  32. package/dist/client/assets/{Shield01-DrTIcT7X.js → Shield01-xVv3bhww.js} +1 -1
  33. package/dist/client/assets/{Stars01-CCWFWATC.js → Stars01-OCBUlHUS.js} +1 -1
  34. package/dist/client/assets/{Stars02-D5pzhyZX.js → Stars02-aDbLaPd_.js} +1 -1
  35. package/dist/client/assets/{Sun-CiH0pj6r.js → Sun-DMBPpV7g.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-BqNl2GeI.js → SwitchHorizontal01-DSjY-to6.js} +1 -1
  37. package/dist/client/assets/{Tool01-743jYVu0.js → Tool01-CzCVTRF7.js} +1 -1
  38. package/dist/client/assets/{Tool02-CCf6bwZK.js → Tool02-omRToOZx.js} +1 -1
  39. package/dist/client/assets/{Trash01-CgEFzUXA.js → Trash01-CIJA8TiD.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-I3-LwGzZ.js → TrendUp01-BGh_4UVL.js} +1 -1
  41. package/dist/client/assets/{Upload01-C-pU9zTU.js → Upload01-oDCJxbNL.js} +1 -1
  42. package/dist/client/assets/{User01-BqwNtcM7.js → User01-ClJDs6qw.js} +1 -1
  43. package/dist/client/assets/{UserSquare-CW1QcNFe.js → UserSquare-DyT-wXJQ.js} +1 -1
  44. package/dist/client/assets/{Users01-B64C_0FV.js → Users01-BxvdDodh.js} +1 -1
  45. package/dist/client/assets/{Users03-BbXZB0zF.js → Users03-gXBAi8YO.js} +1 -1
  46. package/dist/client/assets/{XCircle--dgys6sD.js → XCircle-COoT-yRc.js} +1 -1
  47. package/dist/client/assets/{XClose-JH86J7VP.js → XClose-CYPhWu0b.js} +1 -1
  48. package/dist/client/assets/{YAxis-xg78KmBX.js → YAxis-quzD-yk7.js} +1 -1
  49. package/dist/client/assets/{Zap-CVZJSIBX.js → Zap-CVlu1Gim.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-DwbiUUQQ.js → ZapSquare-BrM0Uj_W.js} +1 -1
  51. package/dist/client/assets/{access-gate-Cq9u67Na.js → access-gate-D1QNslUn.js} +1 -1
  52. package/dist/client/assets/{agent-icon-drm7xsNM.js → agent-icon-Dje7OUBM.js} +1 -1
  53. package/dist/client/assets/{agents-list-CMZjzH-q.js → agents-list-C2sLrL5n.js} +1 -1
  54. package/dist/client/assets/{ai-providers-Df4EVDIi.js → ai-providers-BMDqnudb.js} +1 -1
  55. package/dist/client/assets/{alert-9saDE8l5.js → alert-BHWcTg0q.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-Kwx9Q8fe.js → alert-dialog-BRmxuEgr.js} +1 -1
  57. package/dist/client/assets/{api-keys-DVgfjrdu.js → api-keys-CKGMDEKd.js} +1 -1
  58. package/dist/client/assets/{app-editor-BfDA0kk9.js → app-editor-CI7H-i0b.js} +1 -1
  59. package/dist/client/assets/{auth-BYA0R9Vb.js → auth-BHN3XmyI.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-Cvg5_hTh.js → auth-catchall-DMBHo6al.js} +1 -1
  61. package/dist/client/assets/{auth-entry-CocewzzP.js → auth-entry-C_y3pW_j.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-Ct-vYfxx.js → auth-split-layout-7MgJC0b0.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-BvKOscBW.js → authenticate-and-persist-oauth-CEE3GuY8.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-B-A9DDKq.js → automation-list-row-t3khHK2x.js} +1 -1
  65. package/dist/client/assets/{automation-runs-Dtyh45F2.js → automation-runs-B5pPy6LW.js} +1 -1
  66. package/dist/client/assets/{automations-DGdWFIi-.js → automations-GvraVhrF.js} +1 -1
  67. package/dist/client/assets/{avatar-CkFV8tLV.js → avatar-3HpEyCtW.js} +1 -1
  68. package/dist/client/assets/{badge-C21ERplD.js → badge-CxoHE5MP.js} +1 -1
  69. package/dist/client/assets/{block-document-UFnR4pCR.js → block-document-Cg4NOjc6.js} +1 -1
  70. package/dist/client/assets/{buckets-C-yFEIgy.js → buckets-Ddq_eDvr.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-Ct5LIzOd.js → bulk-category-panel-DTf8Js-k.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-MbdVMFjA.js → capability-load-error-CL66oNE4.js} +1 -1
  73. package/dist/client/assets/{cards-B5vzwaDX.js → cards-Ci3CX-BZ.js} +1 -1
  74. package/dist/client/assets/{category-editor-BCxBaRj_.js → category-editor-JUszCOFG.js} +1 -1
  75. package/dist/client/assets/{chart-y76bgXEr.js → chart-Cb5FrOGU.js} +1 -1
  76. package/dist/client/assets/{chat-context-B-9p38Q_.js → chat-context-CT3BFsFM.js} +1 -1
  77. package/dist/client/assets/{checkbox-BzEgwaAv.js → checkbox-DOnkyCxT.js} +1 -1
  78. package/dist/client/assets/{choose-editor-DbV_JOol.js → choose-editor-CMWoLHuX.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-KaUB7frF.js → cli-auth-success-Cyr2iOh-.js} +1 -1
  80. package/dist/client/assets/{collection-detail-CofwFPqo.js → collection-detail-CXdxpfdg.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-BHtwdyhl.js → collection-display-button-3iAf3R3I.js} +1 -1
  82. package/dist/client/assets/{collection-search-Kw8PMMwp.js → collection-search--MkvcSQC.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-BrP46Qh1.js → collection-table-wrapper-BQ0eKyoq.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-Dz0xJ8vR.js → collection-tabs-Bf6ZPN2x.js} +1 -1
  85. package/dist/client/assets/{command-Ca4MVtqp.js → command-aZ3qwa-P.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-D93MR7Yz.js → commerce-onboarding-DQ8wX2xf.js} +1 -1
  87. package/dist/client/assets/{connect-BjrhKKQ_.js → connect-DvHV5W1a.js} +1 -1
  88. package/dist/client/assets/{connection-BNlWKkAk.js → connection-Rscid73L.js} +1 -1
  89. package/dist/client/assets/{connection-card-B7j_HsTi.js → connection-card-ByeRK7V2.js} +1 -1
  90. package/dist/client/assets/{connection-detail-D8RdvKxc.js → connection-detail-Ch42hms-.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-DmvMeozI.js → connection-form-helpers-O6wkFACp.js} +1 -1
  92. package/dist/client/assets/{connections-C2ZwQ3VV.js → connections-CyCn3Lfw.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-CiQE8QmC.js → decopilot-sse-pool-CpJuNJhf.js} +1 -1
  94. package/dist/client/assets/{dialog-yiuyCgNR.js → dialog-Bb5WNSVq.js} +1 -1
  95. package/dist/client/assets/{domain-settings-CdmbJN2M.js → domain-settings-zJyZMgxJ.js} +1 -1
  96. package/dist/client/assets/{drawer-DdgCrqAo.js → drawer-Bm0_jM9d.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-DR_2DqIV.js → dropdown-menu-jKcT8b0b.js} +1 -1
  98. package/dist/client/assets/{empty-state-DgDNRffS.js → empty-state-DflZmerw.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-CbBhthf3.js → extract-connection-data-Bj9qfzhV.js} +1 -1
  100. package/dist/client/assets/{file-explorer-DrYVG37t.js → file-explorer-Cvclgxe-.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-D6DYI6TQ.js → file-type-icon-BaVNUAwc.js} +1 -1
  102. package/dist/client/assets/{form-CozwaOgf.js → form-CW5bxuYO.js} +1 -1
  103. package/dist/client/assets/{general-C99ykYH9.js → general-kLfjHkQz.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-BqntcX6E.js → github-repo-picker-DyzNMrxj.js} +1 -1
  105. package/dist/client/assets/{hooks-BU62GmGW.js → hooks-BtHlbPj8.js} +1 -1
  106. package/dist/client/assets/{index-BCL4YMxx.js → index-BUQO4tkd.js} +1 -1
  107. package/dist/client/assets/{index-DA4GvIH1.js → index-CVaBMBN2.js} +3 -3
  108. package/dist/client/assets/{index-CPMUOx8C.js → index-Caogbk3L.js} +5 -5
  109. package/dist/client/assets/{index-UdaLw6yz.js → index-DA-gED4C.js} +1 -1
  110. package/dist/client/assets/{index-qo5S7ezf.js → index-DaB5gpnq.js} +1 -1
  111. package/dist/client/assets/{index-DM7L2a7o.js → index-Ds6bd4-g.js} +1 -1
  112. package/dist/client/assets/{index-DlLH1d_p.js → index-DsOPCiWQ.js} +1 -1
  113. package/dist/client/assets/{index-BlkZhVsG.js → index-Dvb8gE5D.js} +1 -1
  114. package/dist/client/assets/{index-CCizJglx.js → index-avD8u_B9.js} +1 -1
  115. package/dist/client/assets/{index-redirect-B6zkC92h.js → index-redirect-D1zZ1PbM.js} +1 -1
  116. package/dist/client/assets/{index-BdNM9AWp.js → index-x2Sm1zNM.js} +1 -1
  117. package/dist/client/assets/{infra-billing-Bo-Z01cO.js → infra-billing-u8XDbbn3.js} +1 -1
  118. package/dist/client/assets/{input-mCGewv2v.js → input-SDBD55p6.js} +1 -1
  119. package/dist/client/assets/{integration-icon-DIeqxz15.js → integration-icon-p8iIv8Tq.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-MCVKH-wG.js → invite-member-dialog-DRdJE43T.js} +1 -1
  121. package/dist/client/assets/{label-CfUIXHZV.js → label-Bmq5JnbG.js} +1 -1
  122. package/dist/client/assets/{layout-BXw8ePXF.js → layout-Cj1ZMM8A.js} +1 -1
  123. package/dist/client/assets/{login-ECtoM2BX.js → login-ruVDFy7R.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-1kWtS81a.js → mcp-oauth-qjOzKP8t.js} +1 -1
  125. package/dist/client/assets/{members-CgK6M938.js → members-D1RpPvTQ.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-DzGpGeuY.js → monaco-editor-CvRMFSA9.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-Bt-PH87C.js → monitoring-stats-row-BMJhcZl6.js} +1 -1
  128. package/dist/client/assets/{multi-select-Ds1M_ilT.js → multi-select-Ca2EmCk_.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-Bv5Iqypk.js → oauth-callback-CUT3UPa6.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-B-BVY7xc.js → oauth-callback-ai-provider-iNeY3TJS.js} +1 -1
  131. package/dist/client/assets/{onboarding-B_eAkNtn.js → onboarding-dm60Xvd3.js} +1 -1
  132. package/dist/client/assets/{org-layout-DZ3R1FlD.js → org-layout-n5OFpzwJ.js} +1 -1
  133. package/dist/client/assets/{organization-choice-CbJGw6Cb.js → organization-choice-BP-5QW11.js} +1 -1
  134. package/dist/client/assets/{orgs-Dje3UCNU.js → orgs-Bd2s1wFN.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-Bml-VdI-.js → page-seo-form-BurfFmEg.js} +1 -1
  136. package/dist/client/assets/{popover-CxXb9Wev.js → popover-3cv7GBuH.js} +1 -1
  137. package/dist/client/assets/{post-calendar-Bs7NXUte.js → post-calendar-CIebHT1V.js} +1 -1
  138. package/dist/client/assets/{post-editor-BDvnl1QD.js → post-editor-DS4oi2V5.js} +1 -1
  139. package/dist/client/assets/{primitives-CTuL-CvR.js → primitives-BXDT6LaT.js} +1 -1
  140. package/dist/client/assets/{profile-B-sxFeGX.js → profile-CyUpvMXy.js} +1 -1
  141. package/dist/client/assets/{project-app-view-DoYYZazu.js → project-app-view-HVKXUOgO.js} +1 -1
  142. package/dist/client/assets/record-editor-CYSnK7mT.js +1 -0
  143. package/dist/client/assets/{redirect-editor-Qx4XI7Hf.js → redirect-editor-AS5pJ0hs.js} +1 -1
  144. package/dist/client/assets/registry-DUNFmqJs.js +2 -0
  145. package/dist/client/assets/{registry-layout-CB6UK6Z1.js → registry-layout-Bwi9VbWS.js} +1 -1
  146. package/dist/client/assets/{reports-C3mTfzkk.js → reports-Dnu59NJ1.js} +1 -1
  147. package/dist/client/assets/{require-capability-C4ZsZrKq.js → require-capability-Ci6KF_sq.js} +1 -1
  148. package/dist/client/assets/{required-auth-layout-hgQfSmw1.js → required-auth-layout-1sgVkQL0.js} +1 -1
  149. package/dist/client/assets/{reset-password-CAr9voB5.js → reset-password-B-DxeJEK.js} +1 -1
  150. package/dist/client/assets/{roles-BvLSpul9.js → roles-lCE1_nzr.js} +1 -1
  151. package/dist/client/assets/{search-input-N8fM-Vkc.js → search-input-Bu1OQ3Sh.js} +1 -1
  152. package/dist/client/assets/{secrets-bNj0onQd.js → secrets-C8-OtQet.js} +1 -1
  153. package/dist/client/assets/{sections-editor-BJV-WmyU.js → sections-editor-DjrISICl.js} +1 -1
  154. package/dist/client/assets/{select-BRB3pW9I.js → select-BeBWXWOA.js} +1 -1
  155. package/dist/client/assets/{select-model-BWN7PCXS.js → select-model-DcIptCbZ.js} +1 -1
  156. package/dist/client/assets/{self-tool-result-EWKyE7d5.js → self-tool-result-Bmx7zkKf.js} +1 -1
  157. package/dist/client/assets/{seo-editor-Bav1cVbe.js → seo-editor-_P7_hl_c.js} +1 -1
  158. package/dist/client/assets/{settings-layout-BILwUiYc.js → settings-layout-Du6t13Ul.js} +1 -1
  159. package/dist/client/assets/{shell-controls-BDjMvprf.js → shell-controls-CCnZBP8L.js} +1 -1
  160. package/dist/client/assets/{shell-layout-JBLFncek.js → shell-layout-CgOtzqB6.js} +1 -1
  161. package/dist/client/assets/{spinner-DwhPHef0.js → spinner-D3_Qt-g7.js} +1 -1
  162. package/dist/client/assets/{sprints-CMvto5O3.js → sprints-BCKKulIA.js} +1 -1
  163. package/dist/client/assets/{sso-CS88JaxH.js → sso-BMN2iLc1.js} +1 -1
  164. package/dist/client/assets/{store-D3I_KfDU.js → store-BbxvvVDL.js} +1 -1
  165. package/dist/client/assets/store-registry-Bj4EFghg.js +2 -0
  166. package/dist/client/assets/{switch-Cvpg9JL7.js → switch-BbWc1l5y.js} +1 -1
  167. package/dist/client/assets/{synced-repos-CyDDN0Pg.js → synced-repos-uSp6HbM_.js} +1 -1
  168. package/dist/client/assets/{tab-id-CZBxojRy.js → tab-id-B5ypzW_T.js} +1 -1
  169. package/dist/client/assets/{table-DDNXuXqv.js → table-3vDehkg0.js} +1 -1
  170. package/dist/client/assets/{tabs-Bq3FElXc.js → tabs-D-jLWSCI.js} +1 -1
  171. package/dist/client/assets/{tasks-BFEJLJBE.js → tasks-ebYM_oJ_.js} +1 -1
  172. package/dist/client/assets/{textarea-DwUjne8W.js → textarea-CER2jn69.js} +1 -1
  173. package/dist/client/assets/{toggle-group-CFj2LLpV.js → toggle-group-C_q_WSFV.js} +1 -1
  174. package/dist/client/assets/{toolbar-u2rKwLdA.js → toolbar-C3iLIPQ6.js} +1 -1
  175. package/dist/client/assets/{track-Bru1znfk.js → track-D40jhfCp.js} +1 -1
  176. package/dist/client/assets/{types-B_deqNV8.js → types-D87XXjPh.js} +1 -1
  177. package/dist/client/assets/{use-ai-providers-F14Tyadc.js → use-ai-providers-D3yUeB2_.js} +1 -1
  178. package/dist/client/assets/{use-api-keys-DSLiWkP6.js → use-api-keys-BDEWpWey.js} +1 -1
  179. package/dist/client/assets/{use-automations-BhcRV0eF.js → use-automations-BNcAzfRb.js} +1 -1
  180. package/dist/client/assets/{use-autosave-CNVIhuKT.js → use-autosave-CLZO9DbZ.js} +1 -1
  181. package/dist/client/assets/{use-clock-tick-DpyzPuOk.js → use-clock-tick-C8qno8nm.js} +1 -1
  182. package/dist/client/assets/{use-commerce-diagnostic-fO8dNgFK.js → use-commerce-diagnostic-Ty-IWJ8W.js} +1 -1
  183. package/dist/client/assets/{use-connection-dJEMh1Ma.js → use-connection-CDNMHTSM.js} +1 -1
  184. package/dist/client/assets/{use-copy-BUUIt1iY.js → use-copy-DOx2D2SY.js} +1 -1
  185. package/dist/client/assets/{use-create-virtual-mcp-CdsIFAmD.js → use-create-virtual-mcp-DvvtLp7n.js} +1 -1
  186. package/dist/client/assets/{use-debounced-autosave-CtJSXjsz.js → use-debounced-autosave-DQrEans7.js} +1 -1
  187. package/dist/client/assets/{use-debounced-value-BIoxf7WB.js → use-debounced-value-CVQg-FMu.js} +1 -1
  188. package/dist/client/assets/{use-decopilot-events-PHbUy34e.js → use-decopilot-events-BCWNUFtk.js} +1 -1
  189. package/dist/client/assets/{use-delete-connection-CDRUy7s1.js → use-delete-connection-DhL3nGMz.js} +1 -1
  190. package/dist/client/assets/{use-deployment-admin-D8FjOCu0.js → use-deployment-admin-BXExHDjv.js} +1 -1
  191. package/dist/client/assets/{use-file-configs-Din5gVpi.js → use-file-configs-DQ9N4u4J.js} +1 -1
  192. package/dist/client/assets/{use-infinite-scroll-CYdD7aaz.js → use-infinite-scroll-BIGC_pk6.js} +1 -1
  193. package/dist/client/assets/{use-join-requests-DI5O9s4j.js → use-join-requests-DytuQDMG.js} +1 -1
  194. package/dist/client/assets/{use-mcp-client-UK_R4eUU.js → use-mcp-client-DTJU_T_d.js} +1 -1
  195. package/dist/client/assets/{use-mcp-tools-CVWt29Ea.js → use-mcp-tools-C07mVmDA.js} +1 -1
  196. package/dist/client/assets/{use-members-CQrpZKUc.js → use-members-ChJp4kGz.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-DgxFeesG.js → use-navigate-to-agent-BAyeqqr0.js} +1 -1
  198. package/dist/client/assets/{use-org-auth-client-Dm2sh-tO.js → use-org-auth-client-D7qPYz7T.js} +1 -1
  199. package/dist/client/assets/{use-org-repo-syncs-CyqX1r09.js → use-org-repo-syncs-B0N7BsRZ.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-Dj_67NiL.js → use-org-sso-6NoFMIaU.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-CHXOmbBg.js → use-organization-roles-BDbhY6U0.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-JqwFMPk3.js → use-organization-settings-MwqJZrgC.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-C4J8Ts5g.js → use-registry-connections-nmiVytCr.js} +1 -1
  204. package/dist/client/assets/{use-secrets--O-fG_os.js → use-secrets-BMIe_cWX.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-BwPqoMCq.js → use-section-preview-base-DMVN7hAg.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-C6bpaJqn.js → use-status-sounds-Ddw2KhcD.js} +1 -1
  207. package/dist/client/assets/{use-tags-2q3I0Uy6.js → use-tags-DFjoaf6y.js} +1 -1
  208. package/dist/client/assets/{use-task-board-items-BZlGKz0f.js → use-task-board-items-Czu3qqvG.js} +1 -1
  209. package/dist/client/assets/{use-view-mode-BISgDYkE.js → use-view-mode-BTt-LQtz.js} +1 -1
  210. package/dist/client/assets/{use-virtual-mcp-CO3jlvM6.js → use-virtual-mcp-hXrQ90L-.js} +1 -1
  211. package/dist/client/assets/useInfiniteQuery-h5IjZRHu.js +1 -0
  212. package/dist/client/assets/useSuspenseInfiniteQuery-BHnP2tp4.js +1 -0
  213. package/dist/client/assets/{users-BuYkc5p-.js → users-GyH5nPHT.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-Ck9KS2QQ.js → variant-calendar-CV4nFUT-.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-viuX0UZ4.js → view-mode-toggle-COERUmfA.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +1 -1
  218. package/dist/server/server.js +1 -1
  219. package/package.json +1 -1
  220. package/dist/client/assets/record-editor-DniXHGBH.js +0 -1
  221. package/dist/client/assets/registry-Ctv-a1q4.js +0 -2
  222. package/dist/client/assets/store-registry-DdyxiGUZ.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-HTKud923.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-6tBIjZBF.js +0 -1
@@ -2863,7 +2863,7 @@ Respond with the structured verdict and a short reason.`,Nu$;var Ou$=D(()=>{B4()
2863
2863
  ${G.join(`
2864
2864
  `)}`:Y}function pW6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2865
2865
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var au$=200,yW6=12,hW6,cW6=300,_Z1=3;var vZ1=D(()=>{i_();bA0();hW6={aheadBy:0,behindBy:0,files:[]}});function tW6($){if(!$||$.includes(".."))return!1;return nW6.test($)}function eu$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!tW6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function $c$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var nW6;var Zc$=D(()=>{nW6=/^[\w./@-]+$/});function na($,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 Xc$($,Z,X,Q){if(!Q.connectionId)throw new n_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new n_(Y9);await WB({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:Y9;throw new n_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:K}=await FB(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=M6$(H instanceof Error?H.message:String(H));throw N?new n_(U):H}),W=Au($),F=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:K}},...W?{operator:W}:{}})});if(!F.ok){let H=await KB(F,oW6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var oW6=10485760,n_;var fZ1=D(()=>{aG();TA0();up();um0();Wy();n_=class n_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function aW6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!rW6.test(Z))throw Error(`Invalid branch name: ${$}`)}function t_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(eW6)])}async function ZF6($,Z){let X=$.var.studioContext,Q=_3(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,K=sS(J?.metadata?.runtime);if(K)return K;let W=RB0(Z.virtualMcpMetadata),F=W==="cms"?await UZ1(X,{claimName:Z.claimName}):"alive",H=W==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&W==="cms");if(N&&J)wn(X,J.id,H);if(W==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:N});return H}async function XF6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await $Q($.var.studioContext)}catch{return null}}function o_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function ku($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=na(Z,X);if(!Y)throw new u4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return IA0(Q,G.id,Y)}function bZ1($,Z){if(Z instanceof RA0)return $.json({error:Z.message},429,{...j5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,j5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,j5)}async function Gc$($,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 Jc$($){try{let Z=await ku($),X=await xA0(Z,$.get("vmClaim").branch);return $.json(X,200,j5)}catch(Z){return bZ1($,Z)}}function ta($,Z){let Q=(hA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return hA0.set($,Y),Y.finally(()=>{if(hA0.get($)===Y)hA0.delete($)}),Q}async function iZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,j5);let Q=X?.runner??o_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),K=X?.method??"POST",W=null,F=new Headers;if(X?.jsonBody!==void 0)W=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)W=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:K,headers:F,body:W,...H?{signal:H}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...j5}})}}let B=await O.text(),L=X?.redactRepoDir?QF6(B):B,w=O.headers.get("content-type")??"application/json";return new Response(L,{status:O.status,headers:{"content-type":w,...j5}})};try{if(H){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function QF6($){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 uA0($,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 K=`Daemon error (${G.status})`;try{K=JSON.parse(J).error??K}catch{}throw Error(K)}return JSON.parse(J)}function YF6($){return Kc$.includes($)}var rW6,Qc$=524288,sW6=65536,eW6=1e4,Yc$=2000,$F6,hA0,j5,Kc$,Wc$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",$F6),$.post("/:virtualMcpId/:branch/write",(X)=>iZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>iZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>iZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>iZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>iZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>iZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:t_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>iZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:t_(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 iZ(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 iZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>iZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>iZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!YF6(Q))return X.json({error:`step must be one of: ${Kc$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await UZ1(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await XF6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,j5);if(Q==="start"){let J=t(X.var.studioContext),K=Ky(Y.virtualMcpMetadata);try{await uZ0({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:K})}catch(W){let F=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return iZ(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 VN(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 Gu$(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 Jc$(X);return Z(X)});let Z=(X)=>iZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Yc$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Jc$(X);return iZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Yc$)])})}),$.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 ku(X),J=await yA0(G,Q.branch,Y.base);return X.json(J,200,j5)}catch(Y){return bZ1(X,Y)}return iZ(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,j5);let Q=o_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),K=X.var.studioContext;return ta(Y,async()=>{try{await OZ1(K,Q,Y);let W=na(G,J);if(W)await Xc$(K,Q,Y,W)}catch(W){if(W instanceof n_)return X.json({error:W.message},403,j5);let F=W instanceof Error?W.message:String(W);return X.json({error:F},502,j5)}return iZ(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 ta(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,j5);try{let J=await ku(X);return await su$(J,Q.branch,G),X.json({ok:!0},200,j5)}catch(J){let K=J instanceof u4&&J.status===409?409:502,W=J instanceof Error?J.message:String(J);return X.json({error:W},K,j5)}});return ta(Q.claimName,()=>iZ(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 ta(Q.claimName,async()=>{try{let K=await X.req.json().catch(()=>({})),W=await ku(X),F=K.base??await W.getDefaultBranch();return await gA0(W,Q.branch,F),X.json({ok:!0},200,j5)}catch(K){return bZ1(X,K)}});let Y=o_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return ta(G,async()=>{try{await OZ1(J,Y,G)}catch(K){let W=K instanceof Error?K.message:String(K);return X.json({error:W},502,j5)}return iZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Qc$,onError:(X)=>X.json({error:"Payload too large"},413,j5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=o_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:K}=Q,W=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=LZ1(H)&&U?[H,N]:Y?await Promise.all([uA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),uA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await ku(X);return Promise.all([xA0(w,Q.branch),yA0(w,Q.branch)])})(),L=await Hu$(W,O,B);return X.json(L,200,j5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j5);return X.json({error:H},502,j5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Qc$,onError:(X)=>X.json({error:"Payload too large"},413,j5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=o_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:K}=Q,W=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=LZ1(H)&&U?[H,N]:Y?await Promise.all([uA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:K}),uA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:K})]):await(async()=>{let w=await ku(X);return Promise.all([xA0(w,Q.branch),yA0(w,Q.branch)])})(),L=await Uu$(W,O,B,typeof F.language==="string"?F.language:void 0);return X.json(L,200,j5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j5);return X.json({error:H},502,j5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=o_(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 K=J.replace(/\/+$/,"");return Gc$(X,`${K}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:sW6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=o_(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 K=eu$(J);if(!K)return X.json({error:"Invalid or missing __resolveType"},400);let W=$c$(G,K.resolveType);return Gc$(X,W,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var Fc$=D(()=>{w8();zN();Pu();NZ1();xp();Xu$();v3();qy();Qu$();g3();Yu$();Ju$();ym0();gp();jZ1();Ou$();RZ1();i_();vZ1();Zc$();fZ1();rW6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$F6=AA0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{aW6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let K=await X.storage.virtualMcps.findById(G);if(!K||K.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let W=fp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await _m0(X,J),H=vm0(F,Q),N=Zu$({userId:H,projectRef:W}),U=K.metadata??null,O=await ZF6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(O==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:W,virtualMcpMetadata:U,connectionIds:K.connections?.map((L)=>L.connection_id)??[],runtime:O}),Z();let B;try{B=await $Q(X)}catch{B=null}if(!B)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:B,virtualMcpId:G,branch:J,userId:H,projectRef:W,virtualMcpMetadata:U,connectionIds:K.connections?.map((L)=>L.connection_id)??[],runtime:O}),Z()});hA0=new Map;j5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Kc$=["clone","install","start"]});function Hc$($,Z,X){let Q=xZ1.get($);if(!Q)Q={pending:null,running:!1},xZ1.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,K]of Object.entries(X.set??{}))Y.set.set(J,K),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,K)=>{Y.resolvers.push(J),Y.rejecters.push(K)});if(!Q.running)JF6($,Q);return G}async function JF6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await KF6(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)xZ1.delete($)}}async function KF6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Mu(Z,X),J=await Z.getCommitTreeSha(G),K=await Z.getTreeRecursive(J),W=SZ1(K,Q),F=[],H=new Map(W.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,L]of $.set){let w=CZ1(W,B),E=`${JSON.stringify(L,null,2)}
2866
- `,j=await Z.createBlob(E);await tu$(Z.owner,Z.repo,j,E);let z=w[0]??`${fA0(Q)}/${IZ1(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let L of CZ1(W,B))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=da(B);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);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:WF6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=GF6-1)throw B;await L$(tZ(2000,200,Y,2,0.5))}}}function WF6($){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 qm0(Q,$.deps.coAuthor)}var GF6=3,xZ1;var Nc$=D(()=>{EB0();MA0();w4();i_();bA0();xZ1=new Map});import{createHmac as Uc$,randomBytes as FF6,timingSafeEqual as HF6}from"crypto";function Oc$(){if(cA0)return cA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return cA0=$?Buffer.from($):FF6(32),cA0}function yZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+NF6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Uc$("sha256",Oc$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Bc$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Uc$("sha256",Oc$()).update(Q).digest("base64url"));if(Y.length!==G.length||!HF6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let K=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>=K}var NF6=21600000,cA0=null;var Dc$=D(()=>{q$()});import{z as Vu}from"zod";function OF6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&UF6.test($)}function wc$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function oa($){let Z=$.get("decofileScope");return IA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ra($,Z){if(Z instanceof u4){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 Ec$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Lc$),$.use("/:virtualMcpId/:branch/*",Lc$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await ou$(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=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(wc$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ra(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 oa(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 ra(Z,Y)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=BF6.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{qA0(J)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[J,K]of Object.entries(G.set??{}))if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await oa(Z),K=await Hc$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Au(Q)},G),W=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:K,token:W,apiHost:wc$(Z)})}catch(J){return ra(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(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(K){if(!(K instanceof u4&&K.status===409))throw K;await gA0(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 u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let W=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:W.number,url:W.html_url})}throw J}}catch(Q){return ra(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return ra(Z,Q)}}),$}var UF6,BF6,Lc$;var jc$=D(()=>{MA0();w8();NZ1();TA0();fZ1();RZ1();Nc$();Dc$();vZ1();i_();bA0();UF6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BF6=Vu.object({set:Vu.record(Vu.string(),Vu.unknown()).optional(),delete:Vu.array(Vu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Lc$=AA0(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(!OF6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Bc$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!TB0(W))return $.json({error:"Project has no preview server configured"},404);let H=K.connections?.map((O)=>O.connection_id)??[],N=na(W,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=W?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var zc$=($)=>{let Z=new H1;if(Z.use("*",x_),Z.route("/",hP0()),Z.route("/",xx$()),Z.route("/",lh$()),Z.route("/",hh$()),Z.route("/",jA0()),Z.route("/tools",oh$()),Z.route("/",ph$()),Z.route("/",Eh$({kvStorage:$.kvStorage})),Z.route("/",Lh$()),Z.route("/fs",_h$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Wc$()),Z.route("/decofile",Ec$()),Z.route("/",xh$()),Z.route("/deco-sites",cP0()),Z.route("/sso",vP0()),Z.route("/",zA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kx$()),$.mountDevAssets)Z.route("/dev-assets",lP0({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("/",Gf$()),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",fh$()),Z.route("/mcp",pL0()),Z.route("/mcp/self",EA0()),Z.route("/mcp",oL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Pc$=D(()=>{w8();v51();Vx$();y51();dP0();Da();C51();wh$();jh$();vh$();It();I51();rL0();YZ1();bh$();yh$();uh$();dh$();nh$();JZ1();rh$();KZ1();nL0();Fc$();jc$()});function DF6($){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 LF6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ac$=()=>{let $=new H1;return $.use("*",LF6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await mZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:DF6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Tc$=D(()=>{w8();q$();uz0()});import{z as q1}from"zod";function UF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function qF6($){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 MF6($,Z,X){try{return JSON.parse($)}catch{throw new qc$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function kF6($){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:MF6(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 VF6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function SF6($){if(!$)return;return{openai:{response_format:$}}}function CF6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Rc$($,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 Ic$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wF6=256,EF6,jF6,zF6,PF6,AF6,TF6,RF6,IF6,qc$,Mc$,kc$;var Vc$=D(()=>{B4();w8();Pu();WN();EF6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),jF6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),zF6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(jF6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),PF6=q1.object({type:q1.literal("text")}),AF6=q1.object({type:q1.literal("json_object")}),TF6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),RF6=q1.union([PF6,AF6,TF6]),IF6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(zF6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(EF6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:RF6.optional(),user:q1.string().optional()});qc$=class qc$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Mc$=new H1;Mc$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(UF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(UF("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(UF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=IF6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(UF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=qF6(G.model);if(!J)return $.json(UF("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:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>dL(j.providerId));if(!E)return $.json(UF("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);K=E.id}let F;try{F=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(UF(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(W),N=kF6(G.messages),U=G.tools?VF6(G.tools):void 0,O=SF6(G.response_format),B=CF6(),L=Math.floor(Date.now()/1000);if(G.stream)return VN($,async(w)=>{let E=Rc$(H,N,U,G,O,$.req.raw.signal);try{let j=QB(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:B,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:B,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(P+=k.text,P.length>=wF6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:B,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:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Ic$(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=Rc$(H,N,U,G,O,$.req.raw.signal),E=await ZB(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:B,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Ic$(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(UF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(UF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(UF(Y.message,"server_error"),500)}});kc$=Mc$});function _F6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Sc$(){let $=new H1;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(!iG(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(),K=[];for(let F of J){if(!F.slug||F7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Ws1(N)!==G)continue;if(!_F6(N.metadata))continue;K.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var Cc$=D(()=>{w8();lO()});var vc$;var _c$=D(()=>{vc$={name:"decocms",version:"4.267.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 bF6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??fF6}}var fc$,fF6="https://ph.studio.decocms.com",bc$;var xc$=D(()=>{w8();j50();PC();s5();q$();j51();_c$();fc$=new H1;fc$.get("/",($)=>{let Z={version:vc$.version,theme:fm1(),...OH().logo&&{logo:OH().logo},..._W()&&{internalUrl:UC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:nb$(),posthog:bF6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!_W()&&b0().agentSandboxEnabled}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});bc$=fc$});function Su($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function gZ1($){return(Su($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function gc$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Su($))}&sz=${Z}`}function yc$($,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 hc$($){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.`,K=Y?.trim()?yc$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):yc$(`How does ${X} really perform? ${J}`,200);return{title:G,description:K}}import{z as l0}from"zod";var r_,xF6,yF6,gF6,hF6,uc$;var cc$=D(()=>{r_=l0.enum(["good","bad","neutral"]),xF6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:r_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),yF6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(xF6)),gF6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},hF6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:r_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:r_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(yF6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:r_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:r_.optional()})).min(1)})]),uc$=l0.object({...gF6,template:hF6})});function lA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=uc$.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 hZ1=D(()=>{cc$()});import{join as lc$}from"path";async function cF6($){try{let Z=await fetch(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uF6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=lA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((K)=>K.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||gZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function NG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function lF6($,Z){let X=Su($),Q=Z?.brand?.trim()||gZ1(X),Y=gc$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=hc$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${NG(K)}</title>`,`<meta name="description" content="${NG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${NG(K)}" />`,`<meta property="og:description" content="${NG(W)}" />`,`<meta property="og:url" content="${NG(J)}" />`,`<meta property="og:image" content="${NG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${NG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${NG(K)}" />`,`<meta name="twitter:description" content="${NG(W)}" />`,`<meta name="twitter:image" content="${NG(F)}" />`,`<meta name="twitter:image:alt" content="${NG(H)}" />`,`<link rel="canonical" href="${NG(J)}" />`,`<link rel="icon" href="${NG(Y)}" sizes="any" />`].join(`
2866
+ `,j=await Z.createBlob(E);await tu$(Z.owner,Z.repo,j,E);let z=w[0]??`${fA0(Q)}/${IZ1(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let L of CZ1(W,B))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=da(B);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);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:WF6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=GF6-1)throw B;await L$(tZ(2000,200,Y,2,0.5))}}}function WF6($){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 qm0(Q,$.deps.coAuthor)}var GF6=3,xZ1;var Nc$=D(()=>{EB0();MA0();w4();i_();bA0();xZ1=new Map});import{createHmac as Uc$,randomBytes as FF6,timingSafeEqual as HF6}from"crypto";function Oc$(){if(cA0)return cA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return cA0=$?Buffer.from($):FF6(32),cA0}function yZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+NF6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Uc$("sha256",Oc$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Bc$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Uc$("sha256",Oc$()).update(Q).digest("base64url"));if(Y.length!==G.length||!HF6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let K=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>=K}var NF6=21600000,cA0=null;var Dc$=D(()=>{q$()});import{z as Vu}from"zod";function OF6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&UF6.test($)}function wc$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function oa($){let Z=$.get("decofileScope");return IA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ra($,Z){if(Z instanceof u4){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 Ec$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Lc$),$.use("/:virtualMcpId/:branch/*",Lc$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await ou$(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=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(wc$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ra(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 oa(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 ra(Z,Y)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=BF6.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{qA0(J)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[J,K]of Object.entries(G.set??{}))if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await oa(Z),K=await Hc$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Au(Q)},G),W=yZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:K,token:W,apiHost:wc$(Z)})}catch(J){return ra(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(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(K){if(!(K instanceof u4&&K.status===409))throw K;await gA0(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 u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let W=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:W.number,url:W.html_url})}throw J}}catch(Q){return ra(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await oa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return ra(Z,Q)}}),$}var UF6,BF6,Lc$;var jc$=D(()=>{MA0();w8();NZ1();TA0();fZ1();RZ1();Nc$();Dc$();vZ1();i_();bA0();UF6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BF6=Vu.object({set:Vu.record(Vu.string(),Vu.unknown()).optional(),delete:Vu.array(Vu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Lc$=AA0(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(!OF6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Bc$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!TB0(W))return $.json({error:"Project has no preview server configured"},404);let H=K.connections?.map((O)=>O.connection_id)??[],N=na(W,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=W?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var zc$=($)=>{let Z=new H1;if(Z.use("*",x_),Z.route("/",hP0()),Z.route("/",xx$()),Z.route("/",lh$()),Z.route("/",hh$()),Z.route("/",jA0()),Z.route("/tools",oh$()),Z.route("/",ph$()),Z.route("/",Eh$({kvStorage:$.kvStorage})),Z.route("/",Lh$()),Z.route("/fs",_h$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Wc$()),Z.route("/decofile",Ec$()),Z.route("/",xh$()),Z.route("/deco-sites",cP0()),Z.route("/sso",vP0()),Z.route("/",zA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",kx$()),$.mountDevAssets)Z.route("/dev-assets",lP0({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("/",Gf$()),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",fh$()),Z.route("/mcp",pL0()),Z.route("/mcp/self",EA0()),Z.route("/mcp",oL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Pc$=D(()=>{w8();v51();Vx$();y51();dP0();Da();C51();wh$();jh$();vh$();It();I51();rL0();YZ1();bh$();yh$();uh$();dh$();nh$();JZ1();rh$();KZ1();nL0();Fc$();jc$()});function DF6($){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 LF6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ac$=()=>{let $=new H1;return $.use("*",LF6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await mZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:DF6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Tc$=D(()=>{w8();q$();uz0()});import{z as q1}from"zod";function UF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function qF6($){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 MF6($,Z,X){try{return JSON.parse($)}catch{throw new qc$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function kF6($){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:MF6(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 VF6($){let Z=$.map((X)=>{let Q=X.function.parameters?dY(X.function.parameters):dY({type:"object",properties:{}});return[X.function.name,R$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function SF6($){if(!$)return;return{openai:{response_format:$}}}function CF6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Rc$($,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 Ic$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wF6=256,EF6,jF6,zF6,PF6,AF6,TF6,RF6,IF6,qc$,Mc$,kc$;var Vc$=D(()=>{B4();w8();Pu();WN();EF6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),jF6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),zF6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(jF6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),PF6=q1.object({type:q1.literal("text")}),AF6=q1.object({type:q1.literal("json_object")}),TF6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),RF6=q1.union([PF6,AF6,TF6]),IF6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(zF6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(EF6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:RF6.optional(),user:q1.string().optional()});qc$=class qc$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Mc$=new H1;Mc$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(UF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(UF("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(UF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=IF6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(UF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=qF6(G.model);if(!J)return $.json(UF("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:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>dL(j.providerId));if(!E)return $.json(UF("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);K=E.id}let F;try{F=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(UF(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(W),N=kF6(G.messages),U=G.tools?VF6(G.tools):void 0,O=SF6(G.response_format),B=CF6(),L=Math.floor(Date.now()/1000);if(G.stream)return VN($,async(w)=>{let E=Rc$(H,N,U,G,O,$.req.raw.signal);try{let j=QB(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:B,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:B,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(P+=k.text,P.length>=wF6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:B,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:B,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Ic$(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=Rc$(H,N,U,G,O,$.req.raw.signal),E=await ZB(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:B,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Ic$(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(UF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(UF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(UF(Y.message,"server_error"),500)}});kc$=Mc$});function _F6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Sc$(){let $=new H1;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(!iG(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(),K=[];for(let F of J){if(!F.slug||F7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Ws1(N)!==G)continue;if(!_F6(N.metadata))continue;K.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var Cc$=D(()=>{w8();lO()});var vc$;var _c$=D(()=>{vc$={name:"decocms",version:"4.267.4",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 bF6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??fF6}}var fc$,fF6="https://ph.studio.decocms.com",bc$;var xc$=D(()=>{w8();j50();PC();s5();q$();j51();_c$();fc$=new H1;fc$.get("/",($)=>{let Z={version:vc$.version,theme:fm1(),...OH().logo&&{logo:OH().logo},..._W()&&{internalUrl:UC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:nb$(),posthog:bF6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!_W()&&b0().agentSandboxEnabled}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});bc$=fc$});function Su($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function gZ1($){return(Su($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function gc$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Su($))}&sz=${Z}`}function yc$($,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 hc$($){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.`,K=Y?.trim()?yc$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):yc$(`How does ${X} really perform? ${J}`,200);return{title:G,description:K}}import{z as l0}from"zod";var r_,xF6,yF6,gF6,hF6,uc$;var cc$=D(()=>{r_=l0.enum(["good","bad","neutral"]),xF6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:r_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),yF6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(xF6)),gF6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},hF6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:r_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:r_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:r_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(yF6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:r_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:r_.optional()})).min(1)})]),uc$=l0.object({...gF6,template:hF6})});function lA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=uc$.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 hZ1=D(()=>{cc$()});import{join as lc$}from"path";async function cF6($){try{let Z=await fetch(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uF6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=lA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((K)=>K.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||gZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function NG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function lF6($,Z){let X=Su($),Q=Z?.brand?.trim()||gZ1(X),Y=gc$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=hc$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${NG(K)}</title>`,`<meta name="description" content="${NG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${NG(K)}" />`,`<meta property="og:description" content="${NG(W)}" />`,`<meta property="og:url" content="${NG(J)}" />`,`<meta property="og:image" content="${NG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${NG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${NG(K)}" />`,`<meta name="twitter:description" content="${NG(W)}" />`,`<meta name="twitter:image" content="${NG(F)}" />`,`<meta name="twitter:image:alt" content="${NG(H)}" />`,`<link rel="canonical" href="${NG(J)}" />`,`<link rel="icon" href="${NG(Y)}" sizes="any" />`].join(`
2867
2867
  `)}function dF6($,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}
2868
2868
  </head>`)}function dc$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=Su(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(lc$($,"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(`${GW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(mF6)}),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=$?lc$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let K=await cF6(Su(Q)),W=lF6(Q,K);return X.html(dF6(J,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var uF6=2500,mF6=1e4;var mc$=D(()=>{w8();hZ1();tw();q$()});function aa($,Z){return fetch(`${GW({})}${$}`,Z)}async function iF6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await aa(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:K,drops:W}=lA0(J);return{status:K.slides.length?"ready":"empty",deck:K,scanned_at:J.scanned_at,drops:W}}var pF6,CN,ic$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},pc$;var nc$=D(()=>{w8();hY();tw();hZ1();pF6=new Set(["complete","errored","terminated","unknown"]),CN=new H1;CN.use("*",async($,Z)=>{let X=await Z8.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});CN.use("/link-token/*",ic$);CN.use("/suggest",ic$);CN.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 iF6(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)}});CN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await aa("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${nw({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let K=await J.json(),W=K.blocked?{state:"blocked"}:K.status==="fresh"?{state:"fresh"}:K.mode==="sync"?{state:"sync"}:{state:"running",id:K.id??null};return $.json(W)}catch{return $.json({error:"run failed"},502)}});CN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await aa(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${nw({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:pF6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});CN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await aa(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});CN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await aa(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});pc$=CN});import{createHmac as nF6,timingSafeEqual as tF6}from"crypto";function oc$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+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)>oF6)return!1;let K=nF6("sha256",X).update(`${Y}.${$}`).digest("hex"),W=Buffer.from(K,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return W.length===H.length&&tF6(W,H)})}function rc$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=CJ(Z),Q=CJ(CJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:OF(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 ac$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function OF($){return typeof $==="string"?$:void 0}function CJ($){return typeof $==="object"&&$!==null?$:void 0}function dA0($){return typeof $==="number"?new Date($*1000):null}function lZ1($){return OF($)??OF(CJ($)?.id)}function rF6($){return lZ1($.subscription)??OF(CJ(CJ($.parent)?.subscription_details)?.subscription)}function aF6($){let Z=dA0($.current_period_end);if(Z)return Z;let X=CJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=CJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function uZ1($,Z){let X=dA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function cZ1($,Z){let X=dA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function sF6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=OF(CJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(OF(CJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(OF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=OF(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 K=Number(CJ(X.metadata)?.creditCents);if(!Number.isInteger(K)||K<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:CJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:K,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(OF(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=lZ1(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(uZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:lZ1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:cZ1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=OF(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&&uZ1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":ac$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:aF6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:cZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=rF6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(uZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:dA0(X.period_end),lastStripeEventAt:cZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function eF6($,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:ac$(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 tc$($,Z){let X=eF6($,Z);if(!X)return;fY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:lp1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function sc$($){let Z=new ZW(d8().db),X=await sF6(Z,$);if(!(X.handled&&X.topUp))tc$($,X);if(X.handled&&X.topUp)await Mw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),tc$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Ye1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof uY&&(Q.status===400||Q.status===404)))throw Q}return X}var oF6=300;var ec$=D(()=>{hG();C4();s60();QE();$01()});var $H6=1048576,dZ1;var $l$=D(()=>{w8();zN();q$();ec$();dZ1=new H1;dZ1.post("/webhook",k9({maxSize:$H6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!oc$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=rc$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await sc$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as ZH6}from"crypto";function QH6($,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 ZH6(Buffer.from(Y),Buffer.from(Q))}var XH6=5242880,mZ1;var Zl$=D(()=>{w8();zN();g3();mZ1=new H1;mZ1.post("/webhook",k9({maxSize:XH6,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(!QH6(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 K=(await Gn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:K})})});function Xl$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ql$,YH6,GH6,Yl$;var Gl$=D(()=>{w8();D3();oy();yx();Ql$=new H1,YH6=["range","if-none-match","if-modified-since"],GH6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ql$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Xu($))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 on(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&dG()){let W=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new Z$(500,{message:"Invalid data URL from storage"});let[,F,H]=W,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return Xl$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let W of YH6){let F=$.req.header(W);if(F)G.set(W,F)}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 K=new Headers;for(let W of GH6){let F=J.headers.get(W);if(F)K.set(W,F)}return K.set("Cache-Control","private, max-age=86400"),Xl$(K,K.get("content-type")??""),new Response(J.body,{status:J.status,headers:K})});Yl$=Ql$});var sa=_((a_)=>{var JH6=a_&&a_.__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]}),KH6=a_&&a_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))JH6(Z,$,X)};Object.defineProperty(a_,"__esModule",{value:!0});KH6(jY(),a_)});var Wl$=_((Jl$)=>{Object.defineProperty(Jl$,"__esModule",{value:!0});Jl$.version=void 0;Jl$.version="3.4.0"});var Nl$=_((BF)=>{var WH6=BF&&BF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(BF,"__esModule",{value:!0});BF.NodeTransport=BF.VERSION=void 0;BF.nodeResolveHost=BH6;var r6=sa(),FH6=z0("net"),iZ1=z0("tls"),HH6=z0("path"),Fl$=z0("fs"),NH6=WH6(z0("dns")),UH6=Wl$();BF.VERSION=UH6.version;var OH6="nats.js";class Hl${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=OH6,this.version=BF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,K=J===!0&&Z.tls!==null;if(!Q&&(G||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,K=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),K}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,FH6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,HH6.resolve)($),!(0,Fl$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Fl$.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 K=await this.loadFile(Z);if(K)$.cert=K}else if(X)$.cert=X;if(G){let K=await this.loadFile(G);if(K)$.key=K}else if(J)$.key=J;if(Q){let K=await this.loadFile(Q);if(K)$.ca=[K]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(K){return Promise.reject(K)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,iZ1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,iZ1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof iZ1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}BF.NodeTransport=Hl$;function BH6($){let Z=(0,r6.deferred)();return NH6.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 Ll$=_((Dl$)=>{Object.defineProperty(Dl$,"__esModule",{value:!0});Dl$.connect=DH6;var Ul$=Nl$(),Ol$=sa(),Bl$=sa();function DH6($={}){if((0,Bl$.hasWsProtocol)($))return Promise.reject(Bl$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Ol$.setTransportFactory)({factory:()=>{return new Ul$.NodeTransport},dnsResolveFn:Ul$.nodeResolveHost}),Ol$.NatsConnectionImpl.connect($)}});var wl$=_((_N)=>{var wH6=_N&&_N.__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]}),EH6=_N&&_N.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))wH6(Z,$,X)};Object.defineProperty(_N,"__esModule",{value:!0});_N.connect=void 0;var jH6=Ll$();Object.defineProperty(_N,"connect",{enumerable:!0,get:function(){return jH6.connect}});EH6(sa(),_N)});function Pl$($){let Z=$?.connectFn??TH6,X=null,Q=null,Y=!1,G=!1,J=!1,K=[];function W(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let U of K)try{U()}catch{}}function H(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:AH6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{B++;let L=tZ(PH6,zH6,B-1,2,0.5);await L$(L)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?El$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?X:null},getJetStream(){if(!W())return null;if(!Q)Q=zl$.jetstream(X);return Q},onReady(U){if(K.push(U),W())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 TH6($){return jl$.connect($)}var El$,jl$,zl$,zH6=100,PH6=3000,AH6=3000;var Al$=D(()=>{w4();El$=V(Zc(),1),jl$=V(wl$(),1),zl$=V(rD(),1)});function pZ1($,Z){return`${$}.${Z}`}class nZ1{cache;constructor($){this.cache=yh({ttlMs:$?.ttlMs??RH6,maxSize:$?.maxSize??IH6})}async get($,Z){return this.cache.get(pZ1($,Z))??null}async set($,Z,X){this.cache.set(pZ1($,Z),X)}async invalidate($,Z){this.cache.delete(pZ1($,Z))}teardown(){this.cache.clear()}}var RH6=600000,IH6=5000;var Tl$=()=>{};function mA0($,Z){return`${$}:${Z}`}function tZ1($){let Z=yh({ttlMs:$?.ttlMs??qH6,maxSize:$?.maxSize??MH6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function K(W,F){let H=X?.();if(!H)return;try{H.publish(Rl$,Y.encode(JSON.stringify({organizationId:W,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(W,F){return Z.get(mA0(W,F))},set(W,F,H){Z.set(mA0(W,F),H)},invalidate(W,F){Z.delete(mA0(W,F)),K(W,F)},start(){if(J)return;let W=X?.();if(!W)return;J=W.subscribe(Rl$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(mA0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Rl$="studio.ai-provider-keys.invalidate",qH6=30000,MH6=5000;var Il$=()=>{};class oZ1{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 ql$=($)=>{let Z;return()=>Z??=$()},rZ1,aZ1;var Ml$=D(()=>{I6();rZ1=ql$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),aZ1=ql$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function fH6(){return{name:sH,subjects:[`${Er0}.>`],storage:DK.StorageType.File,max_age:SH6,max_bytes:_H6,max_msgs_per_subject:vH6,discard:DK.DiscardPolicy.Old,retention:DK.RetentionPolicy.Limits,duplicate_window:CH6,num_replicas:1}}class Sl${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 kl$($){let Z=Vl$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function gH6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((K)=>{if(X++,VH6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,K)})},get errorCount(){return X}}}function hH6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class sZ1{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=fH6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await DK.jetstreamManager($);try{await Q.streams.info(sH),await Q.streams.update(sH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(sH),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:hH6});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=gH6(Z,Q),J=!1,K=()=>{if(J)return;J=!0;let F=AU$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",K,{once:!0});let W=(F)=>{let H=performance.now(),N=zr0(F,{runId:Z}),U=performance.now()-H;rZ1().record(U),aZ1().add(1,{"org.id":Q??"unknown"}),yH6?.record(U,N.reduce((O,B)=>O+B.data.length,0));for(let O of N)G.publish(Y,O.subject,O.data,O.headers?kl$(O.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:O,value:B}=await F.read();if(O)break;if(W(B),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(F.releaseLock(),K(),xH6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=zr0(Z,{runId:$,dedup:X});rZ1().record(performance.now()-Y),aZ1().add(1);for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:kl$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=PU$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?DK.DeliverPolicy.New:DK.DeliverPolicy.All,G=X?.closeOnDone??!1,J=cB($),K;try{K=await(await Q.consumers.get(sH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=qL0({messages:async function*(){try{for await(let L of K)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(AL0()).pipeThrough(TL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,K.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){B(),L.close();return}let j=E;if(j.kind==="done"){if(G){B(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(sH,{filter:cB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var DK,Vl$,kH6=($)=>{let Z;return()=>Z??=$()},VH6,SH6=86400000000000,CH6=120000000000,_H6=4294967296,vH6=500000,bH6,xH6,yH6;var Cl$=D(()=>{w4();Pr0();ML0();RL0();I6();Ml$();DK=V(rD(),1),Vl$=V(Zc(),1),VH6=kH6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));bH6=process.env.STREAM_ENCODE_TRACE==="1",xH6=process.env.DECOPILOT_STREAM_TRACE==="1";yH6=bH6?new Sl$:null});function iA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,gK(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 _l$=D(()=>{C8()});class eZ1{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 vl$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!wC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await W6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),h$(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var fl$=D(()=>{WX();py();L5()});function pH6($){return $ instanceof s7}function nH6($,Z){return Z-$>=mH6}class $71{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??uH6;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??lH6,X=this.options.itemIntervalMs??cH6,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:K}of Y)try{if(await this.reconcileItem(J,K,Q))$++}catch(W){console.error(`[task-board-review-sweeper] ${J} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-nn0),yt0);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()-iH6));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 bt0(this.taskBoard,Y,Q),await xt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==U8)continue;let K=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!K)continue;await m3(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),pH6(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()+dH6)).catch((K)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,K))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),h$(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!nH6(RH(X),Date.now()))return;await CW($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===U8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let K=await Promise.all(G.map(async(W)=>({...W,...await ty(Z,W)})));if(K.every((W)=>W.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await vl$(J,Q,K))return!0;if(await WO$(J,Q))return!0;if(!Y)return!1;if(!Qo0(K))return!1;return await hD0(J,Q,{previewMatchesHead:Yo0(K)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var uH6=60000,cH6=300000,lH6=50,dH6=60000,mH6=900000,iH6=120000;var bl$=D(()=>{X9();tt0();SW();wt();fl$();L5();nG();gt0();KJ();mn()});import{readdir as tH6,rm as pA0}from"fs/promises";import{join as nA0}from"path";async function tA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-oH6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await s_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await xl$($,Y,Z);else if(!Y.startsWith(".")){let G=nA0($,Y),J=await s_(G);for(let W of J){if(!/^\d{4}$/.test(W))continue;X+=await xl$(G,W,Z)}if((await s_(G)).length===0)await pA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function xl$($,Z,X){let Q=0,Y=nA0($,Z),G=await s_(Y);for(let K of G){if(!/^\d{2}$/.test(K))continue;let W=nA0(Y,K),F=await s_(W);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${K}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=nA0(W,N);await pA0(O,{recursive:!0,force:!0}),Q++}}if((await s_(W)).length===0)await pA0(W,{recursive:!0,force:!0})}if((await s_(Y)).length===0)await pA0(Y,{recursive:!0,force:!0});return Q}async function s_($){try{return(await tH6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var oH6=30;var Z71=()=>{};import{DBOS as X71,SchedulerMode as rH6}from"@dbos-inc/dbos-sdk";async function sH6(){let $=[vJ(),e_(),EF()],Z=0;for(let X of $)try{Z+=await tA0(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 eH6($,Z){await X71.runStep(()=>sH6(),{name:"monitoringRetention"})}function gl$(){if(yl$)return;yl$=!0;let $=X71.registerWorkflow(eH6,{name:"monitoringRetentionWorkflow"});X71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:aH6,mode:rH6.ExactlyOncePerIntervalWhenActive})}var aH6="23 4 * * *",yl$=!1;var hl$=D(()=>{DY();Z71()});function ul$($){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 GJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await en($.db,Z,Q.role);return Y.boundAuth=X51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new Cw(X,void 0,Y.boundAuth,Q.role,"self"),SB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var cl$=D(()=>{_w();CB()});function $N6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function ZN6(){return{services:$N6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function QN6(){for(let $ of XN6)$()}function ll$($){let Z=[...Q71.logs,$];Q71={...Q71,logs:Z.length>500?Z.slice(-500):Z},QN6()}function Y71(){return YN6}var Q71,XN6,YN6=!1;var G71=D(()=>{Q71=ZN6(),XN6=new Set});import{EventEmitter as GN6}from"events";var J71;var dl$=D(()=>{G71();J71=new GN6;J71.on("request",($)=>{ll$($)})});function ml$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Cu(U.params.name),B=U.params.arguments||{},L=Object.keys(B).map((E)=>Cu(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${Y5.tool}${O}${Y5.dim}(${w})${Y5.reset}`}else if(U.method)G=`${Y5.dim}${Cu(U.method)}${Y5.reset}`}}catch{}}let K=Cu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";K=`/mcp/${Y5.mcp}${Cu(H.slice(0,12))}\u2026${Y5.reset}`}else if(Y==="/mcp")K=`${Y5.mcp}/mcp${Y5.reset}`;else if(Y==="/mcp/registry")K=`${Y5.mcp}/mcp/registry${Y5.reset}`;let W=KN6(Q),F=J?"\u25C0":"\u2190";if(!Y71())console.log(`${Y5.dim}${F}${Y5.reset} ${W}${Q}${Y5.reset} ${K}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=JN6(N),O=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!Y71())console.log(`${Y5.dim}${B}${Y5.reset} ${W}${Q}${Y5.reset} ${K}${G?` ${G}`:""} ${U}${N}${Y5.reset} ${Y5.duration}${O}${Y5.reset}`);J71.emit("request",{method:Q,path:Cu(Y),status:N,duration:H,timestamp:new Date})}}}var Y5,JN6=($)=>{if($>=500)return Y5.serverError;if($>=400)return Y5.clientError;if($>=300)return Y5.redirect;return Y5.ok},KN6=($)=>{return Y5[$]||Y5.reset},Cu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var il$=D(()=>{G71();dl$();Y5={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 ol$}from"crypto";import{mkdir as WN6,readdir as FN6,rm as pl$,stat as rl$}from"fs/promises";import{join as W71,relative as HN6}from"path";import{z as P$}from"zod";function sl$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return W71(NN6,Z)}function el$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function K71($,Z){let X=sl$($),Q=el$(Z);return W71(X,Q)}function UN6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ol$("sha256",Y).update(G).digest("hex")}function tl$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=UN6(Z,X,G,Y),K=new URL(`/api/dev-assets/${Z}/${el$(X)}`,$);return K.searchParams.set("expires",G.toString()),K.searchParams.set("signature",J),K.searchParams.set("method",Y),K.toString()}function $d$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ol$("md5","etag").update(Q).digest("hex")}"`}async function Zd$($,Z,X,Q,Y){try{let G=await FN6($,{withFileTypes:!0});for(let J of G){let K=W71($,J.name),F=HN6(Z,K).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await Zd$(K,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await rl$(K);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:$d$(K,H.mtime,H.size)})}catch{}}}}catch{}}function Xd$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",K=G.maxKeys??1000,W=G.delimiter,F=G.continuationToken,H=sl$(Q);await WN6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Zd$(H,H,J,W,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((w)=>w.key>F),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+K),B=U+K<N.objects.length,L=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=K71(Q,G.key),K=await rl$(J);return{contentType:h51(G.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:$d$(J,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??nl$;return{url:tl$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??nl$;return{url:tl$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=K71(Q,G.key);try{return await pl$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],K=[];return await Promise.all(G.keys.map(async(W)=>{let F=K71(Q,W);try{await pl$(F),J.push(W)}catch(H){K.push({key:W,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:K}}}]}async function F71($,Z,X){let Q=Xd$(Z,X),Y=new iK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:F5});for(let J of Q){let K="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,W=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:K,outputSchema:W,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new YQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),DJ(Y,G,$,"mcp:dev-assets")}async function Qd$($,Z,X,Q){let G=Xd$(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 NN6="./data/assets",nl$=3600,al$,Yd$;var Gd$=D(()=>{q$();Og();w8();Rd();xC();hX();dP0();al$=new H1;al$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return F71($.req.raw,Z,Q)});Yd$=al$});var Jd$={};J4(Jd$,{mountDevRoutes:()=>ON6});function ON6($,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 F71(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}`,K=Q.req.param("toolName");if(!K)return Q.json({error:"Missing tool name"},400);let W=await Q.req.json(),F=await Qd$(K,W,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Yd$);let X=new H1;X.use("*",OK({mountPath:"/api/dev-assets"})),X.route("/",lP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Kd$=D(()=>{w8();_51();dP0();Gd$()});import{sql as BN6}from"kysely";import{randomUUID as Wd$}from"crypto";import{z as DN6}from"zod";async function wN6($){let Z=new Date().toISOString(),X=Wd$(),Q=S8.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((K)=>K.or([K("publisher","is",null),K("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((K)=>({id:Wd$(),event_id:X,subscription_id:K.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await BN6`SELECT
2869
2869
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.267.3",
3
+ "version": "4.267.4",
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 B,b as L,j as r}from"./index-DA4GvIH1.js";import{I as A}from"./input-mCGewv2v.js";import{L as F}from"./label-CfUIXHZV.js";import{S as R,a as V,b as z,c as O,d as D}from"./select-BRB3pW9I.js";import{T as G}from"./textarea-DwUjne8W.js";import{G as J,V as M,K as X,X as $,a5 as q}from"./index-CPMUOx8C.js";import{s as P}from"./primitives-CTuL-CvR.js";import{u as H}from"./use-autosave-CNVIhuKT.js";import"./Check-Bfvdx2ik.js";import"./ChevronDown-0qmbsAkY.js";import"./ChevronUp-D42_kHn4.js";import"./ArrowUp-BrS4Rai7.js";import"./chat-context-B-9p38Q_.js";import"./tab-id-CZBxojRy.js";import"./dialog-yiuyCgNR.js";import"./Copy01-CrJpdmy5.js";import"./Download01-CDWU_q-0.js";import"./session-runtime-wVXsCwcJ.js";import"./hooks-BU62GmGW.js";import"./use-mcp-client-UK_R4eUU.js";import"./constants-z9Iog-sb.js";import"./auth-BYA0R9Vb.js";import"./decopilot-sse-pool-CiQE8QmC.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-CO3jlvM6.js";import"./use-ai-providers-F14Tyadc.js";import"./use-decopilot-events-PHbUy34e.js";import"./use-organization-settings-JqwFMPk3.js";import"./automation-runs-Dtyh45F2.js";import"./agent-icon-drm7xsNM.js";import"./AlertCircle-BcdDh0hz.js";import"./Tool01-743jYVu0.js";import"./ArrowLeft-CGGYePfw.js";import"./Tool02-CCf6bwZK.js";import"./XCircle--dgys6sD.js";import"./TrendUp01-I3-LwGzZ.js";import"./ZapSquare-DwbiUUQQ.js";import"./Users03-BbXZB0zF.js";import"./UserSquare-CW1QcNFe.js";import"./CheckCircle-uXNxSKut.js";import"./ChevronRight-B1AfGmeS.js";import"./ChevronSelectorVertical-DuKKMTky.js";import"./DotsVertical-CIPB-iI8.js";import"./Stars02-D5pzhyZX.js";import"./CreditCard01-DLAX1s9j.js";import"./Settings02-BZXv3kRz.js";import"./Eye-4JobAreO.js";import"./FilterLines-D0gOjH6D.js";import"./Share07-DhZ7I-dT.js";import"./Globe01-DWZPBM__.js";import"./Globe04-aFzXw__x.js";import"./SwitchHorizontal01-BqNl2GeI.js";import"./HardDrive-bDbzmqUc.js";import"./Key01-fLHNrpdq.js";import"./LinkExternal01-DqtMHDDi.js";import"./LockUnlocked01-DNfF0L7z.js";import"./LogOut01-DB9WNWtM.js";import"./Monitor01-CPJAw97Q.js";import"./Sun-CiH0pj6r.js";import"./Palette-4skw_USQ.js";import"./Play-CWeo_hbf.js";import"./Plus-Cseuwnnd.js";import"./SearchLg-DEORVesj.js";import"./SearchMd-CxSMkM3k.js";import"./Shield01-DrTIcT7X.js";import"./Stars01-CCWFWATC.js";import"./Trash01-CgEFzUXA.js";import"./Upload01-C-pU9zTU.js";import"./User01-BqwNtcM7.js";import"./Users01-B64C_0FV.js";import"./XClose-JH86J7VP.js";import"./Zap-CVZJSIBX.js";import"./useInfiniteQuery-HTKud923.js";import"./use-infinite-scroll-CYdD7aaz.js";import"./use-connection-dJEMh1Ma.js";import"./table-DDNXuXqv.js";import"./empty-state-DgDNRffS.js";import"./use-members-CQrpZKUc.js";import"./use-org-auth-client-Dm2sh-tO.js";import"./use-clock-tick-DpyzPuOk.js";import"./use-automations-BhcRV0eF.js";import"./useSuspenseInfiniteQuery-6tBIjZBF.js";import"./avatar-CkFV8tLV.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-BUUIt1iY.js";import"./monaco-editor-DzGpGeuY.js";import"./spinner-DwhPHef0.js";import"./types-B_deqNV8.js";import"./shell-layout-JBLFncek.js";import"./required-auth-layout-hgQfSmw1.js";import"./use-org-sso-Dj_67NiL.js";import"./integration-icon-DIeqxz15.js";import"./use-navigate-to-agent-DgxFeesG.js";import"./reusable-new-chat-CzvRy4Pe.js";import"./chart-y76bgXEr.js";import"./index-BdNM9AWp.js";import"./form-CozwaOgf.js";import"./file-type-icon-D6DYI6TQ.js";import"./drawer-DdgCrqAo.js";import"./collection-search-Kw8PMMwp.js";import"./tabs-Bq3FElXc.js";import"./toggle-group-CFj2LLpV.js";import"./use-commerce-diagnostic-fO8dNgFK.js";import"./popover-CxXb9Wev.js";import"./self-tool-result-EWKyE7d5.js";import"./alert-dialog-Kwx9Q8fe.js";import"./extract-connection-data-CbBhthf3.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-BIoxf7WB.js";import"./authenticate-and-persist-oauth-BvKOscBW.js";import"./mcp-oauth-1kWtS81a.js";import"./track-Bru1znfk.js";import"./toolbar-u2rKwLdA.js";import"./github-repo-picker-BqntcX6E.js";import"./use-mcp-tools-CVWt29Ea.js";import"./agent-capabilities-C4tLW0Za.js";import"./connection-card-B7j_HsTi.js";import"./use-registry-connections-C4J8Ts5g.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-DmvMeozI.js";import"./collection-tabs-Dz0xJ8vR.js";import"./badge-C21ERplD.js";import"./command-Ca4MVtqp.js";import"./index-qo5S7ezf.js";import"./select-model-BWN7PCXS.js";import"./checkbox-BzEgwaAv.js";import"./ai-providers-logos-DD3qZ33J.js";import"./cards-B5vzwaDX.js";import"./dropdown-menu-DR_2DqIV.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-C6bpaJqn.js";import"./use-file-configs-Din5gVpi.js";import"./pt-BR-CLy76QW2.js";import"./switch-Cvpg9JL7.js";import"./use-debounced-autosave-CtJSXjsz.js";import"./search-input-N8fM-Vkc.js";import"./index-CCizJglx.js";import"./use-secrets--O-fG_os.js";import"./AreaChart-B92MGo-1.js";import"./use-task-board-items-BZlGKz0f.js";import"./sprints-CMvto5O3.js";import"./get-initials-D-f_fDFw.js";import"./use-tags-2q3I0Uy6.js";import"./task-key-BCHdFiOO.js";import"./automation-list-row-B-A9DDKq.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-CyqX1r09.js";const Q={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},U={authors:"sandbox.recordEditor.titleAuthor"};function Gr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=J(h);let g;t[4]!==f||t[5]!==a?(g=M(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:$(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=H(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=U[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(X,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=Q[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(q,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(V,{id:o.key,className:"h-10 w-full",children:r.jsx(z,{placeholder:i(o.labelKey)})}),r.jsx(O,{children:(o.options??[]).map(m=>r.jsx(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(G,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:P(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Gr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-CB6UK6Z1.js","assets/index-DA4GvIH1.js","assets/index-CpeFt8Ii.css","assets/Tool02-CCf6bwZK.js","assets/CheckCircle-uXNxSKut.js","assets/Settings02-BZXv3kRz.js","assets/use-mcp-client-UK_R4eUU.js","assets/constants-z9Iog-sb.js","assets/auth-BYA0R9Vb.js","assets/useInfiniteQuery-HTKud923.js","assets/use-infinite-scroll-CYdD7aaz.js","assets/badge-C21ERplD.js","assets/input-mCGewv2v.js","assets/dropdown-menu-DR_2DqIV.js","assets/Check-Bfvdx2ik.js","assets/ChevronRight-B1AfGmeS.js","assets/DotsVertical-CIPB-iI8.js","assets/table-DDNXuXqv.js","assets/toggle-group-CFj2LLpV.js","assets/use-view-mode-BISgDYkE.js","assets/FilterLines-D0gOjH6D.js","assets/Globe01-DWZPBM__.js","assets/SearchMd-CxSMkM3k.js","assets/dialog-yiuyCgNR.js","assets/AlertCircle-BcdDh0hz.js","assets/Download01-CDWU_q-0.js","assets/Upload01-C-pU9zTU.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-Kwx9Q8fe.js","assets/Trash01-CgEFzUXA.js","assets/label-CfUIXHZV.js","assets/select-BRB3pW9I.js","assets/ChevronDown-0qmbsAkY.js","assets/ChevronUp-D42_kHn4.js","assets/switch-Cvpg9JL7.js","assets/textarea-DwUjne8W.js","assets/ArrowLeft-CGGYePfw.js","assets/XCircle--dgys6sD.js","assets/checkbox-BzEgwaAv.js","assets/Eye-4JobAreO.js","assets/LinkExternal01-DqtMHDDi.js","assets/use-copy-BUUIt1iY.js","assets/Copy01-CrJpdmy5.js","assets/Key01-fLHNrpdq.js","assets/Plus-Cseuwnnd.js","assets/mcp-oauth-1kWtS81a.js","assets/Play-CWeo_hbf.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,bh as o}from"./index-DA4GvIH1.js";import{R as n}from"./require-capability-C4ZsZrKq.js";import"./access-gate-Cq9u67Na.js";import"./capability-load-error-MbdVMFjA.js";const c=s.lazy(()=>o(()=>import("./registry-layout-CB6UK6Z1.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-CB6UK6Z1.js","assets/index-DA4GvIH1.js","assets/index-CpeFt8Ii.css","assets/Tool02-CCf6bwZK.js","assets/CheckCircle-uXNxSKut.js","assets/Settings02-BZXv3kRz.js","assets/use-mcp-client-UK_R4eUU.js","assets/constants-z9Iog-sb.js","assets/auth-BYA0R9Vb.js","assets/useInfiniteQuery-HTKud923.js","assets/use-infinite-scroll-CYdD7aaz.js","assets/badge-C21ERplD.js","assets/input-mCGewv2v.js","assets/dropdown-menu-DR_2DqIV.js","assets/Check-Bfvdx2ik.js","assets/ChevronRight-B1AfGmeS.js","assets/DotsVertical-CIPB-iI8.js","assets/table-DDNXuXqv.js","assets/toggle-group-CFj2LLpV.js","assets/use-view-mode-BISgDYkE.js","assets/FilterLines-D0gOjH6D.js","assets/Globe01-DWZPBM__.js","assets/SearchMd-CxSMkM3k.js","assets/dialog-yiuyCgNR.js","assets/AlertCircle-BcdDh0hz.js","assets/Download01-CDWU_q-0.js","assets/Upload01-C-pU9zTU.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-Kwx9Q8fe.js","assets/Trash01-CgEFzUXA.js","assets/label-CfUIXHZV.js","assets/select-BRB3pW9I.js","assets/ChevronDown-0qmbsAkY.js","assets/ChevronUp-D42_kHn4.js","assets/switch-Cvpg9JL7.js","assets/textarea-DwUjne8W.js","assets/ArrowLeft-CGGYePfw.js","assets/XCircle--dgys6sD.js","assets/checkbox-BzEgwaAv.js","assets/Eye-4JobAreO.js","assets/LinkExternal01-DqtMHDDi.js","assets/use-copy-BUUIt1iY.js","assets/Copy01-CrJpdmy5.js","assets/Key01-fLHNrpdq.js","assets/Plus-Cseuwnnd.js","assets/mcp-oauth-1kWtS81a.js","assets/Play-CWeo_hbf.js"])))=>i.map(i=>d[i]);
2
- import{c as n,d as c,f as m,j as t,k as f,r as l,bh as p}from"./index-DA4GvIH1.js";import{R as u}from"./require-capability-C4ZsZrKq.js";import"./access-gate-Cq9u67Na.js";import"./capability-load-error-MbdVMFjA.js";const g=l.lazy(()=>p(()=>import("./registry-layout-CB6UK6Z1.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{h as default};
@@ -1 +0,0 @@
1
- import{I as u}from"./use-infinite-scroll-CYdD7aaz.js";import{eS as i}from"./index-DA4GvIH1.js";function t(e,r){return i(e,u,r)}export{t as u};
@@ -1 +0,0 @@
1
- import{I as s}from"./use-infinite-scroll-CYdD7aaz.js";import{eS as u,bH as n}from"./index-DA4GvIH1.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};