decocms 4.204.18 → 4.204.19

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 (226) hide show
  1. package/dist/client/assets/{AlertCircle-DB-ckBrE.js → AlertCircle-B-Ytl950.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DUmsDO0N.js → AreaChart-B1nwVAsI.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-B4gtisED.js → ArrowLeft-BnOTe_DM.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-BRS4N1Ka.js → ArrowUp-DSxLpoPr.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-DG7GdYT7.js → ArrowUpRight-CSzs1Km2.js} +1 -1
  6. package/dist/client/assets/{Check-C9g8lYUy.js → Check-ZFAlRTyA.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-Cj0fYJne.js → CheckCircle-BwKQgmLj.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-bB7amz8q.js → ChevronDown-c33PENri.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-AQN-xIC0.js → ChevronRight-CExQmewW.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-BUUqb_PA.js → ChevronUp-BHcMBYE-.js} +1 -1
  11. package/dist/client/assets/{Copy01-GIrkO-IX.js → Copy01-BwwMqYVS.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-Cu_c35WV.js → CpuChip01-BVPMml2V.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-BltwbuBg.js → CreditCard01-ophDkKdh.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-T_sTiOT8.js → DotsVertical-DExUSjOq.js} +1 -1
  15. package/dist/client/assets/{Eye-DnhO_hsm.js → Eye-DUk14l9l.js} +1 -1
  16. package/dist/client/assets/{FilterLines-DZcYLw-s.js → FilterLines-DJtA7alF.js} +1 -1
  17. package/dist/client/assets/{Globe01-DpN1067_.js → Globe01-DN45gKQU.js} +1 -1
  18. package/dist/client/assets/{Globe04-WsTV4LAt.js → Globe04-BaI1xT2d.js} +1 -1
  19. package/dist/client/assets/{HardDrive-TcUDtxRV.js → HardDrive-Dy4kH1Q_.js} +1 -1
  20. package/dist/client/assets/{Key01-WwCFVmKM.js → Key01-tVKquCb2.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-BPZ4KYEK.js → LayoutLeft-MVkj6K8T.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-DTD5n9BN.js → LinkExternal01-D33KmogY.js} +1 -1
  23. package/dist/client/assets/{LogOut01-C1gkNUc9.js → LogOut01-BWAdpdBN.js} +1 -1
  24. package/dist/client/assets/{Monitor01-BbjqlgN0.js → Monitor01-MHjpXQvC.js} +1 -1
  25. package/dist/client/assets/{Palette-BevapI0V.js → Palette-Ylxv4jtv.js} +1 -1
  26. package/dist/client/assets/{Play-BYd8UexI.js → Play-CoclKq_V.js} +1 -1
  27. package/dist/client/assets/{Plus-Cn8um1w7.js → Plus-DDTzCRs2.js} +1 -1
  28. package/dist/client/assets/{SearchLg-BmNBhyI8.js → SearchLg-DkbrwIO3.js} +1 -1
  29. package/dist/client/assets/{SearchMd-B6b-ihSy.js → SearchMd-CpaPdNZm.js} +1 -1
  30. package/dist/client/assets/{Settings02-yuFpWJDP.js → Settings02-BeSF4GkH.js} +1 -1
  31. package/dist/client/assets/{Share07-k8GzwHCF.js → Share07-BWd-zMmk.js} +1 -1
  32. package/dist/client/assets/{Shield01-BBYDXK18.js → Shield01-8IM6IWte.js} +1 -1
  33. package/dist/client/assets/{Star01-ClLm8Tan.js → Star01-DBObhwiF.js} +1 -1
  34. package/dist/client/assets/{Stars01-B7yOME1T.js → Stars01-BV5mCrPq.js} +1 -1
  35. package/dist/client/assets/{Stars02-CzNkFXWp.js → Stars02-qP6F0qqs.js} +1 -1
  36. package/dist/client/assets/{Sun-D5MQ6ayk.js → Sun-BgwS3ujI.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-CWng5j8J.js → SwitchHorizontal01-Cpni7utj.js} +1 -1
  38. package/dist/client/assets/{Tool01-CsrjTAG7.js → Tool01-B0aXILbP.js} +1 -1
  39. package/dist/client/assets/{Tool02-BNfkUjwV.js → Tool02-Des4EW17.js} +1 -1
  40. package/dist/client/assets/{Trash01-DoZKkmi_.js → Trash01-obcy3KA0.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-Dq9iNEDU.js → TrendUp01-DNTpqB21.js} +1 -1
  42. package/dist/client/assets/{Upload01-C6JxwWH-.js → Upload01-9UwKAfsQ.js} +1 -1
  43. package/dist/client/assets/{User01-DaYf4DQE.js → User01-BWyEZ02f.js} +1 -1
  44. package/dist/client/assets/{Users01-BAVIEtKu.js → Users01-BbmZvmxO.js} +1 -1
  45. package/dist/client/assets/{Users03-CWZKHYsC.js → Users03-BzLGiXq3.js} +1 -1
  46. package/dist/client/assets/{X-mzjkVBPI.js → X-BTSzuont.js} +1 -1
  47. package/dist/client/assets/{XCircle-pc1C9qKm.js → XCircle-CHciOQju.js} +1 -1
  48. package/dist/client/assets/{XClose-Z8m07P1-.js → XClose-C6W2EuLw.js} +1 -1
  49. package/dist/client/assets/{Zap-BWnjbuSs.js → Zap-5LcEcwHX.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-9vd8o_Iq.js → ZapSquare-2rSwlW-z.js} +1 -1
  51. package/dist/client/assets/{access-gate-CnOlfB_G.js → access-gate-DrRJ6LvG.js} +1 -1
  52. package/dist/client/assets/{agent-icon-DXovVOPx.js → agent-icon-JL9KKrX8.js} +1 -1
  53. package/dist/client/assets/{agents-list-C4-uwyyb.js → agents-list-BInBSv8r.js} +1 -1
  54. package/dist/client/assets/{ai-providers-C7mzTq9v.js → ai-providers-DtTHs_Qd.js} +1 -1
  55. package/dist/client/assets/{alert-DgxGKNUM.js → alert-a_3HTTqH.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-0wH9WZcH.js → alert-dialog-CtaMBDkc.js} +1 -1
  57. package/dist/client/assets/{app-editor-CKmStBVx.js → app-editor-BoAfeo4s.js} +1 -1
  58. package/dist/client/assets/{auth-DMNwJoP9.js → auth-BgnUq5Uu.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-Bbqe-4Ax.js → auth-catchall-Bio4vejS.js} +1 -1
  60. package/dist/client/assets/{auth-entry-BIqdFjki.js → auth-entry-8FmNzIJL.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-BO0G5FRa.js → auth-split-layout-PA4NtViv.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-CqpOGhLe.js → authenticate-and-persist-oauth-DGcDdgc2.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-DNO7bW6J.js → automation-list-row-Dl7Q2xCA.js} +1 -1
  64. package/dist/client/assets/{automation-runs-DeJv5Njg.js → automation-runs-CoI9R-hI.js} +1 -1
  65. package/dist/client/assets/{automations-HFVZliAk.js → automations-D0gM-PVy.js} +1 -1
  66. package/dist/client/assets/{avatar-BVbLXf83.js → avatar-DrlUnwCm.js} +1 -1
  67. package/dist/client/assets/{badge-BB5-MMOO.js → badge-DIzqHjJa.js} +1 -1
  68. package/dist/client/assets/{billing-CDk_eGDg.js → billing-a4xW6Sc_.js} +1 -1
  69. package/dist/client/assets/{block-document-DOAb4gVr.js → block-document-rCfUIMv-.js} +1 -1
  70. package/dist/client/assets/{brand-context-B4kbg4dq.js → brand-context-97ahqfu3.js} +1 -1
  71. package/dist/client/assets/{buckets-CxmDdFex.js → buckets-7reKcTr9.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-BZNplBqS.js → bulk-category-panel-B3O1tfR5.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-Dv7WqY0o.js → capability-load-error-w_r6C1-Z.js} +1 -1
  74. package/dist/client/assets/{card-DlVtiE1P.js → card-BBZOJf2j.js} +1 -1
  75. package/dist/client/assets/{cards-DryD-HK5.js → cards-Cdy9I0bp.js} +1 -1
  76. package/dist/client/assets/{category-editor-CJkpeAcD.js → category-editor-OtyI2sO4.js} +1 -1
  77. package/dist/client/assets/{chat-context-KHaC5yqn.js → chat-context-v1QbeC-3.js} +1 -1
  78. package/dist/client/assets/{checkbox-DTP7nSZy.js → checkbox-DmyESSoG.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-DfqvCMeP.js → cli-auth-success-D2_pqHn5.js} +1 -1
  80. package/dist/client/assets/{collection-detail-CooHhAOt.js → collection-detail-D7CVz2Wz.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-B1PwpRl-.js → collection-display-button-Dm8Kk-KF.js} +1 -1
  82. package/dist/client/assets/{collection-search-BrMipw4M.js → collection-search-BiolBIwZ.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-BJjnHk_X.js → collection-table-wrapper-BPRVclUW.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-CFgNGIhn.js → collection-tabs-vQUTIcKR.js} +1 -1
  85. package/dist/client/assets/{command-Bpcaup_P.js → command-BkQMmXJK.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-BDWlkYlJ.js → commerce-onboarding-B_09i7pt.js} +1 -1
  87. package/dist/client/assets/{connect-DjbHtFnn.js → connect-DXVAbHbE.js} +1 -1
  88. package/dist/client/assets/{connection-iGFgj_LT.js → connection-BnLUlnYJ.js} +1 -1
  89. package/dist/client/assets/connection-card-7Xk_zjn1.js +1 -0
  90. package/dist/client/assets/{connection-detail-DELnWQf0.js → connection-detail-aqd21S6h.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-MurTJjK1.js → connection-form-helpers-DJ5GtAqT.js} +1 -1
  92. package/dist/client/assets/{connections-Cixqtku_.js → connections-Cy91-wTG.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-DaHIjN-h.js → decopilot-sse-pool-DeC0CMuQ.js} +1 -1
  94. package/dist/client/assets/{dialog-Dpr45CPK.js → dialog-JqTbv139.js} +1 -1
  95. package/dist/client/assets/{domain-settings-BC_FRs-m.js → domain-settings-pd685Mdw.js} +1 -1
  96. package/dist/client/assets/{drawer-9ACoqfu8.js → drawer-C9-aFrkU.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-CDzlcVZz.js → dropdown-menu-B_v_NZDW.js} +1 -1
  98. package/dist/client/assets/{empty-state-b693c_WL.js → empty-state-B82eTKE1.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-DnN5mvZT.js → extract-connection-data-U9zQ86Oo.js} +1 -1
  100. package/dist/client/assets/{file-explorer-Dq68droP.js → file-explorer-iG_sdJ9Q.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-DaIcKlT8.js → file-type-icon-BJXlfXf_.js} +1 -1
  102. package/dist/client/assets/{form-CRlX1Bg9.js → form-C2OaAHLO.js} +1 -1
  103. package/dist/client/assets/{general-neE_-ziV.js → general-B20W0trw.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-Dehjfdq1.js → github-repo-picker-C29BHw1o.js} +1 -1
  105. package/dist/client/assets/{hooks-C75SoLM6.js → hooks-D3bcGjSC.js} +1 -1
  106. package/dist/client/assets/{index-B-kJXBNg.js → index-BHhtGP3P.js} +1 -1
  107. package/dist/client/assets/{index-CPkU3e_o.js → index-BKIX2q6I.js} +1 -1
  108. package/dist/client/assets/{index-DSId1ZCd.js → index-BjyGtlKT.js} +1 -1
  109. package/dist/client/assets/{index-DVcARGfd.js → index-ByFu-5fC.js} +1 -1
  110. package/dist/client/assets/{index-ubCFUv-4.js → index-C8ZBhp87.js} +1 -1
  111. package/dist/client/assets/{index-DWcooEny.js → index-CFO30VJF.js} +1 -1
  112. package/dist/client/assets/{index-DhlSQMOn.js → index-CaBk9qaR.js} +1 -1
  113. package/dist/client/assets/{index-0ShATd68.js → index-DSpPzsso.js} +5 -5
  114. package/dist/client/assets/{index-B5hgu7Yj.js → index-DrTVSivc.js} +1 -1
  115. package/dist/client/assets/{index-redirect-BqpZzbJ6.js → index-redirect-B2qlh0BD.js} +1 -1
  116. package/dist/client/assets/{index-xJ-XRYAR.js → index-z9_Ldaz6.js} +3 -3
  117. package/dist/client/assets/{input-CaeA30s8.js → input--V1PKI4M.js} +1 -1
  118. package/dist/client/assets/{integration-icon-BJUqRzTU.js → integration-icon-ZdMDxzhn.js} +1 -1
  119. package/dist/client/assets/{invite-member-dialog-DD7zRy1A.js → invite-member-dialog-B0GEIa0m.js} +1 -1
  120. package/dist/client/assets/{label-Dk5C261K.js → label-D8-rHe8w.js} +1 -1
  121. package/dist/client/assets/{layout-9PGB9U8R.js → layout-_-Nnd0Jv.js} +1 -1
  122. package/dist/client/assets/{login-f6SSmgQo.js → login-Dd1HboVT.js} +1 -1
  123. package/dist/client/assets/mcp-oauth-C00X5TAy.js +1 -0
  124. package/dist/client/assets/{members-1BGVKI7p.js → members-DZ7TFBXD.js} +1 -1
  125. package/dist/client/assets/{monaco-editor-Dz4TuSeq.js → monaco-editor-BttPp-vo.js} +1 -1
  126. package/dist/client/assets/{monitoring-stats-row-hO1U46Te.js → monitoring-stats-row-0ytqbq_L.js} +1 -1
  127. package/dist/client/assets/{multi-select-BEU_pP6c.js → multi-select-DZc1Vvhd.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-ai-provider-BPd5w_YC.js → oauth-callback-ai-provider-CVlAalfP.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-CgODT0oh.js → oauth-callback-yIPlTO6W.js} +1 -1
  130. package/dist/client/assets/{onboarding-Ctd4emdH.js → onboarding-Di-g24mZ.js} +1 -1
  131. package/dist/client/assets/{org-layout-C2VmSS1l.js → org-layout-e5bitju3.js} +1 -1
  132. package/dist/client/assets/{organization-choice-CqMBeEBS.js → organization-choice-DEvUQ4ik.js} +1 -1
  133. package/dist/client/assets/{orgs-CZDLrvE_.js → orgs-DeuYXCll.js} +1 -1
  134. package/dist/client/assets/{page-seo-form-ENbwJ7GW.js → page-seo-form-nD0LCfVb.js} +1 -1
  135. package/dist/client/assets/{popover-BqW4hZxl.js → popover-Czm2jrJE.js} +1 -1
  136. package/dist/client/assets/{post-editor-DzeE6t3t.js → post-editor-BDQ__9pM.js} +1 -1
  137. package/dist/client/assets/{primitives-t6RcAgaY.js → primitives-CbbuKfuG.js} +1 -1
  138. package/dist/client/assets/{profile-Cx7bn1Tr.js → profile-CrqoyEBn.js} +1 -1
  139. package/dist/client/assets/{project-app-view-N4vlS_Jq.js → project-app-view-C-Law6Uu.js} +1 -1
  140. package/dist/client/assets/record-editor-BYCX0ZBt.js +1 -0
  141. package/dist/client/assets/{redirect-editor-CEJuFPs4.js → redirect-editor-BLCE5tYy.js} +1 -1
  142. package/dist/client/assets/registry-BuFHKDuO.js +2 -0
  143. package/dist/client/assets/{registry-layout-CxtAj3hD.js → registry-layout-DaBeikwH.js} +1 -1
  144. package/dist/client/assets/{reports-DoxGmLor.js → reports-CMf-QPdK.js} +1 -1
  145. package/dist/client/assets/{require-capability-CbX5kCeb.js → require-capability-BmT91CU6.js} +1 -1
  146. package/dist/client/assets/{required-auth-layout-tXxbqMGM.js → required-auth-layout-TS96UFeJ.js} +1 -1
  147. package/dist/client/assets/{reset-password-kf2PPVf6.js → reset-password-Bc1kouQ0.js} +1 -1
  148. package/dist/client/assets/{roles-DOiU7NVr.js → roles-BBr3X0h8.js} +1 -1
  149. package/dist/client/assets/{search-input-CsJqG-73.js → search-input-DOXVYpOR.js} +1 -1
  150. package/dist/client/assets/{secrets-xpm1G4M3.js → secrets-Bh6zbYuP.js} +1 -1
  151. package/dist/client/assets/{sections-editor-5L-FmKtU.js → sections-editor-BifHa3aP.js} +1 -1
  152. package/dist/client/assets/{select-DG2G8_4E.js → select-DNTONsLN.js} +1 -1
  153. package/dist/client/assets/{select-model-jPupeW9h.js → select-model-MRpJzTJn.js} +1 -1
  154. package/dist/client/assets/{self-tool-result-C6kxNAzY.js → self-tool-result-ItZmMSxc.js} +1 -1
  155. package/dist/client/assets/{seo-editor-BtxggVjJ.js → seo-editor-znjbjB_k.js} +1 -1
  156. package/dist/client/assets/{settings-layout-BXt3V9Jr.js → settings-layout-DPybxX5P.js} +1 -1
  157. package/dist/client/assets/{settings-section-bJafzgMr.js → settings-section-CNO0bKL1.js} +1 -1
  158. package/dist/client/assets/{shell-controls-CjaYYxUc.js → shell-controls-DF0j8MlX.js} +1 -1
  159. package/dist/client/assets/{shell-layout-MwJkIcMj.js → shell-layout-CrygoS9H.js} +1 -1
  160. package/dist/client/assets/{sidebar-DgzL0TZx.js → sidebar-C9V0s6jH.js} +1 -1
  161. package/dist/client/assets/{skeleton-CsrubTeH.js → skeleton-CdTjikSG.js} +1 -1
  162. package/dist/client/assets/{spinner-D_tdOrU1.js → spinner-DgvgMgTd.js} +1 -1
  163. package/dist/client/assets/{sso-D-s1TkdY.js → sso-CLMPPyjZ.js} +1 -1
  164. package/dist/client/assets/{store-BD8RRyWC.js → store-DpOP3zZZ.js} +1 -1
  165. package/dist/client/assets/store-registry-B9X-3OjX.js +2 -0
  166. package/dist/client/assets/{studio-tools-59Q0hGQZ.js → studio-tools-CndoWmod.js} +1 -1
  167. package/dist/client/assets/{switch-Cep3Uev2.js → switch-Cig4tSVK.js} +1 -1
  168. package/dist/client/assets/{synced-repos-DxEaRrxh.js → synced-repos-BYI-efRZ.js} +1 -1
  169. package/dist/client/assets/{tab-id-DMPFjMVY.js → tab-id-D8W8DS8-.js} +1 -1
  170. package/dist/client/assets/{table-DdBFuBCe.js → table-CFsCEM_q.js} +1 -1
  171. package/dist/client/assets/{tabs-D7BxTHg-.js → tabs-C_85EcRQ.js} +1 -1
  172. package/dist/client/assets/{textarea-Ce-M-_T4.js → textarea-CNInaucg.js} +1 -1
  173. package/dist/client/assets/{toggle-group-C-OTBaJ7.js → toggle-group-TTMnKzla.js} +1 -1
  174. package/dist/client/assets/{toolbar-Dia0tjgS.js → toolbar-DcOsHGUy.js} +1 -1
  175. package/dist/client/assets/{tooltip-BfqmkdWi.js → tooltip-CbVeEFg5.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-DEuEveED.js → use-ai-providers-BZUaC61l.js} +1 -1
  177. package/dist/client/assets/{use-automations-B3GqyJXt.js → use-automations-WHGntuOJ.js} +1 -1
  178. package/dist/client/assets/{use-autosave-C3hyjlza.js → use-autosave-B6HUuDeP.js} +1 -1
  179. package/dist/client/assets/{use-capability-BMYX1K_9.js → use-capability-BtGfOry5.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-CB91er50.js → use-clock-tick-imIwEl8Q.js} +1 -1
  181. package/dist/client/assets/{use-connection-D8egYA-W.js → use-connection-g8zqBeOf.js} +1 -1
  182. package/dist/client/assets/{use-copy-DxXXQbU0.js → use-copy-Bv8h8ua6.js} +1 -1
  183. package/dist/client/assets/{use-create-virtual-mcp-CC_EhUFK.js → use-create-virtual-mcp-XvZ4o-2m.js} +1 -1
  184. package/dist/client/assets/{use-debounced-autosave-Bb8FHw6r.js → use-debounced-autosave-CkHYa-Jk.js} +1 -1
  185. package/dist/client/assets/{use-debounced-value-DDvNQ5hI.js → use-debounced-value-CchEHfHh.js} +1 -1
  186. package/dist/client/assets/{use-deco-credits-B-S7aQYb.js → use-deco-credits-CjwZbElD.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-D-4PgEM9.js → use-decopilot-events-Bnmh_t_Y.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-BuCiXyY_.js → use-delete-connection-qT4vDl_H.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-DW6TRBER.js → use-deployment-admin-DpxdY-4k.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-DXsUWJYN.js → use-file-configs-BLadejYX.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-VHzs-jV3.js → use-infinite-scroll-CP74GgKE.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-BtQd5Cnd.js → use-join-requests-C9FyOjhm.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-B1BWLy50.js → use-mcp-client-BJMPqeNj.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-b1tvb8KH.js → use-mcp-tools-HGCxs6hL.js} +1 -1
  195. package/dist/client/assets/{use-members-BJptxYFF.js → use-members-TZjchtpJ.js} +1 -1
  196. package/dist/client/assets/{use-mobile-BERGRE8M.js → use-mobile-D2OM5eQk.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-BG4o1y5_.js → use-navigate-to-agent-BeN1Q5sR.js} +1 -1
  198. package/dist/client/assets/{use-open-billing-url-rBMxHPAT.js → use-open-billing-url-DBS6wswJ.js} +1 -1
  199. package/dist/client/assets/{use-org-auth-client-DnVzL_m_.js → use-org-auth-client-CoMOF0mu.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-DwxVVgzC.js → use-org-sso-BV_heIQC.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-B8SebtUX.js → use-organization-roles-BzJPuKeK.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-BxzOzCDD.js → use-organization-settings-C9YNan5x.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-CuIADftK.js → use-registry-connections-BA2VZsVB.js} +1 -1
  204. package/dist/client/assets/{use-secrets-1fZfj778.js → use-secrets-DO2I7qtu.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-DaPyYYMZ.js → use-section-preview-base-Zd5qz-KQ.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-DpXL09mS.js → use-status-sounds-MjXndk0Q.js} +1 -1
  207. package/dist/client/assets/{use-tags-Q_sl7B4Y.js → use-tags-Di9ZA5xl.js} +1 -1
  208. package/dist/client/assets/{use-view-mode-3iFgfUss.js → use-view-mode-qM_GZBDu.js} +1 -1
  209. package/dist/client/assets/{use-virtual-mcp-DFaaLXQ6.js → use-virtual-mcp-Bw7g5y5M.js} +1 -1
  210. package/dist/client/assets/useInfiniteQuery-BZznloIe.js +1 -0
  211. package/dist/client/assets/{useRouterState-BZ1XsEV6.js → useRouterState-D4zLoPI1.js} +1 -1
  212. package/dist/client/assets/useSuspenseInfiniteQuery-CYEhDJVi.js +1 -0
  213. package/dist/client/assets/{users-C0nDm4cy.js → users-BpRy6fgJ.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-DYTT0R7N.js → variant-calendar-Bb1DV2jn.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-DwpprBK-.js → view-mode-toggle-ynqLjaZ-.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +270 -270
  218. package/dist/server/server.js +2 -2
  219. package/package.json +1 -1
  220. package/dist/client/assets/connection-card-DDJv808C.js +0 -1
  221. package/dist/client/assets/mcp-oauth-CU91H6fy.js +0 -1
  222. package/dist/client/assets/record-editor-DfqBA9k6.js +0 -1
  223. package/dist/client/assets/registry-DmagbhgR.js +0 -2
  224. package/dist/client/assets/store-registry-Bm6fKt1R.js +0 -2
  225. package/dist/client/assets/useInfiniteQuery-D99nwGm8.js +0 -1
  226. package/dist/client/assets/useSuspenseInfiniteQuery-ZoR3Afu0.js +0 -1
@@ -1435,7 +1435,7 @@ Guidelines:
1435
1435
 
1436
1436
  return { consoleLogs, errors, evaluateResult };
1437
1437
  }
1438
- `}function $G$($,Z){let{browserless:X,objectStorage:Q,toolOutputMap:Y}=Z;return _$({description:"Inspect a web page's client-side runtime state. Navigates to a URL and collects browser console logs, JavaScript errors, and optionally evaluates a JS expression (e.g. window.dataLayer, document.title). Use this for debugging client-side issues, checking analytics setup, or inspecting runtime state. "+"For very large results the output may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:$0(v34),execute:async(G,J)=>{let W=performance.now();try{let K=b34(G.url,{evaluate:G.evaluate,waitUntil:G.waitUntil}),H;try{H=await fetch(`${X.baseUrl}/function?token=${encodeURIComponent(X.token)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:K,signal:AbortSignal.timeout(eY$)})}catch(w){return{success:!1,error:w instanceof Error&&w.name==="TimeoutError"?`Browserless function call timed out after ${eY$}ms`:`Browserless function call failed: ${w instanceof Error?w.message:String(w)}`,url:G.url}}if(!H.ok){let w=await H.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${H.status}): ${w.slice(0,_34)}`,url:G.url}}let N;try{N=await H.json()}catch{return{success:!1,error:`Browserless returned non-JSON response: ${(await H.text().catch(()=>"")).slice(0,200)}`,url:G.url}}let F=JSON.stringify(N,null,2);Y.set(J.toolCallId,F);let U=r7(F);if(U>AV){let w=`inspect-pages/${crypto.randomUUID()}.json`,O=new TextEncoder().encode(F);try{await Q.put(w,O,{contentType:"application/json"});let D=cX(F);return{success:!0,uri:G7(w),preview:D,url:G.url,tokenCount:U,consoleLogCount:N.consoleLogs?.length??0,errorCount:N.errors?.length??0,hasEvaluateResult:N.evaluateResult!=null}}catch(D){console.error("[inspect-page] Failed to upload to storage, returning inline",D)}}return{success:!0,consoleLogs:N.consoleLogs,errors:N.errors,evaluateResult:N.evaluateResult,url:G.url,tokenCount:U}}finally{let K=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:K}})}}})}var eY$=45000,_34=500,v34;var ZG$=B(()=>{k4();AN();zV();v34=nU0.object({url:nU0.string().url().describe("The URL of the web page to inspect."),evaluate:nU0.string().optional().describe(`Optional JavaScript expression to evaluate in the page context after load. Examples: 'window.dataLayer', 'document.querySelectorAll("script").length', 'performance.getEntriesByType("resource").map(e => ({name: e.name, duration: e.duration}))'`),waitUntil:nU0.enum(["load","domcontentloaded","networkidle0","networkidle2"]).optional().describe("When to consider navigation complete. Defaults to 'networkidle2'.")})});import{z as qx}from"zod";function XG$($,Z){let{toolOutputMap:X,objectStorage:Q,kind:Y}=Z,G=Y==="scrape"?qx.object({url:qx.string().url().describe("The URL of the web page to scrape.")}):qx.object({url:qx.string().url().describe("The URL of the web page to inspect."),evaluate:qx.string().optional().describe("Optional JavaScript expression to evaluate."),waitUntil:qx.enum(["load","domcontentloaded","networkidle0","networkidle2"]).optional().describe("When to consider navigation complete.")});return _$({description:Y==="scrape"?"Scrape the rendered HTML content of a web page.":"Inspect a web page's client-side runtime state.",inputSchema:$0(G),execute:async(J,W)=>{let K=performance.now();try{let H=process.env.BROWSERLESS_TOKEN;if(!H)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};if(Y==="scrape"){let j=await fetch(`${PV}/content?token=${encodeURIComponent(H)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:J.url})});if(!j.ok){let P=await j.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless content fetch failed (${j.status}): ${P}`,url:J.url}}let z=await j.text();X.set(W.toolCallId,z);let A=r7(z);if(A>rw&&Q){let P=`scraped-pages/${crypto.randomUUID()}.html`;return await Q.put(P,new TextEncoder().encode(z),{contentType:"text/html"}),{success:!0,uri:G7(P),preview:cX(z),url:J.url,tokenCount:A}}return{success:!0,content:z,url:J.url,tokenCount:A}}let N=J,F=N.waitUntil??"networkidle2",U=N.evaluate?JSON.stringify(N.evaluate):"null",w=`
1438
+ `}function $G$($,Z){let{browserless:X,objectStorage:Q,toolOutputMap:Y}=Z;return _$({description:"Inspect a web page's client-side runtime state. Navigates to a URL and collects browser console logs, JavaScript errors, and optionally evaluates a JS expression (e.g. window.dataLayer, document.title). Use this for debugging client-side issues, checking analytics setup, or inspecting runtime state. "+"For very large results the output may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:$0(v34),execute:async(G,J)=>{let W=performance.now();try{let K=b34(G.url,{evaluate:G.evaluate,waitUntil:G.waitUntil}),H;try{H=await fetch(`${X.baseUrl}/function?token=${encodeURIComponent(X.token)}`,{method:"POST",headers:{"Content-Type":"application/javascript"},body:K,signal:AbortSignal.timeout(eY$)})}catch(w){return{success:!1,error:w instanceof Error&&w.name==="TimeoutError"?`Browserless function call timed out after ${eY$}ms`:`Browserless function call failed: ${w instanceof Error?w.message:String(w)}`,url:G.url}}if(!H.ok){let w=await H.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless function call failed (${H.status}): ${w.slice(0,_34)}`,url:G.url}}let N;try{N=await H.json()}catch{return{success:!1,error:`Browserless returned non-JSON response: ${(await H.text().catch(()=>"")).slice(0,200)}`,url:G.url}}let F=JSON.stringify(N,null,2);Y.set(J.toolCallId,F);let U=r7(F);if(U>AV){let w=`inspect-pages/${crypto.randomUUID()}.json`,O=new TextEncoder().encode(F);try{await Q.put(w,O,{contentType:"application/json"});let D=cX(F);return{success:!0,uri:G7(w),preview:D,url:G.url,tokenCount:U,consoleLogCount:N.consoleLogs?.length??0,errorCount:N.errors?.length??0,hasEvaluateResult:N.evaluateResult!=null}}catch(D){console.error("[inspect-page] Failed to upload to storage, returning inline",D)}}return{success:!0,consoleLogs:N.consoleLogs,errors:N.errors,evaluateResult:N.evaluateResult,url:G.url,tokenCount:U}}finally{let K=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:K}})}}})}var eY$=45000,_34=500,v34;var ZG$=B(()=>{k4();AN();zV();v34=nU0.object({url:nU0.string().url().refine(($)=>/^https?:\/\//i.test($),{message:"URL must use http or https"}).describe("The URL of the web page to inspect."),evaluate:nU0.string().optional().describe(`Optional JavaScript expression to evaluate in the page context after load. Examples: 'window.dataLayer', 'document.querySelectorAll("script").length', 'performance.getEntriesByType("resource").map(e => ({name: e.name, duration: e.duration}))'`),waitUntil:nU0.enum(["load","domcontentloaded","networkidle0","networkidle2"]).optional().describe("When to consider navigation complete. Defaults to 'networkidle2'.")})});import{z as qx}from"zod";function XG$($,Z){let{toolOutputMap:X,objectStorage:Q,kind:Y}=Z,G=Y==="scrape"?qx.object({url:qx.string().url().describe("The URL of the web page to scrape.")}):qx.object({url:qx.string().url().describe("The URL of the web page to inspect."),evaluate:qx.string().optional().describe("Optional JavaScript expression to evaluate."),waitUntil:qx.enum(["load","domcontentloaded","networkidle0","networkidle2"]).optional().describe("When to consider navigation complete.")});return _$({description:Y==="scrape"?"Scrape the rendered HTML content of a web page.":"Inspect a web page's client-side runtime state.",inputSchema:$0(G),execute:async(J,W)=>{let K=performance.now();try{let H=process.env.BROWSERLESS_TOKEN;if(!H)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};if(Y==="scrape"){let j=await fetch(`${PV}/content?token=${encodeURIComponent(H)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:J.url})});if(!j.ok){let P=await j.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless content fetch failed (${j.status}): ${P}`,url:J.url}}let z=await j.text();X.set(W.toolCallId,z);let A=r7(z);if(A>rw&&Q){let P=`scraped-pages/${crypto.randomUUID()}.html`;return await Q.put(P,new TextEncoder().encode(z),{contentType:"text/html"}),{success:!0,uri:G7(P),preview:cX(z),url:J.url,tokenCount:A}}return{success:!0,content:z,url:J.url,tokenCount:A}}let N=J,F=N.waitUntil??"networkidle2",U=N.evaluate?JSON.stringify(N.evaluate):"null",w=`
1439
1439
  export default async function ({ page }) {
1440
1440
  const consoleLogs = [];
1441
1441
  const errors = [];
@@ -2726,7 +2726,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2726
2726
 
2727
2727
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2728
2728
 
2729
- Respond with the structured verdict and a short reason.`,Xv$;var Yv$=B(()=>{k4();iw();W41();t86=K41.object({requiresReview:K41.boolean().describe("true if the changes should go through pull-request review"),reason:K41.string().describe("One short sentence explaining the decision (max ~120 chars)")});Xv$={requiresReview:!1,reason:""}});function s86($){if(!$||$.includes(".."))return!1;return a86.test($)}function Gv$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!s86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Jv$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var a86;var Wv$=B(()=>{a86=/^[\w./@-]+$/});function H41($){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 Kv$($,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 Hv$($,Z,X,Q){if(!Q.connectionId)throw new ng("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new ng(d7);await Iw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ng(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await qw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Aj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await dw(H,e86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var e86=10485760,ng;var Nv$=B(()=>{GN();$41();xi();rf();ng=class ng extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Z46($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!$46.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Q46)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function N41($,Z){let Q=(Tj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Tj0.set($,Y),Y.finally(()=>{if(Tj0.get($)===Y)Tj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...cY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?G46(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...cY}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function G46($){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 Rj0($,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 J46($){return wv$.includes($)}var $46,Fv$=524288,X46=65536,Q46=1e4,Uv$=2000,Y46,Tj0,cY,wv$,Ov$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",Y46),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!J46(X))return Z.json({error:`step must be one of: ${wv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let Y=r(Z.var.studioContext),G=wx(Q.virtualMcpMetadata);try{await eF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:Y.id,userId:Q.callerUserId,entries:G})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return YF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return r_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Uv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Uv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:Y,connectionIds:G}=Z.get("vmClaim"),J=Z.var.studioContext;return N41(Q,async()=>{try{await Z41(J,X,Q);let W=Kv$(Y,G);if(W)await Hv$(J,X,Q,W)}catch(W){if(W instanceof ng)return Z.json({error:W.message},403,cY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,cY)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return N41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.var.studioContext;return N41(Q,async()=>{try{await Z41(Y,X,Q)}catch(G){let J=G instanceof Error?G.message:String(G);return Z.json({error:J},502,cY)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Fv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cY)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Y41(K)&&N?[K,H]:await Promise.all([Rj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Rj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await Zv$(J,F,U);return Z.json(w,200,cY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cY);return Z.json({error:K},502,cY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Fv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cY)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Y41(K)&&N?[K,H]:await Promise.all([Rj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Rj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await Qv$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,cY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cY);return Z.json({error:K},502,cY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let J=G.replace(/\/+$/,""),W=H41(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:X46,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let G;try{G=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Z.json({error:"Invalid JSON body"},400);let J=Gv$(G);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=Jv$(Y,J.resolveType),K=H41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Bv$=B(()=>{y8();mO();ig();n_$();YN();t_$();j3();hw();o_$();a_$();fd0();bi();W41();Yv$();Wv$();Nv$();$46=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Y46=i_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=r(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{Z46(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Zi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await ON(X,J,Q),N=p_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Tj0=new Map;cY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};wv$=["clone","install","start"]});var Dv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",hE0()),Z.route("/",SS$()),Z.route("/",__$()),Z.route("/",S_$()),Z.route("/",jj0()),Z.route("/tools",h_$()),Z.route("/",x_$()),Z.route("/",F_$({kvStorage:$.kvStorage})),Z.route("/",H_$()),Z.route("/fs",A_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ov$()),Z.route("/",q_$()),Z.route("/deco-sites",cE0()),Z.route("/sso",vE0()),Z.route("/",zj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",PS$()),$.mountDevAssets)Z.route("/dev-assets",lE0({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("/",jM$()),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",R_$()),Z.route("/mcp",XO0()),Z.route("/mcp/self",Ej0()),Z.route("/mcp",GO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Lv$=B(()=>{y8();P$1();AS$();q$1();dE0();Fo();j$1();N_$();U_$();T_$();Tn();F$1();JO0();p81();I_$();M_$();V_$();v_$();y_$();o81();u_$();r81();QO0();Bv$()});function K46($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function H46($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(W46)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var W46=1e4,N46=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ev$=()=>{let $=new B1;return $.use("*",N46),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await H46(Q,Y);return Z.json({apps:K46(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var jv$=B(()=>{y8();S$()});import{z as M1}from"zod";function cK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function z46($){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 P46($,Z,X){try{return JSON.parse($)}catch{throw new Av$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function A46($){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:P46(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 T46($){let Z=$.map((X)=>{let Q=X.function.parameters?PY(X.function.parameters):PY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function R46($){if(!$)return;return{openai:{response_format:$}}}function I46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function zv$($,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 Pv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var F46=256,U46,w46,O46,B46,D46,L46,E46,j46,Av$,Tv$,Rv$;var Iv$=B(()=>{k4();y8();ig();yN();U46=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),w46=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),O46=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(w46).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),B46=M1.object({type:M1.literal("text")}),D46=M1.object({type:M1.literal("json_object")}),L46=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()})}),E46=M1.union([B46,D46,L46]),j46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(O46),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(U46).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:E46.optional(),user:M1.string().optional()});Av$=class Av$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Tv$=new B1;Tv$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(cK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(cK("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(cK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=j46.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(cK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=z46(G.model);if(!J)return $.json(cK("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)=>QD(j.providerId));if(!E)return $.json(cK("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(cK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=A46(G.messages),U=G.tools?T46(G.tools):void 0,w=R46(G.response_format),O=I46(),D=Math.floor(Date.now()/1000);if(G.stream)return YF($,async(L)=>{let E=zv$(N,F,U,G,w,$.req.raw.signal);try{let j=Tw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=F46)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Pv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=zv$(N,F,U,G,w,$.req.raw.signal),E=await Pw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Pv$(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(cK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(cK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(cK(Y.message,"server_error"),500)}});Rv$=Tv$});var Mv$;var qv$=B(()=>{Mv$={name:"decocms",version:"4.204.18",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function k46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??M46}}var kv$,M46="https://ph.studio.decocms.com",Sv$;var Vv$=B(()=>{y8();cx0();MV();jZ();S$();J$1();qv$();kv$=new B1;kv$.get("/",($)=>{let Z={version:Mv$.version,theme:Ku1(),...pD().logo&&{logo:pD().logo},...UK()&&{internalUrl:yq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:hk$(),posthog:k46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!UK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Sv$=kv$});function pg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function F41($){return(pg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function _v$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pg($))}&sz=${Z}`}function Cv$($,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 vv$($){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()?Cv$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Cv$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var mC,S46,V46,C46,_46,bv$;var fv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),S46=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:mC.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 $})),V46=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(S46)),C46={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()},_46=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:mC.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:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.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:mC.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(V46).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:mC.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:mC.optional()})).min(1)})]),bv$=l0.object({...C46,template:_46})});function Ij0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=bv$.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 U41=B(()=>{fv$()});import{join as xv$}from"path";async function b46($){try{let Z=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(v46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Ij0(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()||F41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function lY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function f46($,Z){let X=pg($),Q=Z?.brand?.trim()||F41(X),Y=_v$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=vv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${lY(W)}</title>`,`<meta name="description" content="${lY(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="${lY(W)}" />`,`<meta property="og:description" content="${lY(K)}" />`,`<meta property="og:url" content="${lY(J)}" />`,`<meta property="og:image" content="${lY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lY(W)}" />`,`<meta name="twitter:description" content="${lY(K)}" />`,`<meta name="twitter:image" content="${lY(H)}" />`,`<meta name="twitter:image:alt" content="${lY(N)}" />`,`<link rel="canonical" href="${lY(J)}" />`,`<link rel="icon" href="${lY(Y)}" sizes="any" />`].join(`
2729
+ Respond with the structured verdict and a short reason.`,Xv$;var Yv$=B(()=>{k4();iw();W41();t86=K41.object({requiresReview:K41.boolean().describe("true if the changes should go through pull-request review"),reason:K41.string().describe("One short sentence explaining the decision (max ~120 chars)")});Xv$={requiresReview:!1,reason:""}});function s86($){if(!$||$.includes(".."))return!1;return a86.test($)}function Gv$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!s86(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Jv$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var a86;var Wv$=B(()=>{a86=/^[\w./@-]+$/});function H41($){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 Kv$($,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 Hv$($,Z,X,Q){if(!Q.connectionId)throw new ng("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new ng(d7);await Iw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:d7;throw new ng(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await qw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Aj0($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await dw(H,e86).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var e86=10485760,ng;var Nv$=B(()=>{GN();$41();xi();rf();ng=class ng extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Z46($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!$46.test(Z))throw Error(`Invalid branch name: ${$}`)}function lC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Q46)])}function dC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function N41($,Z){let Q=(Tj0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Tj0.set($,Y),Y.finally(()=>{if(Tj0.get($)===Y)Tj0.delete($)}),Q}async function fZ($,Z,X){let Q=dC($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...cY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?G46(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...cY}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function G46($){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 Rj0($,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 J46($){return wv$.includes($)}var $46,Fv$=524288,X46=65536,Q46=1e4,Uv$=2000,Y46,Tj0,cY,wv$,Ov$=()=>{let $=new B1;return $.use("/:virtualMcpId/:branch/*",Y46),$.post("/:virtualMcpId/:branch/write",(Z)=>fZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>fZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>fZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>fZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>fZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>fZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>fZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:lC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return fZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>fZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!J46(X))return Z.json({error:`step must be one of: ${wv$.join(", ")}`},400);if(X==="start"){let Q=Z.get("vmClaim");if(Q.runner){let Y=r(Z.var.studioContext),G=wx(Q.virtualMcpMetadata);try{await eF0({ctx:Z.var.studioContext,runner:Q.runner,handle:Q.claimName,orgId:Y.id,userId:Q.callerUserId,entries:G})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return fZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return YF(Z,async(Q)=>{await Q.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return r_$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Uv$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>fZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(Uv$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>fZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,virtualMcpMetadata:Y,connectionIds:G}=Z.get("vmClaim"),J=Z.var.studioContext;return N41(Q,async()=>{try{await Z41(J,X,Q);let W=Kv$(Y,G);if(W)await Hv$(J,X,Q,W)}catch(W){if(W instanceof ng)return Z.json({error:W.message},403,cY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,cY)}return fZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return N41(X,()=>fZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.var.studioContext;return N41(Q,async()=>{try{await Z41(Y,X,Q)}catch(G){let J=G instanceof Error?G.message:String(G);return Z.json({error:J},502,cY)}return fZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",HZ({maxSize:Fv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cY)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Y41(K)&&N?[K,H]:await Promise.all([Rj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Rj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await Zv$(J,F,U);return Z.json(w,200,cY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cY);return Z.json({error:K},502,cY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",HZ({maxSize:Fv$,onError:(Z)=>Z.json({error:"Payload too large"},413,cY)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q,userId:Y,projectRef:G}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,H=W.diff,N=H!=null&&typeof H.diffs==="object"&&H.diffs!==null,[F,U]=Y41(K)&&N?[K,H]:await Promise.all([Rj0(X,Q,"/_sandbox/git/status","GET",{userId:Y,projectRef:G}),Rj0(X,Q,"/_sandbox/git/diff","GET",{userId:Y,projectRef:G})]),w=await Qv$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,cY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,cY);return Z.json({error:K},502,cY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let G;try{G=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!G)return Z.json({error:"Preview not available"},502);let J=G.replace(/\/+$/,""),W=H41(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",HZ({maxSize:X46,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=dC(Z);if(X instanceof Response)return X;let{claimName:Q}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(Q)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let G;try{G=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Z.json({error:"Invalid JSON body"},400);let J=Gv$(G);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=Jv$(Y,J.resolveType),K=H41(W),H;try{H=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Bv$=B(()=>{y8();mO();ig();n_$();YN();t_$();j3();hw();o_$();a_$();fd0();bi();W41();Yv$();Wv$();Nv$();$46=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Y46=i_$(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=r(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{Z46(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Zi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await ON(X,J,Q),N=p_$({userId:H,projectRef:K}),F=W.metadata??null,U;try{U=(await uX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Tj0=new Map;cY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};wv$=["clone","install","start"]});var Dv$=($)=>{let Z=new B1;if(Z.use("*",vC),Z.route("/",hE0()),Z.route("/",SS$()),Z.route("/",__$()),Z.route("/",S_$()),Z.route("/",jj0()),Z.route("/tools",h_$()),Z.route("/",x_$()),Z.route("/",F_$({kvStorage:$.kvStorage})),Z.route("/",H_$()),Z.route("/fs",A_$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ov$()),Z.route("/",q_$()),Z.route("/deco-sites",cE0()),Z.route("/sso",vE0()),Z.route("/",zj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",PS$()),$.mountDevAssets)Z.route("/dev-assets",lE0({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("/",jM$()),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",R_$()),Z.route("/mcp",XO0()),Z.route("/mcp/self",Ej0()),Z.route("/mcp",GO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Lv$=B(()=>{y8();P$1();AS$();q$1();dE0();Fo();j$1();N_$();U_$();T_$();Tn();F$1();JO0();p81();I_$();M_$();V_$();v_$();y_$();o81();u_$();r81();QO0();Bv$()});function K46($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function H46($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(W46)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var W46=1e4,N46=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Ev$=()=>{let $=new B1;return $.use("*",N46),$.get("/",async(Z)=>{let X=c0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await H46(Q,Y);return Z.json({apps:K46(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var jv$=B(()=>{y8();S$()});import{z as M1}from"zod";function cK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function z46($){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 P46($,Z,X){try{return JSON.parse($)}catch{throw new Av$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function A46($){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:P46(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 T46($){let Z=$.map((X)=>{let Q=X.function.parameters?PY(X.function.parameters):PY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function R46($){if(!$)return;return{openai:{response_format:$}}}function I46(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function zv$($,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 Pv$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var F46=256,U46,w46,O46,B46,D46,L46,E46,j46,Av$,Tv$,Rv$;var Iv$=B(()=>{k4();y8();ig();yN();U46=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),w46=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),O46=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(w46).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),B46=M1.object({type:M1.literal("text")}),D46=M1.object({type:M1.literal("json_object")}),L46=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()})}),E46=M1.union([B46,D46,L46]),j46=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(O46),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(U46).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:E46.optional(),user:M1.string().optional()});Av$=class Av$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Tv$=new B1;Tv$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(cK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(cK("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(cK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=j46.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(cK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=z46(G.model);if(!J)return $.json(cK("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)=>QD(j.providerId));if(!E)return $.json(cK("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(cK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=A46(G.messages),U=G.tools?T46(G.tools):void 0,w=R46(G.response_format),O=I46(),D=Math.floor(Date.now()/1000);if(G.stream)return YF($,async(L)=>{let E=zv$(N,F,U,G,w,$.req.raw.signal);try{let j=Tw(E),z=!1,A=0,P="",M=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=F46)await M()}else if(k.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Pv$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=zv$(N,F,U,G,w,$.req.raw.signal),E=await Pw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Pv$(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(cK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(cK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(cK(Y.message,"server_error"),500)}});Rv$=Tv$});var Mv$;var qv$=B(()=>{Mv$={name:"decocms",version:"4.204.19",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function k46(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??M46}}var kv$,M46="https://ph.studio.decocms.com",Sv$;var Vv$=B(()=>{y8();cx0();MV();jZ();S$();J$1();qv$();kv$=new B1;kv$.get("/",($)=>{let Z={version:Mv$.version,theme:Ku1(),...pD().logo&&{logo:pD().logo},...UK()&&{internalUrl:yq1()},...c0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!c0().firecrawlApiKey,auth:hk$(),posthog:k46(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!UK()&&c0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Sv$=kv$});function pg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function F41($){return(pg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function _v$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pg($))}&sz=${Z}`}function Cv$($,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 vv$($){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()?Cv$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Cv$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var mC,S46,V46,C46,_46,bv$;var fv$=B(()=>{mC=l0.enum(["good","bad","neutral"]),S46=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:mC.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 $})),V46=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(S46)),C46={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()},_46=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:mC.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:mC.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:mC.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:mC.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(V46).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:mC.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:mC.optional()})).min(1)})]),bv$=l0.object({...C46,template:_46})});function Ij0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=bv$.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 U41=B(()=>{fv$()});import{join as xv$}from"path";async function b46($){try{let Z=await fetch(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(v46)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Ij0(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()||F41($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function lY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function f46($,Z){let X=pg($),Q=Z?.brand?.trim()||F41(X),Y=_v$(X,128),J=`${(c0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=vv$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${lY(W)}</title>`,`<meta name="description" content="${lY(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="${lY(W)}" />`,`<meta property="og:description" content="${lY(K)}" />`,`<meta property="og:url" content="${lY(J)}" />`,`<meta property="og:image" content="${lY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lY(W)}" />`,`<meta name="twitter:description" content="${lY(K)}" />`,`<meta name="twitter:image" content="${lY(H)}" />`,`<meta name="twitter:image:alt" content="${lY(N)}" />`,`<link rel="canonical" href="${lY(J)}" />`,`<link rel="icon" href="${lY(Y)}" sizes="any" />`].join(`
2730
2730
  `)}function x46($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
2731
2731
  </head>`)}function yv$($){let Z=new B1;return Z.get("/:domain/og.png",async(X)=>{let Q=pg(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(xv$($,"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(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(y46)}),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=$?xv$($,"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 b46(pg(Q)),K=f46(Q,W);return X.html(x46(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var v46=2500,y46=1e4;var gv$=B(()=>{y8();U41();WL();S$()});function go($,Z){return fetch(`${xW({})}${$}`,Z)}async function g46($,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 go(`/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}=Ij0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var h46,i3,qj0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},hv$;var uv$=B(()=>{y8();IG();WL();U41();h46=new Set(["complete","errored","terminated","unknown"]),i3=new B1;i3.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});i3.use("/run",qj0);i3.use("/status",qj0);i3.use("/link-token/*",qj0);i3.use("/suggest",qj0);i3.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 g46(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)}});i3.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 go("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${JL({})}`},body:JSON.stringify({url:Q,email:Y,distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});i3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await go(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${JL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:h46.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});i3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await go(`/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)}});i3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await go(`/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:[]})}});hv$=i3});import{createHmac as u46,timingSafeEqual as c46}from"crypto";function lv$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>l46)return!1;let W=u46("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&c46(K,N)})}function dv$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=QJ(Z),Q=QJ(QJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:lK(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 mv$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function lK($){return typeof $==="string"?$:void 0}function QJ($){return typeof $==="object"&&$!==null?$:void 0}function Mj0($){return typeof $==="number"?new Date($*1000):null}function B41($){return lK($)??lK(QJ($)?.id)}function d46($){return B41($.subscription)??lK(QJ(QJ($.parent)?.subscription_details)?.subscription)}function m46($){let Z=Mj0($.current_period_end);if(Z)return Z;let X=QJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=QJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function w41($,Z){let X=Mj0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function O41($,Z){let X=Mj0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function i46($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=lK(QJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(lK(QJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(lK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=lK(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(QJ(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:QJ(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(lK(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=B41(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(w41(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:B41(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:O41(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=lK(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&&w41(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":mv$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:m46(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:O41(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=d46(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(w41(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Mj0(X.period_end),lastStripeEventAt:O41(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function n46($,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:mv$(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 cv$($,Z){let X=n46($,Z);if(!X)return;nJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Dl1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function iv$($){let Z=new _W(m8().db),X=await i46(Z,$);if(!(X.handled&&X.topUp))cv$($,X);if(X.handled&&X.topUp)await RF$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),cv$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Ct1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof X3&&(Q.status===400||Q.status===404)))throw Q}return X}var l46=300;var nv$=B(()=>{LG();f4();c80();Sm();Zr0()});var p46=1048576,D41;var pv$=B(()=>{y8();mO();S$();nv$();D41=new B1;D41.post("/webhook",HZ({maxSize:p46,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=c0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!lv$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=dv$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await iv$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as t46}from"crypto";function r46($,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 t46(Buffer.from(Y),Buffer.from(Q))}var o46=5242880,L41;var tv$=B(()=>{y8();mO();Ci();L41=new B1;L41.post("/webhook",HZ({maxSize:o46,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(!r46(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 Sd0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function ov$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var rv$,a46,s46,av$;var sv$=B(()=>{y8();iJ();Mx();Sf();rv$=new B1,a46=["range","if-none-match","if-modified-since"],s46=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];rv$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(qg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await Wn(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&aJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return ov$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of a46){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 e1(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 e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of s46){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),ov$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});av$=rv$});var ho=C((iC)=>{var e46=iC&&iC.__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]}),$66=iC&&iC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))e46(Z,$,X)};Object.defineProperty(iC,"__esModule",{value:!0});$66($Y(),iC)});var Zb$=C((ev$)=>{Object.defineProperty(ev$,"__esModule",{value:!0});ev$.version=void 0;ev$.version="3.4.0"});var Yb$=C((dK)=>{var Z66=dK&&dK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(dK,"__esModule",{value:!0});dK.NodeTransport=dK.VERSION=void 0;dK.nodeResolveHost=W66;var d6=ho(),X66=z0("net"),E41=z0("tls"),Q66=z0("path"),Xb$=z0("fs"),Y66=Z66(z0("dns")),G66=Zb$();dK.VERSION=G66.version;var J66="nats.js";class Qb${socket;version;lang;yields=[];signal=(0,d6.deferred)();closedNotification=(0,d6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=J66,this.version=dK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,d6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw d6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new d6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new d6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,d6.deferred)(),X,Q=(0,X66.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,d6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=d6.DataBuffer.concat(...this.yields),Y=(0,d6.extractProtocolMessage)(Q);if(Y!=="")try{let G=d6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,d6.deferred)();try{if($=(0,Q66.resolve)($),!(0,Xb$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Xb$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,d6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new d6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,d6.deferred)();try{let Y=(0,E41.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new d6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,d6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,d6.deferred)();try{let Q=(0,E41.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new d6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,d6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof E41.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d6.render)($)}`);let Z=(0,d6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,d6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}dK.NodeTransport=Qb$;function W66($){let Z=(0,d6.deferred)();return Y66.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 Hb$=C((Kb$)=>{Object.defineProperty(Kb$,"__esModule",{value:!0});Kb$.connect=K66;var Gb$=Yb$(),Jb$=ho(),Wb$=ho();function K66($={}){if((0,Wb$.hasWsProtocol)($))return Promise.reject(Wb$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Jb$.setTransportFactory)({factory:()=>{return new Gb$.NodeTransport},dnsResolveFn:Gb$.nodeResolveHost}),Jb$.NatsConnectionImpl.connect($)}});var Nb$=C((GF)=>{var N66=GF&&GF.__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]}),F66=GF&&GF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))N66(Z,$,X)};Object.defineProperty(GF,"__esModule",{value:!0});GF.connect=void 0;var U66=Hb$();Object.defineProperty(GF,"connect",{enumerable:!0,get:function(){return U66.connect}});F66(ho(),GF)});function Ob$($){let Z=$?.connectFn??D66,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:B66,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=HX(O66,w66,O-1,2,0.5);await y$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?Fb$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=wb$.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 D66($){return Ub$.connect($)}var Fb$,Ub$,wb$,w66=100,O66=3000,B66=3000;var Bb$=B(()=>{E6();Fb$=S(jh(),1),Ub$=S(Nb$(),1),wb$=S(FB(),1)});function j41($,Z){return`${$}.${Z}`}class z41{cache;constructor($){this.cache=Ug({ttlMs:$?.ttlMs??L66,maxSize:$?.maxSize??E66})}async get($,Z){return this.cache.get(j41($,Z))??null}async set($,Z,X){this.cache.set(j41($,Z),X)}async invalidate($,Z){this.cache.delete(j41($,Z))}teardown(){this.cache.clear()}}var L66=600000,E66=5000;var Db$=()=>{};function kj0($,Z){return`${$}:${Z}`}function P41($){let Z=Ug({ttlMs:$?.ttlMs??j66,maxSize:$?.maxSize??z66}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(Lb$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(kj0(K,H))},set(K,H,N){Z.set(kj0(K,H),N)},invalidate(K,H){Z.delete(kj0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Lb$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(kj0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Lb$="studio.ai-provider-keys.invalidate",j66=30000,z66=5000;var Eb$=()=>{};class A41{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=jb$.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 jb$)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 jb$;var zb$=B(()=>{jb$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Pb$=($)=>{let Z;return()=>Z??=$()},T41,R41;var Ab$=B(()=>{Z5();T41=Pb$(()=>K8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),R41=Pb$(()=>K8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function M66(){return{name:qN,subjects:[`${Tw0}.>`],storage:n3.StorageType.File,max_age:T66,max_bytes:I66,max_msgs_per_subject:q66,discard:n3.DiscardPolicy.Old,retention:n3.RetentionPolicy.Limits,duplicate_window:R66,num_replicas:1}}class Ib${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 Tb$($){let Z=Rb$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function C66($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,A66().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 _66($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class I41{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=M66(),X=await gZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await n3.jetstreamManager($);try{await Q.streams.info(qN),await Q.streams.update(qN,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(qN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:_66});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=C66(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=H3$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=ei0(H,{runId:Z}),U=performance.now()-N;if(T41().record(U),R41().add(1,{"org.id":Q??"unknown"}),V66?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)G.publish(Y,w.subject,w.data,w.headers?Tb$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),S66)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=ei0(Z,{runId:$,dedup:X});if(T41().record(performance.now()-Y),R41().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:Tb$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=K3$({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"?n3.DeliverPolicy.New:n3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=YO($),W;try{W=await(await Q.consumers.get(qN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=kw0({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(Rw0()).pipeThrough(Iw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(qN,{filter:YO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var n3,Rb$,P66=($)=>{let Z;return()=>Z??=$()},A66,T66=86400000000000,R66=120000000000,I66=4294967296,q66=500000,k66,S66,V66;var qb$=B(()=>{E6();$n0();Sw0();qw0();Z5();Ab$();n3=S(FB(),1),Rb$=S(jh(),1),A66=P66(()=>K8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));k66=process.env.STREAM_ENCODE_TRACE==="1",S66=process.env.DECOPILOT_STREAM_TRACE==="1";V66=k66?new Ib$:null});function Sj0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,BW(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 Mb$=B(()=>{L8()});class q41{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 g66($){return $ instanceof LQ}class M41{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??v66;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??f66,X=this.options.itemIntervalMs??b66,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-GG$),bn0);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()-y66));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 Ai0(this.taskBoard,Y,Q),await Ti0(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!==d4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await MN(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),g66(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()+x66)).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(()=>{}),x4(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==d4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z);if(Q.length===0)return!1;let Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;if(await DW$(Y,X))return!0;let G=await Promise.all(Q.map(async(J)=>({...J,...await Cn0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!Vn0(G))return!1;return await fw0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var v66=60000,b66=300000,f66=50,x66=60000,y66=120000;var kb$=B(()=>{qZ();Tn0();GO();dw0();e9();Y3();fn0();gx()});import{readdir as h66,rm as Vj0}from"fs/promises";import{join as Cj0}from"path";async function _j0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-u66),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await nC($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Sb$($,Y,Z);else if(!Y.startsWith(".")){let G=Cj0($,Y),J=await nC(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Sb$(G,K,Z)}if((await nC(G)).length===0)await Vj0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Sb$($,Z,X){let Q=0,Y=Cj0($,Z),G=await nC(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=Cj0(Y,W),H=await nC(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Cj0(K,F);await Vj0(w,{recursive:!0,force:!0}),Q++}}if((await nC(K)).length===0)await Vj0(K,{recursive:!0,force:!0})}if((await nC(Y)).length===0)await Vj0(Y,{recursive:!0,force:!0});return Q}async function nC($){try{return(await h66($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var u66=30;var k41=()=>{};import{DBOS as S41,SchedulerMode as c66}from"@dbos-inc/dbos-sdk";async function d66(){let $=[KJ(),pC(),iK()],Z=0;for(let X of $)try{Z+=await _j0(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 m66($,Z){await S41.runStep(()=>d66(),{name:"monitoringRetention"})}function Cb$(){if(Vb$)return;Vb$=!0;let $=S41.registerWorkflow(m66,{name:"monitoringRetentionWorkflow"});S41.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:l66,mode:c66.ExactlyOncePerIntervalWhenActive})}var l66="23 4 * * *",Vb$=!1;var _b$=B(()=>{rQ();k41()});function vb$($){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 xK.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await p11($.db,Z,Q.role);return Y.boundAuth=n11({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new dD(X,void 0,Y.boundAuth,Q.role,"self"),Rg(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var bb$=B(()=>{mD();Lg()});function i66(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function p66(){for(let $ of n66)$()}function fb$($){let Z=[...V41.logs,$];V41={...V41,logs:Z.length>500?Z.slice(-500):Z},p66()}function C41(){return t66}var V41,n66,t66=!1;var _41=B(()=>{V41=i66(),n66=new Set});import{EventEmitter as o66}from"events";var v41;var xb$=B(()=>{_41();v41=new o66;v41.on("request",($)=>{fb$($)})});function yb$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=tg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>tg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${e6.tool}${w}${e6.dim}(${L})${e6.reset}`}else if(U.method)G=`${e6.dim}${tg(U.method)}${e6.reset}`}}catch{}}let W=tg(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${e6.mcp}${tg(N.slice(0,12))}\u2026${e6.reset}`}else if(Y==="/mcp")W=`${e6.mcp}/mcp${e6.reset}`;else if(Y==="/mcp/registry")W=`${e6.mcp}/mcp/registry${e6.reset}`;let K=a66(Q),H=J?"\u25C0":"\u2190";if(!C41())console.log(`${e6.dim}${H}${e6.reset} ${K}${Q}${e6.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=r66(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!C41())console.log(`${e6.dim}${O}${e6.reset} ${K}${Q}${e6.reset} ${W}${G?` ${G}`:""} ${U}${F}${e6.reset} ${e6.duration}${w}${e6.reset}`);v41.emit("request",{method:Q,path:tg(Y),status:F,duration:N,timestamp:new Date})}}}var e6,r66=($)=>{if($>=500)return e6.serverError;if($>=400)return e6.clientError;if($>=300)return e6.redirect;return e6.ok},a66=($)=>{return e6[$]||e6.reset},tg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var gb$=B(()=>{_41();xb$();e6={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as lb$}from"crypto";import{mkdir as s66,readdir as e66,rm as hb$,stat as db$}from"fs/promises";import{join as f41,relative as $56}from"path";import{z as E$}from"zod";function ib$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return f41(Z56,Z)}function nb$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function b41($,Z){let X=ib$($),Q=nb$(Z);return f41(X,Q)}function X56($,Z,X,Q){let Y=c0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return lb$("sha256",Y).update(G).digest("hex")}function cb$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=X56(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${nb$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function pb$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${lb$("md5","etag").update(Q).digest("hex")}"`}async function tb$($,Z,X,Q,Y){try{let G=await e66($,{withFileTypes:!0});for(let J of G){let W=f41($,J.name),H=$56(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await tb$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await db$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:pb$(W,N.mtime,N.size)})}catch{}}}}catch{}}function ob$($,Z){let Q=r($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=ib$(Q);await s66(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await tb$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=b41(Q,G.key),W=await db$(J);return{contentType:k$1(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:pb$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ub$;return{url:cb$(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:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ub$;return{url:cb$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(Y)=>{let G=Y,J=b41(Q,G.key);try{return await hb$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=b41(Q,K);try{await hb$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function x41($,Z,X){let Q=ob$(Z,X),Y=new AW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:G5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new lX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),lG(Y,G,$,"mcp:dev-assets")}async function rb$($,Z,X,Q){let G=ob$(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 Z56="./data/assets",ub$=3600,mb$,ab$;var sb$=B(()=>{S$();dx();y8();mc();bV();RX();dE0();mb$=new B1;mb$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return x41($.req.raw,Z,Q)});ab$=mb$});var eb$={};N4(eb$,{mountDevRoutes:()=>Q56});function Q56($,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 x41(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 rb$(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",ab$);let X=new B1;X.use("*",d3({mountPath:"/api/dev-assets"})),X.route("/",lE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var $f$=B(()=>{y8();z$1();dE0();sb$()});import{sql as Y56}from"kysely";import{randomUUID as Zf$}from"crypto";import{z as G56}from"zod";async function W56($){let Z=new Date().toISOString(),X=Zf$(),Q=h4.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:Zf$(),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 Y56`SELECT
2732
2732
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.204.18",
3
+ "version": "4.204.19",
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 S,F as K,b7 as Q,K as H,b as q,m as $,j as x}from"./index-xJ-XRYAR.js";import{u as G}from"./use-registry-connections-CuIADftK.js";import{f as U}from"./use-organization-settings-BxzOzCDD.js";import{S as k,n as V}from"./use-mcp-client-B1BWLy50.js";import{u as X}from"./useInfiniteQuery-D99nwGm8.js";import{i as Y,f as z}from"./extract-connection-data-DnN5mvZT.js";import{r as B,R as W}from"./retry-CErkP7V6.js";import{g as A}from"./connection-slug-eyAPH6o3.js";import{C as Z}from"./card-DlVtiE1P.js";import{I as J}from"./integration-icon-BJUqRzTU.js";function ye(){const s=S.c(6),e=G(),t=U(),n=K().project.enabledPlugins??[];let o;if(s[0]!==n||s[1]!==t||s[2]!==e){let c;s[4]!==t?(c=r=>t(r.id),s[4]=t,s[5]=c):c=s[5],o=e.filter(c).map(O),n.includes("private-registry")&&t(k)&&o.push({id:k,title:"Private Registry",icon:null}),s[0]=n,s[1]=t,s[2]=e,s[3]=o}else o=s[3];return o}function O(s){return{id:s.id,title:s.title,icon:s.icon}}const ee=24,L=3;function F(s){return s.id.includes("community-registry")}function te(s){const e=s?.trim().split(/\s+/).filter(Boolean)??[];if(e.length===0)return;const t=[["title"],["description"],["name"],["server","title"]];return{operator:"or",conditions:e.flatMap(n=>t.map(o=>({field:o,operator:"contains",value:n})))}}function D(s,e,t,n,o){const c=s.map(l=>l.id).sort().join(","),r=te(o),{data:p,fetchNextPage:d,hasNextPage:f,isFetchingNextPage:g,isLoading:C}=X({queryKey:H.storeDiscovery(e,`${c}:${o??""}`),queryFn:async({pageParam:l})=>{const a=l??{};return await Promise.all(s.map(async i=>{const y=a[i.id];if(y==="EXHAUSTED")return{registryId:i.id,registryTitle:i.title,registryIcon:i.icon,items:[]};const b=Y(i.id,e);try{return await B(async()=>{let u=null;try{u=await V({connectionId:i.id,orgId:e,orgSlug:t});const h={limit:ee};y&&(h.cursor=y),r&&(h.where=r);const N=await u.callTool({name:b,arguments:h}),v=N.structuredContent??N,P=v.nextCursor||v.cursor||void 0,j=z(v?[v]:[]);return{registryId:i.id,registryTitle:i.title,registryIcon:i.icon,items:j,nextCursor:P}}finally{await u?.close().catch(()=>{})}},{maxAttempts:L,minTimeout:0,maxTimeout:1e3,jitter:0})}catch(u){return console.warn(`[useMergedStoreDiscovery] Registry "${i.title}" (${i.id}) failed after ${L} attempts:`,u instanceof W?u.cause:u),{registryId:i.id,registryTitle:i.title,registryIcon:i.icon,items:[]}}}))},initialPageParam:{},getNextPageParam:l=>{const a={};let m=!1;for(const i of l)i.registryId&&(i.nextCursor?(a[i.registryId]=i.nextCursor,m=!0):a[i.registryId]="EXHAUSTED");return m?a:void 0},staleTime:3600*1e3,placeholderData:Q,retry:!1,enabled:s.length>0}),I=[];if(p?.pages)for(const l of p.pages)for(const a of l)for(const m of a.items)I.push({...m,_sourceName:m._sourceName??a.registryTitle,_sourceIcon:m._sourceIcon??a.registryIcon,_registryId:m._registryId??a.registryId});return{items:I,hasMore:f??!1,isLoadingMore:g,isInitialLoading:C,fetchNextPage:()=>{f&&!g&&d()}}}function he(s,e){const t=S.c(16),{org:n}=K();let o;t[0]!==s?(o=s.filter(ie),t[0]=s,t[1]=o):o=t[1];const c=o;let r;t[2]!==s?(r=s.filter(se),t[2]=s,t[3]=r):r=t[3];const p=r,d=D(c,n.id,n.slug,!0,e),f=D(p,n.id,n.slug,!0,e);let g;if(t[4]!==f.items||t[5]!==d.items){const y=new Set;g=[];const b=[...d.items,...f.items];for(const u of b){const h=`${u._registryId}:${u.id}`;y.has(h)||(y.add(h),g.push(u))}t[4]=f.items,t[5]=d.items,t[6]=g}else g=t[6];const C=d.isInitialLoading||f.isInitialLoading,I=d.isLoadingMore||f.isLoadingMore,l=d.hasMore||f.hasMore;let a;t[7]!==f||t[8]!==d?(a=()=>{d.hasMore&&d.fetchNextPage(),f.hasMore&&f.fetchNextPage()},t[7]=f,t[8]=d,t[9]=a):a=t[9];const m=a;let i;return t[10]!==l||t[11]!==C||t[12]!==I||t[13]!==g||t[14]!==m?(i={items:g,hasMore:l,isLoadingMore:I,isInitialLoading:C,loadMore:m},t[10]=l,t[11]=C,t[12]=I,t[13]=g,t[14]=m,t[15]=i):i=t[15],i}function se(s){return F(s)}function ie(s){return!F(s)}function xe(s){const e=new Map;for(const o of s){const c=A(o),r=e.get(c);r?r.push(o):e.set(c,[o])}const t=[],n=new Set;for(const o of s){const c=A(o);if(n.has(c))continue;n.add(c);const r=e.get(c),p=r[0];r.length===1?t.push({type:"single",connection:p}):t.push({type:"group",key:c,icon:p.icon,title:p.app_name?p.title.replace(/\s*\(\d+\)\s*$/,""):p.title,connections:r})}return t}function ve(s){const e=S.c(45),{connection:t,onClick:n,headerActions:o,headerActionsAlwaysVisible:c,body:r,footer:p,className:d,fallbackIcon:f}=s,g=c===void 0?!1:c,C=q(),I=n&&"cursor-pointer hover:bg-muted/50";let l;e[0]!==d||e[1]!==I?(l=$("transition-colors group overflow-hidden flex flex-col h-full",I,d),e[0]=d,e[1]=I,e[2]=l):l=e[2];const a=n?"button":void 0,m=n?0:void 0;let i;e[3]!==n?(i=n?E=>{E.target===E.currentTarget&&(E.key==="Enter"||E.key===" ")&&(E.preventDefault(),n())}:void 0,e[3]=n,e[4]=i):i=e[4];let y;e[5]!==t.icon||e[6]!==t.title||e[7]!==f?(y=x.jsx(J,{icon:t.icon,name:t.title,size:"sm",className:"shrink-0 shadow-sm",fallbackIcon:f}),e[5]=t.icon,e[6]=t.title,e[7]=f,e[8]=y):y=e[8];let b;e[9]!==o||e[10]!==g?(b=o&&x.jsx("div",{className:$("transition-opacity",!g&&"sm:opacity-0 sm:group-hover:opacity-100 sm:group-focus-within:opacity-100"),onClick:ne,children:o}),e[9]=o,e[10]=g,e[11]=b):b=e[11];let u;e[12]!==b?(u=x.jsx("div",{className:"relative",children:b}),e[12]=b,e[13]=u):u=e[13];let h;e[14]!==y||e[15]!==u?(h=x.jsxs("div",{className:"flex items-start justify-between",children:[y,u]}),e[14]=y,e[15]=u,e[16]=h):h=e[16];let N;e[17]!==t.title?(N=x.jsx("h3",{className:"text-sm font-medium text-foreground truncate",children:t.title}),e[17]=t.title,e[18]=N):N=e[18];let v;e[19]!==t.description||e[20]!==C?(v=t.description||C("connections.connectionCard.noDescription"),e[19]=t.description,e[20]=C,e[21]=v):v=e[21];let P;e[22]!==v?(P=x.jsx("p",{className:"text-sm text-muted-foreground line-clamp-2",children:v}),e[22]=v,e[23]=P):P=e[23];let j;e[24]!==N||e[25]!==P?(j=x.jsxs("div",{className:"flex flex-col gap-1",children:[N,P]}),e[24]=N,e[25]=P,e[26]=j):j=e[26];let R;e[27]!==r?(R=r&&x.jsx("div",{children:r}),e[27]=r,e[28]=R):R=e[28];let M;e[29]!==h||e[30]!==j||e[31]!==R?(M=x.jsxs("div",{className:"flex flex-col gap-3 p-4.5",children:[h,j,R]}),e[29]=h,e[30]=j,e[31]=R,e[32]=M):M=e[32];let w;e[33]!==p?(w=p&&x.jsx("div",{className:"border-t border-border mt-auto",children:x.jsx("div",{className:"h-14 flex items-center p-4.5",onClick:oe,children:p})}),e[33]=p,e[34]=w):w=e[34];let T;e[35]!==M||e[36]!==w?(T=x.jsxs("div",{className:"flex flex-col flex-1",children:[M,w]}),e[35]=M,e[36]=w,e[37]=T):T=e[37];let _;return e[38]!==n||e[39]!==T||e[40]!==l||e[41]!==a||e[42]!==m||e[43]!==i?(_=x.jsx(Z,{className:l,onClick:n,role:a,tabIndex:m,onKeyDown:i,children:T}),e[38]=n,e[39]=T,e[40]=l,e[41]=a,e[42]=m,e[43]=i,e[44]=_):_=e[44],_}function oe(s){return s.stopPropagation()}function ne(s){return s.stopPropagation()}export{ve as C,he as a,xe as g,ye as u};
@@ -1 +0,0 @@
1
- import{d as D,b as H,c as W,a as j}from"./auth-DMNwJoP9.js";import{cz as R}from"./index-xJ-XRYAR.js";function M(t){let e=0;for(let n=0;n<t.length;n++){const o=t.charCodeAt(n);e=(e<<5)-e+o,e=e&e}return Math.abs(e).toString(16)}function J(){return window.location.origin}function L(){try{const t=window.location.hostname;return t==="localhost"||t.endsWith(".localhost")||t==="127.0.0.1"||t==="::1"}catch{return!1}}const C=new Map,$="mcp:oauth:callback:";let A=null;class K{serverUrl;_clientMetadata;_redirectUrl;_windowMode;_state=null;_codeVerifier=null;_clientInfo=null;_tokens=null;constructor(e){this.serverUrl=e.serverUrl,this._redirectUrl=e.callbackUrl??A?.redirectUrl??`${J()}/oauth/callback`,this._windowMode=e.windowMode??"popup";const n=e.scope?Array.isArray(e.scope)?e.scope.join(" "):e.scope:void 0;this._clientMetadata={redirect_uris:[this._redirectUrl],token_endpoint_auth_method:"none",grant_types:["authorization_code","refresh_token"],response_types:["code"],client_name:e.clientName??"@decocms/studio MCP client",...n&&{scope:n}},C.set(M(this.serverUrl),this)}get redirectUrl(){return this._redirectUrl}get clientMetadata(){return this._clientMetadata}state(){return this._state||(this._state=crypto.randomUUID()),this._state}getStoredState(){return this._state}clientInformation(){return this._clientInfo??void 0}saveClientInformation(e){this._clientInfo=e}tokens(){return this._tokens??void 0}saveTokens(e){this._tokens=e}redirectToAuthorization(e){if(this._windowMode==="tab"){if(!window.open(e.toString(),"_blank"))throw new Error("Tab was blocked")}else{const i=window.screenX+(window.outerWidth-600)/2,s=window.screenY+(window.outerHeight-700)/2;if(!window.open(e.toString(),"mcp-oauth",`width=600,height=700,left=${i},top=${s},popup=yes`)&&!window.open(e.toString(),"_blank"))throw new Error("Popup was blocked")}}saveCodeVerifier(e){this._codeVerifier=e}codeVerifier(){if(!this._codeVerifier)throw new Error("Code verifier not found");return this._codeVerifier}invalidateCredentials(){this._clientInfo=null,this._tokens=null,this._codeVerifier=null,this._state=null}getServerUrl(){return this.serverUrl}cleanup(){C.delete(M(this.serverUrl))}}async function Z(t){const e=R(t,window.location.origin),n=t.orgSlug?`/api/${encodeURIComponent(t.orgSlug)}/mcp/${t.connectionId}`:`/mcp/${t.connectionId}`,o=new URL(n,e),i=new K({serverUrl:o.href,clientName:t.clientName,clientUri:t.clientUri,callbackUrl:t.callbackUrl,scope:t.scope,windowMode:t.windowMode}),s={fn:null};try{const r=new Promise((c,d)=>{const b=t.timeout||12e4;let w,P,p=!1;const V=i.state(),v=`${$}${V}`,h=()=>{window.removeEventListener("message",I),window.removeEventListener("storage",O),clearTimeout(w),clearInterval(P);try{localStorage.removeItem(v)}catch{}};s.fn=u=>{p||(p=!0,h(),d(u))};const U=async u=>{if(p)return;if(p=!0,!u.success){h(),d(new Error(u.error||"OAuth authentication failed"));return}const{code:_,state:x}=u;if(!_){h(),d(new Error("Missing authorization code"));return}if(i.getStoredState()!==x){h(),d(new Error("OAuth state mismatch - possible CSRF attack"));return}try{const E=(await D(o))?.authorization_servers?.[0]||o,S=await H(E),g=i.clientInformation();if(!g){h(),d(new Error("Client information not found"));return}const N=i.codeVerifier(),z=await W(E,{metadata:S,clientInformation:g,authorizationCode:_,codeVerifier:N,redirectUri:i.redirectUrl,resource:new URL(o)});h(),c({tokens:z,clientId:g.client_id??null,clientSecret:"client_secret"in g?g.client_secret:null,tokenEndpoint:S?.token_endpoint??null,userinfoEndpoint:S?.userinfo_endpoint??null})}catch(T){h(),d(T)}},I=async u=>{!L()&&u.origin!==window.location.origin||u.data?.type==="mcp:oauth:callback"&&await U(u.data)},O=async u=>{if(!(u.key!==v||!u.newValue))try{const _=JSON.parse(u.newValue);await U(_)}catch{}};window.addEventListener("message",I),window.addEventListener("storage",O),w=setTimeout(()=>{p||(p=!0,h(),d(new Error("OAuth authentication timeout")))},b)});if(r.catch(()=>{}),await j(i,{serverUrl:o})==="REDIRECT"){const c=await r,d=c.tokens;return{token:c.tokens.access_token,tokenInfo:{accessToken:c.tokens.access_token,refreshToken:c.tokens.refresh_token??null,expiresIn:c.tokens.expires_in??null,scope:c.tokens.scope??null,clientId:c.clientId,clientSecret:c.clientSecret,tokenEndpoint:c.tokenEndpoint,userinfoEndpoint:c.userinfoEndpoint,idToken:typeof d.id_token=="string"?d.id_token:null},error:null}}const l=i.tokens(),f=i.clientInformation(),k=l;return{token:l?.access_token||null,tokenInfo:l?{accessToken:l.access_token,refreshToken:l.refresh_token??null,expiresIn:l.expires_in??null,scope:l.scope??null,clientId:f?.client_id??null,clientSecret:f&&"client_secret"in f?f.client_secret:null,tokenEndpoint:null,userinfoEndpoint:null,idToken:k&&typeof k.id_token=="string"?k.id_token:null}:null,error:null}}catch(r){return s.fn&&s.fn(r instanceof Error?r:new Error(String(r))),{token:null,tokenInfo:null,error:r instanceof Error?r.message:String(r)}}finally{i.cleanup()}}function y(t,e){if(window.opener&&!window.opener.closed){const n=L()?"*":window.location.origin;return window.opener.postMessage(t,n),!0}if(e)try{const n=`${$}${e}`;return localStorage.setItem(n,JSON.stringify(t)),!0}catch{}return!1}async function B(){const t=new URLSearchParams(window.location.search),e=t.get("code");let n=t.get("state");const o=t.get("error"),i=t.get("error_description");let s=n;if(n)try{const a=atob(n),l=JSON.parse(a);l.clientState&&(s=l.clientState)}catch{}if(o){const a=i||o;return y({type:"mcp:oauth:callback",success:!1,error:a},s),{success:!1,error:a}}if(!e||!n){const a="Missing code or state parameter";return y({type:"mcp:oauth:callback",success:!1,error:a},s),{success:!1,error:a}}return n=s||n,y({type:"mcp:oauth:callback",success:!0,code:e,state:n},n)?{success:!0}:{success:!1,error:"Parent window not available"}}function m(){if(typeof window<"u"&&window.location?.origin)return window.location.origin}function F(t){try{const e=m(),n=e?new URL(t,e):new URL(t),o=n.pathname.match(/^\/api\/[^/]+\/mcp\/([^/]+)/);return o?o[1]??null:n.pathname.match(/^\/mcp\/([^/]+)/)?.[1]??null}catch{return null}}function Y(t){try{const e=m();return(e?new URL(t,e):new URL(t)).pathname.match(/^\/api\/([^/]+)\/mcp\//)?.[1]??null}catch{return null}}async function G(t,e,n){try{const o=`/api/${encodeURIComponent(e)}/connections/${t}/oauth-token/status`,i=n?new URL(o,n).href:o,s=m(),r=!n||new URL(n).origin===s,a=await fetch(i,{credentials:r?"include":"omit"});return a.ok?{hasToken:(await a.json()).hasToken===!0}:{hasToken:!1}}catch{return{hasToken:!1}}}async function ee({url:t,token:e,orgId:n,studioUrl:o,meshUrl:i}){try{const s=new Headers;s.set("Content-Type","application/json"),s.set("Accept","application/json, text/event-stream");const r=await fetch(t,{method:"POST",headers:s,body:JSON.stringify({jsonrpc:"2.0",id:1,method:"initialize",params:{protocolVersion:"2025-06-18",capabilities:{},clientInfo:{name:"@decocms/studio MCP client",version:"1.0.0"}}})}),a=F(t),l=Y(t),f=m(),k=R({studioUrl:o,meshUrl:i},f?new URL(t,f).origin:new URL(t).origin);if(r.ok)return{isAuthenticated:!0,supportsOAuth:!1,hasOAuthToken:(a&&l?await G(a,l,k):{hasToken:!1}).hasToken};let c;try{const w=await r.json();c=w.error||w.message}catch{}return r.status>=500?{isAuthenticated:!1,supportsOAuth:!1,hasOAuthToken:!1,error:c||`HTTP ${r.status}`,isServerError:!0}:{isAuthenticated:!1,supportsOAuth:!!r.headers.get("WWW-Authenticate"),hasOAuthToken:!1,error:c||`HTTP ${r.status}`}}catch(s){return console.error("[isConnectionAuthenticated] Error:",s),{isAuthenticated:!1,supportsOAuth:!1,hasOAuthToken:!1,error:s.message}}}export{Z as a,B as h,ee as i};
@@ -1 +0,0 @@
1
- import{c as L,b as R,j as r}from"./index-xJ-XRYAR.js";import{I as A}from"./input-CaeA30s8.js";import{L as I}from"./label-Dk5C261K.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-DG2G8_4E.js";import{T as D}from"./textarea-Ce-M-_T4.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-0ShATd68.js";import{s as F}from"./primitives-t6RcAgaY.js";import{u as Q}from"./use-autosave-C3hyjlza.js";import"./tooltip-BfqmkdWi.js";import"./Check-C9g8lYUy.js";import"./ChevronDown-bB7amz8q.js";import"./ChevronUp-BUUqb_PA.js";import"./ArrowUp-BRS4N1Ka.js";import"./chat-context-KHaC5yqn.js";import"./tab-id-DMPFjMVY.js";import"./dialog-Dpr45CPK.js";import"./X-mzjkVBPI.js";import"./Copy01-GIrkO-IX.js";import"./hooks-C75SoLM6.js";import"./use-mcp-client-B1BWLy50.js";import"./auth-DMNwJoP9.js";import"./decopilot-sse-pool-DaHIjN-h.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DFaaLXQ6.js";import"./use-ai-providers-DEuEveED.js";import"./studio-tools-59Q0hGQZ.js";import"./use-decopilot-events-D-4PgEM9.js";import"./use-organization-settings-BxzOzCDD.js";import"./automation-runs-DeJv5Njg.js";import"./agent-icon-DXovVOPx.js";import"./AlertCircle-DB-ckBrE.js";import"./Tool01-CsrjTAG7.js";import"./ArrowLeft-B4gtisED.js";import"./Tool02-BNfkUjwV.js";import"./XCircle-pc1C9qKm.js";import"./ArrowUpRight-DG7GdYT7.js";import"./TrendUp01-Dq9iNEDU.js";import"./ZapSquare-9vd8o_Iq.js";import"./Users03-CWZKHYsC.js";import"./CheckCircle-Cj0fYJne.js";import"./ChevronRight-AQN-xIC0.js";import"./DotsVertical-T_sTiOT8.js";import"./Stars02-CzNkFXWp.js";import"./CpuChip01-Cu_c35WV.js";import"./CreditCard01-BltwbuBg.js";import"./Globe01-DpN1067_.js";import"./Settings02-yuFpWJDP.js";import"./Eye-DnhO_hsm.js";import"./FilterLines-DZcYLw-s.js";import"./Share07-k8GzwHCF.js";import"./Star01-ClLm8Tan.js";import"./Globe04-WsTV4LAt.js";import"./SwitchHorizontal01-CWng5j8J.js";import"./HardDrive-TcUDtxRV.js";import"./Key01-WwCFVmKM.js";import"./LayoutLeft-BPZ4KYEK.js";import"./LinkExternal01-DTD5n9BN.js";import"./LogOut01-C1gkNUc9.js";import"./Monitor01-BbjqlgN0.js";import"./Sun-D5MQ6ayk.js";import"./Palette-BevapI0V.js";import"./Play-BYd8UexI.js";import"./Plus-Cn8um1w7.js";import"./SearchLg-BmNBhyI8.js";import"./SearchMd-B6b-ihSy.js";import"./Shield01-BBYDXK18.js";import"./Stars01-B7yOME1T.js";import"./Trash01-DoZKkmi_.js";import"./Upload01-C6JxwWH-.js";import"./User01-DaYf4DQE.js";import"./Users01-BAVIEtKu.js";import"./XClose-Z8m07P1-.js";import"./Zap-BWnjbuSs.js";import"./useInfiniteQuery-D99nwGm8.js";import"./use-infinite-scroll-VHzs-jV3.js";import"./use-connection-D8egYA-W.js";import"./card-DlVtiE1P.js";import"./sidebar-DgzL0TZx.js";import"./use-mobile-BERGRE8M.js";import"./table-DdBFuBCe.js";import"./empty-state-b693c_WL.js";import"./use-members-BJptxYFF.js";import"./use-org-auth-client-DnVzL_m_.js";import"./use-clock-tick-CB91er50.js";import"./use-automations-B3GqyJXt.js";import"./useSuspenseInfiniteQuery-ZoR3Afu0.js";import"./avatar-BVbLXf83.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DxXXQbU0.js";import"./monaco-editor-Dz4TuSeq.js";import"./spinner-D_tdOrU1.js";import"./index-B-kJXBNg.js";import"./shell-layout-MwJkIcMj.js";import"./required-auth-layout-tXxbqMGM.js";import"./use-org-sso-DwxVVgzC.js";import"./integration-icon-BJUqRzTU.js";import"./use-navigate-to-agent-BG4o1y5_.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-DUmsDO0N.js";import"./form-CRlX1Bg9.js";import"./file-type-icon-DaIcKlT8.js";import"./drawer-9ACoqfu8.js";import"./collection-search-BrMipw4M.js";import"./tabs-D7BxTHg-.js";import"./toggle-group-C-OTBaJ7.js";import"./use-deco-credits-B-S7aQYb.js";import"./popover-BqW4hZxl.js";import"./alert-dialog-0wH9WZcH.js";import"./toolbar-Dia0tjgS.js";import"./skeleton-CsrubTeH.js";import"./github-repo-picker-Dehjfdq1.js";import"./use-debounced-value-DDvNQ5hI.js";import"./authenticate-and-persist-oauth-CqpOGhLe.js";import"./mcp-oauth-CU91H6fy.js";import"./use-mcp-tools-b1tvb8KH.js";import"./extract-connection-data-DnN5mvZT.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-ufuvpGD9.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-DDJv808C.js";import"./use-registry-connections-CuIADftK.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-MurTJjK1.js";import"./collection-tabs-CFgNGIhn.js";import"./badge-BB5-MMOO.js";import"./use-open-billing-url-rBMxHPAT.js";import"./select-model-jPupeW9h.js";import"./checkbox-DTP7nSZy.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-bJafzgMr.js";import"./cards-DryD-HK5.js";import"./dropdown-menu-CDzlcVZz.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-DpXL09mS.js";import"./deco-site-production-url-CaKZ7xBn.js";import"./use-capability-BMYX1K_9.js";import"./pt-BR-CLy76QW2.js";import"./switch-Cep3Uev2.js";import"./use-debounced-autosave-Bb8FHw6r.js";import"./index-DVcARGfd.js";import"./search-input-CsJqG-73.js";import"./index-CPkU3e_o.js";import"./use-secrets-1fZfj778.js";import"./self-tool-result-C6kxNAzY.js";import"./use-tags-Q_sl7B4Y.js";import"./get-initials-D-f_fDFw.js";import"./command-Bpcaup_P.js";import"./index-ubCFUv-4.js";import"./use-file-configs-DXsUWJYN.js";import"./automation-list-row-DNO7bW6J.js";const X={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 Wr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=R(),P=M(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=U(b);let k;t[5]!==f||t[6]!==a?(k=W(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=X[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(z,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(J,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx($,{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(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{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{Wr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-CxtAj3hD.js","assets/index-xJ-XRYAR.js","assets/index-GO9q_qH2.css","assets/Tool02-BNfkUjwV.js","assets/CheckCircle-Cj0fYJne.js","assets/Settings02-yuFpWJDP.js","assets/use-mcp-client-B1BWLy50.js","assets/auth-DMNwJoP9.js","assets/useInfiniteQuery-D99nwGm8.js","assets/use-infinite-scroll-VHzs-jV3.js","assets/studio-tools-59Q0hGQZ.js","assets/badge-BB5-MMOO.js","assets/input-CaeA30s8.js","assets/dropdown-menu-CDzlcVZz.js","assets/Check-C9g8lYUy.js","assets/ChevronRight-AQN-xIC0.js","assets/DotsVertical-T_sTiOT8.js","assets/table-DdBFuBCe.js","assets/toggle-group-C-OTBaJ7.js","assets/use-view-mode-3iFgfUss.js","assets/use-mobile-BERGRE8M.js","assets/FilterLines-DZcYLw-s.js","assets/Globe01-DpN1067_.js","assets/SearchMd-B6b-ihSy.js","assets/dialog-Dpr45CPK.js","assets/X-mzjkVBPI.js","assets/AlertCircle-DB-ckBrE.js","assets/Upload01-C6JxwWH-.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-0wH9WZcH.js","assets/card-DlVtiE1P.js","assets/Trash01-DoZKkmi_.js","assets/label-Dk5C261K.js","assets/select-DG2G8_4E.js","assets/tooltip-BfqmkdWi.js","assets/ChevronDown-bB7amz8q.js","assets/ChevronUp-BUUqb_PA.js","assets/switch-Cep3Uev2.js","assets/textarea-Ce-M-_T4.js","assets/ArrowLeft-B4gtisED.js","assets/XCircle-pc1C9qKm.js","assets/checkbox-DTP7nSZy.js","assets/Eye-DnhO_hsm.js","assets/LinkExternal01-DTD5n9BN.js","assets/use-copy-DxXXQbU0.js","assets/Copy01-GIrkO-IX.js","assets/Key01-WwCFVmKM.js","assets/Plus-Cn8um1w7.js","assets/mcp-oauth-CU91H6fy.js","assets/Play-BYd8UexI.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,aG as o}from"./index-xJ-XRYAR.js";import{R as m}from"./require-capability-CbX5kCeb.js";import"./use-capability-BMYX1K_9.js";import"./access-gate-CnOlfB_G.js";import"./capability-load-error-Dv7WqY0o.js";const n=s.lazy(()=>o(()=>import("./registry-layout-CxtAj3hD.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-CxtAj3hD.js","assets/index-xJ-XRYAR.js","assets/index-GO9q_qH2.css","assets/Tool02-BNfkUjwV.js","assets/CheckCircle-Cj0fYJne.js","assets/Settings02-yuFpWJDP.js","assets/use-mcp-client-B1BWLy50.js","assets/auth-DMNwJoP9.js","assets/useInfiniteQuery-D99nwGm8.js","assets/use-infinite-scroll-VHzs-jV3.js","assets/studio-tools-59Q0hGQZ.js","assets/badge-BB5-MMOO.js","assets/input-CaeA30s8.js","assets/dropdown-menu-CDzlcVZz.js","assets/Check-C9g8lYUy.js","assets/ChevronRight-AQN-xIC0.js","assets/DotsVertical-T_sTiOT8.js","assets/table-DdBFuBCe.js","assets/toggle-group-C-OTBaJ7.js","assets/use-view-mode-3iFgfUss.js","assets/use-mobile-BERGRE8M.js","assets/FilterLines-DZcYLw-s.js","assets/Globe01-DpN1067_.js","assets/SearchMd-B6b-ihSy.js","assets/dialog-Dpr45CPK.js","assets/X-mzjkVBPI.js","assets/AlertCircle-DB-ckBrE.js","assets/Upload01-C6JxwWH-.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-0wH9WZcH.js","assets/card-DlVtiE1P.js","assets/Trash01-DoZKkmi_.js","assets/label-Dk5C261K.js","assets/select-DG2G8_4E.js","assets/tooltip-BfqmkdWi.js","assets/ChevronDown-bB7amz8q.js","assets/ChevronUp-BUUqb_PA.js","assets/switch-Cep3Uev2.js","assets/textarea-Ce-M-_T4.js","assets/ArrowLeft-B4gtisED.js","assets/XCircle-pc1C9qKm.js","assets/checkbox-DTP7nSZy.js","assets/Eye-DnhO_hsm.js","assets/LinkExternal01-DTD5n9BN.js","assets/use-copy-DxXXQbU0.js","assets/Copy01-GIrkO-IX.js","assets/Key01-WwCFVmKM.js","assets/Plus-Cn8um1w7.js","assets/mcp-oauth-CU91H6fy.js","assets/Play-BYd8UexI.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,aG as p}from"./index-xJ-XRYAR.js";import{R as u}from"./require-capability-CbX5kCeb.js";import"./use-capability-BMYX1K_9.js";import"./access-gate-CnOlfB_G.js";import"./capability-load-error-Dv7WqY0o.js";const g=l.lazy(()=>p(()=>import("./registry-layout-CxtAj3hD.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-VHzs-jV3.js";import{e4 as i}from"./index-xJ-XRYAR.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-VHzs-jV3.js";import{e4 as u,b2 as n}from"./index-xJ-XRYAR.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};