decocms 4.248.1 → 4.248.2

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 (236) hide show
  1. package/dist/client/assets/{AlertCircle-Bhp9cwFD.js → AlertCircle-DYa65h7M.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CAZWZHeM.js → AreaChart-Z7000aGF.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-D_zvJ-kO.js → ArrowLeft-D0sSJGyh.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-BYNMOnlV.js → ArrowUp-DaPuMC6J.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-Pn8E3gnZ.js → ArrowUpRight-Dv9QvAW5.js} +1 -1
  6. package/dist/client/assets/{Check-neS-DeF7.js → Check-ErA_74IV.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-CLjUVMyO.js → CheckCircle-CiRCtOI3.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-BH6k2GbZ.js → ChevronDown-Dgga4a4Q.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-6nDp3H6h.js → ChevronRight-Cf-ty0tK.js} +1 -1
  10. package/dist/client/assets/{ChevronSelectorVertical-DUGjk30Z.js → ChevronSelectorVertical-BS9Eaphx.js} +1 -1
  11. package/dist/client/assets/{ChevronUp-Dld6u0ZD.js → ChevronUp-DOEAI0tE.js} +1 -1
  12. package/dist/client/assets/{Copy01-CH6w54xu.js → Copy01-C8DEngph.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-DQHVWbP_.js → CreditCard01-LLnESWWX.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-D294oDTR.js → DotsVertical-B9Mg1LjT.js} +1 -1
  15. package/dist/client/assets/{Download01-qWgDPJmH.js → Download01-CKTo0VS3.js} +1 -1
  16. package/dist/client/assets/{Eye-1HazS33J.js → Eye-C-IIbq0b.js} +1 -1
  17. package/dist/client/assets/{FilterLines-YmKhWr9Y.js → FilterLines-BmuWDJhh.js} +1 -1
  18. package/dist/client/assets/{Globe01-DOzmvQnS.js → Globe01-AGteY5p8.js} +1 -1
  19. package/dist/client/assets/{Globe04-DajAQ8dz.js → Globe04-B6IxAzhj.js} +1 -1
  20. package/dist/client/assets/{HardDrive-C-N0TasX.js → HardDrive-Bxx1_cqg.js} +1 -1
  21. package/dist/client/assets/{Key01-C_cxmxK1.js → Key01-Du0R52Fs.js} +1 -1
  22. package/dist/client/assets/{LayoutLeft-oGXt5Zor.js → LayoutLeft-BKrrf1xY.js} +1 -1
  23. package/dist/client/assets/{LinkExternal01-CUgk18gm.js → LinkExternal01-lwDudDKU.js} +1 -1
  24. package/dist/client/assets/{LockUnlocked01-BsliyU3M.js → LockUnlocked01-ChTbbG9p.js} +1 -1
  25. package/dist/client/assets/{LogOut01-DIIZPkik.js → LogOut01-VHtvJ8Vp.js} +1 -1
  26. package/dist/client/assets/{Monitor01-D10oujf_.js → Monitor01-DA25Iq0R.js} +1 -1
  27. package/dist/client/assets/{Palette-B2e4uH5s.js → Palette-yngNVQ4n.js} +1 -1
  28. package/dist/client/assets/{Play-FLlfoVGU.js → Play-CsQhzYUI.js} +1 -1
  29. package/dist/client/assets/{Plus-WjKaSGzP.js → Plus-Cf4b1bNp.js} +1 -1
  30. package/dist/client/assets/{SearchLg-D1Dedm90.js → SearchLg-CIhGyLjl.js} +1 -1
  31. package/dist/client/assets/{SearchMd-BRfABNRv.js → SearchMd-B1dsuEY7.js} +1 -1
  32. package/dist/client/assets/{Settings02-rGctdKr9.js → Settings02-zoYBf2Q9.js} +1 -1
  33. package/dist/client/assets/{Share07-CfFPpKCh.js → Share07-KO4nWaTW.js} +1 -1
  34. package/dist/client/assets/{Shield01-BGDOVOCt.js → Shield01-EKP5VJCL.js} +1 -1
  35. package/dist/client/assets/{Stars01-Ck_swU9h.js → Stars01-BgC1nyVS.js} +1 -1
  36. package/dist/client/assets/{Stars02-UYu8vU8N.js → Stars02-D7QMgn6_.js} +1 -1
  37. package/dist/client/assets/{Sun-M4N4dn1G.js → Sun-CH0lCvO4.js} +1 -1
  38. package/dist/client/assets/{SwitchHorizontal01-B3acSshz.js → SwitchHorizontal01-ByrC3JZW.js} +1 -1
  39. package/dist/client/assets/{Tool01-Dhjx9En4.js → Tool01-BjJidQ3c.js} +1 -1
  40. package/dist/client/assets/{Tool02-C1WWjSqw.js → Tool02-Bs7nBBx_.js} +1 -1
  41. package/dist/client/assets/{Trash01-whbGAWVJ.js → Trash01-C4UDDTjr.js} +1 -1
  42. package/dist/client/assets/{TrendUp01-C_6GfhQt.js → TrendUp01-BQO_JaWi.js} +1 -1
  43. package/dist/client/assets/{Upload01-jvtMfB97.js → Upload01-k3Mh0fZU.js} +1 -1
  44. package/dist/client/assets/{User01-BuhVNpuF.js → User01-m6vclzYC.js} +1 -1
  45. package/dist/client/assets/{UserSquare-O03i-NCl.js → UserSquare-1p4hY8NI.js} +1 -1
  46. package/dist/client/assets/{Users01-tMxQGpID.js → Users01-CWeSTta9.js} +1 -1
  47. package/dist/client/assets/{Users03-CHQn0wHS.js → Users03-a8f_wZmP.js} +1 -1
  48. package/dist/client/assets/{X-Cq1iU8yD.js → X-IBBjQPfk.js} +1 -1
  49. package/dist/client/assets/{XCircle-fRVwLP1i.js → XCircle-3TmYYaVT.js} +1 -1
  50. package/dist/client/assets/{XClose-C09ruTg4.js → XClose-BO1_8YHD.js} +1 -1
  51. package/dist/client/assets/{YAxis-DYMfMu_9.js → YAxis-DrM-OWWa.js} +1 -1
  52. package/dist/client/assets/{Zap-DAJbtUUP.js → Zap-BUA1_Jut.js} +1 -1
  53. package/dist/client/assets/{ZapSquare-B4LDBBYe.js → ZapSquare-8U0SgWLp.js} +1 -1
  54. package/dist/client/assets/{access-gate-IrCXOvrQ.js → access-gate-D3zAqPzH.js} +1 -1
  55. package/dist/client/assets/{agent-icon-B2TavRxZ.js → agent-icon-vjhOL9u6.js} +1 -1
  56. package/dist/client/assets/{agents-list-D9mEOtlB.js → agents-list-DJeAJ_3a.js} +1 -1
  57. package/dist/client/assets/{ai-providers-FeqgxX_J.js → ai-providers-DmqZvdDR.js} +1 -1
  58. package/dist/client/assets/{alert-eV8sQIPX.js → alert-DSZ984JY.js} +1 -1
  59. package/dist/client/assets/{alert-dialog-DPH_YmH_.js → alert-dialog-BBUALe3i.js} +1 -1
  60. package/dist/client/assets/{api-keys-DwXBvkWj.js → api-keys-DEdlM0o6.js} +1 -1
  61. package/dist/client/assets/{app-editor-CN223MEe.js → app-editor-DGG6hIQW.js} +1 -1
  62. package/dist/client/assets/{auth-BvO4pJEr.js → auth-CS2cT5wl.js} +1 -1
  63. package/dist/client/assets/{auth-catchall-cmkgki1X.js → auth-catchall-Bs5rDKB8.js} +1 -1
  64. package/dist/client/assets/{auth-entry-DNOj_o32.js → auth-entry-B7mR5g8T.js} +1 -1
  65. package/dist/client/assets/{auth-split-layout-f89A8GmJ.js → auth-split-layout-CxqUA4_R.js} +1 -1
  66. package/dist/client/assets/{authenticate-and-persist-oauth--Y25jx5t.js → authenticate-and-persist-oauth-CB658Lpc.js} +1 -1
  67. package/dist/client/assets/{automation-list-row-tWph7Ku_.js → automation-list-row-DqAvOKpL.js} +1 -1
  68. package/dist/client/assets/{automation-runs-agWo43iX.js → automation-runs-C7VPpqIt.js} +1 -1
  69. package/dist/client/assets/automations-QJpsEj6l.js +1 -0
  70. package/dist/client/assets/{avatar-gUlhYut7.js → avatar-md-XNPuR.js} +1 -1
  71. package/dist/client/assets/{badge-xiFE-Cvk.js → badge-BR2WgVsV.js} +1 -1
  72. package/dist/client/assets/{block-document-GfjQZHst.js → block-document-yl-Al_kf.js} +1 -1
  73. package/dist/client/assets/{buckets-CRf2Dxht.js → buckets-D7AznYZl.js} +1 -1
  74. package/dist/client/assets/{bulk-category-panel-DBnyYwY0.js → bulk-category-panel-Aw08g8MP.js} +1 -1
  75. package/dist/client/assets/{capability-load-error-BHNAM2-I.js → capability-load-error-BornUXv-.js} +1 -1
  76. package/dist/client/assets/{card-DXRyqJU6.js → card-IdHCmi8B.js} +1 -1
  77. package/dist/client/assets/{cards-CA3E7voe.js → cards-B5pz2XNy.js} +1 -1
  78. package/dist/client/assets/{category-editor-CqkSJadi.js → category-editor-BLU7MJ_a.js} +1 -1
  79. package/dist/client/assets/{chart-yAO0IaaV.js → chart-Dw43HBj2.js} +1 -1
  80. package/dist/client/assets/{chat-context-DyO2JF9H.js → chat-context-Df1gS1sI.js} +1 -1
  81. package/dist/client/assets/{checkbox-5JqbfIJr.js → checkbox-CNnFytxt.js} +1 -1
  82. package/dist/client/assets/{choose-editor-D3sZJT6q.js → choose-editor-BGNNx0rr.js} +1 -1
  83. package/dist/client/assets/{cli-auth-success-Cx2q_W8S.js → cli-auth-success-B37XVEcm.js} +1 -1
  84. package/dist/client/assets/{collection-detail-DhmPiv_v.js → collection-detail-CdVhmMD8.js} +1 -1
  85. package/dist/client/assets/{collection-display-button-D47NEZsB.js → collection-display-button-DpaZ3d0j.js} +1 -1
  86. package/dist/client/assets/{collection-search-B_-CUGWY.js → collection-search-BQLruUQ4.js} +1 -1
  87. package/dist/client/assets/{collection-table-wrapper-D1AL3ct5.js → collection-table-wrapper-C12GS9C3.js} +1 -1
  88. package/dist/client/assets/{collection-tabs-C8eECzri.js → collection-tabs-Dfa_vQOq.js} +1 -1
  89. package/dist/client/assets/{command-DiG-6QsG.js → command-CXX8Roxa.js} +1 -1
  90. package/dist/client/assets/{commerce-onboarding-x7jGVSd_.js → commerce-onboarding-BOD-_HLG.js} +1 -1
  91. package/dist/client/assets/{connect-B6gGOSvg.js → connect-VrBLOQz7.js} +1 -1
  92. package/dist/client/assets/{connection-lzyrmH0q.js → connection-D6NWrsFQ.js} +1 -1
  93. package/dist/client/assets/{connection-card-DNA8tlze.js → connection-card-2s-BDhzN.js} +1 -1
  94. package/dist/client/assets/{connection-detail-c9m6LQZZ.js → connection-detail-rH7mQov2.js} +1 -1
  95. package/dist/client/assets/{connection-form-helpers-1pnOAp_L.js → connection-form-helpers-BahPv0zc.js} +1 -1
  96. package/dist/client/assets/{connections-DX7PjTKk.js → connections-X1ffPxSi.js} +1 -1
  97. package/dist/client/assets/{decopilot-sse-pool-DI1zSuXM.js → decopilot-sse-pool-BbcmZgTF.js} +1 -1
  98. package/dist/client/assets/{dialog-DfbPIvuu.js → dialog-B0pGkX2q.js} +1 -1
  99. package/dist/client/assets/{domain-settings-CAFHAZK6.js → domain-settings-CBmnQIJo.js} +1 -1
  100. package/dist/client/assets/{drawer-DpXF6Y3T.js → drawer-9chetton.js} +1 -1
  101. package/dist/client/assets/{dropdown-menu-CRqisRbF.js → dropdown-menu-Dhjx8BUz.js} +1 -1
  102. package/dist/client/assets/{empty-state-B_2dNrFt.js → empty-state-BHXPcV6D.js} +1 -1
  103. package/dist/client/assets/{extract-connection-data-1ma29d1Q.js → extract-connection-data-DyM1tiNg.js} +1 -1
  104. package/dist/client/assets/{file-explorer-CCpYtIdw.js → file-explorer-CGdZE7j0.js} +1 -1
  105. package/dist/client/assets/{file-type-icon-BTnLp0O_.js → file-type-icon-jL53noJP.js} +1 -1
  106. package/dist/client/assets/{form-BDOD8IwM.js → form-Cb2ftegM.js} +1 -1
  107. package/dist/client/assets/{general-Dj7-vCWy.js → general-DdO_16ZO.js} +1 -1
  108. package/dist/client/assets/{github-repo-picker-CuBn7l81.js → github-repo-picker-B0itW_sn.js} +1 -1
  109. package/dist/client/assets/{hooks-BqOY7hY9.js → hooks-BasSX9U3.js} +1 -1
  110. package/dist/client/assets/{index-fdLj0E3R.js → index-BGLk9CX0.js} +1 -1
  111. package/dist/client/assets/{index-Dx_8nYQ6.js → index-BHhk6DR8.js} +1 -1
  112. package/dist/client/assets/{index-CTLqjCiJ.js → index-BVEEZvKv.js} +1 -1
  113. package/dist/client/assets/{index-DAnSsVFw.js → index-BnYSClvU.js} +51 -51
  114. package/dist/client/assets/{index-BUEB03gI.js → index-CJWr9N0v.js} +1 -1
  115. package/dist/client/assets/{index-B6tksTJ_.js → index-CkEYKazi.js} +1 -1
  116. package/dist/client/assets/{index-CZ9My1pt.js → index-DBsyf30G.js} +1 -1
  117. package/dist/client/assets/{index-OROOEKte.js → index-DTCr2n-a.js} +3 -3
  118. package/dist/client/assets/{index-Cw-WYJwG.js → index-ZiQvvnOE.js} +1 -1
  119. package/dist/client/assets/{index-CXZUXIuv.js → index-mAaX9S9j.js} +1 -1
  120. package/dist/client/assets/{index-redirect-CQ_wrbTd.js → index-redirect-D24SfTyt.js} +1 -1
  121. package/dist/client/assets/{infra-billing-6tpTlCpc.js → infra-billing-DCiyfS8M.js} +1 -1
  122. package/dist/client/assets/{input-CBhJ7965.js → input-7l72-E74.js} +1 -1
  123. package/dist/client/assets/{integration-icon-Dq6Rth0X.js → integration-icon-9hdQMmio.js} +1 -1
  124. package/dist/client/assets/{invite-member-dialog-TyLlpC6o.js → invite-member-dialog-CEZXV_r9.js} +1 -1
  125. package/dist/client/assets/{label-DLBMW1ai.js → label-Di7XD03t.js} +1 -1
  126. package/dist/client/assets/{layout-BW1PvryB.js → layout-HxxUtI_4.js} +1 -1
  127. package/dist/client/assets/{login-DApVriZy.js → login-B01_8Sdh.js} +1 -1
  128. package/dist/client/assets/{mcp-oauth-DvcI9G6s.js → mcp-oauth-_naDcGdv.js} +1 -1
  129. package/dist/client/assets/{members-xvMXwAQl.js → members-C7m7k6Aj.js} +1 -1
  130. package/dist/client/assets/{monaco-editor-CqZ_IUKN.js → monaco-editor-DgD9evL7.js} +1 -1
  131. package/dist/client/assets/{monitoring-stats-row-feFYR_pH.js → monitoring-stats-row-B0BLM1my.js} +1 -1
  132. package/dist/client/assets/{multi-select-CRf0aRTa.js → multi-select-BLNYHoGy.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-DJ8Y4pp0.js → oauth-callback-BqBCpIME.js} +1 -1
  134. package/dist/client/assets/{oauth-callback-ai-provider-CH8N299Q.js → oauth-callback-ai-provider-DA5Wl5SM.js} +1 -1
  135. package/dist/client/assets/{onboarding-CkKOa7Nz.js → onboarding-px_II1bW.js} +1 -1
  136. package/dist/client/assets/{org-layout-ClfwmfoI.js → org-layout-DFED5zNf.js} +1 -1
  137. package/dist/client/assets/{organization-choice-BHZOcQ53.js → organization-choice-IrwqMfm_.js} +1 -1
  138. package/dist/client/assets/{orgs-QOH_zJGv.js → orgs-Ba0nF6qS.js} +1 -1
  139. package/dist/client/assets/{page-seo-form-cdDvcTbt.js → page-seo-form-Cm5Qv5ak.js} +1 -1
  140. package/dist/client/assets/{popover-CrrHtfEg.js → popover-CfGL7saO.js} +1 -1
  141. package/dist/client/assets/{post-editor-DXRhdeRm.js → post-editor-yBvya3yr.js} +1 -1
  142. package/dist/client/assets/{primitives-CBlVyjD9.js → primitives-DIc8lbRG.js} +1 -1
  143. package/dist/client/assets/{profile-DPXhkfxj.js → profile-ZEjk6oqp.js} +1 -1
  144. package/dist/client/assets/{project-app-view-D0a2PoNC.js → project-app-view-Ba53vvVz.js} +1 -1
  145. package/dist/client/assets/record-editor-B2rcuwQk.js +1 -0
  146. package/dist/client/assets/{redirect-editor-lV24GSPu.js → redirect-editor-C-iqitv1.js} +1 -1
  147. package/dist/client/assets/registry-BShVgR7c.js +2 -0
  148. package/dist/client/assets/{registry-layout-DF5NiCxU.js → registry-layout-t9OiEUok.js} +1 -1
  149. package/dist/client/assets/{reports-ChmLAJ1z.js → reports-B-JkBTXv.js} +1 -1
  150. package/dist/client/assets/{require-capability-DvRslrzF.js → require-capability-BganaMDA.js} +1 -1
  151. package/dist/client/assets/{required-auth-layout-CdZvJBd_.js → required-auth-layout-DgjkQLI6.js} +1 -1
  152. package/dist/client/assets/{reset-password-CGPrUEMY.js → reset-password-C_dZ8Eqo.js} +1 -1
  153. package/dist/client/assets/{roles-CnUgC5rX.js → roles-CPT4_Zim.js} +1 -1
  154. package/dist/client/assets/{search-input-Dv6PAnD1.js → search-input-DsWKOK9t.js} +1 -1
  155. package/dist/client/assets/{secrets-BO5xN-CG.js → secrets-Cm0Tre0I.js} +1 -1
  156. package/dist/client/assets/{sections-editor-BSVWikOY.js → sections-editor-hTI5vt6I.js} +1 -1
  157. package/dist/client/assets/{select-B3EIQXEI.js → select-BRuvjhJw.js} +1 -1
  158. package/dist/client/assets/{select-model-Cdf4Qb4J.js → select-model-Dqz5FPx4.js} +1 -1
  159. package/dist/client/assets/{self-tool-result-DPfNY-Fy.js → self-tool-result-mEKHKLZ8.js} +1 -1
  160. package/dist/client/assets/{seo-editor-Dv1QBoJW.js → seo-editor-DaIHsMkg.js} +1 -1
  161. package/dist/client/assets/{settings-layout-Cs2MLAfL.js → settings-layout-Hxpekzl7.js} +1 -1
  162. package/dist/client/assets/{settings-section-D3vb92Hp.js → settings-section-BS9eoASN.js} +1 -1
  163. package/dist/client/assets/{settings-subnav-DQ1eEvOq.js → settings-subnav-D-pYtn7v.js} +1 -1
  164. package/dist/client/assets/{shell-controls-D6mlM6en.js → shell-controls-BhWnmqdm.js} +1 -1
  165. package/dist/client/assets/{shell-layout-CR_3zEJX.js → shell-layout-B7KEX529.js} +1 -1
  166. package/dist/client/assets/{sidebar-D7WyGZeZ.js → sidebar-Z1Ar8Iq1.js} +1 -1
  167. package/dist/client/assets/{skeleton-DW8UTNvj.js → skeleton-BvZK-LJN.js} +1 -1
  168. package/dist/client/assets/{spinner-d6SkvhST.js → spinner-glqojFDA.js} +1 -1
  169. package/dist/client/assets/{sso-qx0azq53.js → sso-CZzvOl_H.js} +1 -1
  170. package/dist/client/assets/{store-bjVveGJN.js → store-4VNI89Jx.js} +1 -1
  171. package/dist/client/assets/store-registry-5DQx43Zm.js +2 -0
  172. package/dist/client/assets/{studio-tools-Bza2dfRU.js → studio-tools-BBCHIrbu.js} +1 -1
  173. package/dist/client/assets/{switch-D0zyyhFe.js → switch-BAlslK2J.js} +1 -1
  174. package/dist/client/assets/{synced-repos-paBo6GA4.js → synced-repos-BYuo6K5k.js} +1 -1
  175. package/dist/client/assets/{tab-id-DqYVBo8Q.js → tab-id-CYxMrTRp.js} +1 -1
  176. package/dist/client/assets/{table-iM76BV5s.js → table-_DZMZF7n.js} +1 -1
  177. package/dist/client/assets/{tabs-OVe6W4vU.js → tabs-DeNiwmVV.js} +1 -1
  178. package/dist/client/assets/{tasks-BxpK5BbS.js → tasks-BohHzFrx.js} +1 -1
  179. package/dist/client/assets/{textarea-j010NsoF.js → textarea-DkNj8yms.js} +1 -1
  180. package/dist/client/assets/{toggle-group-CbY1WnbQ.js → toggle-group-Do3gb8uy.js} +1 -1
  181. package/dist/client/assets/{toolbar-DJmSAaA1.js → toolbar-DEkBOfzd.js} +1 -1
  182. package/dist/client/assets/{tooltip-BMq0UdId.js → tooltip-Dt_WUeQs.js} +1 -1
  183. package/dist/client/assets/{track-BknDPjaC.js → track-C3SQxOl4.js} +1 -1
  184. package/dist/client/assets/{types-Ec7EQnqQ.js → types-Dh-L4V2P.js} +1 -1
  185. package/dist/client/assets/{use-ai-providers-CgyuOMzj.js → use-ai-providers-DwZngUHl.js} +1 -1
  186. package/dist/client/assets/{use-api-keys-DSZn7aAU.js → use-api-keys-DrlFtOsW.js} +1 -1
  187. package/dist/client/assets/{use-automations-CzReTSYw.js → use-automations-BqX_0zG2.js} +1 -1
  188. package/dist/client/assets/{use-autosave-3A3OieHW.js → use-autosave-P4ije4un.js} +1 -1
  189. package/dist/client/assets/{use-capability-C_rkul1d.js → use-capability-U_kO9pjO.js} +1 -1
  190. package/dist/client/assets/{use-clock-tick-CuT6SgAh.js → use-clock-tick-yZZNkqhy.js} +1 -1
  191. package/dist/client/assets/{use-commerce-diagnostic-Bb_CM6Zr.js → use-commerce-diagnostic-DL4B4X1w.js} +1 -1
  192. package/dist/client/assets/{use-connection-byERAH39.js → use-connection-D7--TeDa.js} +1 -1
  193. package/dist/client/assets/{use-copy-BdXvpSei.js → use-copy-BGwAE5Xe.js} +1 -1
  194. package/dist/client/assets/{use-create-virtual-mcp-JxTyBQ0o.js → use-create-virtual-mcp-B5mSvVFn.js} +1 -1
  195. package/dist/client/assets/{use-debounced-autosave-CQpo1IFD.js → use-debounced-autosave-BDvfPMkV.js} +1 -1
  196. package/dist/client/assets/{use-debounced-value-DVv4Was6.js → use-debounced-value-UZPGD-zb.js} +1 -1
  197. package/dist/client/assets/{use-decopilot-events-Cioi-jyX.js → use-decopilot-events-8dmobXlE.js} +1 -1
  198. package/dist/client/assets/{use-delete-connection-Dwjq2oE2.js → use-delete-connection-CP8NWsvL.js} +1 -1
  199. package/dist/client/assets/{use-deployment-admin-DS2y3gse.js → use-deployment-admin-tOuWllrn.js} +1 -1
  200. package/dist/client/assets/{use-file-configs-BNzMfJzS.js → use-file-configs-CgH1G4FU.js} +1 -1
  201. package/dist/client/assets/{use-infinite-scroll-CHKEyN-D.js → use-infinite-scroll-Dzm35RNS.js} +1 -1
  202. package/dist/client/assets/{use-join-requests-DXxbglff.js → use-join-requests-CW8P-2hM.js} +1 -1
  203. package/dist/client/assets/{use-mcp-client-MenwJIdr.js → use-mcp-client-DFoPNyXR.js} +1 -1
  204. package/dist/client/assets/{use-mcp-tools-DwGBkcvV.js → use-mcp-tools-ByMlhxuh.js} +1 -1
  205. package/dist/client/assets/{use-members-CHB4njci.js → use-members-DpAa0K8W.js} +1 -1
  206. package/dist/client/assets/{use-mobile-CkaJOAhN.js → use-mobile-DxjazlC8.js} +1 -1
  207. package/dist/client/assets/{use-navigate-to-agent-DQvoLYm7.js → use-navigate-to-agent-CX93JJ-W.js} +1 -1
  208. package/dist/client/assets/{use-org-auth-client-BU5yjRO0.js → use-org-auth-client-CiGZ-xlx.js} +1 -1
  209. package/dist/client/assets/{use-org-repo-syncs-DY_wWhzo.js → use-org-repo-syncs-CugnYvLM.js} +1 -1
  210. package/dist/client/assets/{use-org-sso-DlLYDqpC.js → use-org-sso-CHwTj_pK.js} +1 -1
  211. package/dist/client/assets/{use-organization-roles-BUfBcQRL.js → use-organization-roles-ChU_RgEA.js} +1 -1
  212. package/dist/client/assets/{use-organization-settings-BEDQFY4b.js → use-organization-settings-kcm-WdX5.js} +1 -1
  213. package/dist/client/assets/{use-registry-connections-5nzu8L9g.js → use-registry-connections-BvzfOtMr.js} +1 -1
  214. package/dist/client/assets/{use-secrets-DomhK2z_.js → use-secrets-CAbcEA8g.js} +1 -1
  215. package/dist/client/assets/{use-section-preview-base-Di6vNQ37.js → use-section-preview-base-CYcMtPj5.js} +1 -1
  216. package/dist/client/assets/{use-settings-tabs-CV1UIMe3.js → use-settings-tabs-qdqtthwY.js} +1 -1
  217. package/dist/client/assets/{use-status-sounds-fo3eziG7.js → use-status-sounds-BWK3t0nt.js} +1 -1
  218. package/dist/client/assets/{use-tags-B0u_h9Od.js → use-tags-Bcd_6z1e.js} +1 -1
  219. package/dist/client/assets/{use-view-mode-ClKx_51P.js → use-view-mode-cgBHRzHt.js} +1 -1
  220. package/dist/client/assets/{use-virtual-mcp--HqvQUkU.js → use-virtual-mcp-BbdjNQ1e.js} +1 -1
  221. package/dist/client/assets/useInfiniteQuery-CMi-ILZI.js +1 -0
  222. package/dist/client/assets/{useRouterState-CpoY9w1J.js → useRouterState-B0WmwZ8z.js} +1 -1
  223. package/dist/client/assets/useSuspenseInfiniteQuery-Cw5NEgMj.js +1 -0
  224. package/dist/client/assets/{users-DitZgme_.js → users-CAr233Ns.js} +1 -1
  225. package/dist/client/assets/{variant-calendar-C6oMv86Z.js → variant-calendar--Tz37I5S.js} +1 -1
  226. package/dist/client/assets/{view-mode-toggle-DkbbOlnc.js → view-mode-toggle-ChvR0gk0.js} +1 -1
  227. package/dist/client/index.html +1 -1
  228. package/dist/server/cli.js +5 -5
  229. package/dist/server/server.js +5 -5
  230. package/package.json +1 -1
  231. package/dist/client/assets/automations-70BtgK7E.js +0 -1
  232. package/dist/client/assets/record-editor-FUPBAxV_.js +0 -1
  233. package/dist/client/assets/registry-BI5xm2xo.js +0 -2
  234. package/dist/client/assets/store-registry-CHOO5ZaF.js +0 -2
  235. package/dist/client/assets/useInfiniteQuery-DKEqEJP6.js +0 -1
  236. package/dist/client/assets/useSuspenseInfiniteQuery-eVxA0vaJ.js +0 -1
@@ -2680,7 +2680,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
2680
2680
 
2681
2681
  `).trim(),U=H.length>0?`Not executed tools (${H.length}/${$.tools.length}): ${H.join(", ")}`:"",O=[N,U].filter((B)=>B.length>0).join(`
2682
2682
 
2683
- `);return{toolResults:K,agentSummary:O.length>0?O:null,unexecutedTools:H}}finally{await Z.close?.().catch(()=>{})}}async function Q41($,Z){let X=$.storage.registry,Q=$.organization.id,Y=await X.monitorConnections.findByItemId(Q,Z.id);if(Y){if(await $.storage.connections.findById(Y.connection_id,Q))return Y.connection_id}let G=os4(Z);if(!G)throw Error(`Registry item ${Z.id} has no remote URL`);if(dx0(G))throw Error(`Registry item ${Z.id} targets a private network URL, refusing to create a monitor connection`);let J=ns4($),W=ts4(Z),K=await $.storage.connections.create({organization_id:Q,created_by:J,title:`[MCP Tester] ${Z.title}`,description:`Auto-created monitor connection for ${Z.id}`,app_name:"private-registry-monitor",app_id:`${w_}:monitor`,connection_type:W,connection_url:G,metadata:{monitorConnection:!0,registryItemId:Z.id,pluginId:w_}});return await X.monitorConnections.upsert({organization_id:Q,item_id:Z.id,connection_id:K.id,auth_status:"none"}),K.id}async function Ge4($){let Z=$.ctx.storage.registry;switch($.action){case"unlisted":return await Z.items.update($.organizationId,$.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await Z.items.update($.organizationId,$.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await Z.items.delete($.organizationId,$.item.id),$.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function Je4($){let Z=Date.now();if($.signal.aborted)throw Error("Run cancelled");let X="passed",Q=!1,Y=!1,G=null,J="none",W=null,K=[],F=null,H=async()=>{await $.onProgress?.({status:X,connectionOk:Q,toolsListed:Y,toolResults:[...K],agentSummary:W,errorMessage:G,actionTaken:J,durationMs:Date.now()-Z})};try{let N=await Q41($.ctx,$.item);F=await $.ctx.createMCPProxy(N),Q=!0;let O=(await Pr(F.listTools?F.listTools():Promise.resolve({tools:[]}),$.monitorConfig.perMcpTimeoutMs,`listTools ${$.item.id}`)).tools??[];if(Y=!0,$.monitorConfig.monitorMode!=="health_check")K.push(...O.map((B)=>X41(B.name))),await H();if($.monitorConfig.monitorMode==="full_agent"){let B=await Ye4({ctx:$.ctx,monitorConfig:$.monitorConfig,item:$.item,proxy:F,tools:O,signal:$.signal,onProgress:async(D)=>{K.length=0,K.push(...RS$({discoveredTools:O,executedResults:D})),X=D.some((L)=>!L.success)?"failed":"passed",await H()}});if(K.length=0,K.push(...RS$({discoveredTools:O,executedResults:B.toolResults})),W=B.agentSummary,B.toolResults.some((D)=>!D.success))X="failed";if(B.unexecutedTools.length>0){if(X="failed",!G)G=`Agent skipped ${B.unexecutedTools.length} tool(s): ${B.unexecutedTools.join(", ")}`}}else if($.monitorConfig.monitorMode!=="health_check"){for(let B=0;B<O.length;B++){let D=O[B];if(!D||$.signal.aborted)throw Error("Run cancelled");let L=Date.now();try{let E={},j=await Pr(F.callTool({name:D.name,arguments:E}),$.monitorConfig.perToolTimeoutMs,`tool ${D.name}`),z=!j.isError,A=Date.now()-L;IS$(K,{toolName:D.name,success:z,input:E,durationMs:A,outputPreview:VS$(j.structuredContent??j.content),error:z?null:jz0(j.content?.find((P)=>P.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await H()}catch(E){let j=Date.now()-L,z=E instanceof Error?E.message:String(E);IS$(K,{toolName:D.name,success:!1,durationMs:j,error:jz0(z)}),await H()}}if(K.some((B)=>!B.success))X="failed"}else for(let B of O)K.push(X41(B.name));if($.canApplyFailureAction&&X==="failed"&&$.monitorConfig.onFailure!=="none")J=await Ge4({ctx:$.ctx,organizationId:$.organizationId,item:$.item,action:$.monitorConfig.onFailure})}catch(N){if(G=N instanceof Error?N.message:String(N),rs4(N))X="needs_auth",await $.ctx.storage.registry.monitorConnections.updateAuthStatus($.organizationId,$.item.id,"needs_auth");else X="error"}finally{await F?.close?.().catch(()=>{})}return{status:X,connectionOk:Q,toolsListed:Y,toolResults:K,agentSummary:W,errorMessage:G,actionTaken:J,durationMs:Date.now()-Z}}async function We4($){let Z=$.ctx.storage.registry,Q=(await Z.items.list($.organizationId,{includeUnlisted:!0})).items.filter((H)=>{if($.monitorConfig.testPublicOnly&&!H.is_public)return!1;if($.monitorConfig.testPrivateOnly&&H.is_public)return!1;return!0}),Y=$.monitorConfig.includePendingRequests?(await Z.publishRequests.list($.organizationId,{status:"pending",limit:500})).items.map((H)=>Ke4(H)):[],G=[...Q.map((H)=>({item:H,source:"registry_item"})),...Y.map((H)=>({item:H,source:"publish_request"}))];if(G.length===0){await Z.monitorRuns.update($.organizationId,$.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{total_items:G.length,status:"running",started_at:new Date().toISOString()});let J=0,W=0,K=0,F=0;for(let H=0;H<G.length;H++){let N=G[H],U=N?.item;if(!U||$.signal.aborted){await Z.monitorRuns.update($.organizationId,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{current_item_id:U.id});let O=null,B=async(L)=>{if(!O){O=(await Z.monitorResults.create({run_id:$.runId,organization_id:$.organizationId,item_id:U.id,item_title:U.title,status:L.status,error_message:L.errorMessage,connection_ok:L.connectionOk,tools_listed:L.toolsListed,tool_results:L.toolResults,agent_summary:L.agentSummary,duration_ms:L.durationMs,action_taken:L.actionTaken})).id;return}await Z.monitorResults.update($.organizationId,O,{status:L.status,error_message:L.errorMessage,connection_ok:L.connectionOk,tools_listed:L.toolsListed,tool_results:L.toolResults,agent_summary:L.agentSummary,duration_ms:L.durationMs,action_taken:L.actionTaken})},D=await Je4({ctx:$.ctx,organizationId:$.organizationId,item:U,monitorConfig:$.monitorConfig,signal:$.signal,canApplyFailureAction:N.source==="registry_item",onProgress:B});if(await B({status:D.status,connectionOk:D.connectionOk,toolsListed:D.toolsListed,toolResults:D.toolResults,agentSummary:D.agentSummary,errorMessage:D.errorMessage,actionTaken:D.actionTaken,durationMs:D.durationMs}),J+=1,D.status==="passed")W+=1;else if(D.status==="failed"||D.status==="error")K+=1;else F+=1;await Z.monitorRuns.update($.organizationId,$.runId,{tested_items:J,passed_items:W,failed_items:K,skipped_items:F})}await Z.monitorRuns.update($.organizationId,$.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function Ke4($){return{id:`${Ow}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}async function Fe4($,Z){let X=ps4($);await X.access.check();let Q=X.storage.registry,Y=await Q.monitorRuns.create({organization_id:X.organization.id,status:"pending",config_snapshot:Z,started_at:null}),G=new AbortController;return Ez0.set(Y.id,G),We4({ctx:X,runId:Y.id,organizationId:X.organization.id,monitorConfig:Z,signal:G.signal}).catch(async(J)=>{await Q.monitorRuns.update(X.organization.id,Y.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),is4(`Run ${Y.id} failed with uncaught error:`,J)}).finally(()=>{Ez0.delete(Y.id)}),{run:{id:Y.id}}}var Ez0,ls4="[MONITOR-AGENT]",ds4,ms4="health_check: not called",_S$;var zz0=w(()=>{S0();v4();Qd();Dh();BN();Ez0=new Map,ds4=XS$;_S$=c({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:KS$,outputSchema:FS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=WS$($.config??{}),{run:Y}=await Fe4(Z,Q),J=await Z.storage.registry.monitorRuns.findById(X.id,Y.id);if(!J)throw Error(`Failed to load monitor run ${Y.id}`);return{run:J}}})});var vS$;var fS$=w(()=>{S0();BN();vS$=c({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:US$,outputSchema:OS$,handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),Z.storage.registry.monitorRuns.list(X.id,$)}})});var bS$;var xS$=w(()=>{S0();BN();bS$=c({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:BS$,outputSchema:wS$,handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),{run:await Z.storage.registry.monitorRuns.findById(X.id,$.runId)}}})});var yS$;var gS$=w(()=>{S0();BN();zz0();yS$=c({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:HS$,outputSchema:NS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry;if(!await Q.monitorRuns.findById(X.id,$.runId))throw Error(`Monitor run not found: ${$.runId}`);return kS$($.runId),{run:await Q.monitorRuns.update(X.id,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var hS$;var uS$=w(()=>{S0();BN();hS$=c({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:DS$,outputSchema:LS$,handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),Z.storage.registry.monitorResults.listByRun(X.id,$.runId,{status:$.status,limit:$.limit,offset:$.offset})}})});var cS$;var lS$=w(()=>{S0();BN();Dh();cS$=c({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:ES$,outputSchema:jS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Q.monitorConnections.list(X.id);return{items:await Promise.all(Y.map(async(J)=>{let W=await Q.items.findById(X.id,J.item_id);if(!W&&J.item_id.startsWith(Ow)){let H=J.item_id.slice(Ow.length),N=await Q.publishRequests.findById(X.id,H);if(N)W={id:J.item_id,title:N.title,description:N.description,_meta:N._meta,server:N.server,is_public:!1,is_unlisted:!0,created_at:N.created_at,updated_at:N.updated_at}}let K=W?.server.remotes?.find((H)=>H.url)?.url??null,F=J.item_id.startsWith(Ow)?"request":"store";return{mapping:J,item:W,remoteUrl:K,source:F}}))}}})});function He4($){return{id:`${Ow}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}var dS$;var mS$=w(()=>{S0();BN();zz0();Dh();dS$=c({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:zS$,outputSchema:PS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=(await Q.items.list(X.id,{includeUnlisted:!0})).items,J=(await Q.publishRequests.list(X.id,{status:"pending",limit:500})).items.map(He4),W=[...Y,...J],K=await Q.monitorConnections.list(X.id),F=new Set(K.map((N)=>N.item_id)),H=0;for(let N of W){if(!N.server.remotes?.some((U)=>U.url))continue;try{await Q41(Z,N)}catch(U){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${N.id}:`,U instanceof Error?U.message:U);continue}if(!F.has(N.id))H+=1}return{created:H,updated:Math.max(W.length-H,0)}}})});var iS$;var pS$=w(()=>{S0();BN();iS$=c({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:AS$,outputSchema:TS$,handler:async({connectionId:$,authStatus:Z},X)=>{let Q=t(X);await X.access.check();let Y=X.storage.registry,G=Q.id,J=await Y.monitorConnections.findByConnectionId(G,$);if(!J)throw Error(`No monitor connection mapping found for connection ${$}`);return await Y.monitorConnections.updateAuthStatus(G,J.item_id,Z),{success:!0}}})});function Ne4($){if(!$)return{};if(typeof $==="string")try{return JSON.parse($)}catch{return{}}if(typeof $==="object")return $;return{}}async function Ar($,Z){let Q=(await $.db.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",Z).where("virtual_mcp_plugin_configs.plugin_id","=",w_).execute()).map((G)=>Ne4(G.settings)),Y={acceptPublishRequests:Q.some((G)=>G.acceptPublishRequests===!0),requireApiToken:Q.some((G)=>G.requireApiToken===!0),storePrivateOnly:Q.some((G)=>G.storePrivateOnly===!0)};if(Y.acceptPublishRequests||Y.requireApiToken||Y.storePrivateOnly)return Y;for(let G of Q)if(Object.keys(G).length>0)return G;return{}}var nS$=w(()=>{Dh()});import{z as Y41}from"zod";function Ue4($,Z){if(!Z)return $;let X={field:["is_public"],operator:"eq",value:!1};if(!$)return X;return{operator:"and",conditions:[$,X]}}function Oe4($){let Z=new Map,X=new Map;for(let Y of $){let G=pW(Y._meta);for(let J of G?.tags??[])Z.set(J,(Z.get(J)??0)+1);for(let J of G?.categories??[])X.set(J,(X.get(J)??0)+1)}let Q=(Y)=>Array.from(Y.entries()).map(([G,J])=>({value:G,count:J})).sort((G,J)=>G.value.localeCompare(J.value));return{tags:Q(Z),categories:Q(X)}}var tS$,oS$,rS$,aS$;var sS$=w(()=>{S0();N9();nS$();tS$=c({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:Nh,outputSchema:Uh,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Ar(Z,X.id);return Q.items.list(X.id,{...$,where:Ue4($.where,Y.storePrivateOnly===!0)})}}),oS$=c({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:$F,outputSchema:B_,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Ar(Z,X.id),G=$.id??$.name;if(!G)return{item:null};let J=await Q.items.findByIdOrName(X.id,G);if(!J)return{item:null};if(Y.storePrivateOnly&&J.is_public)return{item:null};return{item:J}}}),rS$=c({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:$F,outputSchema:Y41.object({versions:Y41.array(YW)}),handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Ar(Z,X.id),G=$.id??$.name;if(!G)return{versions:[]};let J=await Q.items.findByIdOrName(X.id,G);if(!J)return{versions:[]};if(Y.storePrivateOnly&&J.is_public)return{versions:[]};return{versions:[J]}}}),aS$=c({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:Y41.object({}),outputSchema:Oh,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry;if(!(await Ar(Z,X.id)).storePrivateOnly)return Q.items.getFilters(X.id);let G=await Q.items.list(X.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return Oe4(G.items)}})});var eS$;var $C$=w(()=>{AV$();RV$();qV$();kV$();Qd();SV$();_V$();fV$();xV$();gV$();cV$();dV$();iV$();nV$();oV$();aV$();eV$();ZS$();zz0();fS$();xS$();gS$();uS$();lS$();mS$();pS$();sS$();eS$=[tS$,oS$,rS$,aS$,vV$,bV$,CV$,uV$,IV$,PV$,yV$,MV$,VV$,ex1,TV$,lV$,mV$,pV$,tV$,rV$,sV$,$S$,_S$,vS$,bS$,yS$,hS$,cS$,dS$,iS$]});import{z as D_}from"zod";var we4,G41;var ZC$=w(()=>{IH();S0();lp();pX();HB();we4=D_.enum(["agent-sandbox","user-desktop","cluster"]),G41=c({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:D_.object({virtualMcpId:D_.string().describe("Virtual MCP ID that owns this VM"),branch:D_.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:we4.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry."),removeWorktree:D_.boolean().optional().default(!1).describe("Also reclaim the sandbox's workspace (local worktree + disk). Ignored by providers whose teardown already destroys the filesystem.")}),outputSchema:D_.object({success:D_.boolean()}),handler:async($,Z)=>{let X=GE($.sandboxProviderKind),Q;try{Q=await aQ$({...$,sandboxProviderKind:X},Z)}catch(K){if(K instanceof Error&&K.message==="Virtual MCP not found")return{success:!0};throw K}let{entry:Y,userId:G,sandboxUserId:J}=Q;if(!Y)return{success:!0};let{provider:W}=await sX(Z,{userId:J,branch:$.branch,virtualMcpMetadata:Q.metadata,explicitKind:X});return await tO(Z.storage.virtualMcps,$.virtualMcpId,G,J,$.branch,X),await W.delete(Y.sandboxHandle).catch((K)=>console.error(`[SANDBOX_DELETE] ${X} ${Y.sandboxHandle}: ${K instanceof Error?K.message:String(K)}`)),{success:!0}}})});var XC$=w(()=>{ip();ZC$()});import{z as wN}from"zod";var Le4="https://api.github.com",Ee4=15000,J41;var QC$=w(()=>{S0();lG();qQ();gG();J41=c({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:wN.object({connectionId:wN.string().describe("ID of the mcp-github connection to use")}),outputSchema:wN.object({installations:wN.array(wN.object({installationId:wN.number(),login:wN.string(),avatarUrl:wN.string(),type:wN.string()}))}),handler:async($,Z)=>{await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization context required");let Q=await Z.storage.connections.findById($.connectionId,X);if(!Q)throw Error("Connection not found");if(I5(Q))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let Y=new l6(Z.db,Z.vault),G=await Y.get($.connectionId);if(!G)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=G.accessToken;if(Lh(G)&&Y.isExpired(G,Up)){let N=await Pz0(G,Y);if(!N)throw Error(X9);J=N,G=await Y.get($.connectionId)??G}let W=[],K=1,F=100,H=async(N)=>fetch(`${Le4}/user/installations?per_page=${F}&page=${K}`,{headers:{Authorization:`Bearer ${N}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(Ee4)});while(!0){let N=await H(J);if(N.status===401){let O=await Y.get($.connectionId);if(!O||!Lh(O))throw Error(X9);let B=await Pz0(O,Y);if(!B)throw Error(X9);if(J=B,N=await H(J),N.status===401)throw Error(X9)}if(!N.ok)throw Error(`GitHub /user/installations failed: ${N.status}`);let U=await N.json();for(let O of U.installations)W.push({installationId:O.id,login:O.account.login,avatarUrl:O.account.avatar_url,type:O.account.type});if(U.installations.length<F)break;K++}return{installations:W}}})});function L_($,Z){let X=$.get(Z);if(X===null)return null;let Q=Number(X);return Number.isFinite(Q)?Q:null}function je4($){return{limit:L_($,"x-ratelimit-limit"),remaining:L_($,"x-ratelimit-remaining"),reset:L_($,"x-ratelimit-reset"),used:L_($,"x-ratelimit-used"),resource:$.get("x-ratelimit-resource")}}function Az0($){if($.status===429)return!0;if($.status!==403)return!1;if($.headers.get("retry-after")!==null)return!0;return L_($.headers,"x-ratelimit-remaining")===0}function Tz0($,Z=Date.now()){let X=L_($,"retry-after");if(X!==null)return Math.max(0,X*1000);let Q=L_($,"x-ratelimit-reset");if(Q!==null)return Math.max(0,Q*1000-Z);return null}function Rz0($,Z){let X=je4($),Q={lane:Z.lane,operation:Z.operation,resource:X.resource??"unknown"};if(JC$??=w$.createCounter("github_api_calls",{description:"Calls to the GitHub API, by transport and operation",unit:"{calls}"}),JC$.add(1,Q),X.remaining!==null)YC$??=w$.createGauge("github_rate_limit_remaining",{description:"Requests (REST) or points (GraphQL) left in the window",unit:"{requests}"}),YC$.record(X.remaining,Q);if(X.used!==null)GC$??=w$.createGauge("github_rate_limit_used",{description:"Requests (REST) or points (GraphQL) spent in the window",unit:"{requests}"}),GC$.record(X.used,Q);return X}function Iz0($){WC$??=w$.createCounter("github_rate_limited",{description:"GitHub responses refused for rate-limit reasons",unit:"{responses}"}),WC$.add(1,$)}var YC$=null,GC$=null,JC$=null,WC$=null;var W41=w(()=>{R6()});function ze4(){return process.env.GITHUB_GRAPHQL_URL??"https://api.github.com/graphql"}function Ae4($,Z){try{return JSON.parse($)}catch(X){throw Error(`GitHub GraphQL ${Z} returned invalid JSON: ${$.slice(0,300)}`,{cause:X})}}function Te4($,Z){let X=$.errors?.[0]?.message;if(X)throw Error(`GitHub GraphQL ${Z} failed: ${X}`);if($.data==null)throw Error(`GitHub GraphQL ${Z} returned no data`);return $.data}async function Re4($,Z){let X=$.organization?.id;if(!X)throw Error("Organization context required");let Q=await $.storage.connections.findById(Z,X);if(!Q)throw Error("Connection not found");if(!j4$(Q))throw Error("Connection is not a GitHub connection");return Q}async function Eh($,Z){let X=await Re4($,Z.connectionId),Q=await Hp($,X);if(!Q)throw Error(X9);let Y=(J)=>fetch(ze4(),{method:"POST",headers:{Authorization:`Bearer ${J}`,Accept:"application/vnd.github+json","Content-Type":"application/json"},body:JSON.stringify({query:Z.query,variables:Z.variables}),signal:AbortSignal.timeout(Pe4)}),G=await Y(Q);if(G.status===401){try{await G.body?.cancel()}catch{}let J=await Hp($,X,{forceRefresh:!0});if(!J)throw Error(X9);if(G=await Y(J),G.status===401)throw Error(X9)}if(Rz0(G.headers,{lane:"graphql",operation:Z.label}),Az0(G)){let J=G.headers.get("retry-after")!==null?"secondary":"primary";Iz0({lane:"graphql",operation:Z.label,kind:J});let W=Tz0(G.headers);throw Error(`GitHub ${J} rate limit reached${W===null?"":`; retry in ${Math.ceil(W/1000)}s`}`)}if(!G.ok)throw Error(`GitHub GraphQL ${Z.label} failed: ${G.status}`);return Te4(Ae4(await G.text(),Z.label),Z.label)}var Pe4=15000;var qz0=w(()=>{Np();lG();W41()});import{z as PJ}from"zod";function Me4($,Z){let X=$.repository;if(!X)throw Error(`Repository ${Z} not found or not accessible by this connection`);let Q=(X.refs?.nodes??[]).filter((Y)=>typeof Y?.name==="string").map((Y)=>({name:Y.name,author:Y.target?.author?.user?.login??null}));return{branches:Q,totalCount:X.refs?.totalCount??Q.length}}var Ie4=`
2683
+ `);return{toolResults:K,agentSummary:O.length>0?O:null,unexecutedTools:H}}finally{await Z.close?.().catch(()=>{})}}async function Q41($,Z){let X=$.storage.registry,Q=$.organization.id,Y=await X.monitorConnections.findByItemId(Q,Z.id);if(Y){if(await $.storage.connections.findById(Y.connection_id,Q))return Y.connection_id}let G=os4(Z);if(!G)throw Error(`Registry item ${Z.id} has no remote URL`);if(dx0(G))throw Error(`Registry item ${Z.id} targets a private network URL, refusing to create a monitor connection`);let J=ns4($),W=ts4(Z),K=await $.storage.connections.create({organization_id:Q,created_by:J,title:`[MCP Tester] ${Z.title}`,description:`Auto-created monitor connection for ${Z.id}`,app_name:"private-registry-monitor",app_id:`${w_}:monitor`,connection_type:W,connection_url:G,metadata:{monitorConnection:!0,registryItemId:Z.id,pluginId:w_}});return await X.monitorConnections.upsert({organization_id:Q,item_id:Z.id,connection_id:K.id,auth_status:"none"}),K.id}async function Ge4($){let Z=$.ctx.storage.registry;switch($.action){case"unlisted":return await Z.items.update($.organizationId,$.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await Z.items.update($.organizationId,$.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await Z.items.delete($.organizationId,$.item.id),$.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function Je4($){let Z=Date.now();if($.signal.aborted)throw Error("Run cancelled");let X="passed",Q=!1,Y=!1,G=null,J="none",W=null,K=[],F=null,H=async()=>{await $.onProgress?.({status:X,connectionOk:Q,toolsListed:Y,toolResults:[...K],agentSummary:W,errorMessage:G,actionTaken:J,durationMs:Date.now()-Z})};try{let N=await Q41($.ctx,$.item);F=await $.ctx.createMCPProxy(N),Q=!0;let O=(await Pr(F.listTools?F.listTools():Promise.resolve({tools:[]}),$.monitorConfig.perMcpTimeoutMs,`listTools ${$.item.id}`)).tools??[];if(Y=!0,$.monitorConfig.monitorMode!=="health_check")K.push(...O.map((B)=>X41(B.name))),await H();if($.monitorConfig.monitorMode==="full_agent"){let B=await Ye4({ctx:$.ctx,monitorConfig:$.monitorConfig,item:$.item,proxy:F,tools:O,signal:$.signal,onProgress:async(D)=>{K.length=0,K.push(...RS$({discoveredTools:O,executedResults:D})),X=D.some((L)=>!L.success)?"failed":"passed",await H()}});if(K.length=0,K.push(...RS$({discoveredTools:O,executedResults:B.toolResults})),W=B.agentSummary,B.toolResults.some((D)=>!D.success))X="failed";if(B.unexecutedTools.length>0){if(X="failed",!G)G=`Agent skipped ${B.unexecutedTools.length} tool(s): ${B.unexecutedTools.join(", ")}`}}else if($.monitorConfig.monitorMode!=="health_check"){for(let B=0;B<O.length;B++){let D=O[B];if(!D||$.signal.aborted)throw Error("Run cancelled");let L=Date.now();try{let E={},j=await Pr(F.callTool({name:D.name,arguments:E}),$.monitorConfig.perToolTimeoutMs,`tool ${D.name}`),z=!j.isError,A=Date.now()-L;IS$(K,{toolName:D.name,success:z,input:E,durationMs:A,outputPreview:VS$(j.structuredContent??j.content),error:z?null:jz0(j.content?.find((P)=>P.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await H()}catch(E){let j=Date.now()-L,z=E instanceof Error?E.message:String(E);IS$(K,{toolName:D.name,success:!1,durationMs:j,error:jz0(z)}),await H()}}if(K.some((B)=>!B.success))X="failed"}else for(let B of O)K.push(X41(B.name));if($.canApplyFailureAction&&X==="failed"&&$.monitorConfig.onFailure!=="none")J=await Ge4({ctx:$.ctx,organizationId:$.organizationId,item:$.item,action:$.monitorConfig.onFailure})}catch(N){if(G=N instanceof Error?N.message:String(N),rs4(N))X="needs_auth",await $.ctx.storage.registry.monitorConnections.updateAuthStatus($.organizationId,$.item.id,"needs_auth");else X="error"}finally{await F?.close?.().catch(()=>{})}return{status:X,connectionOk:Q,toolsListed:Y,toolResults:K,agentSummary:W,errorMessage:G,actionTaken:J,durationMs:Date.now()-Z}}async function We4($){let Z=$.ctx.storage.registry,Q=(await Z.items.list($.organizationId,{includeUnlisted:!0})).items.filter((H)=>{if($.monitorConfig.testPublicOnly&&!H.is_public)return!1;if($.monitorConfig.testPrivateOnly&&H.is_public)return!1;return!0}),Y=$.monitorConfig.includePendingRequests?(await Z.publishRequests.list($.organizationId,{status:"pending",limit:500})).items.map((H)=>Ke4(H)):[],G=[...Q.map((H)=>({item:H,source:"registry_item"})),...Y.map((H)=>({item:H,source:"publish_request"}))];if(G.length===0){await Z.monitorRuns.update($.organizationId,$.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{total_items:G.length,status:"running",started_at:new Date().toISOString()});let J=0,W=0,K=0,F=0;for(let H=0;H<G.length;H++){let N=G[H],U=N?.item;if(!U||$.signal.aborted){await Z.monitorRuns.update($.organizationId,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{current_item_id:U.id});let O=null,B=async(L)=>{if(!O){O=(await Z.monitorResults.create({run_id:$.runId,organization_id:$.organizationId,item_id:U.id,item_title:U.title,status:L.status,error_message:L.errorMessage,connection_ok:L.connectionOk,tools_listed:L.toolsListed,tool_results:L.toolResults,agent_summary:L.agentSummary,duration_ms:L.durationMs,action_taken:L.actionTaken})).id;return}await Z.monitorResults.update($.organizationId,O,{status:L.status,error_message:L.errorMessage,connection_ok:L.connectionOk,tools_listed:L.toolsListed,tool_results:L.toolResults,agent_summary:L.agentSummary,duration_ms:L.durationMs,action_taken:L.actionTaken})},D=await Je4({ctx:$.ctx,organizationId:$.organizationId,item:U,monitorConfig:$.monitorConfig,signal:$.signal,canApplyFailureAction:N.source==="registry_item",onProgress:B});if(await B({status:D.status,connectionOk:D.connectionOk,toolsListed:D.toolsListed,toolResults:D.toolResults,agentSummary:D.agentSummary,errorMessage:D.errorMessage,actionTaken:D.actionTaken,durationMs:D.durationMs}),J+=1,D.status==="passed")W+=1;else if(D.status==="failed"||D.status==="error")K+=1;else F+=1;await Z.monitorRuns.update($.organizationId,$.runId,{tested_items:J,passed_items:W,failed_items:K,skipped_items:F})}await Z.monitorRuns.update($.organizationId,$.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function Ke4($){return{id:`${Ow}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}async function Fe4($,Z){let X=ps4($);await X.access.check();let Q=X.storage.registry,Y=await Q.monitorRuns.create({organization_id:X.organization.id,status:"pending",config_snapshot:Z,started_at:null}),G=new AbortController;return Ez0.set(Y.id,G),We4({ctx:X,runId:Y.id,organizationId:X.organization.id,monitorConfig:Z,signal:G.signal}).catch(async(J)=>{await Q.monitorRuns.update(X.organization.id,Y.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),is4(`Run ${Y.id} failed with uncaught error:`,J)}).finally(()=>{Ez0.delete(Y.id)}),{run:{id:Y.id}}}var Ez0,ls4="[MONITOR-AGENT]",ds4,ms4="health_check: not called",_S$;var zz0=w(()=>{S0();v4();Qd();Dh();BN();Ez0=new Map,ds4=XS$;_S$=c({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:KS$,outputSchema:FS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=WS$($.config??{}),{run:Y}=await Fe4(Z,Q),J=await Z.storage.registry.monitorRuns.findById(X.id,Y.id);if(!J)throw Error(`Failed to load monitor run ${Y.id}`);return{run:J}}})});var vS$;var fS$=w(()=>{S0();BN();vS$=c({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:US$,outputSchema:OS$,handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),Z.storage.registry.monitorRuns.list(X.id,$)}})});var bS$;var xS$=w(()=>{S0();BN();bS$=c({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:BS$,outputSchema:wS$,handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),{run:await Z.storage.registry.monitorRuns.findById(X.id,$.runId)}}})});var yS$;var gS$=w(()=>{S0();BN();zz0();yS$=c({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:HS$,outputSchema:NS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry;if(!await Q.monitorRuns.findById(X.id,$.runId))throw Error(`Monitor run not found: ${$.runId}`);return kS$($.runId),{run:await Q.monitorRuns.update(X.id,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var hS$;var uS$=w(()=>{S0();BN();hS$=c({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:DS$,outputSchema:LS$,handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),Z.storage.registry.monitorResults.listByRun(X.id,$.runId,{status:$.status,limit:$.limit,offset:$.offset})}})});var cS$;var lS$=w(()=>{S0();BN();Dh();cS$=c({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:ES$,outputSchema:jS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Q.monitorConnections.list(X.id);return{items:await Promise.all(Y.map(async(J)=>{let W=await Q.items.findById(X.id,J.item_id);if(!W&&J.item_id.startsWith(Ow)){let H=J.item_id.slice(Ow.length),N=await Q.publishRequests.findById(X.id,H);if(N)W={id:J.item_id,title:N.title,description:N.description,_meta:N._meta,server:N.server,is_public:!1,is_unlisted:!0,created_at:N.created_at,updated_at:N.updated_at}}let K=W?.server.remotes?.find((H)=>H.url)?.url??null,F=J.item_id.startsWith(Ow)?"request":"store";return{mapping:J,item:W,remoteUrl:K,source:F}}))}}})});function He4($){return{id:`${Ow}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}var dS$;var mS$=w(()=>{S0();BN();zz0();Dh();dS$=c({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:zS$,outputSchema:PS$,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=(await Q.items.list(X.id,{includeUnlisted:!0})).items,J=(await Q.publishRequests.list(X.id,{status:"pending",limit:500})).items.map(He4),W=[...Y,...J],K=await Q.monitorConnections.list(X.id),F=new Set(K.map((N)=>N.item_id)),H=0;for(let N of W){if(!N.server.remotes?.some((U)=>U.url))continue;try{await Q41(Z,N)}catch(U){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${N.id}:`,U instanceof Error?U.message:U);continue}if(!F.has(N.id))H+=1}return{created:H,updated:Math.max(W.length-H,0)}}})});var iS$;var pS$=w(()=>{S0();BN();iS$=c({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:AS$,outputSchema:TS$,handler:async({connectionId:$,authStatus:Z},X)=>{let Q=t(X);await X.access.check();let Y=X.storage.registry,G=Q.id,J=await Y.monitorConnections.findByConnectionId(G,$);if(!J)throw Error(`No monitor connection mapping found for connection ${$}`);return await Y.monitorConnections.updateAuthStatus(G,J.item_id,Z),{success:!0}}})});function Ne4($){if(!$)return{};if(typeof $==="string")try{return JSON.parse($)}catch{return{}}if(typeof $==="object")return $;return{}}async function Ar($,Z){let Q=(await $.db.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",Z).where("virtual_mcp_plugin_configs.plugin_id","=",w_).execute()).map((G)=>Ne4(G.settings)),Y={acceptPublishRequests:Q.some((G)=>G.acceptPublishRequests===!0),requireApiToken:Q.some((G)=>G.requireApiToken===!0),storePrivateOnly:Q.some((G)=>G.storePrivateOnly===!0)};if(Y.acceptPublishRequests||Y.requireApiToken||Y.storePrivateOnly)return Y;for(let G of Q)if(Object.keys(G).length>0)return G;return{}}var nS$=w(()=>{Dh()});import{z as Y41}from"zod";function Ue4($,Z){if(!Z)return $;let X={field:["is_public"],operator:"eq",value:!1};if(!$)return X;return{operator:"and",conditions:[$,X]}}function Oe4($){let Z=new Map,X=new Map;for(let Y of $){let G=pW(Y._meta);for(let J of G?.tags??[])Z.set(J,(Z.get(J)??0)+1);for(let J of G?.categories??[])X.set(J,(X.get(J)??0)+1)}let Q=(Y)=>Array.from(Y.entries()).map(([G,J])=>({value:G,count:J})).sort((G,J)=>G.value.localeCompare(J.value));return{tags:Q(Z),categories:Q(X)}}var tS$,oS$,rS$,aS$;var sS$=w(()=>{S0();N9();nS$();tS$=c({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:Nh,outputSchema:Uh,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Ar(Z,X.id);return Q.items.list(X.id,{...$,where:Ue4($.where,Y.storePrivateOnly===!0)})}}),oS$=c({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:$F,outputSchema:B_,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Ar(Z,X.id),G=$.id??$.name;if(!G)return{item:null};let J=await Q.items.findByIdOrName(X.id,G);if(!J)return{item:null};if(Y.storePrivateOnly&&J.is_public)return{item:null};return{item:J}}}),rS$=c({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:$F,outputSchema:Y41.object({versions:Y41.array(YW)}),handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry,Y=await Ar(Z,X.id),G=$.id??$.name;if(!G)return{versions:[]};let J=await Q.items.findByIdOrName(X.id,G);if(!J)return{versions:[]};if(Y.storePrivateOnly&&J.is_public)return{versions:[]};return{versions:[J]}}}),aS$=c({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:Y41.object({}),outputSchema:Oh,handler:async($,Z)=>{let X=t(Z);await Z.access.check();let Q=Z.storage.registry;if(!(await Ar(Z,X.id)).storePrivateOnly)return Q.items.getFilters(X.id);let G=await Q.items.list(X.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return Oe4(G.items)}})});var eS$;var $C$=w(()=>{AV$();RV$();qV$();kV$();Qd();SV$();_V$();fV$();xV$();gV$();cV$();dV$();iV$();nV$();oV$();aV$();eV$();ZS$();zz0();fS$();xS$();gS$();uS$();lS$();mS$();pS$();sS$();eS$=[tS$,oS$,rS$,aS$,vV$,bV$,CV$,uV$,IV$,PV$,yV$,MV$,VV$,ex1,TV$,lV$,mV$,pV$,tV$,rV$,sV$,$S$,_S$,vS$,bS$,yS$,hS$,cS$,dS$,iS$]});import{z as D_}from"zod";var we4,G41;var ZC$=w(()=>{IH();S0();lp();pX();HB();we4=D_.enum(["agent-sandbox","user-desktop","cluster"]),G41=c({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:D_.object({virtualMcpId:D_.string().describe("Virtual MCP ID that owns this VM"),branch:D_.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:we4.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry."),removeWorktree:D_.boolean().optional().default(!1).describe("Also reclaim the sandbox's workspace (local worktree + disk). Ignored by providers whose teardown already destroys the filesystem.")}),outputSchema:D_.object({success:D_.boolean()}),handler:async($,Z)=>{let X=GE($.sandboxProviderKind),Q;try{Q=await aQ$({...$,sandboxProviderKind:X},Z)}catch(K){if(K instanceof Error&&K.message==="Virtual MCP not found")return{success:!0};throw K}let{entry:Y,userId:G,sandboxUserId:J}=Q;if(!Y)return{success:!0};let{provider:W}=await sX(Z,{userId:J,branch:$.branch,virtualMcpMetadata:Q.metadata,explicitKind:X});return await tO(Z.storage.virtualMcps,$.virtualMcpId,G,J,$.branch,X),await W.delete(Y.sandboxHandle).catch((K)=>console.error(`[SANDBOX_DELETE] ${X} ${Y.sandboxHandle}: ${K instanceof Error?K.message:String(K)}`)),{success:!0}}})});var XC$=w(()=>{ip();ZC$()});import{z as wN}from"zod";var Le4="https://api.github.com",Ee4=15000,J41;var QC$=w(()=>{S0();lG();qQ();gG();J41=c({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:wN.object({connectionId:wN.string().describe("ID of the mcp-github connection to use")}),outputSchema:wN.object({installations:wN.array(wN.object({installationId:wN.number(),login:wN.string(),avatarUrl:wN.string(),type:wN.string()}))}),handler:async($,Z)=>{await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization context required");let Q=await Z.storage.connections.findById($.connectionId,X);if(!Q)throw Error("Connection not found");if(I5(Q))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let Y=new l6(Z.db,Z.vault),G=await Y.get($.connectionId);if(!G)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=G.accessToken;if(Lh(G)&&Y.isExpired(G,Up)){let N=await Pz0(G,Y);if(!N)throw Error(X9);J=N,G=await Y.get($.connectionId)??G}let W=[],K=1,F=100,H=async(N)=>fetch(`${Le4}/user/installations?per_page=${F}&page=${K}`,{headers:{Authorization:`Bearer ${N}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(Ee4)});while(!0){let N=await H(J);if(N.status===401){let O=await Y.get($.connectionId);if(!O||!Lh(O))throw Error(X9);let B=await Pz0(O,Y);if(!B)throw Error(X9);if(J=B,N=await H(J),N.status===401)throw Error(X9)}if(!N.ok)throw Error(`GitHub /user/installations failed: ${N.status}`);let U=await N.json();for(let O of U.installations)W.push({installationId:O.id,login:O.account.login,avatarUrl:O.account.avatar_url,type:O.account.type});if(U.installations.length<F)break;K++}return{installations:W}}})});function L_($,Z){let X=$.get(Z);if(X===null)return null;let Q=Number(X);return Number.isFinite(Q)?Q:null}function je4($){return{limit:L_($,"x-ratelimit-limit"),remaining:L_($,"x-ratelimit-remaining"),reset:L_($,"x-ratelimit-reset"),used:L_($,"x-ratelimit-used"),resource:$.get("x-ratelimit-resource")}}function Az0($){if($.status===429)return!0;if($.status!==403)return!1;if($.headers.get("retry-after")!==null)return!0;return L_($.headers,"x-ratelimit-remaining")===0}function Tz0($,Z=Date.now()){let X=L_($,"retry-after");if(X!==null)return Math.max(0,X*1000);let Q=L_($,"x-ratelimit-reset");if(Q!==null)return Math.max(0,Q*1000-Z);return null}function Rz0($,Z){let X=je4($),Q={lane:Z.lane,operation:Z.operation,resource:X.resource??"unknown"};if(JC$??=w$.createCounter("github_api_calls",{description:"Calls to the GitHub API, by transport and operation",unit:"{calls}"}),JC$.add(1,Q),X.remaining!==null)YC$??=w$.createGauge("github_rate_limit_remaining",{description:"Requests (REST) or points (GraphQL) left in the window",unit:"{requests}"}),YC$.record(X.remaining,Q);if(X.used!==null)GC$??=w$.createGauge("github_rate_limit_used",{description:"Requests (REST) or points (GraphQL) spent in the window",unit:"{requests}"}),GC$.record(X.used,Q);return X}function Iz0($){WC$??=w$.createCounter("github_rate_limited",{description:"GitHub responses refused for rate-limit reasons",unit:"{responses}"}),WC$.add(1,$)}var YC$=null,GC$=null,JC$=null,WC$=null;var W41=w(()=>{R6()});function ze4(){return process.env.GITHUB_GRAPHQL_URL??"https://api.github.com/graphql"}function Ae4($,Z){try{return JSON.parse($)}catch(X){throw Error(`GitHub GraphQL ${Z} returned invalid JSON: ${$.slice(0,300)}`,{cause:X})}}function Te4($,Z){let X=$.errors?.[0]?.message;if(X)throw Error(`GitHub GraphQL ${Z} failed: ${X}`);if($.data==null)throw Error(`GitHub GraphQL ${Z} returned no data`);return $.data}async function Re4($,Z){let X=$.organization?.id;if(!X)throw Error("Organization context required");let Q=await $.storage.connections.findById(Z,X);if(!Q)throw Error("Connection not found");if(!j4$(Q))throw Error("Connection is not a GitHub connection");return Q}async function Eh($,Z){let X=await Re4($,Z.connectionId),Q=await Hp($,X);if(!Q)throw Error(X9);let Y=(J)=>fetch(ze4(),{method:"POST",headers:{Authorization:`Bearer ${J}`,Accept:"application/vnd.github+json","Content-Type":"application/json"},body:JSON.stringify({query:Z.query,variables:Z.variables}),signal:AbortSignal.timeout(Pe4)}),G=await Y(Q);if(G.status===401){try{await G.body?.cancel()}catch{}let J=await Hp($,X,{forceRefresh:!0});if(!J)throw Error(X9);if(G=await Y(J),G.status===401)throw Error(X9)}if(Rz0(G.headers,{lane:"graphql",operation:Z.operation}),Az0(G)){let J=G.headers.get("retry-after")!==null?"secondary":"primary";Iz0({lane:"graphql",operation:Z.operation,kind:J});let W=Tz0(G.headers);throw Error(`GitHub ${J} rate limit reached${W===null?"":`; retry in ${Math.ceil(W/1000)}s`}`)}if(!G.ok)throw Error(`GitHub GraphQL ${Z.label} failed: ${G.status}`);return Te4(Ae4(await G.text(),Z.label),Z.label)}var Pe4=15000;var qz0=w(()=>{Np();lG();W41()});import{z as PJ}from"zod";function Me4($,Z){let X=$.repository;if(!X)throw Error(`Repository ${Z} not found or not accessible by this connection`);let Q=(X.refs?.nodes??[]).filter((Y)=>typeof Y?.name==="string").map((Y)=>({name:Y.name,author:Y.target?.author?.user?.login??null}));return{branches:Q,totalCount:X.refs?.totalCount??Q.length}}var Ie4=`
2684
2684
  query BranchSearch($owner: String!, $repo: String!, $query: String, $limit: Int!) {
2685
2685
  repository(owner: $owner, name: $repo) {
2686
2686
  refs(
@@ -2700,7 +2700,7 @@ query BranchSearch($owner: String!, $repo: String!, $query: String, $limit: Int!
2700
2700
  }
2701
2701
  }
2702
2702
  }
2703
- }`,qe4,K41;var KC$=w(()=>{S0();qz0();qe4=PJ.object({branches:PJ.array(PJ.object({name:PJ.string(),author:PJ.string().nullable()})),totalCount:PJ.number()});K41=c({name:"GITHUB_SEARCH_BRANCHES",description:"Search a repository's branches by a case-insensitive substring of the branch name, filtered server-side by GitHub.",annotations:{title:"Search GitHub Branches",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:PJ.object({connectionId:PJ.string().describe("ID of the mcp-github connection to use"),owner:PJ.string().describe("Repository owner (user or org login)"),repo:PJ.string().describe("Repository name"),query:PJ.string().describe("Substring to match against branch names. Empty returns the first branches alphabetically."),limit:PJ.number().int().min(1).max(100).default(30)}),outputSchema:qe4,handler:async($,Z)=>{await Z.access.check();let X=`${$.owner}/${$.repo}`,Q=$.query.trim(),Y=await Eh(Z,{connectionId:$.connectionId,query:Ie4,variables:{owner:$.owner,repo:$.repo,query:Q===""?null:Q,limit:$.limit},label:`branch search for ${X}`});return Me4(Y,X)}})});import{z as d8}from"zod";function ve4($){if($==="IN_PROGRESS")return"in_progress";if($==="COMPLETED")return"completed";return"queued"}function fe4($){switch($){case"SUCCESS":return"success";case"FAILURE":case"STARTUP_FAILURE":return"failure";case"NEUTRAL":case"STALE":return"neutral";case"CANCELLED":return"cancelled";case"SKIPPED":return"skipped";case"TIMED_OUT":return"timed_out";case"ACTION_REQUIRED":return"action_required";default:return null}}function be4($){let Z=$.commits?.nodes?.[0]?.commit?.statusCheckRollup?.contexts?.nodes??[],X=[];for(let Q of Z){if(!Q||Q.__typename!=="CheckRun")continue;let{startedAt:Y,completedAt:G}=Q;X.push({id:Q.databaseId==null?"":String(Q.databaseId),name:Q.name??"",status:ve4(Q.status),conclusion:fe4(Q.conclusion),htmlUrl:Q.detailsUrl??"",durationMs:Y&&G?new Date(G).getTime()-new Date(Y).getTime():null})}return X}function xe4($){let Z=$.repository;if(!Z)throw Error("Repository not found or not accessible by this connection");let X=Z.pullRequests?.nodes?.[0];if(!X)return{pullRequest:null};let Q=(X.reviewThreads?.nodes??[]).filter((W)=>W?.isResolved===!1).length,Y=X.reviewDecision,G=Y==="REVIEW_REQUIRED"||Y==="CHANGES_REQUESTED",J=X.mergeable==="CONFLICTING"?"dirty":X.mergeable!=="MERGEABLE"?"unknown":G||Q>0?"blocked":"clean";return{pullRequest:{number:X.number??0,title:X.title??"",body:X.body??"",state:X.state==="OPEN"?"open":"closed",merged:X.merged===!0,mergedAt:X.mergedAt??null,base:X.baseRefName??"main",head:X.headRefName??"",headSha:X.headRefOid??"",headRepoFullName:X.headRepository?.nameWithOwner??null,htmlUrl:X.url??"",author:X.author?.login??"",draft:X.isDraft===!0,mergeableState:J,unresolvedConversations:Q,missingRequiredApprovals:G,changedFiles:X.changedFiles??0,checks:be4(X),comments:(X.comments?.nodes??[]).flatMap((W)=>W?[{id:W.databaseId??0,author:W.author?.login??"",body:W.body??"",createdAt:W.createdAt??"",htmlUrl:W.url??""}]:[])}}}var ke4=`
2703
+ }`,qe4,K41;var KC$=w(()=>{S0();qz0();qe4=PJ.object({branches:PJ.array(PJ.object({name:PJ.string(),author:PJ.string().nullable()})),totalCount:PJ.number()});K41=c({name:"GITHUB_SEARCH_BRANCHES",description:"Search a repository's branches by a case-insensitive substring of the branch name, filtered server-side by GitHub.",annotations:{title:"Search GitHub Branches",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:PJ.object({connectionId:PJ.string().describe("ID of the mcp-github connection to use"),owner:PJ.string().describe("Repository owner (user or org login)"),repo:PJ.string().describe("Repository name"),query:PJ.string().describe("Substring to match against branch names. Empty returns the first branches alphabetically."),limit:PJ.number().int().min(1).max(100).default(30)}),outputSchema:qe4,handler:async($,Z)=>{await Z.access.check();let X=`${$.owner}/${$.repo}`,Q=$.query.trim(),Y=await Eh(Z,{connectionId:$.connectionId,query:Ie4,variables:{owner:$.owner,repo:$.repo,query:Q===""?null:Q,limit:$.limit},label:`branch search for ${X}`,operation:"branch_search"});return Me4(Y,X)}})});import{z as d8}from"zod";function ve4($){if($==="IN_PROGRESS")return"in_progress";if($==="COMPLETED")return"completed";return"queued"}function fe4($){switch($){case"SUCCESS":return"success";case"FAILURE":case"STARTUP_FAILURE":return"failure";case"NEUTRAL":case"STALE":return"neutral";case"CANCELLED":return"cancelled";case"SKIPPED":return"skipped";case"TIMED_OUT":return"timed_out";case"ACTION_REQUIRED":return"action_required";default:return null}}function be4($){let Z=$.commits?.nodes?.[0]?.commit?.statusCheckRollup?.contexts?.nodes??[],X=[];for(let Q of Z){if(!Q||Q.__typename!=="CheckRun")continue;let{startedAt:Y,completedAt:G}=Q;X.push({id:Q.databaseId==null?"":String(Q.databaseId),name:Q.name??"",status:ve4(Q.status),conclusion:fe4(Q.conclusion),htmlUrl:Q.detailsUrl??"",durationMs:Y&&G?new Date(G).getTime()-new Date(Y).getTime():null})}return X}function xe4($){let Z=$.repository;if(!Z)throw Error("Repository not found or not accessible by this connection");let X=Z.pullRequests?.nodes?.[0];if(!X)return{pullRequest:null};let Q=(X.reviewThreads?.nodes??[]).filter((W)=>W?.isResolved===!1).length,Y=X.reviewDecision,G=Y==="REVIEW_REQUIRED"||Y==="CHANGES_REQUESTED",J=X.mergeable==="CONFLICTING"?"dirty":X.mergeable!=="MERGEABLE"?"unknown":G||Q>0?"blocked":"clean";return{pullRequest:{number:X.number??0,title:X.title??"",body:X.body??"",state:X.state==="OPEN"?"open":"closed",merged:X.merged===!0,mergedAt:X.mergedAt??null,base:X.baseRefName??"main",head:X.headRefName??"",headSha:X.headRefOid??"",headRepoFullName:X.headRepository?.nameWithOwner??null,htmlUrl:X.url??"",author:X.author?.login??"",draft:X.isDraft===!0,mergeableState:J,unresolvedConversations:Q,missingRequiredApprovals:G,changedFiles:X.changedFiles??0,checks:be4(X),comments:(X.comments?.nodes??[]).flatMap((W)=>W?[{id:W.databaseId??0,author:W.author?.login??"",body:W.body??"",createdAt:W.createdAt??"",htmlUrl:W.url??""}]:[])}}}var ke4=`
2704
2704
  query PrState($owner: String!, $repo: String!, $branch: String!) {
2705
2705
  repository(owner: $owner, name: $repo) {
2706
2706
  pullRequests(
@@ -2754,7 +2754,7 @@ query PrState($owner: String!, $repo: String!, $branch: String!) {
2754
2754
  }
2755
2755
  }
2756
2756
  }
2757
- }`,Ve4,Se4,Ce4,_e4,F41;var FC$=w(()=>{S0();qz0();Ve4=d8.object({id:d8.string(),name:d8.string(),status:d8.enum(["queued","in_progress","completed"]),conclusion:d8.enum(["success","failure","neutral","cancelled","skipped","timed_out","action_required"]).nullable(),htmlUrl:d8.string(),durationMs:d8.number().nullable()}),Se4=d8.object({id:d8.number(),author:d8.string(),body:d8.string(),createdAt:d8.string(),htmlUrl:d8.string()}),Ce4=d8.object({number:d8.number(),title:d8.string(),body:d8.string(),state:d8.enum(["open","closed"]),merged:d8.boolean(),mergedAt:d8.string().nullable(),base:d8.string(),head:d8.string(),headSha:d8.string(),headRepoFullName:d8.string().nullable(),htmlUrl:d8.string(),author:d8.string(),draft:d8.boolean(),mergeableState:d8.enum(["clean","dirty","blocked","unknown"]),unresolvedConversations:d8.number(),missingRequiredApprovals:d8.boolean(),changedFiles:d8.number(),checks:d8.array(Ve4),comments:d8.array(Se4)}),_e4=d8.object({pullRequest:Ce4.nullable()});F41=c({name:"GITHUB_PR_STATE",description:"Read a branch's pull request with its check runs, review state and comments in a single GitHub GraphQL query.",annotations:{title:"Read GitHub Pull Request State",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:d8.object({connectionId:d8.string().describe("ID of the mcp-github connection to use"),owner:d8.string().describe("Repository owner (user or org login)"),repo:d8.string().describe("Repository name"),branch:d8.string().describe("Head branch of the pull request to read")}),outputSchema:_e4,handler:async($,Z)=>{await Z.access.check();let X=await Eh(Z,{connectionId:$.connectionId,query:ke4,variables:{owner:$.owner,repo:$.repo,branch:$.branch},label:`pull request state for ${$.owner}/${$.repo}@${$.branch}`});return xe4(X)}})});import{z as DX}from"zod";function he4($){let Z=$.repository;if(!Z)throw Error("Repository not found or not accessible by this connection");let X=Z.pullRequests?.nodes?.[0];if(!X)return{pullRequest:null};return{pullRequest:{number:X.number??0,title:X.title??"",body:X.body??"",mergedAt:X.mergedAt??null,base:X.baseRefName??"main",head:X.headRefName??"",headSha:X.headRefOid??"",htmlUrl:X.url??"",author:X.author?.login??""}}}var ye4=`
2757
+ }`,Ve4,Se4,Ce4,_e4,F41;var FC$=w(()=>{S0();qz0();Ve4=d8.object({id:d8.string(),name:d8.string(),status:d8.enum(["queued","in_progress","completed"]),conclusion:d8.enum(["success","failure","neutral","cancelled","skipped","timed_out","action_required"]).nullable(),htmlUrl:d8.string(),durationMs:d8.number().nullable()}),Se4=d8.object({id:d8.number(),author:d8.string(),body:d8.string(),createdAt:d8.string(),htmlUrl:d8.string()}),Ce4=d8.object({number:d8.number(),title:d8.string(),body:d8.string(),state:d8.enum(["open","closed"]),merged:d8.boolean(),mergedAt:d8.string().nullable(),base:d8.string(),head:d8.string(),headSha:d8.string(),headRepoFullName:d8.string().nullable(),htmlUrl:d8.string(),author:d8.string(),draft:d8.boolean(),mergeableState:d8.enum(["clean","dirty","blocked","unknown"]),unresolvedConversations:d8.number(),missingRequiredApprovals:d8.boolean(),changedFiles:d8.number(),checks:d8.array(Ve4),comments:d8.array(Se4)}),_e4=d8.object({pullRequest:Ce4.nullable()});F41=c({name:"GITHUB_PR_STATE",description:"Read a branch's pull request with its check runs, review state and comments in a single GitHub GraphQL query.",annotations:{title:"Read GitHub Pull Request State",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:d8.object({connectionId:d8.string().describe("ID of the mcp-github connection to use"),owner:d8.string().describe("Repository owner (user or org login)"),repo:d8.string().describe("Repository name"),branch:d8.string().describe("Head branch of the pull request to read")}),outputSchema:_e4,handler:async($,Z)=>{await Z.access.check();let X=await Eh(Z,{connectionId:$.connectionId,query:ke4,variables:{owner:$.owner,repo:$.repo,branch:$.branch},label:`pull request state for ${$.owner}/${$.repo}@${$.branch}`,operation:"pr_state"});return xe4(X)}})});import{z as DX}from"zod";function he4($){let Z=$.repository;if(!Z)throw Error("Repository not found or not accessible by this connection");let X=Z.pullRequests?.nodes?.[0];if(!X)return{pullRequest:null};return{pullRequest:{number:X.number??0,title:X.title??"",body:X.body??"",mergedAt:X.mergedAt??null,base:X.baseRefName??"main",head:X.headRefName??"",headSha:X.headRefOid??"",htmlUrl:X.url??"",author:X.author?.login??""}}}var ye4=`
2758
2758
  query LastPublishedPr($owner: String!, $repo: String!, $base: String!) {
2759
2759
  repository(owner: $owner, name: $repo) {
2760
2760
  pullRequests(
@@ -2776,7 +2776,7 @@ query LastPublishedPr($owner: String!, $repo: String!, $base: String!) {
2776
2776
  }
2777
2777
  }
2778
2778
  }
2779
- }`,ge4,H41;var HC$=w(()=>{S0();qz0();ge4=DX.object({pullRequest:DX.object({number:DX.number(),title:DX.string(),body:DX.string(),mergedAt:DX.string().nullable(),base:DX.string(),head:DX.string(),headSha:DX.string(),htmlUrl:DX.string(),author:DX.string()}).nullable()});H41=c({name:"GITHUB_LAST_PUBLISHED_PR",description:"Read the most recently merged pull request into a base branch \u2014 in Fast Preview, the last publish.",annotations:{title:"Read Last Published Pull Request",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:DX.object({connectionId:DX.string().describe("ID of the mcp-github connection to use"),owner:DX.string().describe("Repository owner (user or org login)"),repo:DX.string().describe("Repository name"),base:DX.string().describe("Base branch publishes merge into")}),outputSchema:ge4,handler:async($,Z)=>{await Z.access.check();let X=await Eh(Z,{connectionId:$.connectionId,query:ye4,variables:{owner:$.owner,repo:$.repo,base:$.base},label:`last published pull request for ${$.owner}/${$.repo}@${$.base}`});return he4(X)}})});var NC$=w(()=>{QC$();KC$();FC$();HC$()});import{z as p9}from"zod";function UC$($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}function pe4($){let Z=$.trim();return Z.length>0?Z:void 0}function ne4($,Z){return $===void 0||$.includes(Z)}var ce4,le4,de4,me4,ie4,N41;var OC$=w(()=>{S0();ce4=["thread"],le4=p9.object({type:p9.literal("thread"),id:p9.string(),title:p9.string(),created_at:p9.string(),updated_at:p9.string(),virtual_mcp_id:p9.string().nullable(),run_config:p9.record(p9.string(),p9.unknown()).nullable(),status:p9.string().nullable()}),de4=p9.discriminatedUnion("type",[le4]),me4=p9.object({query:p9.string().max(256).describe("Free-text search query. Empty string returns the most recently updated resources."),limit:p9.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:p9.array(p9.enum(ce4)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),ie4=p9.object({items:p9.array(de4),totalCount:p9.number()});N41=c({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:me4,outputSchema:ie4,handler:async($,Z)=>{await Z.access.check(),t(Z);let X=$.limit??20,Q=ne4($.types,"thread"),Y=[],G=0;if(Q){let{threads:J,total:W}=await Z.storage.threads.list(void 0,{limit:X,offset:0,search:pe4($.query),includeArchived:!1});G+=W;for(let K of J)Y.push({type:"thread",id:K.id,title:K.title??"",created_at:UC$(K.created_at),updated_at:UC$(K.updated_at),virtual_mcp_id:K.virtual_mcp_id??null,run_config:K.run_config??null,status:eG(K).status})}return{items:Y,totalCount:G}}})});var BC$=w(()=>{OC$()});var $90={};G4($90,{toolSubsetMCP:()=>U41,managementMCP:()=>iy,managementContextStore:()=>aH,listManagementTools:()=>oe4,TOOL_BY_NAME:()=>jh,CORE_TOOLS:()=>DC$});import{z as wC$}from"zod";async function oe4($){let Z=await iy($),[X,Q]=Wi.createLinkedPair();await Z.connect(Q);let Y=new x9({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:H5});try{return await Y.connect(X),(await Y.listTools()).tools}finally{await Y.close().catch(()=>{}),await Z.close().catch(()=>{})}}var DC$,jh,U41=($,Z)=>{let X=new yW({name:$,version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let Q of Z){let Y=jh.get(Q);if(!Y){console.warn(`[${$}] unknown tool "${Q}" \u2014 not registered`);continue}let{config:G,handler:J}=Br(Y);X.registerTool(Y.name,G,J)}return X},iy=async($)=>{let Z=new yW({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:H5});for(let Y of jh.values()){let{config:G,handler:J}=Br(Y);Z.registerTool(Y.name,G,J)}let X=Qz0();for(let Y of X){let G=Y.arguments?.length?Object.fromEntries(Y.arguments.map((J)=>{let W=J.required?wC$.string():wC$.string().optional();return[J.name,J.description?W.describe(J.description):W]})):void 0;Z.registerPrompt(Y.name,{title:Y.title,description:Y.description,...G?{argsSchema:G}:{}},(J)=>{return{messages:[{role:"user",content:{type:"text",text:typeof Y.text==="function"?Y.text(J??{}):Y.text}}]}})}if($.organization?.id){let Y=await $.storage.brandContext.list($.organization.id),G=new Set;for(let J of Y){let W=J.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),K=W?`brand-${W}`:`brand-${J.id}`;if(G.has(K))K=`${K}-${J.id.slice(0,8)}`;G.add(K);let F=[`# Brand: ${J.name}`,"",`**Domain:** ${J.domain}`,"","## Overview",J.overview];if(J.colors){let N=Object.entries(J.colors).filter(([,U])=>U);if(N.length>0){F.push("","## Colors");for(let[U,O]of N)F.push(`- **${U}:** ${O}`)}}if(J.fonts){let N=Object.entries(J.fonts).filter(([,U])=>U);if(N.length>0){F.push("","## Fonts");for(let[U,O]of N)F.push(`- ${O} (${U})`)}}if(J.logo)F.push("",`**Logo:** ${J.logo}`);if(J.favicon)F.push(`**Favicon:** ${J.favicon}`);if(J.ogImage)F.push(`**OG Image:** ${J.ogImage}`);if(J.images&&J.images.length>0){F.push("","## Images");for(let N of J.images){let U=Object.entries(N).map(([O,B])=>`${O}: ${B}`).join(", ");F.push(`- ${U}`)}}let H=F.join(`
2779
+ }`,ge4,H41;var HC$=w(()=>{S0();qz0();ge4=DX.object({pullRequest:DX.object({number:DX.number(),title:DX.string(),body:DX.string(),mergedAt:DX.string().nullable(),base:DX.string(),head:DX.string(),headSha:DX.string(),htmlUrl:DX.string(),author:DX.string()}).nullable()});H41=c({name:"GITHUB_LAST_PUBLISHED_PR",description:"Read the most recently merged pull request into a base branch \u2014 in Fast Preview, the last publish.",annotations:{title:"Read Last Published Pull Request",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:DX.object({connectionId:DX.string().describe("ID of the mcp-github connection to use"),owner:DX.string().describe("Repository owner (user or org login)"),repo:DX.string().describe("Repository name"),base:DX.string().describe("Base branch publishes merge into")}),outputSchema:ge4,handler:async($,Z)=>{await Z.access.check();let X=await Eh(Z,{connectionId:$.connectionId,query:ye4,variables:{owner:$.owner,repo:$.repo,base:$.base},label:`last published pull request for ${$.owner}/${$.repo}@${$.base}`,operation:"last_published_pr"});return he4(X)}})});var NC$=w(()=>{QC$();KC$();FC$();HC$()});import{z as p9}from"zod";function UC$($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}function pe4($){let Z=$.trim();return Z.length>0?Z:void 0}function ne4($,Z){return $===void 0||$.includes(Z)}var ce4,le4,de4,me4,ie4,N41;var OC$=w(()=>{S0();ce4=["thread"],le4=p9.object({type:p9.literal("thread"),id:p9.string(),title:p9.string(),created_at:p9.string(),updated_at:p9.string(),virtual_mcp_id:p9.string().nullable(),run_config:p9.record(p9.string(),p9.unknown()).nullable(),status:p9.string().nullable()}),de4=p9.discriminatedUnion("type",[le4]),me4=p9.object({query:p9.string().max(256).describe("Free-text search query. Empty string returns the most recently updated resources."),limit:p9.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:p9.array(p9.enum(ce4)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),ie4=p9.object({items:p9.array(de4),totalCount:p9.number()});N41=c({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:me4,outputSchema:ie4,handler:async($,Z)=>{await Z.access.check(),t(Z);let X=$.limit??20,Q=ne4($.types,"thread"),Y=[],G=0;if(Q){let{threads:J,total:W}=await Z.storage.threads.list(void 0,{limit:X,offset:0,search:pe4($.query),includeArchived:!1});G+=W;for(let K of J)Y.push({type:"thread",id:K.id,title:K.title??"",created_at:UC$(K.created_at),updated_at:UC$(K.updated_at),virtual_mcp_id:K.virtual_mcp_id??null,run_config:K.run_config??null,status:eG(K).status})}return{items:Y,totalCount:G}}})});var BC$=w(()=>{OC$()});var $90={};G4($90,{toolSubsetMCP:()=>U41,managementMCP:()=>iy,managementContextStore:()=>aH,listManagementTools:()=>oe4,TOOL_BY_NAME:()=>jh,CORE_TOOLS:()=>DC$});import{z as wC$}from"zod";async function oe4($){let Z=await iy($),[X,Q]=Wi.createLinkedPair();await Z.connect(Q);let Y=new x9({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:H5});try{return await Y.connect(X),(await Y.listTools()).tools}finally{await Y.close().catch(()=>{}),await Z.close().catch(()=>{})}}var DC$,jh,U41=($,Z)=>{let X=new yW({name:$,version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let Q of Z){let Y=jh.get(Q);if(!Y){console.warn(`[${$}] unknown tool "${Q}" \u2014 not registered`);continue}let{config:G,handler:J}=Br(Y);X.registerTool(Y.name,G,J)}return X},iy=async($)=>{let Z=new yW({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:H5});for(let Y of jh.values()){let{config:G,handler:J}=Br(Y);Z.registerTool(Y.name,G,J)}let X=Qz0();for(let Y of X){let G=Y.arguments?.length?Object.fromEntries(Y.arguments.map((J)=>{let W=J.required?wC$.string():wC$.string().optional();return[J.name,J.description?W.describe(J.description):W]})):void 0;Z.registerPrompt(Y.name,{title:Y.title,description:Y.description,...G?{argsSchema:G}:{}},(J)=>{return{messages:[{role:"user",content:{type:"text",text:typeof Y.text==="function"?Y.text(J??{}):Y.text}}]}})}if($.organization?.id){let Y=await $.storage.brandContext.list($.organization.id),G=new Set;for(let J of Y){let W=J.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),K=W?`brand-${W}`:`brand-${J.id}`;if(G.has(K))K=`${K}-${J.id.slice(0,8)}`;G.add(K);let F=[`# Brand: ${J.name}`,"",`**Domain:** ${J.domain}`,"","## Overview",J.overview];if(J.colors){let N=Object.entries(J.colors).filter(([,U])=>U);if(N.length>0){F.push("","## Colors");for(let[U,O]of N)F.push(`- **${U}:** ${O}`)}}if(J.fonts){let N=Object.entries(J.fonts).filter(([,U])=>U);if(N.length>0){F.push("","## Fonts");for(let[U,O]of N)F.push(`- ${O} (${U})`)}}if(J.logo)F.push("",`**Logo:** ${J.logo}`);if(J.favicon)F.push(`**Favicon:** ${J.favicon}`);if(J.ogImage)F.push(`**OG Image:** ${J.ogImage}`);if(J.images&&J.images.length>0){F.push("","## Images");for(let N of J.images){let U=Object.entries(N).map(([O,B])=>`${O}: ${B}`).join(", ");F.push(`- ${U}`)}}let H=F.join(`
2780
2780
  `);Z.prompt(K,`Brand context for ${J.name}`,()=>({messages:[{role:"user",content:{type:"text",text:H}}]}))}}let Q=pM$();for(let Y of Q)Z.resource(Y.name,Y.uri,{description:Y.description,mimeType:Y.mimeType??"text/markdown"},async(G)=>{return{contents:[{uri:typeof G==="string"?G:G.href,mimeType:Y.mimeType??"text/markdown",text:Y.text}]}});return Z};var _O=w(()=>{xW();ol();fX();jo1();Co1();$a1();Ya1();Ia1();Ca1();zs1();SN$();xN$();cN$();kU$();_U$();xw$();uw$();dw$();iq$();QM$();GM$();NM$();PM$();y81();Yz0();Yz0();Ek$();$C$();XC$();NC$();BC$();DC$=[ac0,sc0,ec0,$l0,Zl0,Xl0,Ql0,go0,co0,lo0,do0,yo0,mo0,no0,to0,oo0,Nt0,eo0,$r0,Zr0,Xr0,ro0,ao0,kp0,Yl0,Gl0,Jl0,Wl0,Kl0,Hl0,Nl0,Ul0,wl0,Dl0,Ll0,El0,jl0,zl0,Pl0,Al0,Tl0,Rl0,Il0,ql0,Vl0,Cl0,yl0,I81,C81,_81,Kc0,Dc0,Lc0,Tc0,Rc0,Ic0,su0,ru0,tu0,ou0,Sc0,_c0,fc0,xc0,uc0,Qa1,ic0,pc0,nc0,tc0,oc0,du0,iu0,pu0,mu0,ir0,pr0,nr0,Kr0,QC,YC,Hr0,Nr0,GC,Qr0,Yr0,Gr0,Jr0,Wr0,Ur0,Or0,Br0,gr0,hr0,ur0,cr0,lr0,dr0,mr0,cc0,lc0,dc0,mc0,ps0,ns0,ts0,os0,rs0,as0,ss0,es0,$e0,Ze0,Xe0,Ge0,Je0,yw$,gw$,hw$,Fe0,He0,E81,z81,P81,A81,T81,R81,YM$,JM$,WM$,KM$,FM$,HM$,wM$,DM$,LM$,EM$,jM$,zM$,g81,h81,u81,c81,l81,d81,...eS$,qp0,G41,J41,K41,F41,H41,N41],jh=new Map(DC$.map(($)=>[$.name,$]))});import{z as LC$}from"zod";function re4($){return[{permissions:{self:["*"]},getTools:async()=>{let{CORE_TOOLS:Z}=await Promise.resolve().then(() => (_O(),$90));return Z.map((X)=>{return{name:X.name,inputSchema:LC$.toJSONSchema(X.inputSchema,{unrepresentable:"any"}),outputSchema:X.outputSchema?LC$.toJSONSchema(X.outputSchema,{unrepresentable:"any"}):void 0,description:X.description}})},data:Gy1(v9(),$)},{data:Yy1()},{data:Qy1($)}]}async function EC$($){try{await new Em(u8().db).upsert($,{flags:Wp1})}catch(Z){console.error("Failed to seed default organization flags:",Z)}}async function jC$($,Z){try{let X=u8(),Q=b0();await X.db.insertInto("organization_billing").values({organization_id:$}).onConflict((W)=>W.column("organization_id").doNothing()).execute();let Y=new PY(Q.encryptionKey),G=new Yd(X.db,Y),J=re4($);await Promise.all(J.map(async(W)=>{let K=null;if(W.permissions)K=(await F8.api.createApiKey({body:{name:`${W.data.app_name??crypto.randomUUID()}-mcp`,userId:Z,permissions:W.permissions,rateLimitEnabled:!1,metadata:{organization:{id:$},purpose:"default-org-connections"}}}))?.key;let F=await TO({id:"pending",title:W.data.title,connection_type:W.data.connection_type,connection_url:W.data.connection_url,connection_token:W.data.connection_token??K,connection_headers:W.data.connection_headers}).catch(()=>null),H=await W.getTools?.()??F?.tools??null,N=F?.scopes?.length?F.scopes:null,U=W.data.id?W.data.id.startsWith(`${$}_`)?W.data.id:`${$}_${W.data.id}`:void 0;await G.create({...W.data,id:U,tools:H,configuration_scopes:N,organization_id:$,created_by:Z,connection_token:W.data.connection_token??K})}));try{await lu0({orgId:$,createdBy:Z})}catch(W){console.error("Failed to enqueue studio pack install:",W)}if(Q.aiGatewayEnabled&&Q.studioProvisionSecretKey&&AO.provisionKey)try{let W=await qW(Z),K=await AO.provisionKey(W,$);await new Yi(X.db,Y).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:K,organizationId:$,createdBy:Z})}catch(W){console.error("Failed to auto-provision Deco AI Gateway key:",W)}}catch(X){console.error("Error creating default MCP connections:",X)}}var zC$=w(()=>{hX();O8();P50();f9();fG();SD();Mu0();ax0();ug0();Ji();R$();fY();q50();LU()});import{createHash as ae4}from"crypto";function PC$($){let Z=$;while(Z?.[Mz0])Z=Z[Mz0];return Z}function B41($){let{objectStorage:Z,baseUrl:X,orgSlug:Q,prefix:Y="connection-icons",maxBytes:G=ee4,dryRun:J=!1}=$;return async(W)=>{if(typeof W!=="string")return W;let K=W.match(se4);if(!K)return W;if(!Z||!Q)return W;let[,F,H]=K,N=F.toLowerCase(),U=Z06[N];if(!U)return W;if(Math.floor(H.length*3/4)>G)return console.warn(`[asset-hoister] asset exceeds ${G} bytes, keeping inline`),W;let O=Buffer.from(H,"base64"),B=ae4("sha256").update(O).digest("hex"),D=`${Y}/${B}.${U}`;if(J)return Qf(X,Q,D);try{return await Z.put(D,O,{contentType:N}),Qf(X,Q,D)}catch(L){return console.error("[asset-hoister] upload failed, keeping inline asset:",L),W}}}async function O41($,Z,X=0){if(X>$06)return $;if(typeof $==="string")return await Z($)??$;if(Array.isArray($)){let Q=await Promise.all($.map((Y)=>O41(Y,Z,X+1)));return Q.some((Y,G)=>Y!==$[G])?Q:$}if($!==null&&typeof $==="object"){let Q=Object.entries($),Y=await Promise.all(Q.map(([,W])=>O41(W,Z,X+1))),G=!1,J={};return Q.forEach(([W,K],F)=>{if(J[W]=Y[F],Y[F]!==K)G=!0}),G?J:$}return $}async function Tr($,Z){let X={...$};if(typeof X.icon==="string")X.icon=await Z(X.icon);if(X.metadata!==null&&typeof X.metadata==="object")X.metadata=await O41(X.metadata,Z);return X}function X06($,Z){return new Proxy($,{get(X,Q,Y){if(Q===Mz0)return X;if(Q==="create")return async(J)=>X.create(await Tr(J,Z));if(Q==="createNew")return async(J)=>X.createNew(await Tr(J,Z));if(Q==="update")return async(J,W)=>X.update(J,await Tr(W,Z));let G=Reflect.get(X,Q,Y);return typeof G==="function"?G.bind(X):G}})}function Q06($,Z){return new Proxy($,{get(X,Q,Y){if(Q===Mz0)return X;if(Q==="create")return async(J,W,K,F)=>X.create(J,W,await Tr(K,Z),F);if(Q==="update")return async(J,W,K)=>X.update(J,W,await Tr(K,Z));let G=Reflect.get(X,Q,Y);return typeof G==="function"?G.bind(X):G}})}function w41($,Z){let X=B41(Z);if(AC$($.connections))$.connections=X06(PC$($.connections),X);if(AC$($.virtualMcps))$.virtualMcps=Q06(PC$($.virtualMcps),X)}function AC$($){return $!==null&&typeof $==="object"}var se4,ee4=5242880,$06=64,Mz0,Z06;var D41=w(()=>{zW();se4=/^data:((?:image|audio|video)\/[^;,]+)(?:;[^,]+)?;base64,(.+)$/is,Mz0=Symbol("assetHoistingTarget"),Z06={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/x-icon":"ico","image/vnd.microsoft.icon":"ico","audio/mpeg":"mp3","audio/mp4":"m4a","audio/wav":"wav","audio/x-wav":"wav","audio/ogg":"ogg","audio/webm":"weba","audio/aac":"aac","video/mp4":"mp4","video/webm":"webm","video/ogg":"ogv","video/quicktime":"mov"}});async function TC$($,Z){let X=zY();if(!X)return Z;let Q=await u8().db.selectFrom("organization").select("slug").where("id","=",$).executeTakeFirst();if(!Q?.slug)return Z;return await B41({objectStorage:iJ(X,$),baseUrl:v9(),orgSlug:Q.slug,prefix:"org-logos"})(Z)??Z}var RC$=w(()=>{fG();qD();D41();f9()});function Y06($,Z){let X=$.email.split("@")[1]?.toLowerCase()??null;return{distinctId:$.id,properties:{$set:{email:$.email,name:$.name,email_verified:$.emailVerified},$set_once:{first_seen_at:Z.toISOString(),signup_email_domain:X}}}}function L41($){y1.identify(Y06($,new Date))}var IC$=w(()=>{k4()});import{adminAc as qC$,memberAc as G06}from"@decocms/better-auth/plugins/organization/access";function j41($){let Z=["*",...$];return{user:{self:[...z60],...G06.statements},admin:{self:Z,...qC$.statements},owner:{self:Z,...qC$.statements}}}function J06($,Z){for(let[X,Q]of Object.entries(Z)){let Y=$[X];if(!Y)return!1;for(let G of Q)if(!Y.includes(G)&&!Y.includes("*"))return!1}return!0}function MC$($,Z,X){if(!$)return"fallback";if($.includes(","))return"fallback";if(!eb.includes($))return"fallback";let Q=X[$];if(!Q)return"fallback";return J06(Q,Z)?"grant":"deny"}function kC$(){if(!E41){let $=Object.values(LL()).flatMap((Z)=>Z.map((X)=>X.name));E41=j41($)}return E41}var E41;var z41=w(()=>{sb();CG()});import{decodeJwt as W06}from"jose";import{sql as Rr}from"kysely";async function H06($){let{user:Z,token:X}=$;if(!X?.idToken)return;let Q;try{Q=W06(X.idToken)}catch{return}let{preferred_username:Y,upn:G}=Q,J=[Y,G].filter((F)=>typeof F==="string"&&F.length>0&&F.toLowerCase()!==Z.email.toLowerCase()).map((F)=>F.toLowerCase());if(J.length===0)return;let{db:W}=u8(),K=await W.selectFrom("user").selectAll().where("email","in",J).where("id","!=",Z.id).executeTakeFirst();if(!K)return;try{await W.transaction().execute(async(F)=>{await Rr`UPDATE "account" SET "userId" = ${K.id} WHERE "userId" = ${Z.id}`.execute(F),await Rr`UPDATE "session" SET "userId" = ${K.id} WHERE "userId" = ${Z.id}`.execute(F),await Rr`
2781
2781
  UPDATE "member" SET "userId" = ${K.id}
2782
2782
  WHERE "userId" = ${Z.id}
@@ -2906,7 +2906,7 @@ Respond with the structured verdict and a short reason.`,Fg$;var Ng$=w(()=>{v4()
2906
2906
  ${G.join(`
2907
2907
  `)}`:Y}function kJ6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2908
2908
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var og$=200,jJ6=12,PJ6,TJ6=300,x91=3;var y91=w(()=>{V_();$A0();PJ6={aheadBy:0,behindBy:0,files:[]}});function SJ6($){if(!$||$.includes(".."))return!1;return VJ6.test($)}function ag$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!SJ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function sg$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var VJ6;var eg$=w(()=>{VJ6=/^[\w./@-]+$/});function g91($){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 Ba($,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 $h$($,Z,X,Q){if(!Q.connectionId)throw new C_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new C_(X9);await oO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:X9;throw new C_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await rO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=A4$(H instanceof Error?H.message:String(H));throw N?new C_(U):H}),K=nh($),F=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await BB(F,CJ6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var CJ6=10485760,C_;var h91=w(()=>{lG();lP0();mp();Qm0();dx();C_=class C_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function vJ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!_J6.test(Z))throw Error(`Invalid branch name: ${$}`)}function __($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(bJ6)])}function xJ6($,Z,X){let Q=w5($)[Z]?.[X];return!!Q&&Object.keys(RY(Q)).length>0}function v_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function eh($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Ba(Z,X);if(!Y)throw new g4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return mP0(Q,G.id,Y)}function u91($,Z){if(Z instanceof dP0)return $.json({error:Z.message},429,{...C5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,C5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,C5)}async function Qh$($){try{let Z=await eh($),X=await ZA0(Z,$.get("vmClaim").branch);return $.json(X,200,C5)}catch(Z){return u91($,Z)}}function wa($,Z){let Q=(YA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return YA0.set($,Y),Y.finally(()=>{if(YA0.get($)===Y)YA0.delete($)}),Q}async function mZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,C5);let Q=v_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...C5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?gJ6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...C5}})};try{if(H){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function gJ6($){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 GA0($,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 hJ6($){return Yh$.includes($)}var _J6,Zh$=524288,fJ6=65536,bJ6=1e4,Xh$=2000,yJ6,YA0,C5,Yh$,Gh$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",yJ6),$.post("/:virtualMcpId/:branch/write",(X)=>mZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:__(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>mZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:__(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>mZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:__(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>mZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:__(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>mZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:__(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>mZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:__(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>mZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:__(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 mZ(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 mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!hJ6(Q))return X.json({error:`step must be one of: ${Yh$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Wy(Y.virtualMcpMetadata);try{await lO0({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 mZ(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 IN(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 Qg$(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 Qh$(X);return Z(X)});let Z=(X)=>mZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Xh$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Qh$(X);return mZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Xh$)])})}),$.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 eh(X),J=await XA0(G,Q.branch,Y.base);return X.json(J,200,C5)}catch(Y){return u91(X,Y)}return mZ(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,C5);let Q=v_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return wa(Y,async()=>{try{await L91(W,Q,Y);let K=Ba(G,J);if(K)await $h$(W,Q,Y,K)}catch(K){if(K instanceof C_)return X.json({error:K.message},403,C5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,C5)}return mZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return wa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,C5);try{let J=await eh(X);return await rg$(J,Q.branch,G),X.json({ok:!0},200,C5)}catch(J){let W=J instanceof g4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,C5)}});return wa(Q.claimName,()=>mZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return wa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await eh(X),F=W.base??await K.getDefaultBranch();return await QA0(K,Q.branch,F),X.json({ok:!0},200,C5)}catch(W){return u91(X,W)}});let Y=v_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return wa(G,async()=>{try{await L91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,C5)}return mZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Zh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=v_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=z91(H)&&U?[H,N]:Y?await Promise.all([GA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),GA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await eh(X);return Promise.all([ZA0(L,Q.branch),XA0(L,Q.branch)])})(),D=await Kg$(K,O,B);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Zh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=v_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=z91(H)&&U?[H,N]:Y?await Promise.all([GA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),GA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await eh(X);return Promise.all([ZA0(L,Q.branch),XA0(L,Q.branch)])})(),D=await Hg$(K,O,B,typeof F.language==="string"?F.language:void 0);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=v_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=g91(`${W}${G}`),F;try{F=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let H;try{H=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(H,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:fJ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=v_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=ag$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=sg$(G,W.resolveType),F=g91(K),H;try{H=await fetch(F?.url??K,{method:"POST",headers:{"content-type":"application/json",...F?{host:F.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}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"}})}),$};var Jh$=w(()=>{D8();DN();ph();D91();IH();Zg$();_3();pX();O8();lB0();HB();Xg$();Yg$();Ip0();lp();T91();Ng$();k91();V_();y91();eg$();h91();_J6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;yJ6=cP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{vJ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Gp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await bH(X,J,Q),H=$g$({userId:F,projectRef:K}),N=W.metadata??null;if(gW$(N).fastPreviewCapability&&!xJ6(N,F,J))return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await sX(X,{userId:F,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});YA0=new Map;C5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Yh$=["clone","install","start"]});function Wh$($,Z,X){let Q=c91.get($);if(!Q)Q={pending:null,running:!1},c91.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)cJ6($,Q);return G}async function cJ6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await lJ6(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)c91.delete($)}}async function lJ6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await sh(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=f91(W,Q),F=[],H=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=b91(K,B),E=`${JSON.stringify(D,null,2)}
2909
- `,j=await Z.createBlob(E);await pg$(Z.owner,Z.repo,j,E);let z=L[0]??`${eP0(Q)}/${V91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of b91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Ha(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:dJ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=uJ6-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function dJ6($){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 td0(Q,$.deps.coAuthor)}var uJ6=3,c91;var Kh$=w(()=>{fO0();pP0();l4();V_();$A0();c91=new Map});import{createHmac as Fh$,randomBytes as mJ6,timingSafeEqual as iJ6}from"crypto";function Hh$(){if(JA0)return JA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return JA0=$?Buffer.from($):mJ6(32),JA0}function l91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+pJ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Fh$("sha256",Hh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Nh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Fh$("sha256",Hh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!iJ6(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 pJ6=21600000,JA0=null;var Uh$=w(()=>{R$()});import{z as $u}from"zod";function tJ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&nJ6.test($)}function Bh$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function WA0($){let Z=$.get("decofileScope");return mP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function KA0($,Z){if(Z instanceof g4){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 wh$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Oh$),$.use("/:virtualMcpId/:branch/*",Oh$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await ng$(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=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Bh$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return KA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=oJ6.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{iP0(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 WA0(Z),W=await Wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nh(Q)},G),K=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Bh$(Z)})}catch(J){return KA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await QA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return KA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(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 g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return KA0(Z,Q)}}),$}var nJ6,oJ6,Oh$;var Dh$=w(()=>{pP0();D8();D91();lP0();h91();k91();Kh$();Uh$();y91();V_();$A0();nJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;oJ6=$u.object({set:$u.record($u.string(),$u.unknown()).optional(),delete:$u.array($u.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Oh$=cP0(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(!tJ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Nh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!cB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ba(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Lh$=($)=>{let Z=new H1;if(Z.use("*",z_),Z.route("/",YP0()),Z.route("/",gf$()),Z.route("/",cy$()),Z.route("/",gy$()),Z.route("/",gP0()),Z.route("/tools",ty$()),Z.route("/",iy$()),Z.route("/",zy$({kvStorage:$.kvStorage})),Z.route("/",Ey$()),Z.route("/fs",Cy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Gh$()),Z.route("/decofile",wh$()),Z.route("/",by$()),Z.route("/deco-sites",JP0()),Z.route("/sso",sz0()),Z.route("/",hP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Sf$()),$.mountDevAssets)Z.route("/dev-assets",WP0({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("/",N_$()),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",vy$()),Z.route("/mcp",WD0()),Z.route("/mcp/self",yP0()),Z.route("/mcp",HD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Eh$=w(()=>{D8();g61();Cf$();l61();KP0();xr();x61();jy$();Py$();_y$();ln();k61();ND0();F91();fy$();xy$();hy$();ly$();py$();N91();oy$();U91();KD0();Jh$();Dh$()});function rJ6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var aJ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},jh$=()=>{let $=new H1;return $.use("*",aJ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:rJ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var zh$=w(()=>{D8();R$();Zz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function W36($){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 K36($,Z,X){try{return JSON.parse($)}catch{throw new Th$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function F36($){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:K36(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 H36($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function N36($){if(!$)return;return{openai:{response_format:$}}}function U36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ph$($,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 Ah$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var sJ6=256,eJ6,$36,Z36,X36,Q36,Y36,G36,J36,Th$,Rh$,Ih$;var qh$=w(()=>{v4();D8();ph();YN();eJ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),$36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),Z36=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($36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),X36=M1.object({type:M1.literal("text")}),Q36=M1.object({type:M1.literal("json_object")}),Y36=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()})}),G36=M1.union([X36,Q36,Y36]),J36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(Z36),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(eJ6).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:G36.optional(),user:M1.string().optional()});Th$=class Th$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Rh$=new H1;Rh$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("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(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=J36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=W36(G.model);if(!J)return $.json(GF("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)=>_D(j.providerId));if(!E)return $.json(GF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=F36(G.messages),U=G.tools?H36(G.tools):void 0,O=N36(G.response_format),B=U36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Ph$(H,N,U,G,O,$.req.raw.signal);try{let j=nO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=sJ6)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Ah$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await 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=Ph$(H,N,U,G,O,$.req.raw.signal),E=await iO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Ah$(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(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});Ih$=Rh$});function O36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Mh$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(N.title.toLowerCase()!==G)continue;if(!O36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var kh$=w(()=>{D8();H_()});var Sh$;var Vh$=w(()=>{Sh$={name:"decocms",version:"4.248.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 D36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??w36}}var Ch$,w36="https://ph.studio.decocms.com",_h$;var vh$=w(()=>{D8();qh0();JC();f9();R$();T61();Vh$();Ch$=new H1;Ch$.get("/",($)=>{let Z={version:Sh$.version,theme:yd1(),...AL().logo&&{logo:AL().logo},...IK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ov$(),posthog:D36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!IK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});_h$=Ch$});function Zu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d91($){return(Zu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function bh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zu($))}&sz=${Z}`}function fh$($,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 xh$($){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()?fh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):fh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var f_,L36,E36,j36,z36,yh$;var gh$=w(()=>{f_=l0.enum(["good","bad","neutral"]),L36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:f_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),E36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(L36)),j36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},z36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:f_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:f_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:f_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:f_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(E36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:f_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:f_.optional()})).min(1)})]),yh$=l0.object({...j36,template:z36})});function FA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=yh$.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 m91=w(()=>{gh$()});import{join as hh$}from"path";async function A36($){try{let Z=await fetch(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(P36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=FA0(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()||d91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function JG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function T36($,Z){let X=Zu($),Q=Z?.brand?.trim()||d91(X),Y=bh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=xh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${JG(W)}</title>`,`<meta name="description" content="${JG(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="${JG(W)}" />`,`<meta property="og:description" content="${JG(K)}" />`,`<meta property="og:url" content="${JG(J)}" />`,`<meta property="og:image" content="${JG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${JG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${JG(W)}" />`,`<meta name="twitter:description" content="${JG(K)}" />`,`<meta name="twitter:image" content="${JG(F)}" />`,`<meta name="twitter:image:alt" content="${JG(H)}" />`,`<link rel="canonical" href="${JG(J)}" />`,`<link rel="icon" href="${JG(Y)}" sizes="any" />`].join(`
2909
+ `,j=await Z.createBlob(E);await pg$(Z.owner,Z.repo,j,E);let z=L[0]??`${eP0(Q)}/${V91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of b91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Ha(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:dJ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=uJ6-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function dJ6($){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 td0(Q,$.deps.coAuthor)}var uJ6=3,c91;var Kh$=w(()=>{fO0();pP0();l4();V_();$A0();c91=new Map});import{createHmac as Fh$,randomBytes as mJ6,timingSafeEqual as iJ6}from"crypto";function Hh$(){if(JA0)return JA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return JA0=$?Buffer.from($):mJ6(32),JA0}function l91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+pJ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Fh$("sha256",Hh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Nh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Fh$("sha256",Hh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!iJ6(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 pJ6=21600000,JA0=null;var Uh$=w(()=>{R$()});import{z as $u}from"zod";function tJ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&nJ6.test($)}function Bh$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function WA0($){let Z=$.get("decofileScope");return mP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function KA0($,Z){if(Z instanceof g4){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 wh$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Oh$),$.use("/:virtualMcpId/:branch/*",Oh$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await ng$(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=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Bh$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return KA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=oJ6.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{iP0(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 WA0(Z),W=await Wh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nh(Q)},G),K=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Bh$(Z)})}catch(J){return KA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await QA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return KA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(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 g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return KA0(Z,Q)}}),$}var nJ6,oJ6,Oh$;var Dh$=w(()=>{pP0();D8();D91();lP0();h91();k91();Kh$();Uh$();y91();V_();$A0();nJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;oJ6=$u.object({set:$u.record($u.string(),$u.unknown()).optional(),delete:$u.array($u.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Oh$=cP0(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(!tJ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Nh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!cB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ba(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Lh$=($)=>{let Z=new H1;if(Z.use("*",z_),Z.route("/",YP0()),Z.route("/",gf$()),Z.route("/",cy$()),Z.route("/",gy$()),Z.route("/",gP0()),Z.route("/tools",ty$()),Z.route("/",iy$()),Z.route("/",zy$({kvStorage:$.kvStorage})),Z.route("/",Ey$()),Z.route("/fs",Cy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Gh$()),Z.route("/decofile",wh$()),Z.route("/",by$()),Z.route("/deco-sites",JP0()),Z.route("/sso",sz0()),Z.route("/",hP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Sf$()),$.mountDevAssets)Z.route("/dev-assets",WP0({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("/",N_$()),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",vy$()),Z.route("/mcp",WD0()),Z.route("/mcp/self",yP0()),Z.route("/mcp",HD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Eh$=w(()=>{D8();g61();Cf$();l61();KP0();xr();x61();jy$();Py$();_y$();ln();k61();ND0();F91();fy$();xy$();hy$();ly$();py$();N91();oy$();U91();KD0();Jh$();Dh$()});function rJ6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var aJ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},jh$=()=>{let $=new H1;return $.use("*",aJ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:rJ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var zh$=w(()=>{D8();R$();Zz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function W36($){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 K36($,Z,X){try{return JSON.parse($)}catch{throw new Th$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function F36($){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:K36(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 H36($){let Z=$.map((X)=>{let Q=X.function.parameters?gY(X.function.parameters):gY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function N36($){if(!$)return;return{openai:{response_format:$}}}function U36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ph$($,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 Ah$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var sJ6=256,eJ6,$36,Z36,X36,Q36,Y36,G36,J36,Th$,Rh$,Ih$;var qh$=w(()=>{v4();D8();ph();YN();eJ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),$36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),Z36=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($36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),X36=M1.object({type:M1.literal("text")}),Q36=M1.object({type:M1.literal("json_object")}),Y36=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()})}),G36=M1.union([X36,Q36,Y36]),J36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(Z36),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(eJ6).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:G36.optional(),user:M1.string().optional()});Th$=class Th$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Rh$=new H1;Rh$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("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(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=J36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=W36(G.model);if(!J)return $.json(GF("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)=>_D(j.providerId));if(!E)return $.json(GF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=F36(G.messages),U=G.tools?H36(G.tools):void 0,O=N36(G.response_format),B=U36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Ph$(H,N,U,G,O,$.req.raw.signal);try{let j=nO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=sJ6)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Ah$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await 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=Ph$(H,N,U,G,O,$.req.raw.signal),E=await iO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Ah$(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(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});Ih$=Rh$});function O36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Mh$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(N.title.toLowerCase()!==G)continue;if(!O36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var kh$=w(()=>{D8();H_()});var Sh$;var Vh$=w(()=>{Sh$={name:"decocms",version:"4.248.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function D36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??w36}}var Ch$,w36="https://ph.studio.decocms.com",_h$;var vh$=w(()=>{D8();qh0();JC();f9();R$();T61();Vh$();Ch$=new H1;Ch$.get("/",($)=>{let Z={version:Sh$.version,theme:yd1(),...AL().logo&&{logo:AL().logo},...IK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ov$(),posthog:D36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!IK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});_h$=Ch$});function Zu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d91($){return(Zu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function bh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zu($))}&sz=${Z}`}function fh$($,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 xh$($){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()?fh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):fh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var f_,L36,E36,j36,z36,yh$;var gh$=w(()=>{f_=l0.enum(["good","bad","neutral"]),L36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:f_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),E36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(L36)),j36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},z36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:f_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:f_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:f_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:f_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(E36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:f_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:f_.optional()})).min(1)})]),yh$=l0.object({...j36,template:z36})});function FA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=yh$.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 m91=w(()=>{gh$()});import{join as hh$}from"path";async function A36($){try{let Z=await fetch(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(P36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=FA0(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()||d91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function JG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function T36($,Z){let X=Zu($),Q=Z?.brand?.trim()||d91(X),Y=bh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=xh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${JG(W)}</title>`,`<meta name="description" content="${JG(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="${JG(W)}" />`,`<meta property="og:description" content="${JG(K)}" />`,`<meta property="og:url" content="${JG(J)}" />`,`<meta property="og:image" content="${JG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${JG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${JG(W)}" />`,`<meta name="twitter:description" content="${JG(K)}" />`,`<meta name="twitter:image" content="${JG(F)}" />`,`<meta name="twitter:image:alt" content="${JG(H)}" />`,`<link rel="canonical" href="${JG(J)}" />`,`<link rel="icon" href="${JG(Y)}" sizes="any" />`].join(`
2910
2910
  `)}function R36($,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}
2911
2911
  </head>`)}function uh$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=Zu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(hh$($,"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(`${aW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(I36)}),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=$?hh$($,"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 A36(Zu(Q)),K=T36(Q,W);return X.html(R36(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var P36=2500,I36=1e4;var ch$=w(()=>{D8();m91();xL();R$()});function Da($,Z){return fetch(`${aW({})}${$}`,Z)}async function q36($,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 Da(`/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}=FA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var M36,MN,lh$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},dh$;var mh$=w(()=>{D8();fY();xL();m91();M36=new Set(["complete","errored","terminated","unknown"]),MN=new H1;MN.use("*",async($,Z)=>{let X=await F8.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});MN.use("/link-token/*",lh$);MN.use("/suggest",lh$);MN.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 q36(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)}});MN.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 Da("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${bL({})}`},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)}});MN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Da(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${bL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:M36.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});MN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Da(`/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)}});MN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Da(`/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:[]})}});dh$=MN});import{createHmac as k36,timingSafeEqual as V36}from"crypto";function ph$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>S36)return!1;let W=k36("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&V36(K,H)})}function nh$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=TJ(Z),Q=TJ(TJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:JF(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 th$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function JF($){return typeof $==="string"?$:void 0}function TJ($){return typeof $==="object"&&$!==null?$:void 0}function HA0($){return typeof $==="number"?new Date($*1000):null}function n91($){return JF($)??JF(TJ($)?.id)}function C36($){return n91($.subscription)??JF(TJ(TJ($.parent)?.subscription_details)?.subscription)}function _36($){let Z=HA0($.current_period_end);if(Z)return Z;let X=TJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=TJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function i91($,Z){let X=HA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function p91($,Z){let X=HA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function v36($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=JF(TJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(JF(TJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(JF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=JF(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(TJ(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:TJ(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(JF(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=n91(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(i91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:n91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=JF(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&&i91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":th$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:_36(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=C36(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(i91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:HA0(X.period_end),lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function f36($,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:th$(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 ih$($,Z){let X=f36($,Z);if(!X)return;VY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:ii1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function oh$($){let Z=new nW(u8().db),X=await v36(Z,$);if(!(X.handled&&X.topUp))ih$($,X);if(X.handled&&X.topUp)await vw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),ih$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Js1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof bY&&(Q.status===400||Q.status===404)))throw Q}return X}var S36=300;var rh$=w(()=>{fG();k4();E60();iL();Ye0()});var b36=1048576,t91;var ah$=w(()=>{D8();DN();R$();rh$();t91=new H1;t91.post("/webhook",k9({maxSize:b36,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ph$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=nh$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await oh$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as x36}from"crypto";function g36($,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 x36(Buffer.from(Y),Buffer.from(Q))}var y36=5242880,o91;var sh$=w(()=>{D8();DN();hp();o91=new H1;o91.post("/webhook",k9({maxSize:y36,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(!g36(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 jp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function eh$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var $u$,h36,u36,Zu$;var Xu$=w(()=>{D8();H3();Ty();zx();$u$=new H1,h36=["range","if-none-match","if-modified-since"],u36=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];$u$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(kh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await wn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&w3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return eh$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of h36){let F=$.req.header(K);if(F)G.set(K,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of u36){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),eh$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Zu$=$u$});var La=_((b_)=>{var c36=b_&&b_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),l36=b_&&b_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))c36(Z,$,X)};Object.defineProperty(b_,"__esModule",{value:!0});l36(UY(),b_)});var Gu$=_((Qu$)=>{Object.defineProperty(Qu$,"__esModule",{value:!0});Qu$.version=void 0;Qu$.version="3.4.0"});var Ku$=_((WF)=>{var d36=WF&&WF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(WF,"__esModule",{value:!0});WF.NodeTransport=WF.VERSION=void 0;WF.nodeResolveHost=o36;var r6=La(),m36=z0("net"),r91=z0("tls"),i36=z0("path"),Ju$=z0("fs"),p36=d36(z0("dns")),n36=Gu$();WF.VERSION=n36.version;var t36="nats.js";class Wu${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=t36,this.version=WF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,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 r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,m36.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,i36.resolve)($),!(0,Ju$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Ju$.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,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,r91.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,r91.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof r91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}WF.NodeTransport=Wu$;function o36($){let Z=(0,r6.deferred)();return p36.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 Ou$=_((Uu$)=>{Object.defineProperty(Uu$,"__esModule",{value:!0});Uu$.connect=r36;var Fu$=Ku$(),Hu$=La(),Nu$=La();function r36($={}){if((0,Nu$.hasWsProtocol)($))return Promise.reject(Nu$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Hu$.setTransportFactory)({factory:()=>{return new Fu$.NodeTransport},dnsResolveFn:Fu$.nodeResolveHost}),Hu$.NatsConnectionImpl.connect($)}});var Bu$=_((kN)=>{var s36=kN&&kN.__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]}),e36=kN&&kN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))s36(Z,$,X)};Object.defineProperty(kN,"__esModule",{value:!0});kN.connect=void 0;var $W6=Ou$();Object.defineProperty(kN,"connect",{enumerable:!0,get:function(){return $W6.connect}});e36(La(),kN)});function Eu$($){let Z=$?.connectFn??YW6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:QW6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{B++;let D=nZ(XW6,ZW6,B-1,2,0.5);await M$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?wu$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Lu$.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 YW6($){return Du$.connect($)}var wu$,Du$,Lu$,ZW6=100,XW6=3000,QW6=3000;var ju$=w(()=>{l4();wu$=V(qu(),1),Du$=V(Bu$(),1),Lu$=V(gw(),1)});function a91($,Z){return`${$}.${Z}`}class s91{cache;constructor($){this.cache=Bh({ttlMs:$?.ttlMs??GW6,maxSize:$?.maxSize??JW6})}async get($,Z){return this.cache.get(a91($,Z))??null}async set($,Z,X){this.cache.set(a91($,Z),X)}async invalidate($,Z){this.cache.delete(a91($,Z))}teardown(){this.cache.clear()}}var GW6=600000,JW6=5000;var zu$=()=>{};function NA0($,Z){return`${$}:${Z}`}function e91($){let Z=Bh({ttlMs:$?.ttlMs??WW6,maxSize:$?.maxSize??KW6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Pu$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(NA0(K,F))},set(K,F,H){Z.set(NA0(K,F),H)},invalidate(K,F){Z.delete(NA0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Pu$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(NA0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Pu$="studio.ai-provider-keys.invalidate",WW6=30000,KW6=5000;var Au$=()=>{};class $Z1{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=Tu$.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 Tu$)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 Tu$;var Ru$=w(()=>{Tu$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Iu$=($)=>{let Z;return()=>Z??=$()},ZZ1,XZ1;var qu$=w(()=>{R6();ZZ1=Iu$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),XZ1=Iu$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function wW6(){return{name:pH,subjects:[`${qw0}.>`],storage:WW.StorageType.File,max_age:NW6,max_bytes:OW6,max_msgs_per_subject:BW6,discard:WW.DiscardPolicy.Old,retention:WW.RetentionPolicy.Limits,duplicate_window:UW6,num_replicas:1}}class Vu${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 Mu$($){let Z=ku$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function jW6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,HW6().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 zW6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class QZ1{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=wW6(),X=await U9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await WW.jetstreamManager($);try{await Q.streams.info(pH),await Q.streams.update(pH,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(pH),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:zW6});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=jW6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=NH$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=Xo0(F,{runId:Z}),U=performance.now()-H;if(ZZ1().record(U),XZ1().add(1,{"org.id":Q??"unknown"}),EW6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?Mu$(O.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:O,value:B}=await F.read();if(O)break;if(K(B),N++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(F.releaseLock(),W(),LW6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Xo0(Z,{runId:$,dedup:X});if(ZZ1().record(performance.now()-Y),XZ1().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:Mu$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=HH$({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"?WW.DeliverPolicy.New:WW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=VB($),W;try{W=await(await Q.consumers.get(pH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=Cw0({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(Mw0()).pipeThrough(kw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(pH,{filter:VB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var WW,ku$,FW6=($)=>{let Z;return()=>Z??=$()},HW6,NW6=86400000000000,UW6=120000000000,OW6=4294967296,BW6=500000,DW6,LW6,EW6;var Su$=w(()=>{l4();Qo0();_w0();Vw0();R6();qu$();WW=V(gw(),1),ku$=V(qu(),1),HW6=FW6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));DW6=process.env.STREAM_ENCODE_TRACE==="1",LW6=process.env.DECOPILOT_STREAM_TRACE==="1";EW6=DW6?new Vu$:null});function UA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,SW(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 Cu$=w(()=>{O8()});class YZ1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function _u$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!Vr(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await v6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),H8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var vu$=w(()=>{ZQ();Sr();c5()});function MW6($){return $ instanceof t7}function kW6($,Z){return Z-$>=IW6}class GZ1{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??PW6;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??TW6,X=this.options.itemIntervalMs??AW6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-nn0),ho0);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()-qW6));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 It0(this.taskBoard,Y,Q),await qt0(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!==t8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await nH(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),MW6(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()+RW6)).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(()=>{}),H8(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(!kW6(jH(X),Date.now()))return;await kK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===t8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await gy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await _u$(J,Q,W.map((K)=>K.merged)))return!0;if(await TN$(J,Q))return!0;if(!Y)return!1;if(!bo0(W))return!1;return await gw0(J,Q,{previewMatchesHead:xo0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var PW6=60000,AW6=300000,TW6=50,RW6=60000,IW6=900000,qW6=120000;var fu$=w(()=>{j9();Mo0();dH();yn();vu$();c5();z3();uo0();SK();Sn()});import{readdir as VW6,rm as OA0}from"fs/promises";import{join as BA0}from"path";async function wA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-SW6),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 bu$($,Y,Z);else if(!Y.startsWith(".")){let G=BA0($,Y),J=await x_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await bu$(G,K,Z)}if((await x_(G)).length===0)await OA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function bu$($,Z,X){let Q=0,Y=BA0($,Z),G=await x_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=BA0(Y,W),F=await x_(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=BA0(K,N);await OA0(O,{recursive:!0,force:!0}),Q++}}if((await x_(K)).length===0)await OA0(K,{recursive:!0,force:!0})}if((await x_(Y)).length===0)await OA0(Y,{recursive:!0,force:!0});return Q}async function x_($){try{return(await VW6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var SW6=30;var JZ1=()=>{};import{DBOS as WZ1,SchedulerMode as CW6}from"@dbos-inc/dbos-sdk";async function vW6(){let $=[kJ(),y_(),NF()],Z=0;for(let X of $)try{Z+=await wA0(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 fW6($,Z){await WZ1.runStep(()=>vW6(),{name:"monitoringRetention"})}function yu$(){if(xu$)return;xu$=!0;let $=WZ1.registerWorkflow(fW6,{name:"monitoringRetentionWorkflow"});WZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:_W6,mode:CW6.ExactlyOncePerIntervalWhenActive})}var _W6="23 4 * * *",xu$=!1;var gu$=w(()=>{KY();JZ1()});function hu$($){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 $J.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await J61($.db,Z,Q.role);return Y.boundAuth=G61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new EL(X,void 0,Y.boundAuth,Q.role,"self"),RB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var uu$=w(()=>{jL();WC()});function bW6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function yW6(){for(let $ of xW6)$()}function cu$($){let Z=[...KZ1.logs,$];KZ1={...KZ1,logs:Z.length>500?Z.slice(-500):Z},yW6()}function FZ1(){return gW6}var KZ1,xW6,gW6=!1;var HZ1=w(()=>{KZ1=bW6(),xW6=new Set});import{EventEmitter as hW6}from"events";var NZ1;var lu$=w(()=>{HZ1();NZ1=new hW6;NZ1.on("request",($)=>{cu$($)})});function du$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Xu(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>Xu(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${Xu(U.method)}${G5.reset}`}}catch{}}let W=Xu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${Xu(H.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=cW6(Q),F=J?"\u25C0":"\u2190";if(!FZ1())console.log(`${G5.dim}${F}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=uW6(N),O=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!FZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);NZ1.emit("request",{method:Q,path:Xu(Y),status:N,duration:H,timestamp:new Date})}}}var G5,uW6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},cW6=($)=>{return G5[$]||G5.reset},Xu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var mu$=w(()=>{HZ1();lu$();G5={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 tu$}from"crypto";import{mkdir as lW6,readdir as dW6,rm as iu$,stat as ou$}from"fs/promises";import{join as OZ1,relative as mW6}from"path";import{z as P$}from"zod";function au$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return OZ1(iW6,Z)}function su$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function UZ1($,Z){let X=au$($),Q=su$(Z);return OZ1(X,Q)}function pW6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return tu$("sha256",Y).update(G).digest("hex")}function nu$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=pW6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${su$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function eu$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${tu$("md5","etag").update(Q).digest("hex")}"`}async function $c$($,Z,X,Q,Y){try{let G=await dW6($,{withFileTypes:!0});for(let J of G){let W=OZ1($,J.name),F=mW6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await $c$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await ou$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:eu$(W,H.mtime,H.size)})}catch{}}}}catch{}}function Zc$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=au$(Q);await lW6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await $c$(H,H,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((L)=>L.key>F),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=UZ1(Q,G.key),W=await ou$(J);return{contentType:m61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:eu$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??pu$;return{url:nu$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??pu$;return{url:nu$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=UZ1(Q,G.key);try{return await iu$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=UZ1(Q,K);try{await iu$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function BZ1($,Z,X){let Q=Zc$(Z,X),Y=new yW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new XQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),WJ(Y,G,$,"mcp:dev-assets")}async function Xc$($,Z,X,Q){let G=Zc$(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 iW6="./data/assets",pu$=3600,ru$,Qc$;var Yc$=w(()=>{R$();my();D8();ol();EC();fX();KP0();ru$=new H1;ru$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return BZ1($.req.raw,Z,Q)});Qc$=ru$});var Gc$={};G4(Gc$,{mountDevRoutes:()=>nW6});function nW6($,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 BZ1(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(),F=await Xc$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Qc$);let X=new H1;X.use("*",GW({mountPath:"/api/dev-assets"})),X.route("/",WP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Jc$=w(()=>{D8();y61();KP0();Yc$()});import{sql as tW6}from"kysely";import{randomUUID as Wc$}from"crypto";import{z as oW6}from"zod";async function aW6($){let Z=new Date().toISOString(),X=Wc$(),Q=m4.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:Wc$(),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 tW6`SELECT
2912
2912
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.248.1",
3
+ "version": "4.248.2",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {