decocms 4.230.3 → 4.230.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 (232) hide show
  1. package/dist/client/assets/{AlertCircle-Bu6ExGrY.js → AlertCircle-D24NZ6JX.js} +1 -1
  2. package/dist/client/assets/{AreaChart-j_Vn5l3t.js → AreaChart-Df7T0xX9.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BMaVor0Q.js → ArrowLeft-ClSZrRnE.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-CvqQDWHs.js → ArrowUp-D9kc1U6Q.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-Bzvhg_-n.js → ArrowUpRight-Yo-b5sty.js} +1 -1
  6. package/dist/client/assets/{Check-VVebrzt2.js → Check-DVNPIKeF.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-BBu4m_da.js → CheckCircle-DO3PhkCs.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-EfAMK9pT.js → ChevronDown-Cum8U97F.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-D7aN5bxd.js → ChevronRight-D_F_Pz6f.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-DFedhyl_.js → ChevronUp-7kUtzNMs.js} +1 -1
  11. package/dist/client/assets/{Copy01-DrBVpl3W.js → Copy01-DSJE-8XG.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-BKaJJ4m_.js → CpuChip01-DS5GiiRr.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-CEtuQD__.js → CreditCard01-CP8hfvYu.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-Cxyf682U.js → DotsVertical-C-XIkqp6.js} +1 -1
  15. package/dist/client/assets/{Eye-D6T7hv17.js → Eye-DfZwLLI4.js} +1 -1
  16. package/dist/client/assets/{FilterLines-D4tHcLuh.js → FilterLines-Df16keTM.js} +1 -1
  17. package/dist/client/assets/{Globe01-Cc6cPcFn.js → Globe01-CiZ6K50D.js} +1 -1
  18. package/dist/client/assets/{Globe04-ByCMDkAk.js → Globe04-BrjrYJgq.js} +1 -1
  19. package/dist/client/assets/{HardDrive-C3F3ymDY.js → HardDrive-DnMTXufl.js} +1 -1
  20. package/dist/client/assets/{Key01-CWx0IZ8t.js → Key01-CNYQAmjj.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-DDxzPTXc.js → LayoutLeft-Cp9do-jz.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-D28p3w5h.js → LinkExternal01-BbTXXd3j.js} +1 -1
  23. package/dist/client/assets/{LogOut01-Dc7EB7P7.js → LogOut01-D3edsFbW.js} +1 -1
  24. package/dist/client/assets/{Monitor01-DpVvm_dG.js → Monitor01-BpTHnMS3.js} +1 -1
  25. package/dist/client/assets/{Palette-CSIkZM9e.js → Palette-8dmJHRB1.js} +1 -1
  26. package/dist/client/assets/{Play-BKcW5Ltd.js → Play-Cc_YB2O_.js} +1 -1
  27. package/dist/client/assets/{Plus-lEDj1tD4.js → Plus-SpUv_Rja.js} +1 -1
  28. package/dist/client/assets/{SearchLg-BImfCif8.js → SearchLg-BuSZNu0R.js} +1 -1
  29. package/dist/client/assets/{SearchMd-Bp_SZoFd.js → SearchMd-DtiJ2SSN.js} +1 -1
  30. package/dist/client/assets/{Settings02-Ddmj-_rX.js → Settings02-By8r6TUi.js} +1 -1
  31. package/dist/client/assets/{Share07-Bz9filIw.js → Share07-Bo9wbkgC.js} +1 -1
  32. package/dist/client/assets/{Shield01-CalwrQWc.js → Shield01-CSwAKW6P.js} +1 -1
  33. package/dist/client/assets/{Star01-DdVllepq.js → Star01-C2x6hDQ7.js} +1 -1
  34. package/dist/client/assets/{Stars01-BEc8Zx1b.js → Stars01-DwAiRyu0.js} +1 -1
  35. package/dist/client/assets/{Stars02-BaCAMNCE.js → Stars02-DaZ3j-aR.js} +1 -1
  36. package/dist/client/assets/{Sun-BW6MD8X_.js → Sun-DDnC2msh.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-B0jQBh1u.js → SwitchHorizontal01-BGM7r3Iy.js} +1 -1
  38. package/dist/client/assets/{Tool01-DBwwsjlM.js → Tool01-fl-TLnCB.js} +1 -1
  39. package/dist/client/assets/{Tool02-BDvmwXON.js → Tool02-Dqktxztf.js} +1 -1
  40. package/dist/client/assets/{Trash01-Bw199Lku.js → Trash01-D9H4R3uX.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-BfZ8vdoS.js → TrendUp01-Cmr3WLDv.js} +1 -1
  42. package/dist/client/assets/{Upload01-OmSaIQJN.js → Upload01-DZ_c6TAy.js} +1 -1
  43. package/dist/client/assets/{User01-D31Gwa2x.js → User01-CYUgcf3V.js} +1 -1
  44. package/dist/client/assets/{Users01-CSb_wkLT.js → Users01-NeRTgKj0.js} +1 -1
  45. package/dist/client/assets/{Users03-ai5cefFL.js → Users03-D1XEEN16.js} +1 -1
  46. package/dist/client/assets/{X-C2d4nrvL.js → X-n0jXBeww.js} +1 -1
  47. package/dist/client/assets/{XCircle-ClA1zHL2.js → XCircle-BcNBYINC.js} +1 -1
  48. package/dist/client/assets/{XClose-BgxeMnjI.js → XClose-Cm8k6lmk.js} +1 -1
  49. package/dist/client/assets/{YAxis-Ik9cr_dn.js → YAxis-CdaxuQqA.js} +1 -1
  50. package/dist/client/assets/{Zap-S0uNkay8.js → Zap-Bh6p9Leq.js} +1 -1
  51. package/dist/client/assets/{ZapSquare-BMZtVSrf.js → ZapSquare-0gp8rcyd.js} +1 -1
  52. package/dist/client/assets/{access-gate-C0MvIMnD.js → access-gate-ChRHPxMb.js} +1 -1
  53. package/dist/client/assets/{agent-icon-DlY3-evM.js → agent-icon-CQnuWd-1.js} +1 -1
  54. package/dist/client/assets/{agents-list-BBwiFDAo.js → agents-list-CAm7qZXc.js} +1 -1
  55. package/dist/client/assets/{ai-providers-W5DTA57b.js → ai-providers-bPPlP3lc.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-GuGVjqJ3.js → alert-dialog-Br0MLuzi.js} +1 -1
  57. package/dist/client/assets/{alert-D-ckkM7h.js → alert-m_aktut6.js} +1 -1
  58. package/dist/client/assets/{api-keys-DknPmUI8.js → api-keys-0PguqXmL.js} +1 -1
  59. package/dist/client/assets/{app-editor-CFRy-_2I.js → app-editor-B8v76QMJ.js} +1 -1
  60. package/dist/client/assets/{auth-BZXTBNqo.js → auth-CLy6a0Q4.js} +1 -1
  61. package/dist/client/assets/{auth-catchall-BkuCMYUF.js → auth-catchall-CWbVrByI.js} +1 -1
  62. package/dist/client/assets/{auth-entry-CcNg4Cmy.js → auth-entry-CjNLP4BX.js} +1 -1
  63. package/dist/client/assets/{auth-split-layout-BS8NdfHY.js → auth-split-layout-CudLEqBb.js} +1 -1
  64. package/dist/client/assets/{authenticate-and-persist-oauth-BpHQ1IZF.js → authenticate-and-persist-oauth-DPkUzRkh.js} +1 -1
  65. package/dist/client/assets/{automation-list-row-DdUXn40b.js → automation-list-row-DSifkYnG.js} +1 -1
  66. package/dist/client/assets/{automation-runs-DAYAGebQ.js → automation-runs-B614gUHd.js} +1 -1
  67. package/dist/client/assets/{automations-D-tNqPqt.js → automations-pXZ98JkB.js} +1 -1
  68. package/dist/client/assets/{avatar-C0LO_460.js → avatar-BdLqzSys.js} +1 -1
  69. package/dist/client/assets/{badge-CPggBa_r.js → badge-Ca4WNQdv.js} +1 -1
  70. package/dist/client/assets/{billing-Cz-TcpV2.js → billing-Cq6B8ave.js} +1 -1
  71. package/dist/client/assets/{block-document-Cxmz6AOT.js → block-document-C8bl3vez.js} +1 -1
  72. package/dist/client/assets/{brand-context-DKS8UmxM.js → brand-context-B0GOkkdH.js} +1 -1
  73. package/dist/client/assets/{buckets-ChTNkp_C.js → buckets-BHSlKT1V.js} +1 -1
  74. package/dist/client/assets/{bulk-category-panel-6JGCsRb7.js → bulk-category-panel-fSXgEcq2.js} +1 -1
  75. package/dist/client/assets/{capability-load-error-B_kH3Gyo.js → capability-load-error-a4GExOlu.js} +1 -1
  76. package/dist/client/assets/{card-DjhPSLpN.js → card-DdnOP2GL.js} +1 -1
  77. package/dist/client/assets/{cards-C0fcTwuf.js → cards-D67as7_0.js} +1 -1
  78. package/dist/client/assets/{category-editor-DYOD_q3-.js → category-editor-BTzFr8xe.js} +1 -1
  79. package/dist/client/assets/{chart-jxdS1qw8.js → chart-BXj7UAF9.js} +1 -1
  80. package/dist/client/assets/{chat-context-CgsLZjf8.js → chat-context-BijaIXLm.js} +1 -1
  81. package/dist/client/assets/{checkbox-DHkDg8dA.js → checkbox-BeuiINmZ.js} +1 -1
  82. package/dist/client/assets/{cli-auth-success-DsRKOUtc.js → cli-auth-success-C_KQ2fRN.js} +1 -1
  83. package/dist/client/assets/{collection-detail-M8S5CsoM.js → collection-detail-Cd0f33Vj.js} +1 -1
  84. package/dist/client/assets/{collection-display-button-DNIaXmZQ.js → collection-display-button-BXeUC5O1.js} +1 -1
  85. package/dist/client/assets/{collection-search-JngJ2KYM.js → collection-search-DrDBe5Le.js} +1 -1
  86. package/dist/client/assets/{collection-table-wrapper-DxbVtOcQ.js → collection-table-wrapper-k1rwJHuk.js} +1 -1
  87. package/dist/client/assets/{collection-tabs-CoGc8WBU.js → collection-tabs-CtWVHyYQ.js} +1 -1
  88. package/dist/client/assets/{command-Dy8YUaoh.js → command-BboXbj7A.js} +1 -1
  89. package/dist/client/assets/{commerce-onboarding-Bca4_sKz.js → commerce-onboarding-D-0WZPXx.js} +1 -1
  90. package/dist/client/assets/{connect-DGVQXLNL.js → connect-Bx9gXvq2.js} +1 -1
  91. package/dist/client/assets/{connection-C1BWf2YZ.js → connection-DrwmgVAh.js} +1 -1
  92. package/dist/client/assets/{connection-card-C-ij5xJ_.js → connection-card-vSmkgw3v.js} +1 -1
  93. package/dist/client/assets/{connection-detail-D4uLqvdl.js → connection-detail-Ciuv-ikp.js} +1 -1
  94. package/dist/client/assets/{connection-form-helpers-CIwwwP2Z.js → connection-form-helpers-iOwnCGIp.js} +1 -1
  95. package/dist/client/assets/{connections-CxtQXI8q.js → connections-BRHYmnZ8.js} +1 -1
  96. package/dist/client/assets/{decopilot-sse-pool-BsJkQ-Dq.js → decopilot-sse-pool-CuiSPfAg.js} +1 -1
  97. package/dist/client/assets/{dialog-CeWauzZ9.js → dialog-BuBE8RXK.js} +1 -1
  98. package/dist/client/assets/{domain-settings-CQubhroM.js → domain-settings-Cv7hJkX5.js} +1 -1
  99. package/dist/client/assets/{drawer-DFm1ZTc4.js → drawer-Coyu4wrg.js} +1 -1
  100. package/dist/client/assets/{dropdown-menu-BSfz8AHZ.js → dropdown-menu-CmldVswF.js} +1 -1
  101. package/dist/client/assets/{empty-state-CCaNIZkK.js → empty-state-CjvTDh-9.js} +1 -1
  102. package/dist/client/assets/{extract-connection-data-C1r7iMQz.js → extract-connection-data-Cnqnhzlx.js} +1 -1
  103. package/dist/client/assets/{file-explorer-BU9VKk8z.js → file-explorer-DdVmRFoH.js} +1 -1
  104. package/dist/client/assets/{file-type-icon-B6DLjqBQ.js → file-type-icon-B_J4Ih_m.js} +1 -1
  105. package/dist/client/assets/{form-B50Gp2pz.js → form-BzYBFO9S.js} +1 -1
  106. package/dist/client/assets/{general-Bor6pjeK.js → general-DjI9kVOX.js} +1 -1
  107. package/dist/client/assets/{github-repo-picker-BMAsYdt1.js → github-repo-picker-DAvnUoUV.js} +1 -1
  108. package/dist/client/assets/{hooks-CPXE8Vtq.js → hooks-CrtcRddV.js} +1 -1
  109. package/dist/client/assets/{index-CJTKBueg.js → index-BEM6Ktlq.js} +1 -1
  110. package/dist/client/assets/{index-Bd-2J4Za.js → index-BMI69eRM.js} +1 -1
  111. package/dist/client/assets/{index-X1QDIpgh.js → index-BOkgMIN6.js} +1 -1
  112. package/dist/client/assets/{index-C4Ven5LQ.js → index-BfVYqptD.js} +1 -1
  113. package/dist/client/assets/{index-kg-ZSOgA.js → index-Bq6VcTDr.js} +3 -3
  114. package/dist/client/assets/{index-Bh_Crwca.js → index-DOoH-GO6.js} +7 -7
  115. package/dist/client/assets/{index-DMesOYPd.js → index-DZ9lreXJ.js} +1 -1
  116. package/dist/client/assets/{index-RS3QupV9.js → index-DfLIoKd6.js} +1 -1
  117. package/dist/client/assets/{index-Dr7uuusf.js → index-Q0sM_0i9.js} +1 -1
  118. package/dist/client/assets/{index-Dd7D2VjQ.js → index-gUJ2hXhs.js} +1 -1
  119. package/dist/client/assets/{index-redirect-jbgZtBF-.js → index-redirect-B8eefvuA.js} +1 -1
  120. package/dist/client/assets/{infra-billing-CfwywWfv.js → infra-billing-DLRyDsZM.js} +1 -1
  121. package/dist/client/assets/{input-BnmfZog1.js → input-1vmmmkuD.js} +1 -1
  122. package/dist/client/assets/{integration-icon-CAW-qeo0.js → integration-icon-CNCw3lse.js} +1 -1
  123. package/dist/client/assets/{invite-member-dialog-RnnIPFGE.js → invite-member-dialog-BYYJe56n.js} +1 -1
  124. package/dist/client/assets/{label-OtmYS0fe.js → label-Bhq8k_-e.js} +1 -1
  125. package/dist/client/assets/{layout-BbaMYxBG.js → layout-BIT-cIL8.js} +1 -1
  126. package/dist/client/assets/{login-CEpRchkM.js → login-DGGQBeBj.js} +1 -1
  127. package/dist/client/assets/{mcp-oauth-pn21A40G.js → mcp-oauth-DmeRjgyR.js} +1 -1
  128. package/dist/client/assets/{members-6FjP_22b.js → members-BNcdwBCK.js} +1 -1
  129. package/dist/client/assets/{monaco-editor-CqNIzGE7.js → monaco-editor-CAjD4Tf5.js} +1 -1
  130. package/dist/client/assets/{monitoring-stats-row-CLTWTuQd.js → monitoring-stats-row-C3oFFf_q.js} +1 -1
  131. package/dist/client/assets/{multi-select-C7WKuKHJ.js → multi-select-C970vnvi.js} +1 -1
  132. package/dist/client/assets/{oauth-callback-C9Ev3S5D.js → oauth-callback-DqEQK--r.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-ai-provider-D33xaYKH.js → oauth-callback-ai-provider-C-HmbytH.js} +1 -1
  134. package/dist/client/assets/{onboarding-C6SvhSYs.js → onboarding-CZEfmobz.js} +1 -1
  135. package/dist/client/assets/{org-layout-BikI8aeC.js → org-layout-DxEFIO5-.js} +1 -1
  136. package/dist/client/assets/{organization-choice-B9LTF1LL.js → organization-choice-DGMzp_CZ.js} +1 -1
  137. package/dist/client/assets/{orgs-nwR--7s2.js → orgs-Dv3k6Vmy.js} +1 -1
  138. package/dist/client/assets/{page-seo-form-DeX63aDK.js → page-seo-form-BzXUzXrC.js} +1 -1
  139. package/dist/client/assets/{popover-DI-bB5ra.js → popover-Dgsvl9u9.js} +1 -1
  140. package/dist/client/assets/{post-editor-DZkFBVWJ.js → post-editor-BrUt7Wcm.js} +1 -1
  141. package/dist/client/assets/{primitives-BkBW30Z6.js → primitives-BWRFRtBL.js} +1 -1
  142. package/dist/client/assets/{profile-CwMkSgYt.js → profile-B3sEwiKK.js} +1 -1
  143. package/dist/client/assets/{project-app-view-DpP1Pxgj.js → project-app-view-Cxw9MGHS.js} +1 -1
  144. package/dist/client/assets/record-editor-DYBDin-q.js +1 -0
  145. package/dist/client/assets/{redirect-editor-BNUsBE-O.js → redirect-editor-Hfol_hze.js} +1 -1
  146. package/dist/client/assets/registry-DLTPriVD.js +2 -0
  147. package/dist/client/assets/{registry-layout-CgBRMI3h.js → registry-layout-Cc07RWpe.js} +1 -1
  148. package/dist/client/assets/{reports-DCjxZkZj.js → reports-BfjjK4-B.js} +1 -1
  149. package/dist/client/assets/{require-capability-Dq9ZpVA3.js → require-capability-BUkjJU1v.js} +1 -1
  150. package/dist/client/assets/{required-auth-layout-CBewHqYZ.js → required-auth-layout-Bp_FJmEJ.js} +1 -1
  151. package/dist/client/assets/{reset-password-CSmaVn2Z.js → reset-password-1lWiL3NM.js} +1 -1
  152. package/dist/client/assets/{roles-D_VqTIKy.js → roles-Cze3QnU7.js} +1 -1
  153. package/dist/client/assets/{search-input-Bf9e_uzs.js → search-input-BpFmjH6K.js} +1 -1
  154. package/dist/client/assets/{secrets-C6tn9bJ-.js → secrets-D13Kil-S.js} +1 -1
  155. package/dist/client/assets/{sections-editor-Deaqxa0h.js → sections-editor-BJeumTCx.js} +1 -1
  156. package/dist/client/assets/{select-model-CDmuWdr2.js → select-model-Ca6dO-aJ.js} +1 -1
  157. package/dist/client/assets/{select-BxkbK2eN.js → select-tWo5VlMc.js} +1 -1
  158. package/dist/client/assets/{self-tool-result-DZ5xhqTQ.js → self-tool-result-BOQw_tpA.js} +1 -1
  159. package/dist/client/assets/{seo-editor-DNqk_zlq.js → seo-editor-DmsAd4Xb.js} +1 -1
  160. package/dist/client/assets/{settings-layout-jsf-ZRBw.js → settings-layout-fcAYterg.js} +1 -1
  161. package/dist/client/assets/{settings-section-CDR865dm.js → settings-section-BEh0gl7O.js} +1 -1
  162. package/dist/client/assets/{shell-controls-CZ1W-7sn.js → shell-controls-D10LX9wJ.js} +1 -1
  163. package/dist/client/assets/{shell-layout-DE2uZR8l.js → shell-layout-H--bHJtv.js} +1 -1
  164. package/dist/client/assets/{sidebar-CgwL929s.js → sidebar-lEN4X0np.js} +1 -1
  165. package/dist/client/assets/{skeleton-DU9H9Rn8.js → skeleton-CxyBlRWq.js} +1 -1
  166. package/dist/client/assets/{spinner-bBcAZ-j4.js → spinner-COGMbDan.js} +1 -1
  167. package/dist/client/assets/{sso-C2_octZW.js → sso-j8yOVSfF.js} +1 -1
  168. package/dist/client/assets/store-registry-bLfJBpwL.js +2 -0
  169. package/dist/client/assets/{store-DwzX01Jy.js → store-v5iXMLHs.js} +1 -1
  170. package/dist/client/assets/{studio-tools-BmlJiF0x.js → studio-tools-BTpwQvwy.js} +1 -1
  171. package/dist/client/assets/{switch-C7yO858u.js → switch-DNRtZDbC.js} +1 -1
  172. package/dist/client/assets/{synced-repos-B18gp7ZA.js → synced-repos-CkbRcXeB.js} +1 -1
  173. package/dist/client/assets/{tab-id-D3yGqatB.js → tab-id-CqBvZfSB.js} +1 -1
  174. package/dist/client/assets/{table-CnNTL73E.js → table-C8RWKWiJ.js} +1 -1
  175. package/dist/client/assets/{tabs-CDW2HpKx.js → tabs-DzT0VTLd.js} +1 -1
  176. package/dist/client/assets/{textarea-BP7rD9j-.js → textarea-CQKL--HF.js} +1 -1
  177. package/dist/client/assets/{toggle-group-DA6H7I5f.js → toggle-group-iqvBivLq.js} +1 -1
  178. package/dist/client/assets/{toolbar-DptBHkfg.js → toolbar-FEPWtZlW.js} +1 -1
  179. package/dist/client/assets/{tooltip-DZJqdNvl.js → tooltip-BIUlyaT-.js} +1 -1
  180. package/dist/client/assets/{track-DxLXF40a.js → track-B98wUJgX.js} +1 -1
  181. package/dist/client/assets/{types-BLNmyFj6.js → types-C621MXjZ.js} +1 -1
  182. package/dist/client/assets/{use-ai-providers-DKF_51f7.js → use-ai-providers-B3OLr_7n.js} +1 -1
  183. package/dist/client/assets/{use-api-keys-Czup1KZK.js → use-api-keys-DSNzLtIK.js} +1 -1
  184. package/dist/client/assets/{use-automations-Dpx2oVoi.js → use-automations-C2ph3BF9.js} +1 -1
  185. package/dist/client/assets/{use-autosave-UZvYvwiP.js → use-autosave-f1RuEjsj.js} +1 -1
  186. package/dist/client/assets/{use-capability-COHQ5Lgh.js → use-capability-BDE9Sdwp.js} +1 -1
  187. package/dist/client/assets/{use-clock-tick-DSMY7npz.js → use-clock-tick-DJawD0B9.js} +1 -1
  188. package/dist/client/assets/{use-commerce-diagnostic-DO9Cm_Dg.js → use-commerce-diagnostic-DOS4QNYC.js} +1 -1
  189. package/dist/client/assets/{use-connection-Bfh8ZrSI.js → use-connection-BTpeO5DY.js} +1 -1
  190. package/dist/client/assets/{use-copy-DprVKicO.js → use-copy-iSR03vu2.js} +1 -1
  191. package/dist/client/assets/{use-create-virtual-mcp-CA-IadO2.js → use-create-virtual-mcp-0zTem60P.js} +1 -1
  192. package/dist/client/assets/{use-debounced-autosave-DTmY2t04.js → use-debounced-autosave-CXyQyws-.js} +1 -1
  193. package/dist/client/assets/{use-debounced-value-BFV6Wfmd.js → use-debounced-value-B2L9pP26.js} +1 -1
  194. package/dist/client/assets/{use-decopilot-events-DV0Z4Daq.js → use-decopilot-events-BEkepYaX.js} +1 -1
  195. package/dist/client/assets/{use-delete-connection-CEt39ndP.js → use-delete-connection-DL3PAt8k.js} +1 -1
  196. package/dist/client/assets/{use-deployment-admin-Dxr3TAWo.js → use-deployment-admin-BMsMcrIG.js} +1 -1
  197. package/dist/client/assets/{use-file-configs-CRHRg3Zc.js → use-file-configs-B5G3IJYE.js} +1 -1
  198. package/dist/client/assets/{use-infinite-scroll-h6ZXByHB.js → use-infinite-scroll-BqE_eY64.js} +1 -1
  199. package/dist/client/assets/{use-infra-billing-DpAiy2ec.js → use-infra-billing-BXLGyrFz.js} +1 -1
  200. package/dist/client/assets/{use-join-requests-Bv8IKVIq.js → use-join-requests-BkA7hcIc.js} +1 -1
  201. package/dist/client/assets/{use-mcp-client-EDB_37py.js → use-mcp-client-WnKNmVwt.js} +1 -1
  202. package/dist/client/assets/{use-mcp-tools-z_IP50QU.js → use-mcp-tools-DYHiKata.js} +1 -1
  203. package/dist/client/assets/{use-members-D4_18Dmo.js → use-members-D9X5lUWg.js} +1 -1
  204. package/dist/client/assets/{use-mobile-VYD32-4d.js → use-mobile-D1gX1FK-.js} +1 -1
  205. package/dist/client/assets/{use-navigate-to-agent-7p-eM9UE.js → use-navigate-to-agent-FaoHwIlm.js} +1 -1
  206. package/dist/client/assets/{use-open-billing-url-t7sDR_RF.js → use-open-billing-url-8coHWDFM.js} +1 -1
  207. package/dist/client/assets/{use-org-auth-client-Ddeyd0SK.js → use-org-auth-client-D6PZ3CAF.js} +1 -1
  208. package/dist/client/assets/{use-org-sso-Bn41W4kR.js → use-org-sso-B1hqNO9p.js} +1 -1
  209. package/dist/client/assets/{use-organization-roles-LmRXyzdK.js → use-organization-roles-CjOq_dr5.js} +1 -1
  210. package/dist/client/assets/{use-organization-settings-DHE23jmp.js → use-organization-settings-CwUg_Aat.js} +1 -1
  211. package/dist/client/assets/{use-registry-connections-ikmWVUtO.js → use-registry-connections-D5EbuWQu.js} +1 -1
  212. package/dist/client/assets/{use-secrets-C8b74Zmr.js → use-secrets-C-l2oRKq.js} +1 -1
  213. package/dist/client/assets/{use-section-preview-base-CqpGs8DG.js → use-section-preview-base-PwwtfHZm.js} +1 -1
  214. package/dist/client/assets/{use-status-sounds-BFAxTG8w.js → use-status-sounds-CJLXZaqg.js} +1 -1
  215. package/dist/client/assets/{use-tags-vcnhMois.js → use-tags-Tqn--kyL.js} +1 -1
  216. package/dist/client/assets/{use-view-mode-B5ly5ydP.js → use-view-mode-Cscqpbmo.js} +1 -1
  217. package/dist/client/assets/{use-virtual-mcp-DHXF-Pgh.js → use-virtual-mcp-Cpfnf8iu.js} +1 -1
  218. package/dist/client/assets/useInfiniteQuery-nUvwpEZ0.js +1 -0
  219. package/dist/client/assets/{useRouterState-hACiP0kP.js → useRouterState-lmuJjBkR.js} +1 -1
  220. package/dist/client/assets/useSuspenseInfiniteQuery-ZEBAbSvk.js +1 -0
  221. package/dist/client/assets/{users-Bc5jgwrz.js → users-CGpRrOXR.js} +1 -1
  222. package/dist/client/assets/{variant-calendar-y3NzHsoA.js → variant-calendar-B3cUFOkg.js} +1 -1
  223. package/dist/client/assets/{view-mode-toggle-CYceKIti.js → view-mode-toggle-DT-NlPdq.js} +1 -1
  224. package/dist/client/index.html +1 -1
  225. package/dist/server/cli.js +1 -1
  226. package/dist/server/server.js +1 -1
  227. package/package.json +1 -1
  228. package/dist/client/assets/record-editor-D1-sKCvC.js +0 -1
  229. package/dist/client/assets/registry-EdMrdjgS.js +0 -2
  230. package/dist/client/assets/store-registry-DenmkSS6.js +0 -2
  231. package/dist/client/assets/useInfiniteQuery-D-JYd4d5.js +0 -1
  232. package/dist/client/assets/useSuspenseInfiniteQuery-C_DdxgOB.js +0 -1
@@ -2761,7 +2761,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2761
2761
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2762
2762
 
2763
2763
  Respond with the structured verdict and a short reason.`,Ox$;var wx$=w(()=>{C4();XB();M51();e76=k51.object({requiresReview:k51.boolean().describe("true if the changes should go through pull-request review"),reason:k51.string().describe("One short sentence explaining the decision (max ~120 chars)")});Ox$={requiresReview:!1,reason:""}});function Dx$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Lx$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Ex$($){let Z=Ih.get($);if(!Z)return;Ih.delete($),S51-=Z.bytes}function GX6($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Ex$($),Q>YX6)return;Ih.set($,{etag:Z,body:X,bytes:Q}),S51+=Q;while(S51>QX6||Ih.size>XX6){let Y=Ih.keys().next().value;if(Y===void 0)break;Ex$(Y)}}function jx$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,F){let N=`${Dx$()}${K}`,U=Lx$(W,K)?Ih.get(N):void 0,O=await fetch(N,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&O.status===304)return{status:200,json:U.body};if(!O.ok&&!F?.allow?.includes(O.status)){let D=await O.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new C6(O.status,W,K,L)}let B=O.status===204?void 0:await O.json();if(O.status===200&&Lx$(W,K)){let D=O.headers.get("etag");if(D)GX6(N,D,B)}return{status:O.status,json:B}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${W_(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${W_(W)}`,H=await fetch(`${Dx$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let F=await H.text().catch(()=>"");throw new C6(H.status,"GET",K,F.slice(0,300))}if(!H.body)throw new C6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new C6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new C6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:F}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return F.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${W_(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:F,json:N}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return F===204?null:N?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:F}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:F.number,html_url:F.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),F=H[0];return F?{number:F.number,html_url:F.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${W_(W)}...${W_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${W_(W)}...${W_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((F)=>({filename:F.filename,status:F.status,sha:F.sha,...F.previous_filename?{previousFilename:F.previous_filename}:{}}))}}}}function W_($){return $.split("/").map(encodeURIComponent).join("/")}var XX6=512,QX6=8388608,YX6=262144,Ih,S51=0,C6;var K_=w(()=>{Ih=new Map;C6=class C6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function $P0($,Z,X){if(!X.connectionId)throw new C6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new C6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await JX6($,Q);if(!Y)throw new C6(401,"AUTH","connection",_Z);return jx$({owner:X.owner,repo:X.name,accessToken:Y})}async function JX6($,Z){if(T5(Z)?.sourceConnectionId)return Ax($,Z);return(await bY({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new q6($.db,$.vault)})).accessToken}var V51=w(()=>{zQ();V90();P3();kY();K_()});function WX6($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function ZP0($){if(WX6($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function qh($){try{return decodeURIComponent($)}catch{return $}}function C51($){return ZP0($),encodeURIComponent($)}function _r($){let Z=$.map((G)=>({file:G,name:`${G.stem}.json`})).sort((G,J)=>G.name<J.name?-1:G.name>J.name?1:0),X=[],Q="{",Y=!0;for(let{file:G}of Z){let J=G.content.trim();if(J.length===0)continue;try{JSON.parse(J)}catch(W){X.push({key:qh(G.stem),stem:G.stem,error:W instanceof Error?W.message:String(W)});continue}if(!Y)Q+=",";Y=!1,Q+=`${JSON.stringify(qh(G.stem))}:${J}`}return{decofile:`${Q}}`,skipped:X}}var zx$=()=>{};var XP0=w(()=>{zx$()});function KX6($){return $.startsWith("merged/")?"merged":"blobs"}function _51($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=KX6(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Px$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Mh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function Ax$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),F=[],N=new Set;if(Y==="merged")for(let[U,O]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||O.area!=="merged")continue;F.push(U),N.add(U),H-=O.bytes,K-=O.bytes}for(let[U,O]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||N.has(U))continue;F.push(U),N.add(U),K-=O.bytes}for(let U of F)Mh($,U);return Mh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:F}}function vr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function v51($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as kx$}from"crypto";import{mkdir as fr,readdir as HX6,readFile as FX6,rename as NX6,rm as Sx$,stat as Vx$,statfs as UX6,unlink as OX6,writeFile as BX6}from"fs/promises";import{tmpdir as wX6}from"os";import{dirname as DX6,join as R7}from"path";function kh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function jX6(){if(QP0)return QP0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?R7(wX6(),"studio-fast-preview-cache"):$;return QP0={enabled:Z!=="",root:Z,index:{maxTotalBytes:kh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Tx$),maxMergedBytes:kh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*YP0),maxEntryBytes:{blobs:kh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",YP0),merged:kh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*YP0)}},freeFloorBytes:kh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Tx$),sweepIntervalMs:kh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},QP0}function zX6(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function PX6(){if(Ww)return;Ww={hits:q$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:q$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:q$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:q$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:q$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},q$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Sh)return;$.observe(Sh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Sh.index.areaBytes.merged,{area:"merged"})}),q$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Sh)return;let Z={blobs:0,merged:0};for(let X of Sh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function AX6($){H_.hits[$]+=1,Ww?.hits.add(1,{area:$})}function Rx$($){H_.misses[$]+=1,Ww?.misses.add(1,{area:$})}function f51(){H_.evictions+=1,Ww?.evictions.add(1)}function BN($){H_.errors+=1,Ww?.errors.add(1,{op:$})}function TX6($){H_.invalidKeySkips+=1,Ww?.errors.add(1,{op:`${$}_invalid_key`})}function b51(){return Ix$??=IX6(),Ix$}async function IX6(){let $=jX6();if(!$.enabled)return null;PX6();try{await fr(R7($.root,"blobs"),{recursive:!0}),await fr(R7($.root,"merged"),{recursive:!0}),await fr(R7($.root,"tmp"),{recursive:!0})}catch{return BN("init"),null}let Z=[];try{Z=await Cx$($.root)}catch{BN("scan"),Z=[]}let X={root:$.root,index:_51(Z,$.index),cfg:$};return Sh=X,kX6(X),X}async function GP0($){try{return await HX6($)}catch{return[]}}async function Cx$($){let Z=[];for(let X of["blobs","merged"]){let Q=R7($,X);for(let Y of await GP0(Q)){let G=R7(Q,Y);for(let J of await GP0(G)){let W=R7(G,J);for(let K of await GP0(W))try{let H=await Vx$(R7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function _x$($,Z,X){if(!v51(X))return null;try{return`blobs/${vr($)}/${vr(Z)}/${X}`}catch{return null}}function vx$($,Z,X){if(!v51(X))return null;try{return`merged/${vr($)}/${vr(Z)}/${X}.json`}catch{return null}}async function fx$($,Z){try{let X=await b51();if(!X)return null;if(Z===null)return Rx$($),null;try{let Q=await FX6(R7(X.root,Z),"utf8");return Px$(X.index,Z),AX6($),Q}catch{return Rx$($),null}}catch{return BN(`get_${$}`),null}}function bx$($,Z,X){return fx$("blobs",_x$($,Z,X))}function xx$($,Z,X){return fx$("merged",vx$($,Z,X))}async function qX6($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await UX6($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function JP0($){try{await OX6($)}catch{}}async function MX6($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Mh($.index,X.value),await JP0(R7($.root,X.value)),f51()}}catch{BN("emergency_evict")}}async function yx$($,Z,X,Q){try{let Y=await b51();if(!Y)return;if(X===null){TX6(Z);return}if(!await qX6(Y)){H_.floorSkips+=1,Ww?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=Ax$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){H_.admissionRefusals+=1;return}for(let K of J.evict)await JP0(R7(Y.root,K)),f51();let W=R7(Y.root,"tmp",`stage-${kx$()}`);try{await BX6(W,Q,"utf8");let K=R7(Y.root,X);await fr(DX6(K),{recursive:!0}),await NX6(W,K)}catch(K){if(Mh(Y.index,X),await JP0(W),BN(Z),K?.code==="ENOSPC")await MX6(Y)}}catch{BN(Z)}}function WP0($,Z,X,Q){return yx$("blobs","put_blob",_x$($,Z,X),Q)}function gx$($,Z,X,Q){return yx$("merged","put_merged",vx$($,Z,X),Q)}async function hx$(){try{let $=await b51();if(!$)return null;let Z=R7($.root,"tmp",kx$());return await fr(Z,{recursive:!0}),Z}catch{return BN("make_scratch"),null}}async function ux$($){try{await Sx$($,{recursive:!0,force:!0})}catch{BN("remove_scratch")}}function kX6($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;qx$=new AbortController,I$(Math.random()*Z,{signal:qx$.signal}).then(()=>{Mx$($);let X=setInterval(()=>void Mx$($),Z);X.unref?.(),RX6=X}).catch(()=>{})}async function Mx$($){try{let Z=_51(await Cx$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Mh(Z,G),await JP0(R7($.root,G)),f51()}$.index=Z;let Q=R7($.root,"tmp"),Y=Date.now();for(let G of await GP0(Q)){let J=R7(Q,G);try{let W=await Vx$(J);if(Y-W.mtimeMs>EX6)await Sx$(J,{recursive:!0,force:!0})}catch{}}}catch{BN("sweep")}}var LX6=1024,YP0,Tx$,EX6=3600000,QP0=null,Ww=null,H_,Ix$=null,Sh=null,RX6=null,qx$=null;var cx$=w(()=>{t4();f6();YP0=1024*LX6,Tx$=1024*YP0;H_=zX6()});function lx$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as SX6,stat as VX6}from"fs/promises";import{join as dx$}from"path";function CX6($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function _X6(){return mx$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),mx$}async function ix$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new br(`invalid blocks path prefix: ${X}`);let Y=await _X6(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...CX6(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(N){throw new br("failed to spawn tar",{cause:N})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let N=(await K).trim().slice(0,500);throw new br(`tar exited with code ${H}${N?`: ${N}`:""}`)}let F=await vX6(Z,Q);if(F.length===0)throw new br(`tar extracted no ${G} members into ${Z}`);return F}async function vX6($,Z){let X=dx$($,...Z.split("/")),Q;try{Q=await SX6(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=dx$(X,G);try{if(!(await VX6(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var br,mx$=null;var nx$=w(()=>{br=class br extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as fX6}from"crypto";import{readFile as bX6}from"fs/promises";async function xr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof C6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof C6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function yX6(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return tx$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):tx$}function gX6($){ox$??=q$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),ox$.add(1,{path:$})}function hX6($){rx$??=q$.createCounter("decofile_skipped_blocks",{description:"Decofile blocks dropped from a merge for not being valid JSON",unit:"{blocks}"}),rx$.add($)}async function KP0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function HP0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function x51($,Z){let X=`${HP0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function y51($,Z){return $.filter((X)=>qh(X.stem)===Z).map((X)=>X.path).sort()}function ax$($,Z,X,Q){return WP0($,Z,X,Q)}function cX6($,Z){return fX6("sha1").update(`${uX6}:${$}:${Z??""}`).digest("hex")}async function sx$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await xr($,Z):await $.getHeadSha(Z);return lX6.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>dX6($,Y,X))}async function dX6($,Z,X){let{owner:Q,repo:Y}=$,G=cX6(Z,X),J=await xx$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=x51(K,X),F=new Map;if(await KP0(H,px$,async(D)=>{let L=await bx$(Q,Y,D.sha);if(L!==null)F.set(D.path,L)}),H.length-F.size>xX6){let D=await mX6($,Z,X,H);if(gX6(D!==null?"tarball":"blobs"),D!==null)for(let[L,E]of D)F.set(L,E)}let U=await KP0(H,px$,async(D)=>{let L=F.get(D.path);if(L!==void 0)return{stem:D.stem,content:L};let E=await $.getBlobText(D.sha);return await WP0(Q,Y,D.sha,E),{stem:D.stem,content:E}}),{decofile:O,skipped:B}=_r(U);if(B.length>0)hX6(B.length),console.warn("decofile read: dropped blocks that were not valid JSON",{repo:`${Q}/${Y}`,sha:Z,packagePath:X,blocks:B.map((D)=>D.key)});return await gx$(Q,Y,G,O),{sha:Z,decofile:O}}async function mX6($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=yX6(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await hx$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await ix$(K,W,HP0(X)),F=new Map(Q.map((U)=>[U.path,U.sha])),N=new Map;for(let U of H){let O=F.get(U.path);if(O===void 0)continue;let B=await bX6(U.diskPath,"utf8");await WP0($.owner,$.repo,O,B),N.set(U.path,B)}return N}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await ux$(W)}}var px$=12,xX6=50,tx$=134217728,ox$=null,rx$=null,uX6="3",lX6;var FP0=w(()=>{XP0();f6();cx$();K_();nx$();lX6=lx$()});async function NP0($,Z){let X=await $.getDefaultBranch(),Q=await xr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function UP0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,iX6),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((F)=>F.type==="blob").map((F)=>[F.path,F.sha])),H=await KP0(G,nX6,async(F)=>{let N=F.previousFilename??F.filename,U=F.status==="added"?void 0:K.get(N),O=U?await $.getBlobText(U):null,B=F.status==="removed"?null:await $.getBlobText(F.sha);return[F.filename,{from:O,to:B}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function ex$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof C6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new C6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await oX6($,Z,X)}async function oX6($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=pX6)throw new C6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let O=K.get(U.filename);if(U.status==="removed"||!O)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:O.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let F=await $.createTree(await $.getCommitTreeSha(G),H),N=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:F,parentShas:[Y,G]});try{await $.updateRef(Z,N);return}catch(U){if(U instanceof C6&&U.status===422&&Q<tX6)continue;throw U}}}var iX6=200,nX6=12,pX6=300,tX6=3;var $y$=w(()=>{K_();FP0()});function aX6($){if(!$||$.includes(".."))return!1;return rX6.test($)}function Zy$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!aX6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Xy$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var rX6;var Qy$=w(()=>{rX6=/^[\w./@-]+$/});function g51($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function yr($,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 Yy$($,Z,X,Q){if(!Q.connectionId)throw new F_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new F_(_Z);await xO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:_Z;throw new F_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await yO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=j8$(F instanceof Error?F.message:String(F));throw N?new F_(U):F}),K=Rh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await $B(H,sX6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var sX6=10485760,F_;var h51=w(()=>{P3();ez0();Ln();Nd0();Tx();F_=class F_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function $Q6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!eX6.test(Z))throw Error(`Invalid branch name: ${$}`)}function N_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(XQ6)])}function QQ6($,Z,X){let Q=O5($)[Z]?.[X];return!!Q&&Object.keys(jY(Q)).length>0}function U_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function gr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=yr(Z,X);if(!Y)throw new C6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return $P0(Q,G.id,Y)}function u51($,Z){if(Z instanceof C6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,A9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,A9)}async function Wy$($){try{let Z=await gr($),X=await NP0(Z,$.get("vmClaim").branch);return $.json(X,200,A9)}catch(Z){return u51($,Z)}}function BP0($,Z){let Q=(OP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return OP0.set($,Y),Y.finally(()=>{if(OP0.get($)===Y)OP0.delete($)}),Q}async function cZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,A9);let Q=U_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...A9}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?GQ6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...A9}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function GQ6($){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 wP0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function JQ6($){return Ky$.includes($)}var eX6,Gy$=524288,ZQ6=65536,XQ6=1e4,Jy$=2000,YQ6,OP0,A9,Ky$,Hy$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",YQ6),$.post("/:virtualMcpId/:branch/write",(X)=>cZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:N_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>cZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:N_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>cZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:N_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>cZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:N_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>cZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:N_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>cZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:N_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>cZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:N_(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 cZ(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 cZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>cZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>cZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!JQ6(Q))return X.json({error:`step must be one of: ${Ky$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=ux(Y.virtualMcpMetadata);try{await KO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return cZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return ON(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 Wx$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Wy$(X);return Z(X)});let Z=(X)=>cZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Jy$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Wy$(X);return cZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Jy$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await gr(X),J=await UP0(G,Q.branch,Y.base);return X.json(J,200,A9)}catch(Y){return u51(X,Y)}return cZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,A9);let Q=U_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return BP0(Y,async()=>{try{await P51(W,Q,Y);let K=yr(G,J);if(K)await Yy$(W,Q,Y,K)}catch(K){if(K instanceof F_)return X.json({error:K.message},403,A9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,A9)}return cZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,A9);return BP0(Q,()=>cZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return BP0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await gr(X),H=W.base??await K.getDefaultBranch();return await ex$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,A9)}catch(W){return u51(X,W)}});let Y=U_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return BP0(G,async()=>{try{await P51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,A9)}return cZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",wZ({maxSize:Gy$,onError:(X)=>X.json({error:"Payload too large"},413,A9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=U_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=R51(F)&&U?[F,N]:Y?await Promise.all([wP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),wP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await gr(X);return Promise.all([NP0(L,Q.branch),UP0(L,Q.branch)])})(),D=await Ux$(K,O,B);return X.json(D,200,A9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A9);return X.json({error:F},502,A9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",wZ({maxSize:Gy$,onError:(X)=>X.json({error:"Payload too large"},413,A9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=U_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=R51(F)&&U?[F,N]:Y?await Promise.all([wP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),wP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await gr(X);return Promise.all([NP0(L,Q.branch),UP0(L,Q.branch)])})(),D=await Bx$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,A9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A9);return X.json({error:F},502,A9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=U_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=g51(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",wZ({maxSize:ZQ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=U_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Zy$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Xy$(G,W.resolveType),H=g51(K),F;try{F=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$};var Fy$=w(()=>{C8();Xw();Th();z51();BF();Gx$();M3();lX();F8();Qp0();rO();Jx$();Kx$();Ci0();wn();M51();wx$();V51();K_();$y$();Qy$();h51();eX6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;YQ6=sz0(async($,Z)=>{let X=$.var.studioContext;try{e(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(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{$Q6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=xi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await RF(X,J,Q),F=Yx$({userId:H,projectRef:K}),N=W.metadata??null;if(y3$(N).fastPreviewCapability&&!QQ6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await tX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});OP0=new Map;A9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ky$=["clone","install","start"]});function Ny$($,Z,X){let Q=c51.get($);if(!Q)Q={pending:null,running:!1},c51.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)KQ6($,Q);return G}async function KQ6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await HQ6(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)c51.delete($)}}async function HQ6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await xr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=x51(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=y51(K,B),E=`${JSON.stringify(D,null,2)}
2764
- `,j=await Z.createBlob(E);await ax$(Z.owner,Z.repo,j,E);let z=L[0]??`${HP0(Q)}/${C51(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of y51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=_r(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:FQ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof C6&&B.status===422)||Y>=WQ6-1)throw B;await I$(mZ(2000,200,Y,2,0.5))}}}function FQ6($){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 Xd0(Q,$.deps.coAuthor)}var WQ6=3,c51;var Uy$=w(()=>{$O0();XP0();t4();K_();FP0();c51=new Map});import{createHmac as Oy$,randomBytes as NQ6,timingSafeEqual as UQ6}from"crypto";function By$(){if(DP0)return DP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return DP0=$?Buffer.from($):NQ6(32),DP0}function l51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+OQ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Oy$("sha256",By$()).update(Q).digest("base64url");return`${Q}.${Y}`}function wy$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Oy$("sha256",By$()).update(Q).digest("base64url"));if(Y.length!==G.length||!UQ6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var OQ6=21600000,DP0=null;var Dy$=w(()=>{A$()});import{z as Vh}from"zod";function wQ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&BQ6.test($)}function Ey$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function LP0($){let Z=$.get("decofileScope");return $P0($.var.studioContext,Z.organizationId,Z.githubRepo)}function EP0($,Z){if(Z instanceof C6){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 jy$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Ly$),$.use("/:virtualMcpId/:branch/*",Ly$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await LP0(Z),Y=await sx$(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=l51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ey$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return EP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=DQ6.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{ZP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await LP0(Z),W=await Ny$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Rh(Q)},G),K=l51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ey$(Z)})}catch(J){return EP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await LP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof C6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof C6&&G.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 G}}catch(Q){return EP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await LP0(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 C6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return EP0(Z,Q)}}),$}var BQ6,DQ6,Ly$;var zy$=w(()=>{XP0();C8();z51();ez0();h51();V51();Uy$();Dy$();K_();FP0();BQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;DQ6=Vh.object({set:Vh.record(Vh.string(),Vh.unknown()).optional(),delete:Vh.array(Vh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ly$=sz0(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(!wQ6(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||!wy$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!NB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=yr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Py$=($)=>{let Z=new U1;if(Z.use("*",$_),Z.route("/",wz0()),Z.route("/",i_$()),Z.route("/",ib$()),Z.route("/",lb$()),Z.route("/",oz0()),Z.route("/tools",sb$()),Z.route("/",ob$()),Z.route("/",Rb$({kvStorage:$.kvStorage})),Z.route("/",Ab$()),Z.route("/fs",bb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Hy$()),Z.route("/decofile",jy$()),Z.route("/",hb$()),Z.route("/deco-sites",Lz0()),Z.route("/sso",Hz0()),Z.route("/",rz0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",y_$()),$.mountDevAssets)Z.route("/dev-assets",Ez0({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("/",PV$()),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",yb$()),Z.route("/mcp",Iw0()),Z.route("/mcp/self",tz0()),Z.route("/mcp",kw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ay$=w(()=>{C8();l41();g_$();n41();jz0();Gr();u41();Tb$();Ib$();xb$();wp();_41();Sw0();O51();gb$();ub$();db$();nb$();rb$();w51();eb$();D51();qw0();Fy$();zy$()});function LQ6($){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 EQ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ty$=()=>{let $=new U1;return $.use("*",EQ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await uZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:LQ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ry$=w(()=>{C8();A$();Ej0()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function kQ6($){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 SQ6($,Z,X){try{return JSON.parse($)}catch{throw new My$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function VQ6($){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:SQ6(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 CQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?vY(X.function.parameters):vY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function _Q6($){if(!$)return;return{openai:{response_format:$}}}function vQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Iy$($,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 qy$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var jQ6=256,zQ6,PQ6,AQ6,TQ6,RQ6,IQ6,qQ6,MQ6,My$,ky$,Sy$;var Vy$=w(()=>{C4();C8();Th();pF();zQ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),PQ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),AQ6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(PQ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),TQ6=M1.object({type:M1.literal("text")}),RQ6=M1.object({type:M1.literal("json_object")}),IQ6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),qQ6=M1.union([TQ6,RQ6,IQ6]),MQ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(AQ6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(zQ6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:qQ6.optional(),user:M1.string().optional()});My$=class My$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ky$=new U1;ky$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=MQ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=kQ6(G.model);if(!J)return $.json(tK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>LD(j.providerId));if(!E)return $.json(tK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=VQ6(G.messages),U=G.tools?CQ6(G.tools):void 0,O=_Q6(G.response_format),B=vQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return ON($,async(L)=>{let E=Iy$(F,N,U,G,O,$.req.raw.signal);try{let j=fO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=jQ6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:qy$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Iy$(F,N,U,G,O,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:qy$(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(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});Sy$=ky$});var _y$;var Cy$=w(()=>{_y$={name:"decocms",version:"4.230.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function xQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??bQ6}}var vy$,bQ6="https://ph.studio.decocms.com",fy$;var by$=w(()=>{C8();xg0();dV();r9();A$();M41();Cy$();vy$=new U1;vy$.get("/",($)=>{let Z={version:_y$.version,theme:gl1(),...WL().logo&&{logo:WL().logo},...LK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:$_$(),posthog:xQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});fy$=vy$});function Ch($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d51($){return(Ch($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function yy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ch($))}&sz=${Z}`}function xy$($,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 gy$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?xy$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):xy$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var O_,yQ6,gQ6,hQ6,uQ6,hy$;var uy$=w(()=>{O_=l0.enum(["good","bad","neutral"]),yQ6=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:O_.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 $})),gQ6=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(yQ6)),hQ6={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()},uQ6=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:O_.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:O_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:O_.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:O_.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(gQ6).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:O_.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:O_.optional()})).min(1)})]),hy$=l0.object({...hQ6,template:uQ6})});function jP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=hy$.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 m51=w(()=>{uy$()});import{join as cy$}from"path";async function lQ6($){try{let Z=await fetch(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(cQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=jP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||d51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function XG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function dQ6($,Z){let X=Ch($),Q=Z?.brand?.trim()||d51(X),Y=yy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=gy$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${XG(W)}</title>`,`<meta name="description" content="${XG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${XG(W)}" />`,`<meta property="og:description" content="${XG(K)}" />`,`<meta property="og:url" content="${XG(J)}" />`,`<meta property="og:image" content="${XG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${XG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${XG(W)}" />`,`<meta name="twitter:description" content="${XG(K)}" />`,`<meta name="twitter:image" content="${XG(H)}" />`,`<meta name="twitter:image:alt" content="${XG(F)}" />`,`<link rel="canonical" href="${XG(J)}" />`,`<link rel="icon" href="${XG(Y)}" sizes="any" />`].join(`
2764
+ `,j=await Z.createBlob(E);await ax$(Z.owner,Z.repo,j,E);let z=L[0]??`${HP0(Q)}/${C51(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of y51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=_r(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:FQ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof C6&&B.status===422)||Y>=WQ6-1)throw B;await I$(mZ(2000,200,Y,2,0.5))}}}function FQ6($){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 Xd0(Q,$.deps.coAuthor)}var WQ6=3,c51;var Uy$=w(()=>{$O0();XP0();t4();K_();FP0();c51=new Map});import{createHmac as Oy$,randomBytes as NQ6,timingSafeEqual as UQ6}from"crypto";function By$(){if(DP0)return DP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return DP0=$?Buffer.from($):NQ6(32),DP0}function l51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+OQ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Oy$("sha256",By$()).update(Q).digest("base64url");return`${Q}.${Y}`}function wy$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Oy$("sha256",By$()).update(Q).digest("base64url"));if(Y.length!==G.length||!UQ6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var OQ6=21600000,DP0=null;var Dy$=w(()=>{A$()});import{z as Vh}from"zod";function wQ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&BQ6.test($)}function Ey$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function LP0($){let Z=$.get("decofileScope");return $P0($.var.studioContext,Z.organizationId,Z.githubRepo)}function EP0($,Z){if(Z instanceof C6){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 jy$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Ly$),$.use("/:virtualMcpId/:branch/*",Ly$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await LP0(Z),Y=await sx$(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=l51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Ey$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return EP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=DQ6.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{ZP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await LP0(Z),W=await Ny$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Rh(Q)},G),K=l51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Ey$(Z)})}catch(J){return EP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await LP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof C6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof C6&&G.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 G}}catch(Q){return EP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await LP0(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 C6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return EP0(Z,Q)}}),$}var BQ6,DQ6,Ly$;var zy$=w(()=>{XP0();C8();z51();ez0();h51();V51();Uy$();Dy$();K_();FP0();BQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;DQ6=Vh.object({set:Vh.record(Vh.string(),Vh.unknown()).optional(),delete:Vh.array(Vh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Ly$=sz0(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(!wQ6(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||!wy$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!NB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=yr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Py$=($)=>{let Z=new U1;if(Z.use("*",$_),Z.route("/",wz0()),Z.route("/",i_$()),Z.route("/",ib$()),Z.route("/",lb$()),Z.route("/",oz0()),Z.route("/tools",sb$()),Z.route("/",ob$()),Z.route("/",Rb$({kvStorage:$.kvStorage})),Z.route("/",Ab$()),Z.route("/fs",bb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Hy$()),Z.route("/decofile",jy$()),Z.route("/",hb$()),Z.route("/deco-sites",Lz0()),Z.route("/sso",Hz0()),Z.route("/",rz0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",y_$()),$.mountDevAssets)Z.route("/dev-assets",Ez0({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("/",PV$()),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",yb$()),Z.route("/mcp",Iw0()),Z.route("/mcp/self",tz0()),Z.route("/mcp",kw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ay$=w(()=>{C8();l41();g_$();n41();jz0();Gr();u41();Tb$();Ib$();xb$();wp();_41();Sw0();O51();gb$();ub$();db$();nb$();rb$();w51();eb$();D51();qw0();Fy$();zy$()});function LQ6($){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 EQ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ty$=()=>{let $=new U1;return $.use("*",EQ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await uZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:LQ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ry$=w(()=>{C8();A$();Ej0()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function kQ6($){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 SQ6($,Z,X){try{return JSON.parse($)}catch{throw new My$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function VQ6($){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:SQ6(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 CQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?vY(X.function.parameters):vY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function _Q6($){if(!$)return;return{openai:{response_format:$}}}function vQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Iy$($,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 qy$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var jQ6=256,zQ6,PQ6,AQ6,TQ6,RQ6,IQ6,qQ6,MQ6,My$,ky$,Sy$;var Vy$=w(()=>{C4();C8();Th();pF();zQ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),PQ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),AQ6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(PQ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),TQ6=M1.object({type:M1.literal("text")}),RQ6=M1.object({type:M1.literal("json_object")}),IQ6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),qQ6=M1.union([TQ6,RQ6,IQ6]),MQ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(AQ6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(zQ6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:qQ6.optional(),user:M1.string().optional()});My$=class My$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ky$=new U1;ky$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=MQ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=kQ6(G.model);if(!J)return $.json(tK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>LD(j.providerId));if(!E)return $.json(tK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=VQ6(G.messages),U=G.tools?CQ6(G.tools):void 0,O=_Q6(G.response_format),B=vQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return ON($,async(L)=>{let E=Iy$(F,N,U,G,O,$.req.raw.signal);try{let j=fO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=jQ6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:qy$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Iy$(F,N,U,G,O,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:qy$(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(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});Sy$=ky$});var _y$;var Cy$=w(()=>{_y$={name:"decocms",version:"4.230.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","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function xQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??bQ6}}var vy$,bQ6="https://ph.studio.decocms.com",fy$;var by$=w(()=>{C8();xg0();dV();r9();A$();M41();Cy$();vy$=new U1;vy$.get("/",($)=>{let Z={version:_y$.version,theme:gl1(),...WL().logo&&{logo:WL().logo},...LK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:$_$(),posthog:xQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});fy$=vy$});function Ch($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d51($){return(Ch($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function yy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ch($))}&sz=${Z}`}function xy$($,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 gy$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?xy$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):xy$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var O_,yQ6,gQ6,hQ6,uQ6,hy$;var uy$=w(()=>{O_=l0.enum(["good","bad","neutral"]),yQ6=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:O_.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 $})),gQ6=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(yQ6)),hQ6={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()},uQ6=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:O_.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:O_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:O_.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:O_.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(gQ6).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:O_.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:O_.optional()})).min(1)})]),hy$=l0.object({...hQ6,template:uQ6})});function jP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=hy$.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 m51=w(()=>{uy$()});import{join as cy$}from"path";async function lQ6($){try{let Z=await fetch(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(cQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=jP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||d51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function XG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function dQ6($,Z){let X=Ch($),Q=Z?.brand?.trim()||d51(X),Y=yy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=gy$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${XG(W)}</title>`,`<meta name="description" content="${XG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${XG(W)}" />`,`<meta property="og:description" content="${XG(K)}" />`,`<meta property="og:url" content="${XG(J)}" />`,`<meta property="og:image" content="${XG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${XG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${XG(W)}" />`,`<meta name="twitter:description" content="${XG(K)}" />`,`<meta name="twitter:image" content="${XG(H)}" />`,`<meta name="twitter:image:alt" content="${XG(F)}" />`,`<link rel="canonical" href="${XG(J)}" />`,`<link rel="icon" href="${XG(Y)}" sizes="any" />`].join(`
2765
2765
  `)}function mQ6($,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}
2766
2766
  </head>`)}function ly$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=Ch(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(cy$($,"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(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(iQ6)}),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=$?cy$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await lQ6(Ch(Q)),K=dQ6(Q,W);return X.html(mQ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var cQ6=2500,iQ6=1e4;var dy$=w(()=>{C8();m51();PL();A$()});function hr($,Z){return fetch(`${lW({})}${$}`,Z)}async function nQ6($,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 hr(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=jP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var pQ6,wN,my$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},iy$;var ny$=w(()=>{C8();xG();PL();m51();pQ6=new Set(["complete","errored","terminated","unknown"]),wN=new U1;wN.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});wN.use("/link-token/*",my$);wN.use("/suggest",my$);wN.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 nQ6(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)}});wN.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 hr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${zL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});wN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await hr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${zL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:pQ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});wN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await hr(`/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)}});wN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await hr(`/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:[]})}});iy$=wN});import{createHmac as tQ6,timingSafeEqual as oQ6}from"crypto";function ty$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>rQ6)return!1;let W=tQ6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&oQ6(K,F)})}function oy$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=LJ(Z),Q=LJ(LJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:oK(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 ry$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function oK($){return typeof $==="string"?$:void 0}function LJ($){return typeof $==="object"&&$!==null?$:void 0}function zP0($){return typeof $==="number"?new Date($*1000):null}function p51($){return oK($)??oK(LJ($)?.id)}function aQ6($){return p51($.subscription)??oK(LJ(LJ($.parent)?.subscription_details)?.subscription)}function sQ6($){let Z=zP0($.current_period_end);if(Z)return Z;let X=LJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=LJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function i51($,Z){let X=zP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function n51($,Z){let X=zP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function eQ6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=oK(LJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(oK(LJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(oK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=oK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(LJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:LJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(oK(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=p51(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(i51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:p51(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:n51(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=oK(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&&i51(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":ry$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:sQ6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:n51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=aQ6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(i51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:zP0(X.period_end),lastStripeEventAt:n51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function $Y6($,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:ry$(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 py$($,Z){let X=$Y6($,Z);if(!X)return;RY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:nm1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function ay$($){let Z=new gW(m8().db),X=await eQ6(Z,$);if(!(X.handled&&X.topUp))py$($,X);if(X.handled&&X.topUp)await FB$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),py$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Ga1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof VY&&(Q.status===400||Q.status===404)))throw Q}return X}var rQ6=300;var sy$=w(()=>{CG();q4();c40();VL();Gs0()});var ZY6=1048576,t51;var ey$=w(()=>{C8();Xw();A$();sy$();t51=new U1;t51.post("/webhook",wZ({maxSize:ZY6,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(!ty$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=oy$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await ay$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as XY6}from"crypto";function YY6($,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 XY6(Buffer.from(Y),Buffer.from(Q))}var QY6=5242880,o51;var $g$=w(()=>{C8();Xw();Un();o51=new U1;o51.post("/webhook",wZ({maxSize:QY6,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(!YY6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Ii0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Zg$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Xg$,GY6,JY6,Qg$;var Yg$=w(()=>{C8();Y3();Zy();$x();Xg$=new U1,GY6=["range","if-none-match","if-modified-since"],JY6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Xg$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Gh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await mn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&H3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Zg$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of GY6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of JY6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Zg$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Qg$=Xg$});var ur=C((B_)=>{var WY6=B_&&B_.__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]}),KY6=B_&&B_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))WY6(Z,$,X)};Object.defineProperty(B_,"__esModule",{value:!0});KY6(KY(),B_)});var Wg$=C((Gg$)=>{Object.defineProperty(Gg$,"__esModule",{value:!0});Gg$.version=void 0;Gg$.version="3.4.0"});var Fg$=C((rK)=>{var HY6=rK&&rK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(rK,"__esModule",{value:!0});rK.NodeTransport=rK.VERSION=void 0;rK.nodeResolveHost=wY6;var p6=ur(),FY6=z0("net"),r51=z0("tls"),NY6=z0("path"),Kg$=z0("fs"),UY6=HY6(z0("dns")),OY6=Wg$();rK.VERSION=OY6.version;var BY6="nats.js";class Hg${socket;version;lang;yields=[];signal=(0,p6.deferred)();closedNotification=(0,p6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=BY6,this.version=rK.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,p6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw p6.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 p6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new p6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,p6.deferred)(),X,Q=(0,FY6.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,p6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=p6.DataBuffer.concat(...this.yields),Y=(0,p6.extractProtocolMessage)(Q);if(Y!=="")try{let G=p6.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,p6.deferred)();try{if($=(0,NY6.resolve)($),!(0,Kg$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Kg$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,p6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new p6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,p6.deferred)();try{let Y=(0,r51.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 p6.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,p6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new p6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,p6.deferred)();try{let Q=(0,r51.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 p6.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,p6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,p6.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 r51.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,p6.render)($)}`);let Z=(0,p6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,p6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,p6.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}}rK.NodeTransport=Hg$;function wY6($){let Z=(0,p6.deferred)();return UY6.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 wg$=C((Bg$)=>{Object.defineProperty(Bg$,"__esModule",{value:!0});Bg$.connect=DY6;var Ng$=Fg$(),Ug$=ur(),Og$=ur();function DY6($={}){if((0,Og$.hasWsProtocol)($))return Promise.reject(Og$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Ug$.setTransportFactory)({factory:()=>{return new Ng$.NodeTransport},dnsResolveFn:Ng$.nodeResolveHost}),Ug$.NatsConnectionImpl.connect($)}});var Dg$=C((DN)=>{var EY6=DN&&DN.__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]}),jY6=DN&&DN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))EY6(Z,$,X)};Object.defineProperty(DN,"__esModule",{value:!0});DN.connect=void 0;var zY6=wg$();Object.defineProperty(DN,"connect",{enumerable:!0,get:function(){return zY6.connect}});jY6(ur(),DN)});function zg$($){let Z=$?.connectFn??RY6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:TY6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=mZ(AY6,PY6,B-1,2,0.5);await I$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Lg$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=jg$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function RY6($){return Eg$.connect($)}var Lg$,Eg$,jg$,PY6=100,AY6=3000,TY6=3000;var Pg$=w(()=>{t4();Lg$=S(Xu(),1),Eg$=S(Dg$(),1),jg$=S(Iw(),1)});function a51($,Z){return`${$}.${Z}`}class s51{cache;constructor($){this.cache=ng({ttlMs:$?.ttlMs??IY6,maxSize:$?.maxSize??qY6})}async get($,Z){return this.cache.get(a51($,Z))??null}async set($,Z,X){this.cache.set(a51($,Z),X)}async invalidate($,Z){this.cache.delete(a51($,Z))}teardown(){this.cache.clear()}}var IY6=600000,qY6=5000;var Ag$=()=>{};function PP0($,Z){return`${$}:${Z}`}function e51($){let Z=ng({ttlMs:$?.ttlMs??MY6,maxSize:$?.maxSize??kY6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Tg$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(PP0(K,H))},set(K,H,F){Z.set(PP0(K,H),F)},invalidate(K,H){Z.delete(PP0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Tg$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(PP0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Tg$="studio.ai-provider-keys.invalidate",MY6=30000,kY6=5000;var Rg$=()=>{};class $91{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Ig$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Ig$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Ig$;var qg$=w(()=>{Ig$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Mg$=($)=>{let Z;return()=>Z??=$()},Z91,X91;var kg$=w(()=>{f6();Z91=Mg$(()=>q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),X91=Mg$(()=>q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function bY6(){return{name:bF,subjects:[`${dB0}.>`],storage:e3.StorageType.File,max_age:CY6,max_bytes:vY6,max_msgs_per_subject:fY6,discard:e3.DiscardPolicy.Old,retention:e3.RetentionPolicy.Limits,duplicate_window:_Y6,num_replicas:1}}class Cg${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 Sg$($){let Z=Vg$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function hY6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,VY6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function uY6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class Q91{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=bY6(),X=await m9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await e3.jetstreamManager($);try{await Q.streams.info(bF),await Q.streams.update(bF,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(bF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:uY6});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=hY6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=cK$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=ep0(H,{runId:Z}),U=performance.now()-F;if(Z91().record(U),X91().add(1,{"org.id":Q??"unknown"}),gY6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?Sg$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),yY6)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=ep0(Z,{runId:$,dedup:X});if(Z91().record(performance.now()-Y),X91().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Sg$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=uK$({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"?e3.DeliverPolicy.New:e3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=BB($),W;try{W=await(await Q.consumers.get(bF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=tB0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(mB0()).pipeThrough(iB0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(bF,{filter:BB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var e3,Vg$,SY6=($)=>{let Z;return()=>Z??=$()},VY6,CY6=86400000000000,_Y6=120000000000,vY6=4294967296,fY6=500000,xY6,yY6,gY6;var _g$=w(()=>{t4();$t0();oB0();nB0();f6();kg$();e3=S(Iw(),1),Vg$=S(Xu(),1),VY6=SY6(()=>q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));xY6=process.env.STREAM_ENCODE_TRACE==="1",yY6=process.env.DECOPILOT_STREAM_TRACE==="1";gY6=xY6?new Cg$:null});function AP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,PW(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 vg$=w(()=>{F8()});class Y91{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}}function pY6($){return $ instanceof n7}function tY6($,Z){return Z-$>=iY6}class G91{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??cY6;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??dY6,X=this.options.itemIntervalMs??lY6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-$p0),ht0);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()-nY6));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 Pp0(this.taskBoard,Y,Q),await Ap0(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!==E4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await xF(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),pY6(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()+mY6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),p8(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(!tY6(KF(X),Date.now()))return;await EK($,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===E4,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}if(await ZF$(J,Q))return!0;if(!Y)return!1;let W=await Promise.all(G.map(async(K)=>({...K,...await wy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(!bt0(W))return!1;return await Zw0(J,Q,{previewMatchesHead:xt0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var cY6=60000,lY6=300000,dY6=50,mY6=60000,iY6=900000,nY6=120000;var fg$=w(()=>{v9();Mt0();wB();Fp();P9();B3();ut0();zK();Yp()});import{readdir as oY6,rm as TP0}from"fs/promises";import{join as RP0}from"path";async function IP0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-rY6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await w_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await bg$($,Y,Z);else if(!Y.startsWith(".")){let G=RP0($,Y),J=await w_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await bg$(G,K,Z)}if((await w_(G)).length===0)await TP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function bg$($,Z,X){let Q=0,Y=RP0($,Z),G=await w_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=RP0(Y,W),H=await w_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=RP0(K,N);await TP0(O,{recursive:!0,force:!0}),Q++}}if((await w_(K)).length===0)await TP0(K,{recursive:!0,force:!0})}if((await w_(Y)).length===0)await TP0(Y,{recursive:!0,force:!0});return Q}async function w_($){try{return(await oY6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var rY6=30;var J91=()=>{};import{DBOS as W91,SchedulerMode as aY6}from"@dbos-inc/dbos-sdk";async function eY6(){let $=[AJ(),L_(),eK()],Z=0;for(let X of $)try{Z+=await IP0(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 $G6($,Z){await W91.runStep(()=>eY6(),{name:"monitoringRetention"})}function yg$(){if(xg$)return;xg$=!0;let $=W91.registerWorkflow($G6,{name:"monitoringRetentionWorkflow"});W91.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:sY6,mode:aY6.ExactlyOncePerIntervalWhenActive})}var sY6="23 4 * * *",xg$=!1;var gg$=w(()=>{YY();J91()});function hg$($){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 rG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await H41($.db,Z,Q.role);return Y.boundAuth=K41({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new QL(X,void 0,Y.boundAuth,Q.role,"self"),DB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var ug$=w(()=>{YL();pV()});function ZG6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function QG6(){for(let $ of XG6)$()}function cg$($){let Z=[...K91.logs,$];K91={...K91,logs:Z.length>500?Z.slice(-500):Z},QG6()}function H91(){return YG6}var K91,XG6,YG6=!1;var F91=w(()=>{K91=ZG6(),XG6=new Set});import{EventEmitter as GG6}from"events";var N91;var lg$=w(()=>{F91();N91=new GG6;N91.on("request",($)=>{cg$($)})});function dg$(){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=_h(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>_h(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Q5.tool}${O}${Q5.dim}(${L})${Q5.reset}`}else if(U.method)G=`${Q5.dim}${_h(U.method)}${Q5.reset}`}}catch{}}let W=_h(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${Q5.mcp}${_h(F.slice(0,12))}\u2026${Q5.reset}`}else if(Y==="/mcp")W=`${Q5.mcp}/mcp${Q5.reset}`;else if(Y==="/mcp/registry")W=`${Q5.mcp}/mcp/registry${Q5.reset}`;let K=WG6(Q),H=J?"\u25C0":"\u2190";if(!H91())console.log(`${Q5.dim}${H}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=JG6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!H91())console.log(`${Q5.dim}${B}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Q5.reset} ${Q5.duration}${O}${Q5.reset}`);N91.emit("request",{method:Q,path:_h(Y),status:N,duration:F,timestamp:new Date})}}}var Q5,JG6=($)=>{if($>=500)return Q5.serverError;if($>=400)return Q5.clientError;if($>=300)return Q5.redirect;return Q5.ok},WG6=($)=>{return Q5[$]||Q5.reset},_h=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var mg$=w(()=>{F91();lg$();Q5={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 tg$}from"crypto";import{mkdir as KG6,readdir as HG6,rm as ig$,stat as og$}from"fs/promises";import{join as O91,relative as FG6}from"path";import{z as j$}from"zod";function ag$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return O91(NG6,Z)}function sg$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function U91($,Z){let X=ag$($),Q=sg$(Z);return O91(X,Q)}function UG6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return tg$("sha256",Y).update(G).digest("hex")}function pg$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=UG6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${sg$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function eg$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${tg$("md5","etag").update(Q).digest("hex")}"`}async function $h$($,Z,X,Q,Y){try{let G=await HG6($,{withFileTypes:!0});for(let J of G){let W=O91($,J.name),H=FG6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await $h$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await og$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:eg$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Zh$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:j$.object({prefix:j$.string().optional(),maxKeys:j$.number().optional().default(1000),continuationToken:j$.string().optional(),delimiter:j$.string().optional()}),outputSchema:j$.object({objects:j$.array(j$.object({key:j$.string(),size:j$.number(),lastModified:j$.string(),etag:j$.string()})),nextContinuationToken:j$.string().optional(),isTruncated:j$.boolean(),commonPrefixes:j$.array(j$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=ag$(Q);await KG6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await $h$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:j$.object({key:j$.string()}),outputSchema:j$.object({contentType:j$.string().optional(),contentLength:j$.number(),lastModified:j$.string(),etag:j$.string(),metadata:j$.record(j$.string(),j$.string()).optional()}),handler:async(Y)=>{let G=Y,J=U91(Q,G.key),W=await og$(J);return{contentType:t41(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:eg$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:j$.object({key:j$.string(),expiresIn:j$.number().optional()}),outputSchema:j$.object({url:j$.string(),expiresIn:j$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ng$;return{url:pg$(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:j$.object({key:j$.string(),expiresIn:j$.number().optional(),contentType:j$.string().optional()}),outputSchema:j$.object({url:j$.string(),expiresIn:j$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ng$;return{url:pg$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:j$.object({key:j$.string()}),outputSchema:j$.object({success:j$.boolean(),key:j$.string()}),handler:async(Y)=>{let G=Y,J=U91(Q,G.key);try{return await ig$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:j$.object({keys:j$.array(j$.string()).max(1000)}),outputSchema:j$.object({deleted:j$.array(j$.string()),errors:j$.array(j$.object({key:j$.string(),message:j$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=U91(Q,K);try{await ig$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function B91($,Z,X){let Q=Zh$(Z,X),Y=new kW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:K5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:j$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:j$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new rX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),XJ(Y,G,$,"mcp:dev-assets")}async function Xh$($,Z,X,Q){let G=Zh$(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 NG6="./data/assets",ng$=3600,rg$,Qh$;var Yh$=w(()=>{A$();Ay();C8();Ml();sV();VX();jz0();rg$=new U1;rg$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return B91($.req.raw,Z,Q)});Qh$=rg$});var Gh$={};N4(Gh$,{mountDevRoutes:()=>OG6});function OG6($,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 B91(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Xh$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Qh$);let X=new U1;X.use("*",a3({mountPath:"/api/dev-assets"})),X.route("/",Ez0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Jh$=w(()=>{C8();c41();jz0();Yh$()});import{sql as BG6}from"kysely";import{randomUUID as Wh$}from"crypto";import{z as wG6}from"zod";async function LG6($){let Z=new Date().toISOString(),X=Wh$(),Q=u4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Wh$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await BG6`SELECT
2767
2767
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.230.3",
3
+ "version": "4.230.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 L,b as A,j as r}from"./index-kg-ZSOgA.js";import{I as R}from"./input-BnmfZog1.js";import{L as I}from"./label-OtmYS0fe.js";import{S as V,a as z,b as J,c as O,d as D}from"./select-BxkbK2eN.js";import{T as M}from"./textarea-BP7rD9j-.js";import{T as U,U as X,V as $,J as q,X as G,a0 as H}from"./index-Bh_Crwca.js";import{s as F}from"./primitives-BkBW30Z6.js";import{u as Q}from"./use-autosave-UZvYvwiP.js";import"./tooltip-DZJqdNvl.js";import"./Check-VVebrzt2.js";import"./ChevronDown-EfAMK9pT.js";import"./ChevronUp-DFedhyl_.js";import"./ArrowUp-CvqQDWHs.js";import"./chat-context-CgsLZjf8.js";import"./tab-id-D3yGqatB.js";import"./dialog-CeWauzZ9.js";import"./X-C2d4nrvL.js";import"./Copy01-DrBVpl3W.js";import"./hooks-CPXE8Vtq.js";import"./use-mcp-client-EDB_37py.js";import"./auth-BZXTBNqo.js";import"./decopilot-sse-pool-BsJkQ-Dq.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DHXF-Pgh.js";import"./use-ai-providers-DKF_51f7.js";import"./studio-tools-BmlJiF0x.js";import"./use-decopilot-events-DV0Z4Daq.js";import"./use-organization-settings-DHE23jmp.js";import"./automation-runs-DAYAGebQ.js";import"./agent-icon-DlY3-evM.js";import"./AlertCircle-Bu6ExGrY.js";import"./Tool01-DBwwsjlM.js";import"./ArrowLeft-BMaVor0Q.js";import"./Tool02-BDvmwXON.js";import"./XCircle-ClA1zHL2.js";import"./ArrowUpRight-Bzvhg_-n.js";import"./TrendUp01-BfZ8vdoS.js";import"./ZapSquare-BMZtVSrf.js";import"./Users03-ai5cefFL.js";import"./CheckCircle-BBu4m_da.js";import"./ChevronRight-D7aN5bxd.js";import"./DotsVertical-Cxyf682U.js";import"./Stars02-BaCAMNCE.js";import"./CpuChip01-BKaJJ4m_.js";import"./CreditCard01-CEtuQD__.js";import"./Globe01-Cc6cPcFn.js";import"./Settings02-Ddmj-_rX.js";import"./Eye-D6T7hv17.js";import"./FilterLines-D4tHcLuh.js";import"./Share07-Bz9filIw.js";import"./Star01-DdVllepq.js";import"./Globe04-ByCMDkAk.js";import"./SwitchHorizontal01-B0jQBh1u.js";import"./HardDrive-C3F3ymDY.js";import"./Key01-CWx0IZ8t.js";import"./LayoutLeft-DDxzPTXc.js";import"./LinkExternal01-D28p3w5h.js";import"./LogOut01-Dc7EB7P7.js";import"./Monitor01-DpVvm_dG.js";import"./Sun-BW6MD8X_.js";import"./Palette-CSIkZM9e.js";import"./Play-BKcW5Ltd.js";import"./Plus-lEDj1tD4.js";import"./SearchLg-BImfCif8.js";import"./SearchMd-Bp_SZoFd.js";import"./Shield01-CalwrQWc.js";import"./Stars01-BEc8Zx1b.js";import"./Trash01-Bw199Lku.js";import"./Upload01-OmSaIQJN.js";import"./User01-D31Gwa2x.js";import"./Users01-CSb_wkLT.js";import"./XClose-BgxeMnjI.js";import"./Zap-S0uNkay8.js";import"./useInfiniteQuery-D-JYd4d5.js";import"./use-infinite-scroll-h6ZXByHB.js";import"./use-connection-Bfh8ZrSI.js";import"./card-DjhPSLpN.js";import"./sidebar-CgwL929s.js";import"./use-mobile-VYD32-4d.js";import"./table-CnNTL73E.js";import"./empty-state-CCaNIZkK.js";import"./use-members-D4_18Dmo.js";import"./use-org-auth-client-Ddeyd0SK.js";import"./use-clock-tick-DSMY7npz.js";import"./use-automations-Dpx2oVoi.js";import"./useSuspenseInfiniteQuery-C_DdxgOB.js";import"./avatar-C0LO_460.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DprVKicO.js";import"./monaco-editor-CqNIzGE7.js";import"./spinner-bBcAZ-j4.js";import"./types-BLNmyFj6.js";import"./shell-layout-DE2uZR8l.js";import"./required-auth-layout-CBewHqYZ.js";import"./use-org-sso-Bn41W4kR.js";import"./integration-icon-CAW-qeo0.js";import"./use-navigate-to-agent-7p-eM9UE.js";import"./reusable-new-chat-CouMjkYR.js";import"./chart-jxdS1qw8.js";import"./index-DMesOYPd.js";import"./form-B50Gp2pz.js";import"./file-type-icon-B6DLjqBQ.js";import"./drawer-DFm1ZTc4.js";import"./collection-search-JngJ2KYM.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-CDW2HpKx.js";import"./toggle-group-DA6H7I5f.js";import"./use-commerce-diagnostic-DO9Cm_Dg.js";import"./popover-DI-bB5ra.js";import"./self-tool-result-DZ5xhqTQ.js";import"./alert-dialog-GuGVjqJ3.js";import"./extract-connection-data-C1r7iMQz.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./use-debounced-value-BFV6Wfmd.js";import"./authenticate-and-persist-oauth-BpHQ1IZF.js";import"./mcp-oauth-pn21A40G.js";import"./track-DxLXF40a.js";import"./toolbar-DptBHkfg.js";import"./skeleton-DU9H9Rn8.js";import"./github-repo-picker-BMAsYdt1.js";import"./use-mcp-tools-z_IP50QU.js";import"./agent-capabilities-C4tLW0Za.js";import"./connection-card-C-ij5xJ_.js";import"./use-registry-connections-ikmWVUtO.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-CIwwwP2Z.js";import"./collection-tabs-CoGc8WBU.js";import"./badge-CPggBa_r.js";import"./command-Dy8YUaoh.js";import"./index-X1QDIpgh.js";import"./use-open-billing-url-t7sDR_RF.js";import"./select-model-CDmuWdr2.js";import"./checkbox-DHkDg8dA.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-CDR865dm.js";import"./cards-C0fcTwuf.js";import"./dropdown-menu-BSfz8AHZ.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-BFAxTG8w.js";import"./use-capability-COHQ5Lgh.js";import"./pt-BR-CLy76QW2.js";import"./switch-C7yO858u.js";import"./use-debounced-autosave-DTmY2t04.js";import"./index-Bd-2J4Za.js";import"./search-input-Bf9e_uzs.js";import"./index-RS3QupV9.js";import"./use-secrets-C8b74Zmr.js";import"./AreaChart-j_Vn5l3t.js";import"./use-tags-vcnhMois.js";import"./get-initials-D-f_fDFw.js";import"./use-file-configs-CRHRg3Zc.js";import"./automation-list-row-DdUXn40b.js";const W={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"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function Hr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=A(),P=U(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=X(b);let k;t[5]!==f||t[6]!==a?(k=$(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=W[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{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(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(V,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(z,{id:o.key,className:"h-10 w-full",children:r.jsx(J,{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(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(M,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(R,{id:o.key,value:F(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[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==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[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{Hr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-CgBRMI3h.js","assets/index-kg-ZSOgA.js","assets/index-uptMkyg_.css","assets/Tool02-BDvmwXON.js","assets/CheckCircle-BBu4m_da.js","assets/Settings02-Ddmj-_rX.js","assets/use-mcp-client-EDB_37py.js","assets/auth-BZXTBNqo.js","assets/useInfiniteQuery-D-JYd4d5.js","assets/use-infinite-scroll-h6ZXByHB.js","assets/studio-tools-BmlJiF0x.js","assets/badge-CPggBa_r.js","assets/input-BnmfZog1.js","assets/dropdown-menu-BSfz8AHZ.js","assets/Check-VVebrzt2.js","assets/ChevronRight-D7aN5bxd.js","assets/DotsVertical-Cxyf682U.js","assets/table-CnNTL73E.js","assets/toggle-group-DA6H7I5f.js","assets/use-view-mode-B5ly5ydP.js","assets/use-mobile-VYD32-4d.js","assets/FilterLines-D4tHcLuh.js","assets/Globe01-Cc6cPcFn.js","assets/SearchMd-Bp_SZoFd.js","assets/dialog-CeWauzZ9.js","assets/X-C2d4nrvL.js","assets/AlertCircle-Bu6ExGrY.js","assets/Upload01-OmSaIQJN.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-GuGVjqJ3.js","assets/card-DjhPSLpN.js","assets/Trash01-Bw199Lku.js","assets/label-OtmYS0fe.js","assets/select-BxkbK2eN.js","assets/tooltip-DZJqdNvl.js","assets/ChevronDown-EfAMK9pT.js","assets/ChevronUp-DFedhyl_.js","assets/switch-C7yO858u.js","assets/textarea-BP7rD9j-.js","assets/ArrowLeft-BMaVor0Q.js","assets/XCircle-ClA1zHL2.js","assets/checkbox-DHkDg8dA.js","assets/Eye-D6T7hv17.js","assets/LinkExternal01-D28p3w5h.js","assets/use-copy-DprVKicO.js","assets/Copy01-DrBVpl3W.js","assets/Key01-CWx0IZ8t.js","assets/Plus-lEDj1tD4.js","assets/mcp-oauth-pn21A40G.js","assets/Play-BKcW5Ltd.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,aF as o}from"./index-kg-ZSOgA.js";import{R as m}from"./require-capability-Dq9ZpVA3.js";import"./use-capability-COHQ5Lgh.js";import"./access-gate-C0MvIMnD.js";import"./capability-load-error-B_kH3Gyo.js";const n=s.lazy(()=>o(()=>import("./registry-layout-CgBRMI3h.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,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{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(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-CgBRMI3h.js","assets/index-kg-ZSOgA.js","assets/index-uptMkyg_.css","assets/Tool02-BDvmwXON.js","assets/CheckCircle-BBu4m_da.js","assets/Settings02-Ddmj-_rX.js","assets/use-mcp-client-EDB_37py.js","assets/auth-BZXTBNqo.js","assets/useInfiniteQuery-D-JYd4d5.js","assets/use-infinite-scroll-h6ZXByHB.js","assets/studio-tools-BmlJiF0x.js","assets/badge-CPggBa_r.js","assets/input-BnmfZog1.js","assets/dropdown-menu-BSfz8AHZ.js","assets/Check-VVebrzt2.js","assets/ChevronRight-D7aN5bxd.js","assets/DotsVertical-Cxyf682U.js","assets/table-CnNTL73E.js","assets/toggle-group-DA6H7I5f.js","assets/use-view-mode-B5ly5ydP.js","assets/use-mobile-VYD32-4d.js","assets/FilterLines-D4tHcLuh.js","assets/Globe01-Cc6cPcFn.js","assets/SearchMd-Bp_SZoFd.js","assets/dialog-CeWauzZ9.js","assets/X-C2d4nrvL.js","assets/AlertCircle-Bu6ExGrY.js","assets/Upload01-OmSaIQJN.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-GuGVjqJ3.js","assets/card-DjhPSLpN.js","assets/Trash01-Bw199Lku.js","assets/label-OtmYS0fe.js","assets/select-BxkbK2eN.js","assets/tooltip-DZJqdNvl.js","assets/ChevronDown-EfAMK9pT.js","assets/ChevronUp-DFedhyl_.js","assets/switch-C7yO858u.js","assets/textarea-BP7rD9j-.js","assets/ArrowLeft-BMaVor0Q.js","assets/XCircle-ClA1zHL2.js","assets/checkbox-DHkDg8dA.js","assets/Eye-D6T7hv17.js","assets/LinkExternal01-D28p3w5h.js","assets/use-copy-DprVKicO.js","assets/Copy01-DrBVpl3W.js","assets/Key01-CWx0IZ8t.js","assets/Plus-lEDj1tD4.js","assets/mcp-oauth-pn21A40G.js","assets/Play-BKcW5Ltd.js"])))=>i.map(i=>d[i]);
2
- import{c as m,d as n,f as c,j as t,k as f,r as l,aF as p}from"./index-kg-ZSOgA.js";import{R as u}from"./require-capability-Dq9ZpVA3.js";import"./use-capability-COHQ5Lgh.js";import"./access-gate-C0MvIMnD.js";import"./capability-load-error-B_kH3Gyo.js";const g=l.lazy(()=>p(()=>import("./registry-layout-CgBRMI3h.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,47,48,49])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(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{j as default};
@@ -1 +0,0 @@
1
- import{I as u}from"./use-infinite-scroll-h6ZXByHB.js";import{e6 as i}from"./index-kg-ZSOgA.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-h6ZXByHB.js";import{e6 as u,b3 as n}from"./index-kg-ZSOgA.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};