decocms 4.209.1 → 4.210.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/dist/client/assets/{AlertCircle-Bve1VHF3.js → AlertCircle-CXhc9uX6.js} +1 -1
  2. package/dist/client/assets/{AreaChart-DjUZfL0a.js → AreaChart-BvQ2XY2U.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-CTBWrSAK.js → ArrowLeft-DCiExDaV.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-Dj_Pvjci.js → ArrowUp-DVm71EeL.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-6xVAGAtf.js → ArrowUpRight-BKaLZrWg.js} +1 -1
  6. package/dist/client/assets/{Check-5r4tZ1iA.js → Check-DK9eHCge.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-PMcsMc13.js → CheckCircle-D1zathgu.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-CemfdLJB.js → ChevronDown-DWufG4_X.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-BuIHUtod.js → ChevronRight-DsNnYg4N.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-8Gejwg6B.js → ChevronUp-CMGbkcp2.js} +1 -1
  11. package/dist/client/assets/{Copy01-BxjObEXd.js → Copy01-BY-CwFcM.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-Dds_89Y2.js → CpuChip01-CEh5m_jU.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-jEuKGL8e.js → CreditCard01-5mzpENZK.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-C1irX0kS.js → DotsVertical-PB2764tg.js} +1 -1
  15. package/dist/client/assets/{Eye-DkMN6_Dr.js → Eye-BNsvFt7g.js} +1 -1
  16. package/dist/client/assets/{FilterLines-DFk9tqX3.js → FilterLines-C2FLQdiR.js} +1 -1
  17. package/dist/client/assets/{Globe01-DEW9IpDs.js → Globe01-C3wzFrhC.js} +1 -1
  18. package/dist/client/assets/{Globe04-B_7Wtn_7.js → Globe04-BsxDrbqI.js} +1 -1
  19. package/dist/client/assets/{HardDrive-B7-tgB92.js → HardDrive-DTAMdMGL.js} +1 -1
  20. package/dist/client/assets/{Key01-CkwHx8FG.js → Key01-DjbxbT69.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-DmepMWFg.js → LayoutLeft-CxOYFy-k.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-7jwfOffj.js → LinkExternal01-CO_6j0pT.js} +1 -1
  23. package/dist/client/assets/{LogOut01-_2dUK5Z7.js → LogOut01-Do8_o1xQ.js} +1 -1
  24. package/dist/client/assets/{Monitor01-CVuG7LyS.js → Monitor01-l5bI4L4n.js} +1 -1
  25. package/dist/client/assets/{Palette-BSyeUV9h.js → Palette-BBO7vgG0.js} +1 -1
  26. package/dist/client/assets/{Play-DoE42omQ.js → Play-CPDI1pJn.js} +1 -1
  27. package/dist/client/assets/{Plus-D-3sbuxQ.js → Plus-XnWppGse.js} +1 -1
  28. package/dist/client/assets/{SearchLg-D5lqdUtu.js → SearchLg-C2Cfa3Hh.js} +1 -1
  29. package/dist/client/assets/{SearchMd-DR8aVpqb.js → SearchMd-DNLzH7iO.js} +1 -1
  30. package/dist/client/assets/{Settings02-ClKTmlNz.js → Settings02-Dab2VC1_.js} +1 -1
  31. package/dist/client/assets/{Share07-BQ15JrsS.js → Share07-DXuYDMOu.js} +1 -1
  32. package/dist/client/assets/{Shield01-BIwe3Ox6.js → Shield01-Cq4vgp1r.js} +1 -1
  33. package/dist/client/assets/{Star01-CR8R7VPt.js → Star01-Do--OwbB.js} +1 -1
  34. package/dist/client/assets/{Stars01-CCTjmIwq.js → Stars01-DqZSqjSJ.js} +1 -1
  35. package/dist/client/assets/{Stars02-DDGgwLI2.js → Stars02-CwZHrBQu.js} +1 -1
  36. package/dist/client/assets/{Sun-DeIKoXJY.js → Sun-MTBy1eYu.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-ZDPCSs5d.js → SwitchHorizontal01-CC9Mm1go.js} +1 -1
  38. package/dist/client/assets/{Tool01-BVS5lVZU.js → Tool01-DIJWBPIt.js} +1 -1
  39. package/dist/client/assets/{Tool02-W7gMFHiD.js → Tool02-ashXbq-r.js} +1 -1
  40. package/dist/client/assets/{Trash01-WUOJQ8AK.js → Trash01-btVXhjVb.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-DPRFbIhH.js → TrendUp01-CI71Uuzb.js} +1 -1
  42. package/dist/client/assets/{Upload01-DSarsF3W.js → Upload01-DxU4LatO.js} +1 -1
  43. package/dist/client/assets/{User01-CoAuu_LG.js → User01-Bj_GWhHN.js} +1 -1
  44. package/dist/client/assets/{Users01-BkH7IJR9.js → Users01-DZ7F8Ywu.js} +1 -1
  45. package/dist/client/assets/{Users03-dwHan_RE.js → Users03-CeCR6hlw.js} +1 -1
  46. package/dist/client/assets/{X-D9GLxr7r.js → X-DywWU7EH.js} +1 -1
  47. package/dist/client/assets/{XCircle-C5EAMN1j.js → XCircle-C_PYF_zP.js} +1 -1
  48. package/dist/client/assets/{XClose-1UHP58oF.js → XClose-C0ElGixq.js} +1 -1
  49. package/dist/client/assets/{Zap-D-hAsw6j.js → Zap-C9eipLba.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-rruvbe40.js → ZapSquare-Bo12wHWK.js} +1 -1
  51. package/dist/client/assets/{access-gate-DKzQm-dU.js → access-gate-5cL83eVv.js} +1 -1
  52. package/dist/client/assets/{agent-icon-Dt4RLhiz.js → agent-icon-jVxgPMPQ.js} +1 -1
  53. package/dist/client/assets/{agents-list-rcCbDm1N.js → agents-list-Bch92Nb-.js} +1 -1
  54. package/dist/client/assets/{ai-providers-D6oKMrpg.js → ai-providers-D530ZYK5.js} +1 -1
  55. package/dist/client/assets/{alert-DpSFtvnG.js → alert-JvACLOKM.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-FH3EWHhZ.js → alert-dialog-C5XYjJ82.js} +1 -1
  57. package/dist/client/assets/{app-editor-BbnYZ5ZW.js → app-editor-DCs-5xMm.js} +1 -1
  58. package/dist/client/assets/{auth-DF-Rn0Uj.js → auth-0skXnPRZ.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-Bo7zxRT1.js → auth-catchall-DT2YEFUa.js} +1 -1
  60. package/dist/client/assets/{auth-entry-BoyheFyY.js → auth-entry-BWX0yj46.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-DGPc62ff.js → auth-split-layout-DGcaYLWw.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-VGef6dUm.js → authenticate-and-persist-oauth-B8tzRrxQ.js} +1 -1
  63. package/dist/client/assets/{automation-list-row--DVarV4K.js → automation-list-row-DYNroqof.js} +1 -1
  64. package/dist/client/assets/{automation-runs-tMXzfGBV.js → automation-runs-CZywKycg.js} +1 -1
  65. package/dist/client/assets/{automations-BTduNSeM.js → automations-CcUQ1q9z.js} +1 -1
  66. package/dist/client/assets/{avatar-D9YhQR8d.js → avatar-zX5Qoj4p.js} +1 -1
  67. package/dist/client/assets/{badge-BsjEOu6e.js → badge-DT4O05Da.js} +1 -1
  68. package/dist/client/assets/{billing-CuR8EeVl.js → billing-DB37QBGZ.js} +1 -1
  69. package/dist/client/assets/{block-document-CeCzXPXH.js → block-document-uYCZj5x0.js} +1 -1
  70. package/dist/client/assets/{brand-context-gXAiCJYn.js → brand-context-D9x9Em_g.js} +1 -1
  71. package/dist/client/assets/{buckets-M1YcMZUU.js → buckets-kF0-J-6X.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-DrpDhGPM.js → bulk-category-panel-CVkwoG4J.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-AsRQkKb_.js → capability-load-error-D5f_wLJS.js} +1 -1
  74. package/dist/client/assets/{card-Dxsnx5Rv.js → card-Cixm2qI1.js} +1 -1
  75. package/dist/client/assets/{cards-BwRU9_-x.js → cards-DyHzFD24.js} +1 -1
  76. package/dist/client/assets/{category-editor-BLYKgUBE.js → category-editor-DJnZYioL.js} +1 -1
  77. package/dist/client/assets/{chat-context-CZphb3AC.js → chat-context-ChF6jCaR.js} +1 -1
  78. package/dist/client/assets/{checkbox-C2lzNvSD.js → checkbox-BrOjoA73.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-Bbek8ina.js → cli-auth-success-CiqbJJwu.js} +1 -1
  80. package/dist/client/assets/{collection-detail-BcXEgdxs.js → collection-detail-C9UWirkY.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-BleQqOpl.js → collection-display-button-0wri87If.js} +1 -1
  82. package/dist/client/assets/{collection-search-Cru_-4fG.js → collection-search-Bd3xv-qv.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-Do5tOA1b.js → collection-table-wrapper-DN6OSLgH.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-kNyCosg6.js → collection-tabs-DQEElYVZ.js} +1 -1
  85. package/dist/client/assets/{command-DVyMqZn1.js → command-DrT3HD6c.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-B3h2Gg5z.js → commerce-onboarding-BpkiO1Fs.js} +1 -1
  87. package/dist/client/assets/{connect-BZxZJGp8.js → connect-Ba3D_qeN.js} +1 -1
  88. package/dist/client/assets/{connection-uogg7_V6.js → connection-BrJf-A7Z.js} +1 -1
  89. package/dist/client/assets/{connection-card-H1NcRleq.js → connection-card-6pijXNUN.js} +1 -1
  90. package/dist/client/assets/{connection-detail-BM3YFNds.js → connection-detail-BTtg9PHV.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-CBwp3bfa.js → connection-form-helpers-CaQnxok9.js} +1 -1
  92. package/dist/client/assets/{connections-BcEGPUsG.js → connections-Dc0I9HWb.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-CuNDiJki.js → decopilot-sse-pool-BrvGuirJ.js} +1 -1
  94. package/dist/client/assets/{dialog-B-HpG_qY.js → dialog-CZcVc1-l.js} +1 -1
  95. package/dist/client/assets/{domain-settings-saUlc2tR.js → domain-settings-Njp5QAYp.js} +1 -1
  96. package/dist/client/assets/{drawer-CXPqomVz.js → drawer-Bn0o7hEY.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-Dr4FVaPK.js → dropdown-menu-HO0Lvy4g.js} +1 -1
  98. package/dist/client/assets/{empty-state-5giLSZOs.js → empty-state-04M_CtEs.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-BSuftKEA.js → extract-connection-data-BYZBAUyn.js} +1 -1
  100. package/dist/client/assets/{file-explorer-B4hTVq_z.js → file-explorer-Cz0mTIsC.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-C8M0nyo-.js → file-type-icon-CKOtUHkX.js} +1 -1
  102. package/dist/client/assets/{form-lnMy-WhJ.js → form-CKGWuD0c.js} +1 -1
  103. package/dist/client/assets/{general-D9mQn5ZE.js → general-BhW-2f3t.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-CZvD7_FK.js → github-repo-picker-uP9ZH6ZW.js} +1 -1
  105. package/dist/client/assets/{hooks-Bh9CM0B6.js → hooks-CpyhecXH.js} +1 -1
  106. package/dist/client/assets/{index-Iek0weap.js → index-BPr7ukFd.js} +1 -1
  107. package/dist/client/assets/{index-Y9G10YYO.js → index-Bj___glM.js} +1 -1
  108. package/dist/client/assets/{index-BsEKR4jW.js → index-BtDOpHxv.js} +1 -1
  109. package/dist/client/assets/{index-B_-DCHjn.js → index-Bt_XqdCt.js} +1 -1
  110. package/dist/client/assets/{index-JzIr7PnN.js → index-Buw4xORi.js} +1 -1
  111. package/dist/client/assets/{index-BGZjTpi3.js → index-CF0gysji.js} +40 -40
  112. package/dist/client/assets/{index-0hC7KtqT.js → index-DPbQaFcK.js} +5 -5
  113. package/dist/client/assets/{index-_zaWhzWP.css → index-DXMTUPM-.css} +1 -1
  114. package/dist/client/assets/{index-DyAesZWW.js → index-DXyh4B5P.js} +1 -1
  115. package/dist/client/assets/{index-Dv5g_Dsv.js → index-L3eXbkuJ.js} +1 -1
  116. package/dist/client/assets/{index-DMoEf_jx.js → index-U4Uw_RYj.js} +1 -1
  117. package/dist/client/assets/{index-redirect-BhLfHivF.js → index-redirect-DXnecHGH.js} +1 -1
  118. package/dist/client/assets/{input-BwM4uhvc.js → input-ii7l-StO.js} +1 -1
  119. package/dist/client/assets/{integration-icon-BnXUWZnl.js → integration-icon-BwRj3nNf.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-CqW-BiZe.js → invite-member-dialog-Dld8M7YH.js} +1 -1
  121. package/dist/client/assets/{label-7kV9b7Jd.js → label-5OQdFzMK.js} +1 -1
  122. package/dist/client/assets/{layout-1ybmDG7V.js → layout-zGwhTC8K.js} +1 -1
  123. package/dist/client/assets/{login-CRFM9BKu.js → login-WtJxD7_T.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-YgND_siS.js → mcp-oauth-BxrnIuBo.js} +1 -1
  125. package/dist/client/assets/{members-BDSo_W7E.js → members-Dz5R5e9B.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-Dp2m6w26.js → monaco-editor-PrrYr3wq.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-BxLJ4d47.js → monitoring-stats-row-CwC1dqqQ.js} +1 -1
  128. package/dist/client/assets/{multi-select-BUOPSPy-.js → multi-select-B-rJPyJJ.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-T8TsTf0W.js → oauth-callback--OzdpFCZ.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-C1xfl_Ez.js → oauth-callback-ai-provider-DWz3Tmng.js} +1 -1
  131. package/dist/client/assets/{onboarding-Hi9KsujS.js → onboarding-C1viyQ4E.js} +1 -1
  132. package/dist/client/assets/{org-layout-s5gu9BKQ.js → org-layout-BDASzWIP.js} +1 -1
  133. package/dist/client/assets/{organization-choice-CBZ8jv8p.js → organization-choice-Ccglmq6h.js} +1 -1
  134. package/dist/client/assets/{orgs-BmFiy_mx.js → orgs-C5Tq_xne.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-BqjR__d-.js → page-seo-form-Dm1Vch3P.js} +1 -1
  136. package/dist/client/assets/{popover-Cya9X-B2.js → popover-CUqwVMZT.js} +1 -1
  137. package/dist/client/assets/{post-editor-BdYzz3Q-.js → post-editor-zpNxkwBL.js} +1 -1
  138. package/dist/client/assets/{primitives-CbmaaD8R.js → primitives-DlFOvY-h.js} +1 -1
  139. package/dist/client/assets/{profile-Ccyl2MHq.js → profile-CtAsuBom.js} +1 -1
  140. package/dist/client/assets/{project-app-view-BoMiXCP5.js → project-app-view-wHi4qbdX.js} +1 -1
  141. package/dist/client/assets/record-editor-DEKmGE_C.js +1 -0
  142. package/dist/client/assets/{redirect-editor-DVsVdoAT.js → redirect-editor-DMYK3wy1.js} +1 -1
  143. package/dist/client/assets/registry-Du4uRbNW.js +2 -0
  144. package/dist/client/assets/{registry-layout-ChZxFBGh.js → registry-layout-CMArSZ8p.js} +1 -1
  145. package/dist/client/assets/{reports-BlyFaSgw.js → reports-ltd0Adh2.js} +1 -1
  146. package/dist/client/assets/{require-capability-DoFr2HWI.js → require-capability-Bb_PNHOd.js} +1 -1
  147. package/dist/client/assets/{required-auth-layout-FdDUveN7.js → required-auth-layout-D4S_Dm1j.js} +1 -1
  148. package/dist/client/assets/{reset-password-CNPpClK8.js → reset-password-Dx3kn5Xo.js} +1 -1
  149. package/dist/client/assets/{roles-Rx0tGZVz.js → roles-D6Nu9HjL.js} +1 -1
  150. package/dist/client/assets/{search-input-CWjeycc4.js → search-input-BQnwO2fn.js} +1 -1
  151. package/dist/client/assets/{secrets-Bgb-ov3e.js → secrets-wpjb1Fpg.js} +1 -1
  152. package/dist/client/assets/{sections-editor-Byg2i5b4.js → sections-editor-nKqtmg3L.js} +1 -1
  153. package/dist/client/assets/{select-BPSch7R1.js → select-CNKuS4RR.js} +1 -1
  154. package/dist/client/assets/{select-model-Xei2uq5d.js → select-model-DWlHsLpN.js} +1 -1
  155. package/dist/client/assets/{self-tool-result-Cs0nglo5.js → self-tool-result-wEGiMRrm.js} +1 -1
  156. package/dist/client/assets/{seo-editor-BEY9pHbN.js → seo-editor-BfMdh9hu.js} +1 -1
  157. package/dist/client/assets/{settings-layout-BGwh77l5.js → settings-layout-C8ptsjTU.js} +1 -1
  158. package/dist/client/assets/{settings-section-CU1YZrgK.js → settings-section-DP6y4ZMN.js} +1 -1
  159. package/dist/client/assets/{shell-controls-DR4dlARN.js → shell-controls-PSpsBADh.js} +1 -1
  160. package/dist/client/assets/{shell-layout-xL29Wqge.js → shell-layout-Y09cl5PN.js} +1 -1
  161. package/dist/client/assets/{sidebar-B_2anr9g.js → sidebar-DzV532hb.js} +1 -1
  162. package/dist/client/assets/{skeleton-CvF-7sQD.js → skeleton-YaDtawDJ.js} +1 -1
  163. package/dist/client/assets/{spinner-6_It3Nhq.js → spinner-Zv3EsRrc.js} +1 -1
  164. package/dist/client/assets/{sso-tWgmmKyp.js → sso-DDDHg0QU.js} +1 -1
  165. package/dist/client/assets/{store-DZrp7WFV.js → store-CvlZ8z1A.js} +1 -1
  166. package/dist/client/assets/store-registry--7CrF3Tt.js +2 -0
  167. package/dist/client/assets/{studio-tools-CRf5-GLc.js → studio-tools-B7AGfE60.js} +1 -1
  168. package/dist/client/assets/{switch-cGKzU5qq.js → switch-DWA0fsQ-.js} +1 -1
  169. package/dist/client/assets/{synced-repos-M2UZIWB9.js → synced-repos-D5KhKsHX.js} +1 -1
  170. package/dist/client/assets/{tab-id-VHiKnGtg.js → tab-id-BzpyawX3.js} +1 -1
  171. package/dist/client/assets/{table-us81SrKH.js → table-D-bpdVIl.js} +1 -1
  172. package/dist/client/assets/{tabs-LGasTAvM.js → tabs-DlUiCV60.js} +1 -1
  173. package/dist/client/assets/{textarea-eajUrvO0.js → textarea-DedfwACS.js} +1 -1
  174. package/dist/client/assets/{toggle-group-rVyo8YGd.js → toggle-group-CrsZqODS.js} +1 -1
  175. package/dist/client/assets/{toolbar-Dgu74m0M.js → toolbar-uV-dMmGb.js} +1 -1
  176. package/dist/client/assets/{tooltip-C03UCat0.js → tooltip-Buiub0cV.js} +1 -1
  177. package/dist/client/assets/{use-ai-providers-CB0Gjm7F.js → use-ai-providers-DDL4dFSH.js} +1 -1
  178. package/dist/client/assets/{use-automations-BQLjaHaa.js → use-automations-XYB8IsuI.js} +1 -1
  179. package/dist/client/assets/{use-autosave-CKgsjtnt.js → use-autosave-CPvTuizw.js} +1 -1
  180. package/dist/client/assets/{use-capability-DMVXiJAm.js → use-capability-Dp2kASod.js} +1 -1
  181. package/dist/client/assets/{use-clock-tick-C34WR5-P.js → use-clock-tick-u3Axge0U.js} +1 -1
  182. package/dist/client/assets/{use-connection-idlpI3vy.js → use-connection-BkR0ksdg.js} +1 -1
  183. package/dist/client/assets/{use-copy-D7_F49Jh.js → use-copy-exvdTgl1.js} +1 -1
  184. package/dist/client/assets/{use-create-virtual-mcp-BrRTKqCi.js → use-create-virtual-mcp-BqQSgWUE.js} +1 -1
  185. package/dist/client/assets/{use-debounced-autosave-BVe6fNnH.js → use-debounced-autosave-n8fCa-qP.js} +1 -1
  186. package/dist/client/assets/{use-debounced-value-D-HLE4Zl.js → use-debounced-value-DyARP1eY.js} +1 -1
  187. package/dist/client/assets/{use-deco-credits-BROUH-eZ.js → use-deco-credits-CwNvze52.js} +1 -1
  188. package/dist/client/assets/{use-decopilot-events-X-98HS0y.js → use-decopilot-events-BigNCqre.js} +1 -1
  189. package/dist/client/assets/{use-delete-connection-CPiwjESV.js → use-delete-connection-B9q7X4HF.js} +1 -1
  190. package/dist/client/assets/{use-deployment-admin-DJJDZ-ks.js → use-deployment-admin-Bw7J3KpB.js} +1 -1
  191. package/dist/client/assets/{use-file-configs-Dm2RXiGt.js → use-file-configs-BrbCf5M-.js} +1 -1
  192. package/dist/client/assets/{use-infinite-scroll-9JJT7FeH.js → use-infinite-scroll-CgUugI_1.js} +1 -1
  193. package/dist/client/assets/{use-join-requests-DmdiOdHM.js → use-join-requests-CbCOkM0t.js} +1 -1
  194. package/dist/client/assets/{use-mcp-client-BJIRwGHp.js → use-mcp-client-DPtHEQjg.js} +1 -1
  195. package/dist/client/assets/{use-mcp-tools-C0Qe2OZU.js → use-mcp-tools--nVD1393.js} +1 -1
  196. package/dist/client/assets/{use-members-BAHW0Hwn.js → use-members-LGqGyU1-.js} +1 -1
  197. package/dist/client/assets/{use-mobile-DFe0DdfZ.js → use-mobile-BWDU4XRE.js} +1 -1
  198. package/dist/client/assets/{use-navigate-to-agent-DqmkEA3y.js → use-navigate-to-agent-6X4oOMgV.js} +1 -1
  199. package/dist/client/assets/{use-open-billing-url-DOxXKiY9.js → use-open-billing-url-CwBHTmZ_.js} +1 -1
  200. package/dist/client/assets/{use-org-auth-client-AdqeHCoF.js → use-org-auth-client-Cz3JznA3.js} +1 -1
  201. package/dist/client/assets/{use-org-sso-BqM0BWse.js → use-org-sso-DOUxuhm8.js} +1 -1
  202. package/dist/client/assets/{use-organization-roles-C08sK3ai.js → use-organization-roles-B3xZYamB.js} +1 -1
  203. package/dist/client/assets/{use-organization-settings-0ryKN5Aw.js → use-organization-settings-Cz7b7Xyv.js} +1 -1
  204. package/dist/client/assets/{use-registry-connections-DdSfb8aP.js → use-registry-connections-Dn39s1IF.js} +1 -1
  205. package/dist/client/assets/{use-secrets-C8D0MCoc.js → use-secrets-CR1MD8at.js} +1 -1
  206. package/dist/client/assets/{use-section-preview-base-B44IdZWp.js → use-section-preview-base-uZNzkaE9.js} +1 -1
  207. package/dist/client/assets/{use-status-sounds-0TvNeNfQ.js → use-status-sounds-BkWl2fnb.js} +1 -1
  208. package/dist/client/assets/{use-tags-okl_CaUf.js → use-tags-HzWxtQvr.js} +1 -1
  209. package/dist/client/assets/{use-view-mode-CR3mlKA7.js → use-view-mode-CfFrrwjg.js} +1 -1
  210. package/dist/client/assets/{use-virtual-mcp-Be5DA7DS.js → use-virtual-mcp-CUOVaYDO.js} +1 -1
  211. package/dist/client/assets/useInfiniteQuery-CEHmvIn_.js +1 -0
  212. package/dist/client/assets/{useRouterState-CxAV2UxF.js → useRouterState-DnfQMkVU.js} +1 -1
  213. package/dist/client/assets/useSuspenseInfiniteQuery-B75mM5Rt.js +1 -0
  214. package/dist/client/assets/{users--yoWNlib.js → users-oCkfHTmU.js} +1 -1
  215. package/dist/client/assets/{variant-calendar-C3FT6nuM.js → variant-calendar-BGmQelkL.js} +1 -1
  216. package/dist/client/assets/{view-mode-toggle-DSXuYj39.js → view-mode-toggle-B_6Evmzp.js} +1 -1
  217. package/dist/client/index.html +2 -2
  218. package/dist/server/cli.js +1 -1
  219. package/dist/server/server.js +1 -1
  220. package/package.json +1 -1
  221. package/dist/client/assets/record-editor-qvxOw3-6.js +0 -1
  222. package/dist/client/assets/registry-C5zyUw-T.js +0 -2
  223. package/dist/client/assets/store-registry-dvN6RYsi.js +0 -2
  224. package/dist/client/assets/useInfiniteQuery-CtdimV--.js +0 -1
  225. package/dist/client/assets/useSuspenseInfiniteQuery-BOh4Goej.js +0 -1
@@ -2734,7 +2734,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2734
2734
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2735
2735
 
2736
2736
  Respond with the structured verdict and a short reason.`,Df$;var Ef$=B(()=>{V4();rw();Z61();I56=X61.object({requiresReview:X61.boolean().describe("true if the changes should go through pull-request review"),reason:X61.string().describe("One short sentence explaining the decision (max ~120 chars)")});Df$={requiresReview:!1,reason:""}});function jf$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function Zz0($){return jf$($?.previewServerUrl)??jf$($?.productionUrl)}function zf$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Pf$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Af$($){let Z=Kh.get($);if(!Z)return;Kh.delete($),Q61-=Z.bytes}function C56($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Af$($),Q>V56)return;Kh.set($,{etag:Z,body:X,bytes:Q}),Q61+=Q;while(Q61>S56||Kh.size>k56){let Y=Kh.keys().next().value;if(Y===void 0)break;Af$(Y)}}function Tf$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,N){let F=`${zf$()}${K}`,U=Pf$(W,K)?Kh.get(F):void 0,w=await fetch(F,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&w.status===304)return{status:200,json:U.body};if(!w.ok&&!N?.allow?.includes(w.status)){let D=await w.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new V6(w.status,W,K,L)}let O=w.status===204?void 0:await w.json();if(w.status===200&&Pf$(W,K)){let D=w.headers.get("etag");if(D)C56(F,D,O)}return{status:w.status,json:O}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${$_(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${$_(W)}`,H=await fetch(`${zf$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let N=await H.text().catch(()=>"");throw new V6(H.status,"GET",K,N.slice(0,300))}if(!H.body)throw new V6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new V6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new V6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:N}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return N.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${$_(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:N,json:F}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return N===204?null:F?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:N}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:N.number,html_url:N.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),N=H[0];return N?{number:N.number,html_url:N.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${$_(W)}...${$_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${$_(W)}...${$_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((N)=>({filename:N.filename,status:N.status,sha:N.sha,...N.previous_filename?{previousFilename:N.previous_filename}:{}}))}}}}function $_($){return $.split("/").map(encodeURIComponent).join("/")}var k56=512,S56=8388608,V56=262144,Kh,Q61=0,V6;var Z_=B(()=>{Kh=new Map;V6=class V6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function Xz0($,Z,X){if(!X.connectionId)throw new V6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new V6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await _56($,Q);if(!Y)throw new V6(401,"AUTH","connection",VZ);return Tf$({owner:X.owner,repo:X.name,accessToken:Y})}async function _56($,Z){if(t5(Z)?.sourceConnectionId)return wx($,Z);return(await kY({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new R6($.db,$.vault)})).accessToken}var Y61=B(()=>{AY();r50();ZK();PY();Z_()});function v56($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function Qz0($){if(v56($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Gr($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function G61($){return Qz0($),encodeURIComponent($)}function Jr($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Gr(Y.stem))}:${G}`}return`${X}}`}var Rf$=()=>{};var Yz0=B(()=>{Rf$()});function f56($){return $.startsWith("merged/")?"merged":"blobs"}function J61($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=f56(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function If$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Hh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function qf$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),N=[],F=new Set;if(Y==="merged")for(let[U,w]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||w.area!=="merged")continue;N.push(U),F.add(U),H-=w.bytes,K-=w.bytes}for(let[U,w]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||F.has(U))continue;N.push(U),F.add(U),K-=w.bytes}for(let U of N)Hh($,U);return Hh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:N}}function Wr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function W61($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as _f$}from"crypto";import{mkdir as Kr,readdir as b56,readFile as x56,rename as y56,rm as vf$,stat as ff$,statfs as g56,unlink as h56,writeFile as u56}from"fs/promises";import{tmpdir as c56}from"os";import{dirname as l56,join as T7}from"path";function Nh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function i56(){if(Gz0)return Gz0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?T7(c56(),"studio-fast-preview-cache"):$;return Gz0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Nh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Mf$),maxMergedBytes:Nh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*Jz0),maxEntryBytes:{blobs:Nh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",Jz0),merged:Nh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*Jz0)}},freeFloorBytes:Nh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Mf$),sweepIntervalMs:Nh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},Gz0}function n56(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function p56(){if(XB)return;XB={hits:k$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:k$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:k$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:k$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:k$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},k$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Fh)return;$.observe(Fh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Fh.index.areaBytes.merged,{area:"merged"})}),k$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Fh)return;let Z={blobs:0,merged:0};for(let X of Fh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function t56($){X_.hits[$]+=1,XB?.hits.add(1,{area:$})}function kf$($){X_.misses[$]+=1,XB?.misses.add(1,{area:$})}function K61(){X_.evictions+=1,XB?.evictions.add(1)}function KF($){X_.errors+=1,XB?.errors.add(1,{op:$})}function o56($){X_.invalidKeySkips+=1,XB?.errors.add(1,{op:`${$}_invalid_key`})}function H61(){return Sf$??=a56(),Sf$}async function a56(){let $=i56();if(!$.enabled)return null;p56();try{await Kr(T7($.root,"blobs"),{recursive:!0}),await Kr(T7($.root,"merged"),{recursive:!0}),await Kr(T7($.root,"tmp"),{recursive:!0})}catch{return KF("init"),null}let Z=[];try{Z=await bf$($.root)}catch{KF("scan"),Z=[]}let X={root:$.root,index:J61(Z,$.index),cfg:$};return Fh=X,$96(X),X}async function Wz0($){try{return await b56($)}catch{return[]}}async function bf$($){let Z=[];for(let X of["blobs","merged"]){let Q=T7($,X);for(let Y of await Wz0(Q)){let G=T7(Q,Y);for(let J of await Wz0(G)){let W=T7(G,J);for(let K of await Wz0(W))try{let H=await ff$(T7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function xf$($,Z,X){if(!W61(X))return null;try{return`blobs/${Wr($)}/${Wr(Z)}/${X}`}catch{return null}}function yf$($,Z,X){if(!W61(X))return null;try{return`merged/${Wr($)}/${Wr(Z)}/${X}.json`}catch{return null}}async function gf$($,Z){try{let X=await H61();if(!X)return null;if(Z===null)return kf$($),null;try{let Q=await x56(T7(X.root,Z),"utf8");return If$(X.index,Z),t56($),Q}catch{return kf$($),null}}catch{return KF(`get_${$}`),null}}function hf$($,Z,X){return gf$("blobs",xf$($,Z,X))}function uf$($,Z,X){return gf$("merged",yf$($,Z,X))}async function s56($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await g56($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function Kz0($){try{await h56($)}catch{}}async function e56($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Hh($.index,X.value),await Kz0(T7($.root,X.value)),K61()}}catch{KF("emergency_evict")}}async function cf$($,Z,X,Q){try{let Y=await H61();if(!Y)return;if(X===null){o56(Z);return}if(!await s56(Y)){X_.floorSkips+=1,XB?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=qf$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){X_.admissionRefusals+=1;return}for(let K of J.evict)await Kz0(T7(Y.root,K)),K61();let W=T7(Y.root,"tmp",`stage-${_f$()}`);try{await u56(W,Q,"utf8");let K=T7(Y.root,X);await Kr(l56(K),{recursive:!0}),await y56(W,K)}catch(K){if(Hh(Y.index,X),await Kz0(W),KF(Z),K?.code==="ENOSPC")await e56(Y)}}catch{KF(Z)}}function Hz0($,Z,X,Q){return cf$("blobs","put_blob",xf$($,Z,X),Q)}function lf$($,Z,X,Q){return cf$("merged","put_merged",yf$($,Z,X),Q)}async function df$(){try{let $=await H61();if(!$)return null;let Z=T7($.root,"tmp",_f$());return await Kr(Z,{recursive:!0}),Z}catch{return KF("make_scratch"),null}}async function mf$($){try{await vf$($,{recursive:!0,force:!0})}catch{KF("remove_scratch")}}function $96($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;Vf$=new AbortController,C$(Math.random()*Z,{signal:Vf$.signal}).then(()=>{Cf$($);let X=setInterval(()=>void Cf$($),Z);X.unref?.(),r56=X}).catch(()=>{})}async function Cf$($){try{let Z=J61(await bf$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Hh(Z,G),await Kz0(T7($.root,G)),K61()}$.index=Z;let Q=T7($.root,"tmp"),Y=Date.now();for(let G of await Wz0(Q)){let J=T7(Q,G);try{let W=await ff$(J);if(Y-W.mtimeMs>m56)await vf$(J,{recursive:!0,force:!0})}catch{}}}catch{KF("sweep")}}var d56=1024,Jz0,Mf$,m56=3600000,Gz0=null,XB=null,X_,Sf$=null,Fh=null,r56=null,Vf$=null;var if$=B(()=>{$6();v6();Jz0=1024*d56,Mf$=1024*Jz0;X_=n56()});function nf$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as Z96,stat as X96}from"fs/promises";import{join as pf$}from"path";function Q96($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function Y96(){return tf$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),tf$}async function of$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new Hr(`invalid blocks path prefix: ${X}`);let Y=await Y96(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...Q96(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(F){throw new Hr("failed to spawn tar",{cause:F})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let F=(await K).trim().slice(0,500);throw new Hr(`tar exited with code ${H}${F?`: ${F}`:""}`)}let N=await G96(Z,Q);if(N.length===0)throw new Hr(`tar extracted no ${G} members into ${Z}`);return N}async function G96($,Z){let X=pf$($,...Z.split("/")),Q;try{Q=await Z96(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=pf$(X,G);try{if(!(await X96(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var Hr,tf$=null;var rf$=B(()=>{Hr=class Hr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as J96}from"crypto";import{readFile as W96}from"fs/promises";async function Nr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof V6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof V6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function H96(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return sf$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):sf$}function N96($){ef$??=k$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),ef$.add(1,{path:$})}async function Nz0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function Fz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function N61($,Z){let X=`${Fz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function F61($,Z){return $.filter((X)=>Gr(X.stem)===Z).map((X)=>X.path).sort()}function $b$($,Z,X,Q){return Hz0($,Z,X,Q)}function F96($,Z){if(!Z)return $;return J96("sha1").update(`${$}:${Z}`).digest("hex")}async function Zb$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Nr($,Z):await $.getHeadSha(Z);return U96.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>w96($,Y,X))}async function w96($,Z,X){let{owner:Q,repo:Y}=$,G=F96(Z,X),J=await uf$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=N61(K,X),N=new Map;if(await Nz0(H,af$,async(O)=>{let D=await hf$(Q,Y,O.sha);if(D!==null)N.set(O.path,D)}),H.length-N.size>K96){let O=await O96($,Z,X,H);if(N96(O!==null?"tarball":"blobs"),O!==null)for(let[D,L]of O)N.set(D,L)}let U=await Nz0(H,af$,async(O)=>{let D=N.get(O.path);if(D!==void 0)return{stem:O.stem,content:D};let L=await $.getBlobText(O.sha);return await Hz0(Q,Y,O.sha,L),{stem:O.stem,content:L}}),w=Jr(U);return await lf$(Q,Y,G,w),{sha:Z,decofile:w}}async function O96($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=H96(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await df$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await of$(K,W,Fz0(X)),N=new Map(Q.map((U)=>[U.path,U.sha])),F=new Map;for(let U of H){let w=N.get(U.path);if(w===void 0)continue;let O=await W96(U.diskPath,"utf8");await Hz0($.owner,$.repo,w,O),F.set(U.path,O)}return F}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await mf$(W)}}var af$=12,K96=50,sf$=134217728,ef$=null,U96;var Uz0=B(()=>{Yz0();v6();if$();Z_();rf$();U96=nf$()});async function wz0($,Z){let X=await $.getDefaultBranch(),Q=await Nr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function Oz0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,B96),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((N)=>N.type==="blob").map((N)=>[N.path,N.sha])),H=await Nz0(G,D96,async(N)=>{let F=N.previousFilename??N.filename,U=N.status==="added"?void 0:K.get(F),w=U?await $.getBlobText(U):null,O=N.status==="removed"?null:await $.getBlobText(N.sha);return[N.filename,{from:w,to:O}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function Xb$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof V6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new V6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await j96($,Z,X)}async function j96($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=L96)throw new V6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let w=K.get(U.filename);if(U.status==="removed"||!w)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:w.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let N=await $.createTree(await $.getCommitTreeSha(G),H),F=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:N,parentShas:[Y,G]});try{await $.updateRef(Z,F);return}catch(U){if(U instanceof V6&&U.status===422&&Q<E96)continue;throw U}}}var B96=200,D96=12,L96=300,E96=3;var Qb$=B(()=>{Z_();Uz0()});function P96($){if(!$||$.includes(".."))return!1;return z96.test($)}function Yb$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!P96(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Gb$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var z96;var Jb$=B(()=>{z96=/^[\w./@-]+$/});function U61($){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 Fr($,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 Wb$($,Z,X,Q){if(!Q.connectionId)throw new Uh("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Uh(VZ);await Vw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:VZ;throw new Uh(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Cw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Wh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await tw(H,A96).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var A96=10485760,Uh;var w61=B(()=>{ZK();$z0();$n();Ox();Uh=class Uh extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function R96($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!T96.test(Z))throw Error(`Invalid branch name: ${$}`)}function Q_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(q96)])}function Y_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Ur($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Fr(Z,X);if(!Y)throw new V6(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return Xz0(Q,G.id,Y)}function O61($,Z){if(Z instanceof V6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,j9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,j9)}async function Nb$($){try{let Z=await Ur($),X=await wz0(Z,$.get("vmClaim").branch);return $.json(X,200,j9)}catch(Z){return O61($,Z)}}function Dz0($,Z){let Q=(Bz0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Bz0.set($,Y),Y.finally(()=>{if(Bz0.get($)===Y)Bz0.delete($)}),Q}async function gZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,j9);let Q=Y_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...j9}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?k96(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...j9}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function k96($){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 Lz0($,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 S96($){return Fb$.includes($)}var T96,Kb$=524288,I96=65536,q96=1e4,Hb$=2000,M96,Bz0,j9,Fb$,Ub$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",M96),$.post("/:virtualMcpId/:branch/write",(X)=>gZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>gZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>gZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>gZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>gZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>gZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>gZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Q_(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 gZ(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 gZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>gZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>gZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!S96(Q))return X.json({error:`step must be one of: ${Fb$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=o(X.var.studioContext),J=Cx(Y.virtualMcpMetadata);try{await qU0({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 gZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return WF(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Nf$(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 Nb$(X);return Z(X)});let Z=(X)=>gZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hb$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nb$(X);return gZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hb$)])})}),$.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 Ur(X),J=await Oz0(G,Q.branch,Y.base);return X.json(J,200,j9)}catch(Y){return O61(X,Y)}return gZ(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,j9);let Q=Y_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Dz0(Y,async()=>{try{await o41(W,Q,Y);let K=Fr(G,J);if(K)await Wb$(W,Q,Y,K)}catch(K){if(K instanceof Uh)return X.json({error:K.message},403,j9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,j9)}return gZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,j9);return Dz0(Q,()=>gZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Dz0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Ur(X),H=W.base??await K.getDefaultBranch();return await Xb$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,j9)}catch(W){return O61(X,W)}});let Y=Y_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Dz0(G,async()=>{try{await o41(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,j9)}return gZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",FZ({maxSize:Kb$,onError:(X)=>X.json({error:"Payload too large"},413,j9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=Y_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=s41(N)&&U?[N,F]:Y?await Promise.all([Lz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Lz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Ur(X);return Promise.all([wz0(L,Q.branch),Oz0(L,Q.branch)])})(),D=await Bf$(K,w,O);return X.json(D,200,j9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j9);return X.json({error:N},502,j9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",FZ({maxSize:Kb$,onError:(X)=>X.json({error:"Payload too large"},413,j9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=Y_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=s41(N)&&U?[N,F]:Y?await Promise.all([Lz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Lz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Ur(X);return Promise.all([wz0(L,Q.branch),Oz0(L,Q.branch)])})(),D=await Lf$(K,w,O,typeof H.language==="string"?H.language:void 0);return X.json(D,200,j9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j9);return X.json({error:N},502,j9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Y_(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=U61(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",FZ({maxSize:I96,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Y_(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=Yb$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Gb$(G,W.resolveType),H=U61(K),N;try{N=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await N.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var wb$=B(()=>{C8();aO();Jh();t41();KN();Kf$();R3();mw();Hf$();Ff$();Vm0();si();Z61();Ef$();Y61();Z_();Qb$();Jb$();w61();T96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;M96=ej0(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{R96(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=zi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await LN(X,J,Q),N=Wf$({userId:H,projectRef:K}),F=W.metadata??null;if(F?.fastPreview===!0&&Zz0(F))return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await dX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Bz0=new Map;j9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Fb$=["clone","install","start"]});function Ob$($,Z,X){let Q=B61.get($);if(!Q)Q={pending:null,running:!1},B61.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)C96($,Q);return G}async function C96($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await _96(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)B61.delete($)}}async function _96($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Nr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=N61(W,Q),H=[],N=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,D]of $.set){let L=F61(K,O),E=`${JSON.stringify(D,null,2)}
2737
- `,j=await Z.createBlob(E);await $b$(Z.owner,Z.repo,j,E);let z=L[0]??`${Fz0(Q)}/${G61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of F61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Jr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:v96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof V6&&O.status===422)||Y>=V96-1)throw O;await C$(cZ(2000,200,Y,2,0.5))}}}function v96($){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 Xl0(Q,$.deps.coAuthor)}var V96=3,B61;var Bb$=B(()=>{jU0();Yz0();$6();Z_();Uz0();B61=new Map});import{createHmac as Db$,randomBytes as f96,timingSafeEqual as b96}from"crypto";function Lb$(){if(Ez0)return Ez0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Ez0=$?Buffer.from($):f96(32),Ez0}function D61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+x96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Db$("sha256",Lb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Eb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Db$("sha256",Lb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!b96(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 x96=21600000,Ez0=null;var jb$=B(()=>{M$()});import{z as wh}from"zod";function g96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&y96.test($)}function Pb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function jz0($){let Z=$.get("decofileScope");return Xz0($.var.studioContext,Z.organizationId,Z.githubRepo)}function zz0($,Z){if(Z instanceof V6){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 Ab$(){let $=new U1;return $.use("/:virtualMcpId/:branch",zb$),$.use("/:virtualMcpId/:branch/*",zb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await jz0(Z),Y=await Zb$(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=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Pb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return zz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=h96.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{Qz0(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 jz0(Z),W=await Ob$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Wh(Q)},G),K=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Pb$(Z)})}catch(J){return zz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await jz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof V6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof V6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return zz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await jz0(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 V6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return zz0(Z,Q)}}),$}var y96,h96,zb$;var Tb$=B(()=>{Yz0();C8();t41();$z0();w61();Y61();Bb$();jb$();Z_();Uz0();y96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;h96=wh.object({set:wh.record(wh.string(),wh.unknown()).optional(),delete:wh.array(wh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),zb$=ej0(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(!g96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Eb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Zz0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Fr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var Rb$=($)=>{let Z=new U1;if(Z.use("*",iC),Z.route("/",Dj0()),Z.route("/",iV$()),Z.route("/",tv$()),Z.route("/",iv$()),Z.route("/",rj0()),Z.route("/tools",Zf$()),Z.route("/",sv$()),Z.route("/",Mv$({kvStorage:$.kvStorage})),Z.route("/",Iv$()),Z.route("/fs",gv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ub$()),Z.route("/decofile",Ab$()),Z.route("/",lv$()),Z.route("/deco-sites",Ej0()),Z.route("/sso",Nj0()),Z.route("/",aj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",yV$()),$.mountDevAssets)Z.route("/dev-assets",jj0({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("/",kk$()),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",uv$()),Z.route("/mcp",_O0()),Z.route("/mcp/self",oj0()),Z.route("/mcp",bO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ib$=B(()=>{C8();B81();gV$();z81();zj0();Co();w81();qv$();kv$();hv$();dn();G81();xO0();c41();cv$();dv$();nv$();ov$();ev$();d41();Xf$();m41();vO0();wb$();Tb$()});function c96($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function l96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(u96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var u96=1e4,d96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},qb$=()=>{let $=new U1;return $.use("*",d96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await l96(Q,Y);return Z.json({apps:c96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Mb$=B(()=>{C8();M$()});import{z as M1}from"zod";function mK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function e96($){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 $Z6($,Z,X){try{return JSON.parse($)}catch{throw new Vb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function ZZ6($){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:$Z6(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 XZ6($){let Z=$.map((X)=>{let Q=X.function.parameters?qY(X.function.parameters):qY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function QZ6($){if(!$)return;return{openai:{response_format:$}}}function YZ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function kb$($,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 Sb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var m96=256,i96,n96,p96,t96,o96,r96,a96,s96,Vb$,Cb$,_b$;var vb$=B(()=>{V4();C8();Jh();uN();i96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),n96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),p96=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(n96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),t96=M1.object({type:M1.literal("text")}),o96=M1.object({type:M1.literal("json_object")}),r96=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()})}),a96=M1.union([t96,o96,r96]),s96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(p96),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(i96).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:a96.optional(),user:M1.string().optional()});Vb$=class Vb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Cb$=new U1;Cb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(mK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(mK("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(mK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=s96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(mK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=e96(G.model);if(!J)return $.json(mK("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)=>FD(j.providerId));if(!E)return $.json(mK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(mK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=ZZ6(G.messages),U=G.tools?XZ6(G.tools):void 0,w=QZ6(G.response_format),O=YZ6(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=kb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=m96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=kb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sb$(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(mK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(mK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(mK(Y.message,"server_error"),500)}});_b$=Cb$});var bb$;var fb$=B(()=>{bb$={name:"decocms",version:"4.209.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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function WZ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??JZ6}}var xb$,JZ6="https://ph.studio.decocms.com",yb$;var gb$=B(()=>{C8();yy0();yV();PZ();M$();$81();fb$();xb$=new U1;xb$.get("/",($)=>{let Z={version:bb$.version,theme:Oc1(),...ZL().logo&&{logo:ZL().logo},...DK()&&{internalUrl:dM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:ZV$(),posthog:WZ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!DK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});yb$=xb$});function Oh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function L61($){return(Oh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ub$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Oh($))}&sz=${Z}`}function hb$($,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 cb$($){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()?hb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var G_,KZ6,HZ6,NZ6,FZ6,lb$;var db$=B(()=>{G_=c0.enum(["good","bad","neutral"]),KZ6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:G_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),HZ6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(KZ6)),NZ6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},FZ6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:G_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:G_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(HZ6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:G_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:G_.optional()})).min(1)})]),lb$=c0.object({...NZ6,template:FZ6})});function Pz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=lb$.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 E61=B(()=>{db$()});import{join as mb$}from"path";async function wZ6($){try{let Z=await fetch(`${uW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(UZ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Pz0(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()||L61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function tY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function OZ6($,Z){let X=Oh($),Q=Z?.brand?.trim()||L61(X),Y=ub$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${tY(W)}</title>`,`<meta name="description" content="${tY(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="${tY(W)}" />`,`<meta property="og:description" content="${tY(K)}" />`,`<meta property="og:url" content="${tY(J)}" />`,`<meta property="og:image" content="${tY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${tY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${tY(W)}" />`,`<meta name="twitter:description" content="${tY(K)}" />`,`<meta name="twitter:image" content="${tY(H)}" />`,`<meta name="twitter:image:alt" content="${tY(N)}" />`,`<link rel="canonical" href="${tY(J)}" />`,`<link rel="icon" href="${tY(Y)}" sizes="any" />`].join(`
2737
+ `,j=await Z.createBlob(E);await $b$(Z.owner,Z.repo,j,E);let z=L[0]??`${Fz0(Q)}/${G61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of F61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Jr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:v96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof V6&&O.status===422)||Y>=V96-1)throw O;await C$(cZ(2000,200,Y,2,0.5))}}}function v96($){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 Xl0(Q,$.deps.coAuthor)}var V96=3,B61;var Bb$=B(()=>{jU0();Yz0();$6();Z_();Uz0();B61=new Map});import{createHmac as Db$,randomBytes as f96,timingSafeEqual as b96}from"crypto";function Lb$(){if(Ez0)return Ez0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Ez0=$?Buffer.from($):f96(32),Ez0}function D61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+x96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Db$("sha256",Lb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Eb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Db$("sha256",Lb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!b96(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 x96=21600000,Ez0=null;var jb$=B(()=>{M$()});import{z as wh}from"zod";function g96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&y96.test($)}function Pb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function jz0($){let Z=$.get("decofileScope");return Xz0($.var.studioContext,Z.organizationId,Z.githubRepo)}function zz0($,Z){if(Z instanceof V6){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 Ab$(){let $=new U1;return $.use("/:virtualMcpId/:branch",zb$),$.use("/:virtualMcpId/:branch/*",zb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await jz0(Z),Y=await Zb$(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=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Pb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return zz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=h96.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{Qz0(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 jz0(Z),W=await Ob$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Wh(Q)},G),K=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Pb$(Z)})}catch(J){return zz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await jz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof V6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof V6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return zz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await jz0(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 V6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return zz0(Z,Q)}}),$}var y96,h96,zb$;var Tb$=B(()=>{Yz0();C8();t41();$z0();w61();Y61();Bb$();jb$();Z_();Uz0();y96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;h96=wh.object({set:wh.record(wh.string(),wh.unknown()).optional(),delete:wh.array(wh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),zb$=ej0(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(!g96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Eb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Zz0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Fr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var Rb$=($)=>{let Z=new U1;if(Z.use("*",iC),Z.route("/",Dj0()),Z.route("/",iV$()),Z.route("/",tv$()),Z.route("/",iv$()),Z.route("/",rj0()),Z.route("/tools",Zf$()),Z.route("/",sv$()),Z.route("/",Mv$({kvStorage:$.kvStorage})),Z.route("/",Iv$()),Z.route("/fs",gv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ub$()),Z.route("/decofile",Ab$()),Z.route("/",lv$()),Z.route("/deco-sites",Ej0()),Z.route("/sso",Nj0()),Z.route("/",aj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",yV$()),$.mountDevAssets)Z.route("/dev-assets",jj0({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("/",kk$()),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",uv$()),Z.route("/mcp",_O0()),Z.route("/mcp/self",oj0()),Z.route("/mcp",bO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ib$=B(()=>{C8();B81();gV$();z81();zj0();Co();w81();qv$();kv$();hv$();dn();G81();xO0();c41();cv$();dv$();nv$();ov$();ev$();d41();Xf$();m41();vO0();wb$();Tb$()});function c96($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function l96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(u96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var u96=1e4,d96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},qb$=()=>{let $=new U1;return $.use("*",d96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await l96(Q,Y);return Z.json({apps:c96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Mb$=B(()=>{C8();M$()});import{z as M1}from"zod";function mK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function e96($){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 $Z6($,Z,X){try{return JSON.parse($)}catch{throw new Vb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function ZZ6($){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:$Z6(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 XZ6($){let Z=$.map((X)=>{let Q=X.function.parameters?qY(X.function.parameters):qY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function QZ6($){if(!$)return;return{openai:{response_format:$}}}function YZ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function kb$($,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 Sb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var m96=256,i96,n96,p96,t96,o96,r96,a96,s96,Vb$,Cb$,_b$;var vb$=B(()=>{V4();C8();Jh();uN();i96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),n96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),p96=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(n96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),t96=M1.object({type:M1.literal("text")}),o96=M1.object({type:M1.literal("json_object")}),r96=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()})}),a96=M1.union([t96,o96,r96]),s96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(p96),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(i96).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:a96.optional(),user:M1.string().optional()});Vb$=class Vb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Cb$=new U1;Cb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(mK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(mK("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(mK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=s96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(mK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=e96(G.model);if(!J)return $.json(mK("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)=>FD(j.providerId));if(!E)return $.json(mK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(mK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=ZZ6(G.messages),U=G.tools?XZ6(G.tools):void 0,w=QZ6(G.response_format),O=YZ6(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=kb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=m96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=kb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sb$(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(mK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(mK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(mK(Y.message,"server_error"),500)}});_b$=Cb$});var bb$;var fb$=B(()=>{bb$={name:"decocms",version:"4.210.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function WZ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??JZ6}}var xb$,JZ6="https://ph.studio.decocms.com",yb$;var gb$=B(()=>{C8();yy0();yV();PZ();M$();$81();fb$();xb$=new U1;xb$.get("/",($)=>{let Z={version:bb$.version,theme:Oc1(),...ZL().logo&&{logo:ZL().logo},...DK()&&{internalUrl:dM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:ZV$(),posthog:WZ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!DK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});yb$=xb$});function Oh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function L61($){return(Oh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ub$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Oh($))}&sz=${Z}`}function hb$($,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 cb$($){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()?hb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var G_,KZ6,HZ6,NZ6,FZ6,lb$;var db$=B(()=>{G_=c0.enum(["good","bad","neutral"]),KZ6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:G_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),HZ6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(KZ6)),NZ6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},FZ6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:G_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:G_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(HZ6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:G_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:G_.optional()})).min(1)})]),lb$=c0.object({...NZ6,template:FZ6})});function Pz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=lb$.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 E61=B(()=>{db$()});import{join as mb$}from"path";async function wZ6($){try{let Z=await fetch(`${uW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(UZ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Pz0(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()||L61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function tY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function OZ6($,Z){let X=Oh($),Q=Z?.brand?.trim()||L61(X),Y=ub$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${tY(W)}</title>`,`<meta name="description" content="${tY(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="${tY(W)}" />`,`<meta property="og:description" content="${tY(K)}" />`,`<meta property="og:url" content="${tY(J)}" />`,`<meta property="og:image" content="${tY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${tY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${tY(W)}" />`,`<meta name="twitter:description" content="${tY(K)}" />`,`<meta name="twitter:image" content="${tY(H)}" />`,`<meta name="twitter:image:alt" content="${tY(N)}" />`,`<link rel="canonical" href="${tY(J)}" />`,`<link rel="icon" href="${tY(Y)}" sizes="any" />`].join(`
2738
2738
  `)}function BZ6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
2739
2739
  </head>`)}function ib$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=Oh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(mb$($,"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(`${uW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(DZ6)}),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=$?mb$($,"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 wZ6(Oh(Q)),K=OZ6(Q,W);return X.html(BZ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var UZ6=2500,DZ6=1e4;var nb$=B(()=>{C8();E61();BL();M$()});function wr($,Z){return fetch(`${uW({})}${$}`,Z)}async function LZ6($,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 wr(`/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}=Pz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var EZ6,HF,pb$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},tb$;var ob$=B(()=>{C8();SG();BL();E61();EZ6=new Set(["complete","errored","terminated","unknown"]),HF=new U1;HF.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});HF.use("/link-token/*",pb$);HF.use("/suggest",pb$);HF.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await LZ6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});HF.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await wr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${OL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});HF.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await wr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${OL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:EZ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});HF.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await wr(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});HF.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await wr(`/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:[]})}});tb$=HF});import{createHmac as jZ6,timingSafeEqual as zZ6}from"crypto";function ab$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>PZ6)return!1;let W=jZ6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&zZ6(K,N)})}function sb$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=NJ(Z),Q=NJ(NJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:iK(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 eb$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function iK($){return typeof $==="string"?$:void 0}function NJ($){return typeof $==="object"&&$!==null?$:void 0}function Az0($){return typeof $==="number"?new Date($*1000):null}function P61($){return iK($)??iK(NJ($)?.id)}function AZ6($){return P61($.subscription)??iK(NJ(NJ($.parent)?.subscription_details)?.subscription)}function TZ6($){let Z=Az0($.current_period_end);if(Z)return Z;let X=NJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=NJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function j61($,Z){let X=Az0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function z61($,Z){let X=Az0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function RZ6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=iK(NJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(iK(NJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(iK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=iK(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(NJ(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:NJ(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(iK(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=P61(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(j61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:P61(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:z61(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=iK(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&&j61(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":eb$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:TZ6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:z61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=AZ6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(j61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Az0(X.period_end),lastStripeEventAt:z61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function IZ6($,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:eb$(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 rb$($,Z){let X=IZ6($,Z);if(!X)return;eJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Ad1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function $x$($){let Z=new xW(m8().db),X=await RZ6(Z,$);if(!(X.handled&&X.topUp))rb$($,X);if(X.handled&&X.topUp)await vU$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),rb$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await yo1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof H3&&(Q.status===400||Q.status===404)))throw Q}return X}var PZ6=300;var Zx$=B(()=>{TG();y4();B40();rm();pr0()});var qZ6=1048576,A61;var Xx$=B(()=>{C8();aO();M$();Zx$();A61=new U1;A61.post("/webhook",FZ({maxSize:qZ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=y0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ab$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=sb$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await $x$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as MZ6}from"crypto";function SZ6($,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 MZ6(Buffer.from(Y),Buffer.from(Q))}var kZ6=5242880,T61;var Qx$=B(()=>{C8();aO();oi();T61=new U1;T61.post("/webhook",FZ({maxSize:kZ6,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(!SZ6(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 Rm0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Yx$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Gx$,VZ6,CZ6,Jx$;var Wx$=B(()=>{C8();sJ();ix();ib();Gx$=new U1,VZ6=["range","if-none-match","if-modified-since"],CZ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Gx$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(cg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await In(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&Y3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Yx$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of VZ6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new e1(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of CZ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Yx$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Jx$=Gx$});var Or=C((J_)=>{var _Z6=J_&&J_.__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]}),vZ6=J_&&J_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))_Z6(Z,$,X)};Object.defineProperty(J_,"__esModule",{value:!0});vZ6(QY(),J_)});var Nx$=C((Kx$)=>{Object.defineProperty(Kx$,"__esModule",{value:!0});Kx$.version=void 0;Kx$.version="3.4.0"});var wx$=C((nK)=>{var fZ6=nK&&nK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(nK,"__esModule",{value:!0});nK.NodeTransport=nK.VERSION=void 0;nK.nodeResolveHost=uZ6;var n6=Or(),bZ6=z0("net"),R61=z0("tls"),xZ6=z0("path"),Fx$=z0("fs"),yZ6=fZ6(z0("dns")),gZ6=Nx$();nK.VERSION=gZ6.version;var hZ6="nats.js";class Ux${socket;version;lang;yields=[];signal=(0,n6.deferred)();closedNotification=(0,n6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=hZ6,this.version=nK.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,n6.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 n6.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 n6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new n6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,n6.deferred)(),X,Q=(0,bZ6.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,n6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=n6.DataBuffer.concat(...this.yields),Y=(0,n6.extractProtocolMessage)(Q);if(Y!=="")try{let G=n6.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,n6.deferred)();try{if($=(0,xZ6.resolve)($),!(0,Fx$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Fx$.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,n6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new n6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,n6.deferred)();try{let Y=(0,R61.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 n6.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,n6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new n6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,n6.deferred)();try{let Q=(0,R61.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 n6.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,n6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,n6.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 R61.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,n6.render)($)}`);let Z=(0,n6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,n6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,n6.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}}nK.NodeTransport=Ux$;function uZ6($){let Z=(0,n6.deferred)();return yZ6.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 Ex$=C((Lx$)=>{Object.defineProperty(Lx$,"__esModule",{value:!0});Lx$.connect=cZ6;var Ox$=wx$(),Bx$=Or(),Dx$=Or();function cZ6($={}){if((0,Dx$.hasWsProtocol)($))return Promise.reject(Dx$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Bx$.setTransportFactory)({factory:()=>{return new Ox$.NodeTransport},dnsResolveFn:Ox$.nodeResolveHost}),Bx$.NatsConnectionImpl.connect($)}});var jx$=C((NF)=>{var dZ6=NF&&NF.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),mZ6=NF&&NF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))dZ6(Z,$,X)};Object.defineProperty(NF,"__esModule",{value:!0});NF.connect=void 0;var iZ6=Ex$();Object.defineProperty(NF,"connect",{enumerable:!0,get:function(){return iZ6.connect}});mZ6(Or(),NF)});function Tx$($){let Z=$?.connectFn??oZ6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:tZ6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=cZ(pZ6,nZ6,O-1,2,0.5);await C$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?zx$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Ax$.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 oZ6($){return Px$.connect($)}var zx$,Px$,Ax$,nZ6=100,pZ6=3000,tZ6=3000;var Rx$=B(()=>{$6();zx$=k(uh(),1),Px$=k(jx$(),1),Ax$=k(jB(),1)});function I61($,Z){return`${$}.${Z}`}class q61{cache;constructor($){this.cache=Sg({ttlMs:$?.ttlMs??rZ6,maxSize:$?.maxSize??aZ6})}async get($,Z){return this.cache.get(I61($,Z))??null}async set($,Z,X){this.cache.set(I61($,Z),X)}async invalidate($,Z){this.cache.delete(I61($,Z))}teardown(){this.cache.clear()}}var rZ6=600000,aZ6=5000;var Ix$=()=>{};function Tz0($,Z){return`${$}:${Z}`}function M61($){let Z=Sg({ttlMs:$?.ttlMs??sZ6,maxSize:$?.maxSize??eZ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(qx$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Tz0(K,H))},set(K,H,N){Z.set(Tz0(K,H),N)},invalidate(K,H){Z.delete(Tz0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(qx$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(Tz0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var qx$="studio.ai-provider-keys.invalidate",sZ6=30000,eZ6=5000;var Mx$=()=>{};class k61{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=kx$.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 kx$)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 kx$;var Sx$=B(()=>{kx$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Vx$=($)=>{let Z;return()=>Z??=$()},S61,V61;var Cx$=B(()=>{v6();S61=Vx$(()=>k$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),V61=Vx$(()=>k$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function J76(){return{name:kN,subjects:[`${aw0}.>`],storage:r3.StorageType.File,max_age:X76,max_bytes:Y76,max_msgs_per_subject:G76,discard:r3.DiscardPolicy.Old,retention:r3.RetentionPolicy.Limits,duplicate_window:Q76,num_replicas:1}}class fx${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 _x$($){let Z=vx$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function N76($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,Z76().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 F76($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class C61{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=J76(),X=await lZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await r3.jetstreamManager($);try{await Q.streams.info(kN),await Q.streams.update(kN,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(kN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:F76});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=N76(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=EW$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=on0(H,{runId:Z}),U=performance.now()-N;if(S61().record(U),V61().add(1,{"org.id":Q??"unknown"}),H76?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)G.publish(Y,w.subject,w.data,w.headers?_x$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),K76)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=on0(Z,{runId:$,dedup:X});if(S61().record(performance.now()-Y),V61().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:_x$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=LW$({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"?r3.DeliverPolicy.New:r3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=FO($),W;try{W=await(await Q.consumers.get(kN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=XO0({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(sw0()).pipeThrough(ew0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(kN,{filter:FO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var r3,vx$,$76=($)=>{let Z;return()=>Z??=$()},Z76,X76=86400000000000,Q76=120000000000,Y76=4294967296,G76=500000,W76,K76,H76;var bx$=B(()=>{$6();rn0();QO0();$O0();v6();Cx$();r3=k(jB(),1),vx$=k(uh(),1),Z76=$76(()=>k$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));W76=process.env.STREAM_ENCODE_TRACE==="1",K76=process.env.DECOPILOT_STREAM_TRACE==="1";H76=W76?new fx$:null});function Rz0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,jW(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 xx$=B(()=>{L8()});class _61{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function E76($){return $ instanceof zQ}function j76($,Z){return Z-$>=D76}class v61{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??U76;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??O76,X=this.options.itemIntervalMs??w76,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-wJ$),Mp0);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()-L76));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 En0(this.taskBoard,Y,Q),await jn0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==L4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await SN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),E76(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()+B76)).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(()=>{}),z4(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(!j76(RL(X),Date.now()))return;await JO($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==L4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z),Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;if(Q.length===0)return await this.handOffReviewWithoutPr(Y,X),!1;if(await RK$(Y,X))return!0;let G=await Promise.all(Q.map(async(J)=>({...J,...await Rp0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!Tp0(G))return!1;return await KO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var U76=60000,w76=300000,O76=50,B76=60000,D76=900000,L76=120000;var yx$=B(()=>{kZ();jp0();UO();gn();v9();N3();kp0();cV()});import{readdir as z76,rm as Iz0}from"fs/promises";import{join as qz0}from"path";async function Mz0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-P76),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await W_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await gx$($,Y,Z);else if(!Y.startsWith(".")){let G=qz0($,Y),J=await W_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await gx$(G,K,Z)}if((await W_(G)).length===0)await Iz0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function gx$($,Z,X){let Q=0,Y=qz0($,Z),G=await W_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=qz0(Y,W),H=await W_(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=qz0(K,F);await Iz0(w,{recursive:!0,force:!0}),Q++}}if((await W_(K)).length===0)await Iz0(K,{recursive:!0,force:!0})}if((await W_(Y)).length===0)await Iz0(Y,{recursive:!0,force:!0});return Q}async function W_($){try{return(await z76($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var P76=30;var f61=()=>{};import{DBOS as b61,SchedulerMode as A76}from"@dbos-inc/dbos-sdk";async function R76(){let $=[BJ(),K_(),tK()],Z=0;for(let X of $)try{Z+=await Mz0(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 I76($,Z){await b61.runStep(()=>R76(),{name:"monitoringRetention"})}function ux$(){if(hx$)return;hx$=!0;let $=b61.registerWorkflow(I76,{name:"monitoringRetentionWorkflow"});b61.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:T76,mode:A76.ExactlyOncePerIntervalWhenActive})}var T76="23 4 * * *",hx$=!1;var cx$=B(()=>{eQ();f61()});function lx$($){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 KJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await h$1($.db,Z,Q.role);return Y.boundAuth=g$1({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new aD(X,void 0,Y.boundAuth,Q.role,"self"),rO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var dx$=B(()=>{sD();lC()});function q76(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function k76(){for(let $ of M76)$()}function mx$($){let Z=[...x61.logs,$];x61={...x61,logs:Z.length>500?Z.slice(-500):Z},k76()}function y61(){return S76}var x61,M76,S76=!1;var g61=B(()=>{x61=q76(),M76=new Set});import{EventEmitter as V76}from"events";var h61;var ix$=B(()=>{g61();h61=new V76;h61.on("request",($)=>{mx$($)})});function nx$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=Bh(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Bh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Z5.tool}${w}${Z5.dim}(${L})${Z5.reset}`}else if(U.method)G=`${Z5.dim}${Bh(U.method)}${Z5.reset}`}}catch{}}let W=Bh(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${Z5.mcp}${Bh(N.slice(0,12))}\u2026${Z5.reset}`}else if(Y==="/mcp")W=`${Z5.mcp}/mcp${Z5.reset}`;else if(Y==="/mcp/registry")W=`${Z5.mcp}/mcp/registry${Z5.reset}`;let K=_76(Q),H=J?"\u25C0":"\u2190";if(!y61())console.log(`${Z5.dim}${H}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=C76(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!y61())console.log(`${Z5.dim}${O}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""} ${U}${F}${Z5.reset} ${Z5.duration}${w}${Z5.reset}`);h61.emit("request",{method:Q,path:Bh(Y),status:F,duration:N,timestamp:new Date})}}}var Z5,C76=($)=>{if($>=500)return Z5.serverError;if($>=400)return Z5.clientError;if($>=300)return Z5.redirect;return Z5.ok},_76=($)=>{return Z5[$]||Z5.reset},Bh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var px$=B(()=>{g61();ix$();Z5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as ax$}from"crypto";import{mkdir as v76,readdir as f76,rm as tx$,stat as sx$}from"fs/promises";import{join as c61,relative as b76}from"path";import{z as E$}from"zod";function $y$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return c61(x76,Z)}function Zy$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function u61($,Z){let X=$y$($),Q=Zy$(Z);return c61(X,Q)}function y76($,Z,X,Q){let Y=y0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ax$("sha256",Y).update(G).digest("hex")}function rx$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=y76(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Zy$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Xy$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ax$("md5","etag").update(Q).digest("hex")}"`}async function Qy$($,Z,X,Q,Y){try{let G=await f76($,{withFileTypes:!0});for(let J of G){let W=c61($,J.name),H=b76(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await Qy$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await sx$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:Xy$(W,N.mtime,N.size)})}catch{}}}}catch{}}function Yy$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=$y$(Q);await v76(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await Qy$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=u61(Q,G.key),W=await sx$(J);return{contentType:A81(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Xy$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ox$;return{url:rx$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ox$;return{url:rx$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(Y)=>{let G=Y,J=u61(Q,G.key);try{return await tx$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=u61(Q,K);try{await tx$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function l61($,Z,X){let Q=Yy$(Z,X),Y=new qW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new iX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),tG(Y,G,$,"mcp:dev-assets")}async function Gy$($,Z,X,Q){let G=Yy$(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 x76="./data/assets",ox$=3600,ex$,Jy$;var Wy$=B(()=>{M$();Jy();C8();Fl();iV();MX();zj0();ex$=new U1;ex$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return l61($.req.raw,Z,Q)});Jy$=ex$});var Ky$={};N4(Ky$,{mountDevRoutes:()=>g76});function g76($,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 l61(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Gy$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Jy$);let X=new U1;X.use("*",t3({mountPath:"/api/dev-assets"})),X.route("/",jj0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Hy$=B(()=>{C8();O81();zj0();Wy$()});import{sql as h76}from"kysely";import{randomUUID as Ny$}from"crypto";import{z as u76}from"zod";async function l76($){let Z=new Date().toISOString(),X=Ny$(),Q=u4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Ny$(),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 h76`SELECT
2740
2740
  pg_notify('studio_events', ${X}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.209.1",
3
+ "version": "4.210.0",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as L,b as R,j as r}from"./index-0hC7KtqT.js";import{I as A}from"./input-BwM4uhvc.js";import{L as I}from"./label-7kV9b7Jd.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-BPSch7R1.js";import{T as D}from"./textarea-eajUrvO0.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-BGZjTpi3.js";import{s as F}from"./primitives-CbmaaD8R.js";import{u as Q}from"./use-autosave-CKgsjtnt.js";import"./tooltip-C03UCat0.js";import"./Check-5r4tZ1iA.js";import"./ChevronDown-CemfdLJB.js";import"./ChevronUp-8Gejwg6B.js";import"./ArrowUp-Dj_Pvjci.js";import"./chat-context-CZphb3AC.js";import"./tab-id-VHiKnGtg.js";import"./dialog-B-HpG_qY.js";import"./X-D9GLxr7r.js";import"./Copy01-BxjObEXd.js";import"./hooks-Bh9CM0B6.js";import"./use-mcp-client-BJIRwGHp.js";import"./auth-DF-Rn0Uj.js";import"./decopilot-sse-pool-CuNDiJki.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-Be5DA7DS.js";import"./use-ai-providers-CB0Gjm7F.js";import"./studio-tools-CRf5-GLc.js";import"./use-decopilot-events-X-98HS0y.js";import"./use-organization-settings-0ryKN5Aw.js";import"./automation-runs-tMXzfGBV.js";import"./agent-icon-Dt4RLhiz.js";import"./AlertCircle-Bve1VHF3.js";import"./Tool01-BVS5lVZU.js";import"./ArrowLeft-CTBWrSAK.js";import"./Tool02-W7gMFHiD.js";import"./XCircle-C5EAMN1j.js";import"./ArrowUpRight-6xVAGAtf.js";import"./TrendUp01-DPRFbIhH.js";import"./ZapSquare-rruvbe40.js";import"./Users03-dwHan_RE.js";import"./CheckCircle-PMcsMc13.js";import"./ChevronRight-BuIHUtod.js";import"./DotsVertical-C1irX0kS.js";import"./Stars02-DDGgwLI2.js";import"./CpuChip01-Dds_89Y2.js";import"./CreditCard01-jEuKGL8e.js";import"./Globe01-DEW9IpDs.js";import"./Settings02-ClKTmlNz.js";import"./Eye-DkMN6_Dr.js";import"./FilterLines-DFk9tqX3.js";import"./Share07-BQ15JrsS.js";import"./Star01-CR8R7VPt.js";import"./Globe04-B_7Wtn_7.js";import"./SwitchHorizontal01-ZDPCSs5d.js";import"./HardDrive-B7-tgB92.js";import"./Key01-CkwHx8FG.js";import"./LayoutLeft-DmepMWFg.js";import"./LinkExternal01-7jwfOffj.js";import"./LogOut01-_2dUK5Z7.js";import"./Monitor01-CVuG7LyS.js";import"./Sun-DeIKoXJY.js";import"./Palette-BSyeUV9h.js";import"./Play-DoE42omQ.js";import"./Plus-D-3sbuxQ.js";import"./SearchLg-D5lqdUtu.js";import"./SearchMd-DR8aVpqb.js";import"./Shield01-BIwe3Ox6.js";import"./Stars01-CCTjmIwq.js";import"./Trash01-WUOJQ8AK.js";import"./Upload01-DSarsF3W.js";import"./User01-CoAuu_LG.js";import"./Users01-BkH7IJR9.js";import"./XClose-1UHP58oF.js";import"./Zap-D-hAsw6j.js";import"./useInfiniteQuery-CtdimV--.js";import"./use-infinite-scroll-9JJT7FeH.js";import"./use-connection-idlpI3vy.js";import"./card-Dxsnx5Rv.js";import"./sidebar-B_2anr9g.js";import"./use-mobile-DFe0DdfZ.js";import"./table-us81SrKH.js";import"./empty-state-5giLSZOs.js";import"./use-members-BAHW0Hwn.js";import"./use-org-auth-client-AdqeHCoF.js";import"./use-clock-tick-C34WR5-P.js";import"./use-automations-BQLjaHaa.js";import"./useSuspenseInfiniteQuery-BOh4Goej.js";import"./avatar-D9YhQR8d.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-D7_F49Jh.js";import"./monaco-editor-Dp2m6w26.js";import"./spinner-6_It3Nhq.js";import"./index-BsEKR4jW.js";import"./shell-layout-xL29Wqge.js";import"./required-auth-layout-FdDUveN7.js";import"./use-org-sso-BqM0BWse.js";import"./integration-icon-BnXUWZnl.js";import"./use-navigate-to-agent-DqmkEA3y.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-DjUZfL0a.js";import"./form-lnMy-WhJ.js";import"./file-type-icon-C8M0nyo-.js";import"./drawer-CXPqomVz.js";import"./collection-search-Cru_-4fG.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-LGasTAvM.js";import"./toggle-group-rVyo8YGd.js";import"./use-deco-credits-BROUH-eZ.js";import"./popover-Cya9X-B2.js";import"./alert-dialog-FH3EWHhZ.js";import"./toolbar-Dgu74m0M.js";import"./skeleton-CvF-7sQD.js";import"./github-repo-picker-CZvD7_FK.js";import"./use-debounced-value-D-HLE4Zl.js";import"./authenticate-and-persist-oauth-VGef6dUm.js";import"./mcp-oauth-YgND_siS.js";import"./use-mcp-tools-C0Qe2OZU.js";import"./extract-connection-data-BSuftKEA.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-H1NcRleq.js";import"./use-registry-connections-DdSfb8aP.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-CBwp3bfa.js";import"./collection-tabs-kNyCosg6.js";import"./badge-BsjEOu6e.js";import"./use-open-billing-url-DOxXKiY9.js";import"./select-model-Xei2uq5d.js";import"./checkbox-C2lzNvSD.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-CU1YZrgK.js";import"./cards-BwRU9_-x.js";import"./dropdown-menu-Dr4FVaPK.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-0TvNeNfQ.js";import"./use-capability-DMVXiJAm.js";import"./pt-BR-CLy76QW2.js";import"./switch-cGKzU5qq.js";import"./use-debounced-autosave-BVe6fNnH.js";import"./index-Iek0weap.js";import"./search-input-CWjeycc4.js";import"./index-DMoEf_jx.js";import"./use-secrets-C8D0MCoc.js";import"./self-tool-result-Cs0nglo5.js";import"./use-tags-okl_CaUf.js";import"./get-initials-D-f_fDFw.js";import"./command-DVyMqZn1.js";import"./index-DyAesZWW.js";import"./use-file-configs-Dm2RXiGt.js";import"./automation-list-row--DVarV4K.js";const X={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function Wr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=R(),P=M(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=U(b);let k;t[5]!==f||t[6]!==a?(k=W(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=X[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(z,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(J,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx($,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{Wr as RecordEditor};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-ChZxFBGh.js","assets/index-0hC7KtqT.js","assets/index-_zaWhzWP.css","assets/Tool02-W7gMFHiD.js","assets/CheckCircle-PMcsMc13.js","assets/Settings02-ClKTmlNz.js","assets/use-mcp-client-BJIRwGHp.js","assets/auth-DF-Rn0Uj.js","assets/useInfiniteQuery-CtdimV--.js","assets/use-infinite-scroll-9JJT7FeH.js","assets/studio-tools-CRf5-GLc.js","assets/badge-BsjEOu6e.js","assets/input-BwM4uhvc.js","assets/dropdown-menu-Dr4FVaPK.js","assets/Check-5r4tZ1iA.js","assets/ChevronRight-BuIHUtod.js","assets/DotsVertical-C1irX0kS.js","assets/table-us81SrKH.js","assets/toggle-group-rVyo8YGd.js","assets/use-view-mode-CR3mlKA7.js","assets/use-mobile-DFe0DdfZ.js","assets/FilterLines-DFk9tqX3.js","assets/Globe01-DEW9IpDs.js","assets/SearchMd-DR8aVpqb.js","assets/dialog-B-HpG_qY.js","assets/X-D9GLxr7r.js","assets/AlertCircle-Bve1VHF3.js","assets/Upload01-DSarsF3W.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-FH3EWHhZ.js","assets/card-Dxsnx5Rv.js","assets/Trash01-WUOJQ8AK.js","assets/label-7kV9b7Jd.js","assets/select-BPSch7R1.js","assets/tooltip-C03UCat0.js","assets/ChevronDown-CemfdLJB.js","assets/ChevronUp-8Gejwg6B.js","assets/switch-cGKzU5qq.js","assets/textarea-eajUrvO0.js","assets/ArrowLeft-CTBWrSAK.js","assets/XCircle-C5EAMN1j.js","assets/checkbox-C2lzNvSD.js","assets/Eye-DkMN6_Dr.js","assets/LinkExternal01-7jwfOffj.js","assets/use-copy-D7_F49Jh.js","assets/Copy01-BxjObEXd.js","assets/Key01-CkwHx8FG.js","assets/Plus-D-3sbuxQ.js","assets/mcp-oauth-YgND_siS.js","assets/Play-DoE42omQ.js"])))=>i.map(i=>d[i]);
2
- import{c as i,j as e,r as s,k as a,aG as o}from"./index-0hC7KtqT.js";import{R as m}from"./require-capability-DoFr2HWI.js";import"./use-capability-DMVXiJAm.js";import"./access-gate-DKzQm-dU.js";import"./capability-load-error-AsRQkKb_.js";const n=s.lazy(()=>o(()=>import("./registry-layout-ChZxFBGh.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-ChZxFBGh.js","assets/index-0hC7KtqT.js","assets/index-_zaWhzWP.css","assets/Tool02-W7gMFHiD.js","assets/CheckCircle-PMcsMc13.js","assets/Settings02-ClKTmlNz.js","assets/use-mcp-client-BJIRwGHp.js","assets/auth-DF-Rn0Uj.js","assets/useInfiniteQuery-CtdimV--.js","assets/use-infinite-scroll-9JJT7FeH.js","assets/studio-tools-CRf5-GLc.js","assets/badge-BsjEOu6e.js","assets/input-BwM4uhvc.js","assets/dropdown-menu-Dr4FVaPK.js","assets/Check-5r4tZ1iA.js","assets/ChevronRight-BuIHUtod.js","assets/DotsVertical-C1irX0kS.js","assets/table-us81SrKH.js","assets/toggle-group-rVyo8YGd.js","assets/use-view-mode-CR3mlKA7.js","assets/use-mobile-DFe0DdfZ.js","assets/FilterLines-DFk9tqX3.js","assets/Globe01-DEW9IpDs.js","assets/SearchMd-DR8aVpqb.js","assets/dialog-B-HpG_qY.js","assets/X-D9GLxr7r.js","assets/AlertCircle-Bve1VHF3.js","assets/Upload01-DSarsF3W.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-FH3EWHhZ.js","assets/card-Dxsnx5Rv.js","assets/Trash01-WUOJQ8AK.js","assets/label-7kV9b7Jd.js","assets/select-BPSch7R1.js","assets/tooltip-C03UCat0.js","assets/ChevronDown-CemfdLJB.js","assets/ChevronUp-8Gejwg6B.js","assets/switch-cGKzU5qq.js","assets/textarea-eajUrvO0.js","assets/ArrowLeft-CTBWrSAK.js","assets/XCircle-C5EAMN1j.js","assets/checkbox-C2lzNvSD.js","assets/Eye-DkMN6_Dr.js","assets/LinkExternal01-7jwfOffj.js","assets/use-copy-D7_F49Jh.js","assets/Copy01-BxjObEXd.js","assets/Key01-CkwHx8FG.js","assets/Plus-D-3sbuxQ.js","assets/mcp-oauth-YgND_siS.js","assets/Play-DoE42omQ.js"])))=>i.map(i=>d[i]);
2
- import{c as m,d as n,f as c,j as t,k as f,r as l,aG as p}from"./index-0hC7KtqT.js";import{R as u}from"./require-capability-DoFr2HWI.js";import"./use-capability-DMVXiJAm.js";import"./access-gate-DKzQm-dU.js";import"./capability-load-error-AsRQkKb_.js";const g=l.lazy(()=>p(()=>import("./registry-layout-ChZxFBGh.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{j as default};
@@ -1 +0,0 @@
1
- import{I as u}from"./use-infinite-scroll-9JJT7FeH.js";import{e5 as i}from"./index-0hC7KtqT.js";function t(e,r){return i(e,u,r)}export{t as u};
@@ -1 +0,0 @@
1
- import{I as s}from"./use-infinite-scroll-9JJT7FeH.js";import{e5 as u,b2 as n}from"./index-0hC7KtqT.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};