decocms 4.206.0 → 4.207.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist/client/assets/{AlertCircle-BxSKdGwn.js → AlertCircle-BIsXZUEO.js} +1 -1
  2. package/dist/client/assets/{AreaChart-B5Dq_HHA.js → AreaChart-CoasZrX-.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-DHgUSIjl.js → ArrowLeft-BNm4jfzs.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-0UYw-7b4.js → ArrowUp-u32tNbR1.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-BU3dPVLt.js → ArrowUpRight-DVVt11mJ.js} +1 -1
  6. package/dist/client/assets/{Check-CGendfqp.js → Check-Bs-R8wY0.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-WDzQkQiz.js → CheckCircle-CGtmaXJ3.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-L-u3DyKW.js → ChevronDown-CAqrusJs.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-BtaQLwHD.js → ChevronRight-Cd_UlsvT.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-CijFh3hP.js → ChevronUp-DHpSE6iq.js} +1 -1
  11. package/dist/client/assets/{Copy01-Do7yibd4.js → Copy01-CZJepdy4.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-CIZTJ_lJ.js → CpuChip01-C8cqXunC.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-DT5Svr4V.js → CreditCard01-D6PzfgWu.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-BOOO8Z06.js → DotsVertical-Vpwvdr0J.js} +1 -1
  15. package/dist/client/assets/{Eye-B1Dk5b7o.js → Eye-BPXX6VoG.js} +1 -1
  16. package/dist/client/assets/{FilterLines-CNSY69Nf.js → FilterLines-CgbRxiww.js} +1 -1
  17. package/dist/client/assets/{Globe01-BXwbwCtl.js → Globe01-D-EcIcjy.js} +1 -1
  18. package/dist/client/assets/{Globe04-D2Gmf6um.js → Globe04-BJ1ETG77.js} +1 -1
  19. package/dist/client/assets/{HardDrive-DQ_RzgpK.js → HardDrive-CW66Zlzo.js} +1 -1
  20. package/dist/client/assets/{Key01-Ne-7PCFW.js → Key01-Dm0VSwoE.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-CryEkkNK.js → LayoutLeft-DAM1ssfV.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-BBMs27D3.js → LinkExternal01-CGD6IOB8.js} +1 -1
  23. package/dist/client/assets/{LogOut01-B-eWWAlW.js → LogOut01-CLpRV4f-.js} +1 -1
  24. package/dist/client/assets/{Monitor01-Do0GvDoo.js → Monitor01-BNJLU4eV.js} +1 -1
  25. package/dist/client/assets/{Palette-CycUamjm.js → Palette-G2-WnzIs.js} +1 -1
  26. package/dist/client/assets/{Play-BMI85hmU.js → Play-BDuxhiMt.js} +1 -1
  27. package/dist/client/assets/{Plus-DmqwOgOw.js → Plus-B0eVBe4O.js} +1 -1
  28. package/dist/client/assets/{SearchLg-CjSE-zfT.js → SearchLg-COL5Pxp8.js} +1 -1
  29. package/dist/client/assets/{SearchMd-pIoHxr1C.js → SearchMd-98Yunm63.js} +1 -1
  30. package/dist/client/assets/{Settings02-D60tB7CH.js → Settings02-Cdk2KHA2.js} +1 -1
  31. package/dist/client/assets/{Share07-BNzlDrGh.js → Share07-DUxBHhPW.js} +1 -1
  32. package/dist/client/assets/{Shield01-eUhTHTk2.js → Shield01-CWIglVdc.js} +1 -1
  33. package/dist/client/assets/{Star01-CSXGNeDo.js → Star01-bE5Nu5fA.js} +1 -1
  34. package/dist/client/assets/{Stars01-Q3_BVD0U.js → Stars01-Co1kSV-L.js} +1 -1
  35. package/dist/client/assets/{Stars02-BHYCs5_w.js → Stars02-BkdGU3id.js} +1 -1
  36. package/dist/client/assets/{Sun-Dl-eIxLc.js → Sun-DxdxUNls.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-B6kezaUt.js → SwitchHorizontal01-DjU8_mcJ.js} +1 -1
  38. package/dist/client/assets/{Tool01-D3J6cTd9.js → Tool01-DwPmealV.js} +1 -1
  39. package/dist/client/assets/{Tool02-BUR_EhNf.js → Tool02-DQj02UM8.js} +1 -1
  40. package/dist/client/assets/{Trash01-BRczc2aB.js → Trash01-BkDAP6Ui.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-CCE3qO_e.js → TrendUp01-CdZjUaI8.js} +1 -1
  42. package/dist/client/assets/{Upload01-DudWBp1A.js → Upload01-98MfYlMN.js} +1 -1
  43. package/dist/client/assets/{User01-CUM3VcmX.js → User01-yY2eh1_d.js} +1 -1
  44. package/dist/client/assets/{Users01-BqhOZUm5.js → Users01-CsLOaOqj.js} +1 -1
  45. package/dist/client/assets/{Users03-FcjfdeK5.js → Users03-DM0x0Tg1.js} +1 -1
  46. package/dist/client/assets/{X-Dg9nGHx6.js → X-BbkFrdIq.js} +1 -1
  47. package/dist/client/assets/{XCircle-hfO0RAHX.js → XCircle-CJrledJK.js} +1 -1
  48. package/dist/client/assets/{XClose-C9SOxh4e.js → XClose-HopZyIt-.js} +1 -1
  49. package/dist/client/assets/{Zap-BMYRtQec.js → Zap-D__0UMqn.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-C7n68AkH.js → ZapSquare-Cc7FxAwc.js} +1 -1
  51. package/dist/client/assets/{access-gate-BaxhPl0V.js → access-gate-C8DnsdiI.js} +1 -1
  52. package/dist/client/assets/{agent-icon-BQZo2J1D.js → agent-icon-1vKhAiKW.js} +1 -1
  53. package/dist/client/assets/{agents-list-BFcGHA4B.js → agents-list-DaBNoT0j.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DpkS53-w.js → ai-providers-DfQ-3Mtn.js} +1 -1
  55. package/dist/client/assets/{alert-dialog-DuMXFsMU.js → alert-dialog-B94RKrpB.js} +1 -1
  56. package/dist/client/assets/{alert-Dmp-2CNY.js → alert-wnC44Lcu.js} +1 -1
  57. package/dist/client/assets/{app-editor-rWkmJUfF.js → app-editor-DnQbSXlY.js} +1 -1
  58. package/dist/client/assets/{auth-CHPRbbQ8.js → auth-BCvvRTRT.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-Cn33t0Kj.js → auth-catchall-BDWRJ7VM.js} +1 -1
  60. package/dist/client/assets/{auth-entry-BvmrBkCk.js → auth-entry-CIdfCkx0.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-ujo47rOK.js → auth-split-layout-7vwIV9m_.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-D1Dr5xOa.js → authenticate-and-persist-oauth-Cl9pN4A7.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-DjCWBzcc.js → automation-list-row-B8lsVwA9.js} +1 -1
  64. package/dist/client/assets/{automation-runs-DbVYJIhJ.js → automation-runs-COGzW48W.js} +1 -1
  65. package/dist/client/assets/{automations-B4E-arjt.js → automations-D-A522sd.js} +1 -1
  66. package/dist/client/assets/{avatar-Bkst09s_.js → avatar-DdgFyVIK.js} +1 -1
  67. package/dist/client/assets/{badge-KgAI-To8.js → badge-Ds1Wnxgf.js} +1 -1
  68. package/dist/client/assets/{billing-eyd5z94X.js → billing-Yb3sA68U.js} +1 -1
  69. package/dist/client/assets/{block-document-BFBoADCh.js → block-document-DVEtY996.js} +1 -1
  70. package/dist/client/assets/{brand-context-v_ZsSgiM.js → brand-context-CVKoHubR.js} +1 -1
  71. package/dist/client/assets/{buckets-iGEoBvtL.js → buckets-CkFa01HI.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-DbsTbMha.js → bulk-category-panel-CHKdOPND.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-CkOYYnWQ.js → capability-load-error-BktCLsTE.js} +1 -1
  74. package/dist/client/assets/{card-LcSljy2d.js → card-DlHf-lsN.js} +1 -1
  75. package/dist/client/assets/{cards-CRC9KzHy.js → cards-RuESfpOS.js} +1 -1
  76. package/dist/client/assets/{category-editor-6-sLr5-H.js → category-editor-CJpr4IWv.js} +1 -1
  77. package/dist/client/assets/{chat-context-CXi9aeA-.js → chat-context-nBPGo5Lk.js} +1 -1
  78. package/dist/client/assets/{checkbox-DLu7WhoW.js → checkbox-DKT6dO8Z.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-DLKuT3jn.js → cli-auth-success-A61_Ra8B.js} +1 -1
  80. package/dist/client/assets/{collection-detail-BiwU4s27.js → collection-detail-BlwZCaka.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-ljX8oAGN.js → collection-display-button-H1biHeps.js} +1 -1
  82. package/dist/client/assets/{collection-search-BBjJ-Z47.js → collection-search-27Z_ZWZT.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-BJfYWftk.js → collection-table-wrapper-JUU17uAc.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-CSxzcrBm.js → collection-tabs-DkBeoa5Z.js} +1 -1
  85. package/dist/client/assets/{command-C6uwIwjt.js → command-DjAcFSs1.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-Dr73rwM_.js → commerce-onboarding-Cy-gCnLt.js} +1 -1
  87. package/dist/client/assets/{connect-CvlfUfvu.js → connect-kZOs8CHa.js} +1 -1
  88. package/dist/client/assets/{connection-CTDG5CI-.js → connection-Cy8L3aJ3.js} +1 -1
  89. package/dist/client/assets/{connection-card-DRzdZKPC.js → connection-card-BCOCK_Eb.js} +1 -1
  90. package/dist/client/assets/{connection-detail-B9I1iwnW.js → connection-detail-DhPSnaZV.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-DqFkMeXd.js → connection-form-helpers-DmSfP11N.js} +1 -1
  92. package/dist/client/assets/{connections-KmZ4CQUC.js → connections-HOeS1AJd.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-Y98GSAd1.js → decopilot-sse-pool-DeMGFbxJ.js} +1 -1
  94. package/dist/client/assets/{dialog-CfSWegAU.js → dialog-B9uSdMGN.js} +1 -1
  95. package/dist/client/assets/{domain-settings-CGiHpMd0.js → domain-settings-CxG8FQYU.js} +1 -1
  96. package/dist/client/assets/{drawer-D2p6EAUK.js → drawer-98eLt1an.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-CPUss7MW.js → dropdown-menu-C1hjqODM.js} +1 -1
  98. package/dist/client/assets/{empty-state-DF1pTNgJ.js → empty-state-o0gQhpc4.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-BgrgBkiW.js → extract-connection-data-BFlArbmP.js} +1 -1
  100. package/dist/client/assets/{file-explorer-Dls3hCYH.js → file-explorer-Bc1LxF5Z.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-CVpy5tbh.js → file-type-icon-CUqlbkN4.js} +1 -1
  102. package/dist/client/assets/{form-CpNXl4sM.js → form-D_woCs7l.js} +1 -1
  103. package/dist/client/assets/{general-84s4es8Z.js → general-Dk9AO_Dn.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-Cq74bV5q.js → github-repo-picker-BMJy82Ev.js} +1 -1
  105. package/dist/client/assets/{hooks-BDdhwmLB.js → hooks-Gv0gN8aJ.js} +1 -1
  106. package/dist/client/assets/{index-DDJaMT1A.js → index-51f6XlwG.js} +1 -1
  107. package/dist/client/assets/{index-XgFBrV4P.js → index-9XUiIWTR.js} +1 -1
  108. package/dist/client/assets/{index-BR-iaAgY.js → index-BROruwzJ.js} +1 -1
  109. package/dist/client/assets/{index-C5-5y-hH.js → index-BruORjTP.js} +1 -1
  110. package/dist/client/assets/{index-gGMNYcHL.js → index-C1vwFKI6.js} +1 -1
  111. package/dist/client/assets/{index-DLK89J3V.js → index-C3G-6I1r.js} +1 -1
  112. package/dist/client/assets/{index-DInHyngU.js → index-CHLuEKuC.js} +1 -1
  113. package/dist/client/assets/{index-1U1WTl2W.js → index-DI3yzcq9.js} +5 -5
  114. package/dist/client/assets/{index-CFP1NrDi.js → index-DN_t9Vle.js} +57 -57
  115. package/dist/client/assets/{index-ZHWffcte.js → index-LkjnDNlx.js} +1 -1
  116. package/dist/client/assets/index-_zaWhzWP.css +1 -0
  117. package/dist/client/assets/{index-redirect-BSd-q9Ep.js → index-redirect-Xm-Wfcmk.js} +1 -1
  118. package/dist/client/assets/{input-CEHhuoi_.js → input-rqb9s9a8.js} +1 -1
  119. package/dist/client/assets/{integration-icon-BINkfk9M.js → integration-icon-NgM6caDc.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-QifU_vBp.js → invite-member-dialog-CFpFsOm-.js} +1 -1
  121. package/dist/client/assets/{label-SLbpd3vT.js → label-CQkrTrwb.js} +1 -1
  122. package/dist/client/assets/{layout-AFPf_-rK.js → layout-CPTYQuI4.js} +1 -1
  123. package/dist/client/assets/{login-DLGpEtiv.js → login-D59iMEla.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-D2MFkyIB.js → mcp-oauth-X21IvZ1G.js} +1 -1
  125. package/dist/client/assets/{members-CRxOIp5f.js → members-CyiAS0Pa.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-D8-czTio.js → monaco-editor-CaRaMucM.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-uoj0dPDu.js → monitoring-stats-row-B4DBqbQ2.js} +1 -1
  128. package/dist/client/assets/{multi-select-XKTmETKX.js → multi-select-DOObsNJA.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-SmpGEe0r.js → oauth-callback-BzGwDXCC.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-D3LrXR_J.js → oauth-callback-ai-provider-BKWs28AL.js} +1 -1
  131. package/dist/client/assets/{onboarding-BTseFBKP.js → onboarding-Czj8G4s9.js} +1 -1
  132. package/dist/client/assets/{org-layout-B0VkqO3V.js → org-layout-D_JBIC42.js} +1 -1
  133. package/dist/client/assets/{organization-choice-Cx7xfipr.js → organization-choice-CNtAOuw9.js} +1 -1
  134. package/dist/client/assets/{orgs-BPfv1_Bl.js → orgs-WFw9FKpT.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-CDGKCjNK.js → page-seo-form-C1g7UFST.js} +1 -1
  136. package/dist/client/assets/{popover-BF2ibUTZ.js → popover-1grKPHF-.js} +1 -1
  137. package/dist/client/assets/{post-editor-CrRtOu5C.js → post-editor-B_Fg_PtG.js} +1 -1
  138. package/dist/client/assets/{primitives-BSCvUqTX.js → primitives-B1JFDByD.js} +1 -1
  139. package/dist/client/assets/{profile-eKbNh0bl.js → profile-awrxi6Uz.js} +1 -1
  140. package/dist/client/assets/{project-app-view-FMDGR2kB.js → project-app-view-mt45EZmG.js} +1 -1
  141. package/dist/client/assets/provision-repo-scoped-github-connection-C2HwF4Ce.js +1 -0
  142. package/dist/client/assets/record-editor-BBEHvVwc.js +1 -0
  143. package/dist/client/assets/{redirect-editor-Dg-0PX-k.js → redirect-editor-CcmQCF7Y.js} +1 -1
  144. package/dist/client/assets/registry-BlqGlt4F.js +2 -0
  145. package/dist/client/assets/{registry-layout-DbfvLLrb.js → registry-layout-7yZvOqOy.js} +1 -1
  146. package/dist/client/assets/{reports-DOlJBv4h.js → reports-DCwj-kO-.js} +1 -1
  147. package/dist/client/assets/{require-capability-_Z81XhDe.js → require-capability-D1cW6Q8M.js} +1 -1
  148. package/dist/client/assets/{required-auth-layout-BEdy-svJ.js → required-auth-layout-BvG-ioDs.js} +1 -1
  149. package/dist/client/assets/{reset-password-CoVzZToy.js → reset-password-CkKHp2p5.js} +1 -1
  150. package/dist/client/assets/{roles-CRPH6SDK.js → roles-21C2zkxi.js} +1 -1
  151. package/dist/client/assets/{search-input-D9nawKl_.js → search-input-CJHrGfWW.js} +1 -1
  152. package/dist/client/assets/{secrets-CQBlmoni.js → secrets-CvR9yj2i.js} +1 -1
  153. package/dist/client/assets/{sections-editor-CO6PcY76.js → sections-editor-fp1wM8pw.js} +1 -1
  154. package/dist/client/assets/{select-aiVsxR3R.js → select--TLOq7j8.js} +1 -1
  155. package/dist/client/assets/{select-model-DsqSExr_.js → select-model-BHOo1rp9.js} +1 -1
  156. package/dist/client/assets/{self-tool-result-CR1Q0_jG.js → self-tool-result-CrB2rXFl.js} +1 -1
  157. package/dist/client/assets/{seo-editor-DdGMHPdg.js → seo-editor-CYyt6O16.js} +1 -1
  158. package/dist/client/assets/{settings-layout-C9ykKqDh.js → settings-layout-REfjxme3.js} +1 -1
  159. package/dist/client/assets/{settings-section-DVebYQRO.js → settings-section-C3ONEfGE.js} +1 -1
  160. package/dist/client/assets/{shell-controls-DScP-DTe.js → shell-controls-BzV056SW.js} +1 -1
  161. package/dist/client/assets/{shell-layout-BrWNuhm-.js → shell-layout-DlKj27bb.js} +1 -1
  162. package/dist/client/assets/{sidebar-DM_H14KZ.js → sidebar-CNeZ85zy.js} +1 -1
  163. package/dist/client/assets/{skeleton-DoaVjtAJ.js → skeleton-Dl3k4lxd.js} +1 -1
  164. package/dist/client/assets/{spinner-DqvNZb2_.js → spinner-kqhk2wdd.js} +1 -1
  165. package/dist/client/assets/{sso-Cy_34ZlA.js → sso-CPPmaCwP.js} +1 -1
  166. package/dist/client/assets/{store-CfNpg1Ki.js → store-Dmee7NFI.js} +1 -1
  167. package/dist/client/assets/store-registry-PhKSKGkg.js +2 -0
  168. package/dist/client/assets/{studio-tools-D0nCrjJL.js → studio-tools-Bdk11iXL.js} +1 -1
  169. package/dist/client/assets/{switch-BNKn7y2m.js → switch-CG0_fDX9.js} +1 -1
  170. package/dist/client/assets/{synced-repos-DFcLjFYp.js → synced-repos-B9BOntjb.js} +1 -1
  171. package/dist/client/assets/{tab-id-Clyr_0XD.js → tab-id-BgguDV_T.js} +1 -1
  172. package/dist/client/assets/{table-D4EGJRWh.js → table-Cx2OcF-5.js} +1 -1
  173. package/dist/client/assets/{tabs-B9QOQNAJ.js → tabs-CbawcjgJ.js} +1 -1
  174. package/dist/client/assets/{textarea-CJE0d7ex.js → textarea-DLes0m8p.js} +1 -1
  175. package/dist/client/assets/{toggle-group-Bwnm2jhZ.js → toggle-group-DyUnK4OS.js} +1 -1
  176. package/dist/client/assets/{toolbar-hMYk8PIt.js → toolbar-D8hTZ_p2.js} +1 -1
  177. package/dist/client/assets/{tooltip-IUx0YkiP.js → tooltip-DcLUD06s.js} +1 -1
  178. package/dist/client/assets/{use-ai-providers-C2AxH1zJ.js → use-ai-providers-CUYq8orO.js} +1 -1
  179. package/dist/client/assets/{use-automations-iS4QSoWv.js → use-automations-BjstAQWn.js} +1 -1
  180. package/dist/client/assets/{use-autosave-mb-OVJcZ.js → use-autosave-oRIz3IWx.js} +1 -1
  181. package/dist/client/assets/{use-capability-DnPPUvOi.js → use-capability-A1Nh-1c-.js} +1 -1
  182. package/dist/client/assets/{use-clock-tick-Df6V2rjj.js → use-clock-tick-CFHYPlbJ.js} +1 -1
  183. package/dist/client/assets/{use-connection-Q9_uKwcp.js → use-connection-MqEPg6ky.js} +1 -1
  184. package/dist/client/assets/{use-copy-D2OwDwRb.js → use-copy-_jjDU2g1.js} +1 -1
  185. package/dist/client/assets/{use-create-virtual-mcp-2j8wE6Fk.js → use-create-virtual-mcp-Svxxjbnm.js} +1 -1
  186. package/dist/client/assets/{use-debounced-autosave-BbgnW_ev.js → use-debounced-autosave-D9paTl-2.js} +1 -1
  187. package/dist/client/assets/{use-debounced-value-C6la2NZF.js → use-debounced-value-BIPN2O6h.js} +1 -1
  188. package/dist/client/assets/{use-deco-credits-TpEKSjoE.js → use-deco-credits-D-bUjGxi.js} +1 -1
  189. package/dist/client/assets/{use-decopilot-events-HI32054z.js → use-decopilot-events-BBTIMFGs.js} +1 -1
  190. package/dist/client/assets/{use-delete-connection-vfvwVKGB.js → use-delete-connection-SIfEMhcg.js} +1 -1
  191. package/dist/client/assets/{use-deployment-admin-BPNpOPnQ.js → use-deployment-admin-DkqoZQYC.js} +1 -1
  192. package/dist/client/assets/{use-file-configs-uMWJc4ar.js → use-file-configs-BuZ7hFmK.js} +1 -1
  193. package/dist/client/assets/{use-infinite-scroll-Dj5jzYvD.js → use-infinite-scroll-72q6jUv6.js} +1 -1
  194. package/dist/client/assets/{use-join-requests-BgPeA2fp.js → use-join-requests-Cbz31rNV.js} +1 -1
  195. package/dist/client/assets/{use-mcp-client-vJLmqsBQ.js → use-mcp-client-BekaO9lz.js} +1 -1
  196. package/dist/client/assets/{use-mcp-tools-hfSjxv8F.js → use-mcp-tools-CIXlr8N2.js} +1 -1
  197. package/dist/client/assets/{use-members-CT5GzbWX.js → use-members-0qUDlbAr.js} +1 -1
  198. package/dist/client/assets/{use-mobile-CYtPvmZ_.js → use-mobile-DMbNnlTA.js} +1 -1
  199. package/dist/client/assets/{use-navigate-to-agent-BgiiWtOa.js → use-navigate-to-agent-CET38Vg9.js} +1 -1
  200. package/dist/client/assets/{use-open-billing-url-D_S3K2GQ.js → use-open-billing-url-CCadFnV1.js} +1 -1
  201. package/dist/client/assets/{use-org-auth-client-BljOah0a.js → use-org-auth-client-DFK_0KSz.js} +1 -1
  202. package/dist/client/assets/{use-org-sso-BXKyDNYu.js → use-org-sso-B_1DEBvf.js} +1 -1
  203. package/dist/client/assets/{use-organization-roles-DX3IdDL6.js → use-organization-roles-Cx3CvgUK.js} +1 -1
  204. package/dist/client/assets/{use-organization-settings-Bu3c2KoA.js → use-organization-settings-Bxh2HDDm.js} +1 -1
  205. package/dist/client/assets/{use-registry-connections-TN0afLti.js → use-registry-connections-Mw00EKui.js} +1 -1
  206. package/dist/client/assets/{use-secrets-CB-OSBJK.js → use-secrets-Dp3WT00a.js} +1 -1
  207. package/dist/client/assets/{use-section-preview-base-DYXZOLHx.js → use-section-preview-base-DdNJ2arm.js} +1 -1
  208. package/dist/client/assets/{use-status-sounds-Y6O9JI9B.js → use-status-sounds-Bc12sBux.js} +1 -1
  209. package/dist/client/assets/{use-tags-_nrU_W83.js → use-tags-j37diAvW.js} +1 -1
  210. package/dist/client/assets/{use-view-mode-DTv5f1nz.js → use-view-mode-DCcwKbXe.js} +1 -1
  211. package/dist/client/assets/{use-virtual-mcp-DscuOIVV.js → use-virtual-mcp-CqU6VupE.js} +1 -1
  212. package/dist/client/assets/useInfiniteQuery-BFbHksQ0.js +1 -0
  213. package/dist/client/assets/{useRouterState-kySAIfNE.js → useRouterState-xxRU2w37.js} +1 -1
  214. package/dist/client/assets/useSuspenseInfiniteQuery-Ciwo96ge.js +1 -0
  215. package/dist/client/assets/{users-B5gpDE4X.js → users-DYAgABwe.js} +1 -1
  216. package/dist/client/assets/{variant-calendar-BBrQX0-a.js → variant-calendar-eFgFIV4T.js} +1 -1
  217. package/dist/client/assets/{view-mode-toggle-Cc6wxt9D.js → view-mode-toggle-g5jce1H8.js} +1 -1
  218. package/dist/client/index.html +2 -2
  219. package/dist/server/cli.js +1 -1
  220. package/dist/server/server.js +1 -1
  221. package/package.json +1 -1
  222. package/dist/client/assets/index-Dh_qilfV.css +0 -1
  223. package/dist/client/assets/provision-repo-scoped-github-connection-ufuvpGD9.js +0 -1
  224. package/dist/client/assets/record-editor-mB2RHppE.js +0 -1
  225. package/dist/client/assets/registry-DkkdVI3K.js +0 -2
  226. package/dist/client/assets/store-registry-BbhSCtgC.js +0 -2
  227. package/dist/client/assets/useInfiniteQuery-DP4huUEB.js +0 -1
  228. package/dist/client/assets/useSuspenseInfiniteQuery-BMkXBit_.js +0 -1
@@ -2734,7 +2734,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2734
2734
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2735
2735
 
2736
2736
  Respond with the structured verdict and a short reason.`,Gf$;var Wf$=B(()=>{S4();rw();s41();X56=e41.object({requiresReview:e41.boolean().describe("true if the changes should go through pull-request review"),reason:e41.string().describe("One short sentence explaining the decision (max ~120 chars)")});Gf$={requiresReview:!1,reason:""}});function Kf$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function rj0($){return Kf$($?.previewServerUrl)??Kf$($?.productionUrl)}function Hf$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Nf$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Ff$($){let Z=Wh.get($);if(!Z)return;Wh.delete($),$61-=Z.bytes}function K56($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Ff$($),Q>W56)return;Wh.set($,{etag:Z,body:X,bytes:Q}),$61+=Q;while($61>J56||Wh.size>G56){let Y=Wh.keys().next().value;if(Y===void 0)break;Ff$(Y)}}function Uf$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,N){let F=`${Hf$()}${K}`,U=Nf$(W,K)?Wh.get(F):void 0,w=await fetch(F,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&w.status===304)return{status:200,json:U.body};if(!w.ok&&!N?.allow?.includes(w.status)){let D=await w.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new m6(w.status,W,K,L)}let O=w.status===204?void 0:await w.json();if(w.status===200&&Nf$(W,K)){let D=w.headers.get("etag");if(D)K56(F,D,O)}return{status:w.status,json:O}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${oC(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${oC(W)}`,H=await fetch(`${Hf$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let N=await H.text().catch(()=>"");throw new m6(H.status,"GET",K,N.slice(0,300))}if(!H.body)throw new m6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new m6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new m6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:N}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return N.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${oC(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:N,json:F}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return N===204?null:F?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:N}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:N.number,html_url:N.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),N=H[0];return N?{number:N.number,html_url:N.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((N)=>({filename:N.filename,status:N.status,sha:N.sha,...N.previous_filename?{previousFilename:N.previous_filename}:{}}))}}}}function oC($){return $.split("/").map(encodeURIComponent).join("/")}var G56=512,J56=8388608,W56=262144,Wh,$61=0,m6;var rC=B(()=>{Wh=new Map;m6=class m6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function aj0($,Z,X){if(!X.connectionId)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await Kx($,Q);return Uf$({owner:X.owner,repo:X.name,accessToken:Y})}var Z61=B(()=>{t50();rC()});function H56($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function sj0($){if(H56($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Xr($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function X61($){return sj0($),encodeURIComponent($)}function Qr($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Xr(Y.stem))}:${G}`}return`${X}}`}var wf$=()=>{};var ej0=B(()=>{wf$()});function N56($){return $.startsWith("merged/")?"merged":"blobs"}function Q61($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=N56(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Of$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Kh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function Bf$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),N=[],F=new Set;if(Y==="merged")for(let[U,w]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||w.area!=="merged")continue;N.push(U),F.add(U),H-=w.bytes,K-=w.bytes}for(let[U,w]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||F.has(U))continue;N.push(U),F.add(U),K-=w.bytes}for(let U of N)Kh($,U);return Kh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:N}}function Yr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function Y61($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as Pf$}from"crypto";import{mkdir as Gr,readdir as F56,readFile as U56,rename as w56,rm as Af$,stat as Tf$,statfs as O56,unlink as B56,writeFile as D56}from"fs/promises";import{tmpdir as L56}from"os";import{dirname as E56,join as A7}from"path";function Hh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function P56(){if($z0)return $z0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?A7(L56(),"studio-fast-preview-cache"):$;return $z0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Hh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Df$),maxMergedBytes:Hh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*Zz0),maxEntryBytes:{blobs:Hh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",Zz0),merged:Hh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*Zz0)}},freeFloorBytes:Hh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Df$),sweepIntervalMs:Hh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},$z0}function A56(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function T56(){if($B)return;$B={hits:k$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:k$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:k$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:k$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:k$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},k$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Nh)return;$.observe(Nh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Nh.index.areaBytes.merged,{area:"merged"})}),k$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Nh)return;let Z={blobs:0,merged:0};for(let X of Nh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function R56($){aC.hits[$]+=1,$B?.hits.add(1,{area:$})}function Lf$($){aC.misses[$]+=1,$B?.misses.add(1,{area:$})}function G61(){aC.evictions+=1,$B?.evictions.add(1)}function KF($){aC.errors+=1,$B?.errors.add(1,{op:$})}function I56($){aC.invalidKeySkips+=1,$B?.errors.add(1,{op:`${$}_invalid_key`})}function J61(){return Ef$??=M56(),Ef$}async function M56(){let $=P56();if(!$.enabled)return null;T56();try{await Gr(A7($.root,"blobs"),{recursive:!0}),await Gr(A7($.root,"merged"),{recursive:!0}),await Gr(A7($.root,"tmp"),{recursive:!0})}catch{return KF("init"),null}let Z=[];try{Z=await Rf$($.root)}catch{KF("scan"),Z=[]}let X={root:$.root,index:Q61(Z,$.index),cfg:$};return Nh=X,V56(X),X}async function Xz0($){try{return await F56($)}catch{return[]}}async function Rf$($){let Z=[];for(let X of["blobs","merged"]){let Q=A7($,X);for(let Y of await Xz0(Q)){let G=A7(Q,Y);for(let J of await Xz0(G)){let W=A7(G,J);for(let K of await Xz0(W))try{let H=await Tf$(A7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function If$($,Z,X){if(!Y61(X))return null;try{return`blobs/${Yr($)}/${Yr(Z)}/${X}`}catch{return null}}function qf$($,Z,X){if(!Y61(X))return null;try{return`merged/${Yr($)}/${Yr(Z)}/${X}.json`}catch{return null}}async function Mf$($,Z){try{let X=await J61();if(!X)return null;if(Z===null)return Lf$($),null;try{let Q=await U56(A7(X.root,Z),"utf8");return Of$(X.index,Z),R56($),Q}catch{return Lf$($),null}}catch{return KF(`get_${$}`),null}}function kf$($,Z,X){return Mf$("blobs",If$($,Z,X))}function Sf$($,Z,X){return Mf$("merged",qf$($,Z,X))}async function k56($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await O56($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function Qz0($){try{await B56($)}catch{}}async function S56($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Kh($.index,X.value),await Qz0(A7($.root,X.value)),G61()}}catch{KF("emergency_evict")}}async function Vf$($,Z,X,Q){try{let Y=await J61();if(!Y)return;if(X===null){I56(Z);return}if(!await k56(Y)){aC.floorSkips+=1,$B?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=Bf$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){aC.admissionRefusals+=1;return}for(let K of J.evict)await Qz0(A7(Y.root,K)),G61();let W=A7(Y.root,"tmp",`stage-${Pf$()}`);try{await D56(W,Q,"utf8");let K=A7(Y.root,X);await Gr(E56(K),{recursive:!0}),await w56(W,K)}catch(K){if(Kh(Y.index,X),await Qz0(W),KF(Z),K?.code==="ENOSPC")await S56(Y)}}catch{KF(Z)}}function Yz0($,Z,X,Q){return Vf$("blobs","put_blob",If$($,Z,X),Q)}function Cf$($,Z,X,Q){return Vf$("merged","put_merged",qf$($,Z,X),Q)}async function _f$(){try{let $=await J61();if(!$)return null;let Z=A7($.root,"tmp",Pf$());return await Gr(Z,{recursive:!0}),Z}catch{return KF("make_scratch"),null}}async function vf$($){try{await Af$($,{recursive:!0,force:!0})}catch{KF("remove_scratch")}}function V56($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;jf$=new AbortController,C$(Math.random()*Z,{signal:jf$.signal}).then(()=>{zf$($);let X=setInterval(()=>void zf$($),Z);X.unref?.(),q56=X}).catch(()=>{})}async function zf$($){try{let Z=Q61(await Rf$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Kh(Z,G),await Qz0(A7($.root,G)),G61()}$.index=Z;let Q=A7($.root,"tmp"),Y=Date.now();for(let G of await Xz0(Q)){let J=A7(Q,G);try{let W=await Tf$(J);if(Y-W.mtimeMs>z56)await Af$(J,{recursive:!0,force:!0})}catch{}}}catch{KF("sweep")}}var j56=1024,Zz0,Df$,z56=3600000,$z0=null,$B=null,aC,Ef$=null,Nh=null,q56=null,jf$=null;var ff$=B(()=>{$6();C6();Zz0=1024*j56,Df$=1024*Zz0;aC=A56()});function bf$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as C56,stat as _56}from"fs/promises";import{join as xf$}from"path";function v56($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function f56(){return yf$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),yf$}async function gf$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new Jr(`invalid blocks path prefix: ${X}`);let Y=await f56(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...v56(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(F){throw new Jr("failed to spawn tar",{cause:F})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let F=(await K).trim().slice(0,500);throw new Jr(`tar exited with code ${H}${F?`: ${F}`:""}`)}let N=await b56(Z,Q);if(N.length===0)throw new Jr(`tar extracted no ${G} members into ${Z}`);return N}async function b56($,Z){let X=xf$($,...Z.split("/")),Q;try{Q=await C56(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=xf$(X,G);try{if(!(await _56(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var Jr,yf$=null;var hf$=B(()=>{Jr=class Jr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as x56}from"crypto";import{readFile as y56}from"fs/promises";async function Wr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof m6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof m6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function h56(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return cf$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):cf$}function u56($){lf$??=k$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),lf$.add(1,{path:$})}async function Gz0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function Jz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function W61($,Z){let X=`${Jz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function K61($,Z){return $.filter((X)=>Xr(X.stem)===Z).map((X)=>X.path).sort()}function df$($,Z,X,Q){return Yz0($,Z,X,Q)}function c56($,Z){if(!Z)return $;return x56("sha1").update(`${$}:${Z}`).digest("hex")}async function mf$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Wr($,Z):await $.getHeadSha(Z);return l56.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>d56($,Y,X))}async function d56($,Z,X){let{owner:Q,repo:Y}=$,G=c56(Z,X),J=await Sf$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=W61(K,X),N=new Map;if(await Gz0(H,uf$,async(O)=>{let D=await kf$(Q,Y,O.sha);if(D!==null)N.set(O.path,D)}),H.length-N.size>g56){let O=await m56($,Z,X,H);if(u56(O!==null?"tarball":"blobs"),O!==null)for(let[D,L]of O)N.set(D,L)}let U=await Gz0(H,uf$,async(O)=>{let D=N.get(O.path);if(D!==void 0)return{stem:O.stem,content:D};let L=await $.getBlobText(O.sha);return await Yz0(Q,Y,O.sha,L),{stem:O.stem,content:L}}),w=Qr(U);return await Cf$(Q,Y,G,w),{sha:Z,decofile:w}}async function m56($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=h56(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await _f$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await gf$(K,W,Jz0(X)),N=new Map(Q.map((U)=>[U.path,U.sha])),F=new Map;for(let U of H){let w=N.get(U.path);if(w===void 0)continue;let O=await y56(U.diskPath,"utf8");await Yz0($.owner,$.repo,w,O),F.set(U.path,O)}return F}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await vf$(W)}}var uf$=12,g56=50,cf$=134217728,lf$=null,l56;var Wz0=B(()=>{ej0();C6();ff$();rC();hf$();l56=bf$()});async function Kz0($,Z){let X=await $.getDefaultBranch(),Q=await Wr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function Hz0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,i56),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((N)=>N.type==="blob").map((N)=>[N.path,N.sha])),H=await Gz0(G,n56,async(N)=>{let F=N.previousFilename??N.filename,U=N.status==="added"?void 0:K.get(F),w=U?await $.getBlobText(U):null,O=N.status==="removed"?null:await $.getBlobText(N.sha);return[N.filename,{from:w,to:O}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function if$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof m6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new m6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await o56($,Z,X)}async function o56($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=p56)throw new m6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let w=K.get(U.filename);if(U.status==="removed"||!w)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:w.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let N=await $.createTree(await $.getCommitTreeSha(G),H),F=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:N,parentShas:[Y,G]});try{await $.updateRef(Z,F);return}catch(U){if(U instanceof m6&&U.status===422&&Q<t56)continue;throw U}}}var i56=200,n56=12,p56=300,t56=3;var nf$=B(()=>{rC();Wz0()});function a56($){if(!$||$.includes(".."))return!1;return r56.test($)}function pf$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!a56(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function tf$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var r56;var of$=B(()=>{r56=/^[\w./@-]+$/});function H61($){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 Kr($,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 rf$($,Z,X,Q){if(!Q.connectionId)throw new Fh("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Fh(p7);await Vw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:p7;throw new Fh(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Cw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Jh($),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 tw(H,s56).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var s56=10485760,Fh;var N61=B(()=>{WN();oj0();ei();Hx();Fh=class Fh extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function $96($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!e56.test(Z))throw Error(`Invalid branch name: ${$}`)}function sC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(X96)])}function eC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Kr(Z,X);if(!Y)throw new m6(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return aj0(Q,G.id,Y)}function F61($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,E9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,E9)}async function ef$($){try{let Z=await Hr($),X=await Kz0(Z,$.get("vmClaim").branch);return $.json(X,200,E9)}catch(Z){return F61($,Z)}}function Fz0($,Z){let Q=(Nz0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Nz0.set($,Y),Y.finally(()=>{if(Nz0.get($)===Y)Nz0.delete($)}),Q}async function yZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,E9);let Q=eC($);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",...E9}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?Y96(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...E9}})};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 Y96($){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 Uz0($,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 G96($){return $b$.includes($)}var e56,af$=524288,Z96=65536,X96=1e4,sf$=2000,Q96,Nz0,E9,$b$,Zb$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",Q96),$.post("/:virtualMcpId/:branch/write",(X)=>yZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>yZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>yZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>yZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>yZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>yZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>yZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return yZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return yZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!G96(Q))return X.json({error:`step must be one of: ${$b$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=o(X.var.studioContext),J=qx(Y.virtualMcpMetadata);try{await RU0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return yZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return WF(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ev$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return ef$(X);return Z(X)});let Z=(X)=>yZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return ef$(X);return yZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await Hr(X),J=await Hz0(G,Q.branch,Y.base);return X.json(J,200,E9)}catch(Y){return F61(X,Y)}return yZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,E9);let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Fz0(Y,async()=>{try{await n41(W,Q,Y);let K=Kr(G,J);if(K)await rf$(W,Q,Y,K)}catch(K){if(K instanceof Fh)return X.json({error:K.message},403,E9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,E9)}return yZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,E9);return Fz0(Q,()=>yZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Fz0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Hr(X),H=W.base??await K.getDefaultBranch();return await if$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,E9)}catch(W){return F61(X,W)}});let Y=eC(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Fz0(G,async()=>{try{await n41(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,E9)}return yZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Yf$(K,w,O);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Jf$(K,w,O,typeof H.language==="string"?H.language:void 0);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=H61(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",FZ({maxSize:Z96,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=pf$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=tf$(G,W.resolveType),H=H61(K),N;try{N=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await N.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var Xb$=B(()=>{C8();oO();Gh();i41();JN();av$();T3();mw();sv$();$f$();Im0();ai();s41();Wf$();Z61();rC();nf$();of$();N61();e56=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Q96=tj0(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=o(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{$96(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=ji({orgId:Y.id,virtualMcpId:G,branch:J}),H=await DN(X,J,Q),N=rv$({userId:H,projectRef:K}),F=W.metadata??null;if(F?.fastPreview===!0&&rj0(F))return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await dX(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()});Nz0=new Map;E9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};$b$=["clone","install","start"]});function Qb$($,Z,X){let Q=U61.get($);if(!Q)Q={pending:null,running:!1},U61.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)W96($,Q);return G}async function W96($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await K96(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)U61.delete($)}}async function K96($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Wr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=W61(W,Q),H=[],N=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,D]of $.set){let L=K61(K,O),E=`${JSON.stringify(D,null,2)}
2737
- `,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:H96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=J96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function H96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ac0(Q,$.deps.coAuthor)}var J96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as N96,timingSafeEqual as F96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):N96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+U96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!F96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var U96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function O96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&w96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=B96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{sj0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var w96,B96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();w96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;B96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!O96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({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("/",Rk$()),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",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function L96($){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 E96($,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(D96)});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 D96=1e4,j96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",j96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await E96(Q,Y);return Z.json({apps:L96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function S96($){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 V96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function C96($){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:V96(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 _96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function v96($){if(!$)return;return{openai:{response_format:$}}}function f96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,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 Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var z96=256,P96,A96,T96,R96,I96,q96,M96,k96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();P96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),A96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),T96=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(A96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),R96=M1.object({type:M1.literal("text")}),I96=M1.object({type:M1.literal("json_object")}),q96=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()})}),M96=M1.union([R96,I96,q96]),k96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(T96),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(P96).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:M96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=k96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=S96(G.model);if(!J)return $.json(lK("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)=>HD(j.providerId));if(!E)return $.json(lK("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(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=C96(G.messages),U=G.tools?_96(G.tools):void 0,w=v96(G.response_format),O=f96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.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(S.type==="text-delta"){if(P+=S.text,P.length>=z96)await q()}else if(S.type==="tool-call"){await q();let M=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:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(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:Eb$(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(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.206.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function y96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??x96}}var Ib$,x96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:y96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,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 Vb$($){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()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,g96,h96,u96,c96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),g96=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:$_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),h96=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(g96)),u96={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},c96=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:$_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(h96).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:$_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:$_.optional()})).min(1)})]),Cb$=c0.object({...u96,template:c96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.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 B61=B(()=>{_b$()});import{join as vb$}from"path";async function d96($){try{let Z=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(l96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(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()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function m96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(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="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
2737
+ `,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:H96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=J96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function H96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ac0(Q,$.deps.coAuthor)}var J96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as N96,timingSafeEqual as F96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):N96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+U96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!F96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var U96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function O96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&w96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=B96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{sj0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var w96,B96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();w96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;B96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!O96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({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("/",Rk$()),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",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function L96($){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 E96($,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(D96)});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 D96=1e4,j96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",j96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await E96(Q,Y);return Z.json({apps:L96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function S96($){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 V96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function C96($){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:V96(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 _96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function v96($){if(!$)return;return{openai:{response_format:$}}}function f96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,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 Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var z96=256,P96,A96,T96,R96,I96,q96,M96,k96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();P96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),A96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),T96=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(A96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),R96=M1.object({type:M1.literal("text")}),I96=M1.object({type:M1.literal("json_object")}),q96=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()})}),M96=M1.union([R96,I96,q96]),k96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(T96),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(P96).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:M96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=k96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=S96(G.model);if(!J)return $.json(lK("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)=>HD(j.providerId));if(!E)return $.json(lK("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(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=C96(G.messages),U=G.tools?_96(G.tools):void 0,w=v96(G.response_format),O=f96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.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(S.type==="text-delta"){if(P+=S.text,P.length>=z96)await q()}else if(S.type==="tool-call"){await q();let M=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:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(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:Eb$(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(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.207.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function y96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??x96}}var Ib$,x96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:y96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,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 Vb$($){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()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,g96,h96,u96,c96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),g96=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:$_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),h96=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(g96)),u96={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},c96=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:$_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(h96).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:$_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:$_.optional()})).min(1)})]),Cb$=c0.object({...u96,template:c96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.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 B61=B(()=>{_b$()});import{join as vb$}from"path";async function d96($){try{let Z=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(l96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(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()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function m96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(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="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
2738
2738
  `)}function i96($,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}
2739
2739
  </head>`)}function fb$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=wh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(vb$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(n96)}),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=$?vb$($,"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 d96(wh(Q)),K=m96(Q,W);return X.html(i96(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var l96=2500,n96=1e4;var bb$=B(()=>{C8();B61();wL();M$()});function Nr($,Z){return fetch(`${gW({})}${$}`,Z)}async function p96($,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 Nr(`/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}=Dz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var t96,HF,xb$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},yb$;var gb$=B(()=>{C8();MG();wL();B61();t96=new Set(["complete","errored","terminated","unknown"]),HF=new U1;HF.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});HF.use("/link-token/*",xb$);HF.use("/suggest",xb$);HF.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 p96(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)}});HF.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 Nr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${UL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});HF.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Nr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${UL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:t96.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});HF.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Nr(`/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)}});HF.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Nr(`/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:[]})}});yb$=HF});import{createHmac as o96,timingSafeEqual as r96}from"crypto";function ub$($,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)>a96)return!1;let W=o96("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&&r96(K,N)})}function cb$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=KJ(Z),Q=KJ(KJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:dK(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 lb$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function dK($){return typeof $==="string"?$:void 0}function KJ($){return typeof $==="object"&&$!==null?$:void 0}function Lz0($){return typeof $==="number"?new Date($*1000):null}function E61($){return dK($)??dK(KJ($)?.id)}function s96($){return E61($.subscription)??dK(KJ(KJ($.parent)?.subscription_details)?.subscription)}function e96($){let Z=Lz0($.current_period_end);if(Z)return Z;let X=KJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=KJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function D61($,Z){let X=Lz0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function L61($,Z){let X=Lz0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function $Z6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=dK(KJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(dK(KJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(dK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=dK(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(KJ(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:KJ(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(dK(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=E61(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(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:E61(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=dK(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&&D61(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":lb$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:e96(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=s96(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Lz0(X.period_end),lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function ZZ6($,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:lb$(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 hb$($,Z){let X=ZZ6($,Z);if(!X)return;aJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:jd1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function db$($){let Z=new fW(m8().db),X=await $Z6(Z,$);if(!(X.handled&&X.topUp))hb$($,X);if(X.handled&&X.topUp)await SU$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),hb$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await fo1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof W3&&(Q.status===400||Q.status===404)))throw Q}return X}var a96=300;var mb$=B(()=>{jG();x4();U40();om();nr0()});var XZ6=1048576,j61;var ib$=B(()=>{C8();oO();M$();mb$();j61=new U1;j61.post("/webhook",FZ({maxSize:XZ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=y0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ub$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=cb$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await db$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as QZ6}from"crypto";function GZ6($,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 QZ6(Buffer.from(Y),Buffer.from(Q))}var YZ6=5242880,z61;var nb$=B(()=>{C8();oO();ti();z61=new U1;z61.post("/webhook",FZ({maxSize:YZ6,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(!GZ6(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 jm0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function pb$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var tb$,JZ6,WZ6,ob$;var rb$=B(()=>{C8();rJ();ux();ub();tb$=new U1,JZ6=["range","if-none-match","if-modified-since"],WZ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];tb$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ug($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new 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 Rn(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&X3()){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 pb$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of JZ6){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 WZ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),pb$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});ob$=tb$});var Fr=C((Z_)=>{var KZ6=Z_&&Z_.__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]}),HZ6=Z_&&Z_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))KZ6(Z,$,X)};Object.defineProperty(Z_,"__esModule",{value:!0});HZ6(QY(),Z_)});var eb$=C((ab$)=>{Object.defineProperty(ab$,"__esModule",{value:!0});ab$.version=void 0;ab$.version="3.4.0"});var Xx$=C((mK)=>{var NZ6=mK&&mK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(mK,"__esModule",{value:!0});mK.NodeTransport=mK.VERSION=void 0;mK.nodeResolveHost=DZ6;var i6=Fr(),FZ6=z0("net"),P61=z0("tls"),UZ6=z0("path"),$x$=z0("fs"),wZ6=NZ6(z0("dns")),OZ6=eb$();mK.VERSION=OZ6.version;var BZ6="nats.js";class Zx${socket;version;lang;yields=[];signal=(0,i6.deferred)();closedNotification=(0,i6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=BZ6,this.version=mK.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,i6.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 i6.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 i6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new i6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,i6.deferred)(),X,Q=(0,FZ6.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,i6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=i6.DataBuffer.concat(...this.yields),Y=(0,i6.extractProtocolMessage)(Q);if(Y!=="")try{let G=i6.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,i6.deferred)();try{if($=(0,UZ6.resolve)($),!(0,$x$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,$x$.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,i6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new i6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,i6.deferred)();try{let Y=(0,P61.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 i6.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,i6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new i6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,i6.deferred)();try{let Q=(0,P61.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 i6.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,i6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,i6.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 P61.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,i6.render)($)}`);let Z=(0,i6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,i6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,i6.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}}mK.NodeTransport=Zx$;function DZ6($){let Z=(0,i6.deferred)();return wZ6.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 Wx$=C((Jx$)=>{Object.defineProperty(Jx$,"__esModule",{value:!0});Jx$.connect=LZ6;var Qx$=Xx$(),Yx$=Fr(),Gx$=Fr();function LZ6($={}){if((0,Gx$.hasWsProtocol)($))return Promise.reject(Gx$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Yx$.setTransportFactory)({factory:()=>{return new Qx$.NodeTransport},dnsResolveFn:Qx$.nodeResolveHost}),Yx$.NatsConnectionImpl.connect($)}});var Kx$=C((NF)=>{var jZ6=NF&&NF.__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]}),zZ6=NF&&NF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))jZ6(Z,$,X)};Object.defineProperty(NF,"__esModule",{value:!0});NF.connect=void 0;var PZ6=Wx$();Object.defineProperty(NF,"connect",{enumerable:!0,get:function(){return PZ6.connect}});zZ6(Fr(),NF)});function Ux$($){let Z=$?.connectFn??IZ6,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:RZ6,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=uZ(TZ6,AZ6,O-1,2,0.5);await C$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?Hx$.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=Fx$.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 IZ6($){return Nx$.connect($)}var Hx$,Nx$,Fx$,AZ6=100,TZ6=3000,RZ6=3000;var wx$=B(()=>{$6();Hx$=k(hh(),1),Nx$=k(Kx$(),1),Fx$=k(LB(),1)});function A61($,Z){return`${$}.${Z}`}class T61{cache;constructor($){this.cache=qg({ttlMs:$?.ttlMs??qZ6,maxSize:$?.maxSize??MZ6})}async get($,Z){return this.cache.get(A61($,Z))??null}async set($,Z,X){this.cache.set(A61($,Z),X)}async invalidate($,Z){this.cache.delete(A61($,Z))}teardown(){this.cache.clear()}}var qZ6=600000,MZ6=5000;var Ox$=()=>{};function Ez0($,Z){return`${$}:${Z}`}function R61($){let Z=qg({ttlMs:$?.ttlMs??kZ6,maxSize:$?.maxSize??SZ6}),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(Bx$,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(Ez0(K,H))},set(K,H,N){Z.set(Ez0(K,H),N)},invalidate(K,H){Z.delete(Ez0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Bx$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(Ez0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Bx$="studio.ai-provider-keys.invalidate",kZ6=30000,SZ6=5000;var Dx$=()=>{};class I61{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=Lx$.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 Lx$)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 Lx$;var Ex$=B(()=>{Lx$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var jx$=($)=>{let Z;return()=>Z??=$()},q61,M61;var zx$=B(()=>{C6();q61=jx$(()=>k$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),M61=jx$(()=>k$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function xZ6(){return{name:kN,subjects:[`${ow0}.>`],storage:t3.StorageType.File,max_age:_Z6,max_bytes:fZ6,max_msgs_per_subject:bZ6,discard:t3.DiscardPolicy.Old,retention:t3.RetentionPolicy.Limits,duplicate_window:vZ6,num_replicas:1}}class Tx${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 Px$($){let Z=Ax$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function uZ6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,CZ6().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 cZ6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class k61{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=xZ6(),X=await cZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await t3.jetstreamManager($);try{await Q.streams.info(kN),await Q.streams.update(kN,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(kN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:cZ6});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=uZ6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=BW$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=mn0(H,{runId:Z}),U=performance.now()-N;if(q61().record(U),M61().add(1,{"org.id":Q??"unknown"}),hZ6?.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?Px$(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(),gZ6)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=mn0(Z,{runId:$,dedup:X});if(q61().record(performance.now()-Y),M61().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:Px$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=OW$({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"?t3.DeliverPolicy.New:t3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=NO($),W;try{W=await(await Q.consumers.get(kN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=$O0({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(aw0()).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(kN,{filter:NO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var t3,Ax$,VZ6=($)=>{let Z;return()=>Z??=$()},CZ6,_Z6=86400000000000,vZ6=120000000000,fZ6=4294967296,bZ6=500000,yZ6,gZ6,hZ6;var Rx$=B(()=>{$6();in0();ZO0();sw0();C6();zx$();t3=k(LB(),1),Ax$=k(hh(),1),CZ6=VZ6(()=>k$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));yZ6=process.env.STREAM_ENCODE_TRACE==="1",gZ6=process.env.DECOPILOT_STREAM_TRACE==="1";hZ6=yZ6?new Tx$:null});function jz0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,LW(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 Ix$=B(()=>{L8()});class S61{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 tZ6($){return $ instanceof zQ}function oZ6($,Z){return Z-$>=nZ6}class V61{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??lZ6;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??mZ6,X=this.options.itemIntervalMs??dZ6,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()-NJ$),Ip0);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()-pZ6));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 wn0(this.taskBoard,Y,Q),await On0(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!==L4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await SN(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),tZ6(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()+iZ6)).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(()=>{}),y4(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!oZ6(PL(X),Date.now()))return;await GO($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==L4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z),Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;if(Q.length===0)return await this.handOffReviewWithoutPr(Y,X),!1;if(await PK$(Y,X))return!0;let G=await Promise.all(Q.map(async(J)=>({...J,...await Ap0(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(!Pp0(G))return!1;return await JO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var lZ6=60000,dZ6=300000,mZ6=50,iZ6=60000,nZ6=900000,pZ6=120000;var qx$=B(()=>{kZ();Op0();FO();BO0();ZZ();K3();qp0();sx()});import{readdir as rZ6,rm as zz0}from"fs/promises";import{join as Pz0}from"path";async function Az0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-aZ6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await X_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Mx$($,Y,Z);else if(!Y.startsWith(".")){let G=Pz0($,Y),J=await X_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Mx$(G,K,Z)}if((await X_(G)).length===0)await zz0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Mx$($,Z,X){let Q=0,Y=Pz0($,Z),G=await X_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=Pz0(Y,W),H=await X_(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=Pz0(K,F);await zz0(w,{recursive:!0,force:!0}),Q++}}if((await X_(K)).length===0)await zz0(K,{recursive:!0,force:!0})}if((await X_(Y)).length===0)await zz0(Y,{recursive:!0,force:!0});return Q}async function X_($){try{return(await rZ6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var aZ6=30;var C61=()=>{};import{DBOS as _61,SchedulerMode as sZ6}from"@dbos-inc/dbos-sdk";async function $76(){let $=[wJ(),Q_(),nK()],Z=0;for(let X of $)try{Z+=await Az0(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 Z76($,Z){await _61.runStep(()=>$76(),{name:"monitoringRetention"})}function Sx$(){if(kx$)return;kx$=!0;let $=_61.registerWorkflow(Z76,{name:"monitoringRetentionWorkflow"});_61.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:eZ6,mode:sZ6.ExactlyOncePerIntervalWhenActive})}var eZ6="23 4 * * *",kx$=!1;var Vx$=B(()=>{eQ();C61()});function Cx$($){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 yK.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await g$1($.db,Z,Q.role);return Y.boundAuth=y$1({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new oD(X,void 0,Y.boundAuth,Q.role,"self"),gg(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var _x$=B(()=>{rD();Cg()});function X76(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function Y76(){for(let $ of Q76)$()}function vx$($){let Z=[...v61.logs,$];v61={...v61,logs:Z.length>500?Z.slice(-500):Z},Y76()}function f61(){return G76}var v61,Q76,G76=!1;var b61=B(()=>{v61=X76(),Q76=new Set});import{EventEmitter as J76}from"events";var x61;var fx$=B(()=>{b61();x61=new J76;x61.on("request",($)=>{vx$($)})});function bx$(){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=Oh(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Oh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Z5.tool}${w}${Z5.dim}(${L})${Z5.reset}`}else if(U.method)G=`${Z5.dim}${Oh(U.method)}${Z5.reset}`}}catch{}}let W=Oh(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${Z5.mcp}${Oh(N.slice(0,12))}\u2026${Z5.reset}`}else if(Y==="/mcp")W=`${Z5.mcp}/mcp${Z5.reset}`;else if(Y==="/mcp/registry")W=`${Z5.mcp}/mcp/registry${Z5.reset}`;let K=K76(Q),H=J?"\u25C0":"\u2190";if(!f61())console.log(`${Z5.dim}${H}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=W76(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!f61())console.log(`${Z5.dim}${O}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""} ${U}${F}${Z5.reset} ${Z5.duration}${w}${Z5.reset}`);x61.emit("request",{method:Q,path:Oh(Y),status:F,duration:N,timestamp:new Date})}}}var Z5,W76=($)=>{if($>=500)return Z5.serverError;if($>=400)return Z5.clientError;if($>=300)return Z5.redirect;return Z5.ok},K76=($)=>{return Z5[$]||Z5.reset},Oh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var xx$=B(()=>{b61();fx$();Z5={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 ux$}from"crypto";import{mkdir as H76,readdir as N76,rm as yx$,stat as cx$}from"fs/promises";import{join as g61,relative as F76}from"path";import{z as E$}from"zod";function dx$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return g61(U76,Z)}function mx$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function y61($,Z){let X=dx$($),Q=mx$(Z);return g61(X,Q)}function w76($,Z,X,Q){let Y=y0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ux$("sha256",Y).update(G).digest("hex")}function hx$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=w76(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${mx$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function ix$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ux$("md5","etag").update(Q).digest("hex")}"`}async function nx$($,Z,X,Q,Y){try{let G=await N76($,{withFileTypes:!0});for(let J of G){let W=g61($,J.name),H=F76(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 nx$(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 cx$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:ix$(W,N.mtime,N.size)})}catch{}}}}catch{}}function px$($,Z){let Q=o($).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=dx$(Q);await H76(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await nx$(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=y61(Q,G.key),W=await cx$(J);return{contentType:j81(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:ix$(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??gx$;return{url:hx$(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??gx$;return{url:hx$(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=y61(Q,G.key);try{return await yx$(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=y61(Q,K);try{await yx$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function h61($,Z,X){let Q=px$(Z,X),Y=new RW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});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 iX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),pG(Y,G,$,"mcp:dev-assets")}async function tx$($,Z,X,Q){let G=px$(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 U76="./data/assets",gx$=3600,lx$,ox$;var rx$=B(()=>{M$();Qy();C8();Nl();cV();MX();Bj0();lx$=new U1;lx$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return h61($.req.raw,Z,Q)});ox$=lx$});var ax$={};N4(ax$,{mountDevRoutes:()=>O76});function O76($,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 h61(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 tx$(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",ox$);let X=new U1;X.use("*",n3({mountPath:"/api/dev-assets"})),X.route("/",Oj0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var sx$=B(()=>{C8();F81();Bj0();rx$()});import{sql as B76}from"kysely";import{randomUUID as ex$}from"crypto";import{z as D76}from"zod";async function E76($){let Z=new Date().toISOString(),X=ex$(),Q=u4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:ex$(),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 B76`SELECT
2740
2740
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.206.0",
3
+ "version": "4.207.0",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {