decocms 4.417.2 → 4.417.3

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 (348) hide show
  1. package/dist/client/assets/{AlertCircle-D9i2E7F3.js → AlertCircle-C6kb3PnG.js} +1 -1
  2. package/dist/client/assets/{AreaChart-BMj2qUCa.js → AreaChart-BHnBIifn.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-u4YtETq6.js → ArrowLeft-_GpBYznC.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-C4cldeMa.js → ArrowRight-B51Zx_j0.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-B7hrL_y6.js → ArrowUp-BIQ-rRGX.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-Ddk7a6Sg.js → CartesianChart-DbJHzBKz.js} +1 -1
  7. package/dist/client/assets/{Check-DqhJRaRV.js → Check-Cgb-Hjl2.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-D8vl4TSp.js → CheckCircle-DviPm8O4.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-DluVhiDY.js → ChevronUp-B4HEO2rP.js} +1 -1
  10. package/dist/client/assets/{Copy01-B9W9lwCV.js → Copy01-B5Y5kk-s.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-9sMQt6FN.js → CreditCard01-DViRddZ5.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-Dem42mI9.js → DotsVertical-BJwY_C-N.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext-B9bEH1bq.js → ErrorBarContext-tITXhZxL.js} +1 -1
  14. package/dist/client/assets/{Image01-BWtqkynf.js → Image01-BgcQjrXK.js} +1 -1
  15. package/dist/client/assets/{Key01-DZ2hPAde.js → Key01-DWsHszPz.js} +1 -1
  16. package/dist/client/assets/{Line-DyNxtrof.js → Line-C2bnA_A1.js} +1 -1
  17. package/dist/client/assets/{Link01-p2T3eBYS.js → Link01-fSGAOWbd.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-IH_7eB5z.js → LinkExternal01-DY5icHK7.js} +1 -1
  19. package/dist/client/assets/{Monitor01-CMoavpTH.js → Monitor01-D6LR8wcZ.js} +1 -1
  20. package/dist/client/assets/{Palette-BOu3DUls.js → Palette-CnLFx93_.js} +1 -1
  21. package/dist/client/assets/{Plus-C8_7wQVY.js → Plus-BI2Eno4p.js} +1 -1
  22. package/dist/client/assets/{SearchMd-DAeSqGzA.js → SearchMd-DHraXnG7.js} +1 -1
  23. package/dist/client/assets/{Sector-CPZGxSVz.js → Sector-W_LZaN-J.js} +1 -1
  24. package/dist/client/assets/{ShoppingBag01-CotBP4xM.js → ShoppingBag01-BxA1hCTx.js} +1 -1
  25. package/dist/client/assets/{Sun-z_ISlCfq.js → Sun-ImOkTeqz.js} +1 -1
  26. package/dist/client/assets/{Tool01-DqqLglaA.js → Tool01-k68oh7Sf.js} +1 -1
  27. package/dist/client/assets/{Trash01-HIeO4K0u.js → Trash01-DBdpvRZG.js} +1 -1
  28. package/dist/client/assets/{Upload01-D8px3BRb.js → Upload01-CXBD3Psx.js} +1 -1
  29. package/dist/client/assets/{User01-DPMM5VZN.js → User01-C9nVO_Ly.js} +1 -1
  30. package/dist/client/assets/{UserSquare-Di4b5Jsn.js → UserSquare-BBASyaNm.js} +1 -1
  31. package/dist/client/assets/{Users01-DHetvQx6.js → Users01-7tXt52aR.js} +1 -1
  32. package/dist/client/assets/{X-Sz3H1SE9.js → X-DLnDAgU8.js} +1 -1
  33. package/dist/client/assets/{XAxis-BK59NvEV.js → XAxis-Djxt7z44.js} +1 -1
  34. package/dist/client/assets/{XClose-DCiqvNA0.js → XClose-D5fjZNb-.js} +1 -1
  35. package/dist/client/assets/{ZoomOut-Cb1MSdsR.js → ZoomOut-CWmFmVt-.js} +1 -1
  36. package/dist/client/assets/{access-gate-BaQyXFkA.js → access-gate-Cai0WlJm.js} +1 -1
  37. package/dist/client/assets/{add-connection-dialog-BQ-RcQt0.js → add-connection-dialog-BYIFI29s.js} +1 -1
  38. package/dist/client/assets/{agent-analytics-DTyzg7we.js → agent-analytics-Cc8Bwqxd.js} +1 -1
  39. package/dist/client/assets/agent-app-BmY7wGhT.js +1 -0
  40. package/dist/client/assets/{agent-assets-PjrN6Ztr.js → agent-assets-xEr0ndLA.js} +1 -1
  41. package/dist/client/assets/{agent-automation-DyHjSt2B.js → agent-automation-CkJ0LCmZ.js} +1 -1
  42. package/dist/client/assets/{agent-automations-DLUAvmEb.js → agent-automations--txREuUI.js} +1 -1
  43. package/dist/client/assets/{agent-connect-sources-BUYi51Ts.js → agent-connect-sources-Bsrd7cmk.js} +1 -1
  44. package/dist/client/assets/agent-deck-d7-mKic1.js +1 -0
  45. package/dist/client/assets/{agent-e2e-0UYiHquf.js → agent-e2e-vpPQF9Ly.js} +1 -1
  46. package/dist/client/assets/{agent-experiments-B02lAIE9.js → agent-experiments-oh-PAWkU.js} +1 -1
  47. package/dist/client/assets/{agent-file-BZsgSV9q.js → agent-file-CJmP6b0d.js} +1 -1
  48. package/dist/client/assets/{agent-git-sWjMQ5vG.js → agent-git-WEC2qR3B.js} +1 -1
  49. package/dist/client/assets/{agent-hosting-BQWSs8Uh.js → agent-hosting-DRZiyh_V.js} +1 -1
  50. package/dist/client/assets/{agent-icon-D7av-7g5.js → agent-icon-C8g3zKBQ.js} +1 -1
  51. package/dist/client/assets/agent-library-SOTYwsZJ.js +1 -0
  52. package/dist/client/assets/agent-library-file-BVZgxynx.js +1 -0
  53. package/dist/client/assets/{agent-monitor-BLaKHBlf.js → agent-monitor-n3Oo2M5w.js} +1 -1
  54. package/dist/client/assets/{agent-overview-ClQZznKn.js → agent-overview-C2ERn-9i.js} +1 -1
  55. package/dist/client/assets/agent-settings-D7j-0E6Q.js +1 -0
  56. package/dist/client/assets/{agent-site-editor-VXHiUt_U.js → agent-site-editor-Cs-bkD42.js} +1 -1
  57. package/dist/client/assets/agent-site-editor-code-BJYdWI1T.js +2 -0
  58. package/dist/client/assets/{agent-site-editor-content-BBxDwQTH.js → agent-site-editor-content-DCd3sMJa.js} +3 -3
  59. package/dist/client/assets/{agent-site-editor-preview-Crvr593a.js → agent-site-editor-preview-BFks86ve.js} +3 -3
  60. package/dist/client/assets/agent-view-Dl0j0WXF.js +1 -0
  61. package/dist/client/assets/{agent-view-guard-D8TCMMMQ.js → agent-view-guard-BfzJsw13.js} +1 -1
  62. package/dist/client/assets/{agents-list-rMXE3Q2P.js → agents-list-CPxDspth.js} +1 -1
  63. package/dist/client/assets/{ai-providers-B7LxKOjd.js → ai-providers-5ZqOVMF4.js} +1 -1
  64. package/dist/client/assets/{alert-Dz9yDJ1U.js → alert-DhuaqRrP.js} +1 -1
  65. package/dist/client/assets/{alert-dialog-jP-5jm3B.js → alert-dialog-DY_KKEXC.js} +1 -1
  66. package/dist/client/assets/{analytics-sections-DEXqPCPM.js → analytics-sections-DEnG0p75.js} +1 -1
  67. package/dist/client/assets/api-keys-BDcC2nwq.js +1 -0
  68. package/dist/client/assets/{api-keys-BmAQFNN3.js → api-keys-DM5R6CCw.js} +1 -1
  69. package/dist/client/assets/app-editor-BzXbb8GB.js +1 -0
  70. package/dist/client/assets/{asset-utils-OG8_DRbi.js → asset-utils-DqjXVPp_.js} +1 -1
  71. package/dist/client/assets/{auth-sg-w8oEV.js → auth-CVW5w5LQ.js} +1 -1
  72. package/dist/client/assets/{auth-catchall-BZUatXpB.js → auth-catchall-DhzooqOT.js} +1 -1
  73. package/dist/client/assets/{auth-entry-oZIfzUzD.js → auth-entry-bsClmoLT.js} +1 -1
  74. package/dist/client/assets/{auth-split-layout-NT0znxKf.js → auth-split-layout-uE5P1msG.js} +1 -1
  75. package/dist/client/assets/{authenticate-and-persist-oauth-BSxl3jgh.js → authenticate-and-persist-oauth-GFu19xjw.js} +1 -1
  76. package/dist/client/assets/{automation-list-row-D2ajEGs1.js → automation-list-row-ylvd-ZDb.js} +1 -1
  77. package/dist/client/assets/{automation-runs-CQbKq2yj.js → automation-runs-B1XuatKM.js} +1 -1
  78. package/dist/client/assets/{automations-DbRLsvYR.js → automations-t3O3IoG9.js} +1 -1
  79. package/dist/client/assets/{autosend-D06niWhv.js → autosend-DGq5B6jX.js} +1 -1
  80. package/dist/client/assets/{avatar-BSQm92_6.js → avatar-Y-jzLD32.js} +1 -1
  81. package/dist/client/assets/{badge-UT8CIPlI.js → badge-D1YARjep.js} +1 -1
  82. package/dist/client/assets/{block-document-Hjh6XA10.js → block-document-I9edazzt.js} +1 -1
  83. package/dist/client/assets/{blocks-preview-workspace-context-BjaFN4Px.js → blocks-preview-workspace-context-DtZ_Ikj6.js} +1 -1
  84. package/dist/client/assets/{buckets-BmznLg9I.js → buckets-BFA001QA.js} +1 -1
  85. package/dist/client/assets/{build-improve-prompt-doc-eFUmBuqz.js → build-improve-prompt-doc-DaMg16i_.js} +1 -1
  86. package/dist/client/assets/{calendar-C4e0bPx1.js → calendar-C-58rvsc.js} +1 -1
  87. package/dist/client/assets/{capability-load-error-2wQFIn_O.js → capability-load-error-B2kNvpUS.js} +1 -1
  88. package/dist/client/assets/{category-editor-Cx2zaVgE.js → category-editor-DvMelccN.js} +1 -1
  89. package/dist/client/assets/{chart-W13k7qQO.js → chart-CU0jtdpG.js} +1 -1
  90. package/dist/client/assets/{chat-context-W4FU8MtG.js → chat-context-CuXaEk0M.js} +1 -1
  91. package/dist/client/assets/{chat-draft-C1Z2usHD.js → chat-draft-dwXFQhJL.js} +1 -1
  92. package/dist/client/assets/{checkbox-DS24sqZF.js → checkbox-Bf-G4Jim.js} +1 -1
  93. package/dist/client/assets/{choose-editor-BzlpNLJL.js → choose-editor-CU-hPani.js} +1 -1
  94. package/dist/client/assets/{claim-phase-copy-CWTqDckW.js → claim-phase-copy-CtRdAOVC.js} +1 -1
  95. package/dist/client/assets/{cli-auth-success-D1vqEnS8.js → cli-auth-success-zfoBCG1k.js} +1 -1
  96. package/dist/client/assets/{client-icons-T-kCXcoJ.js → client-icons-CMi-7yYE.js} +1 -1
  97. package/dist/client/assets/{collapsible-DYHztcmQ.js → collapsible-CxCe4nNJ.js} +1 -1
  98. package/dist/client/assets/{collection-detail-Cc4M587F.js → collection-detail-BNX31HDE.js} +1 -1
  99. package/dist/client/assets/{collection-display-button-DsLsxLrY.js → collection-display-button-CLHgQ_2h.js} +1 -1
  100. package/dist/client/assets/{collection-search-BKPlHOv5.js → collection-search-BQT6skD6.js} +1 -1
  101. package/dist/client/assets/{collection-table-wrapper-Bb4Km21W.js → collection-table-wrapper-B1NijXUZ.js} +1 -1
  102. package/dist/client/assets/{collection-tabs-6aixyobS.js → collection-tabs-B9TnJG26.js} +1 -1
  103. package/dist/client/assets/{combobox-D0IZx9PH.js → combobox-BiQKfqhG.js} +1 -1
  104. package/dist/client/assets/{command-B1IBdA6E.js → command-C9uMRXIf.js} +1 -1
  105. package/dist/client/assets/{companion-mcps-section--tMCfhuT.js → companion-mcps-section-BogT0kJ_.js} +1 -1
  106. package/dist/client/assets/{config-SZnQcuyZ.js → config-BFI3X8Ej.js} +1 -1
  107. package/dist/client/assets/{connect-dMEYAUgD.js → connect-beXlfAOc.js} +1 -1
  108. package/dist/client/assets/{connect-layout-BbE8aanc.js → connect-layout-BgOKpP7m.js} +1 -1
  109. package/dist/client/assets/{connection-DJ3l8W0U.js → connection-BnGVBt0N.js} +1 -1
  110. package/dist/client/assets/{connection-card-B7FNddNF.js → connection-card-HHZW7JQk.js} +1 -1
  111. package/dist/client/assets/{connection-detail-CGg2ted5.js → connection-detail-DcIQ6why.js} +1 -1
  112. package/dist/client/assets/{connection-form-helpers-5EJj7jiQ.js → connection-form-helpers-CVCKhCsz.js} +1 -1
  113. package/dist/client/assets/{connections-CWl7LfNE.js → connections-Ckzin9LA.js} +1 -1
  114. package/dist/client/assets/{context-BfhoJ9bd.js → context-Cdi8z8j8.js} +1 -1
  115. package/dist/client/assets/{create-organization-dialog-BZt6WazE.js → create-organization-dialog-BduM4Sfy.js} +1 -1
  116. package/dist/client/assets/{decopilot-HlYS-QdU.js → decopilot-CYjciR4e.js} +1 -1
  117. package/dist/client/assets/{dialog-BAdncaXR.js → dialog-ClkyZcCy.js} +1 -1
  118. package/dist/client/assets/{discover-ktg_80Ck.js → discover-DN_jRJHS.js} +1 -1
  119. package/dist/client/assets/{domain-settings-CsIgAKy_.js → domain-settings-CKpWVFyS.js} +1 -1
  120. package/dist/client/assets/{download-app-dialog-DGdj2CNQ.js → download-app-dialog-dFfEYpuq.js} +1 -1
  121. package/dist/client/assets/{drawer-zM2wJmT-.js → drawer-D7785Wmz.js} +1 -1
  122. package/dist/client/assets/{editor-G2b4JEg0.js → editor-DlTEIFU_.js} +1 -1
  123. package/dist/client/assets/{empty-state-Bgakk4zf.js → empty-state-CJnildGg.js} +1 -1
  124. package/dist/client/assets/{empty-state-BNUJszzA.js → empty-state-CO9jrWzt.js} +1 -1
  125. package/dist/client/assets/{extract-connection-data-PBAB1zbf.js → extract-connection-data-5q5E9C-u.js} +1 -1
  126. package/dist/client/assets/{feature-gate-BfcMsYyO.js → feature-gate-C_lDnI67.js} +1 -1
  127. package/dist/client/assets/{feature-paywall-BIe070wa.js → feature-paywall-2bFFlcWT.js} +1 -1
  128. package/dist/client/assets/{file-explorer-C1_yY2ss.js → file-explorer-BPais5_B.js} +1 -1
  129. package/dist/client/assets/{file-preview-BVIQNwsF.js → file-preview-B7RD6DfP.js} +1 -1
  130. package/dist/client/assets/{file-share-button-B9WbHN-Z.js → file-share-button-DfyHODgu.js} +1 -1
  131. package/dist/client/assets/{file-type-icon-Bq6mw2Ps.js → file-type-icon-CuhbQmZU.js} +1 -1
  132. package/dist/client/assets/flat-project-bt_4ur9d.js +1 -0
  133. package/dist/client/assets/{folder-icon-B3im8_vL.js → folder-icon-D_0IHrzQ.js} +1 -1
  134. package/dist/client/assets/{form-CZCyqosr.js → form-DpfyaZvv.js} +1 -1
  135. package/dist/client/assets/{gateway-client-Ca84PQdv.js → gateway-client-CRMt3xF9.js} +1 -1
  136. package/dist/client/assets/{general-nljSUmbf.js → general-BDGwjoxS.js} +1 -1
  137. package/dist/client/assets/{home-DxVx9rU8.js → home-B9l2UWek.js} +1 -1
  138. package/dist/client/assets/{index-CBgMqgGr.js → index-B47mD8Dj.js} +1 -1
  139. package/dist/client/assets/{index-CyII4Hy-.js → index-B6NH4TOl.js} +2 -2
  140. package/dist/client/assets/{index-BNMHslbt.js → index-BsrXvAxE.js} +1 -1
  141. package/dist/client/assets/{index-Oi10_0kD.js → index-CCPIZs3U.js} +1 -1
  142. package/dist/client/assets/{index-DCedGlDL.js → index-CQd3EdiO.js} +3 -3
  143. package/dist/client/assets/{index-sxmoOQpx.js → index-CRduIjZ3.js} +1 -1
  144. package/dist/client/assets/{index-DevjUFnV.js → index-D5XRYyuH.js} +1 -1
  145. package/dist/client/assets/{index-le88JcEE.js → index-DBX1yVB3.js} +1 -1
  146. package/dist/client/assets/{index-jxGovGZE.js → index-DezSP0gF.js} +1 -1
  147. package/dist/client/assets/{index-B8CBDCZ3.js → index-Dfohfv9Z.js} +1 -1
  148. package/dist/client/assets/{index-DiWaLypw.js → index-DnRIQn65.js} +1 -1
  149. package/dist/client/assets/{index-D5telvBY.js → index-DupK6MFG.js} +1 -1
  150. package/dist/client/assets/{index-P5RrPnBn.js → index-QrFGytE0.js} +1 -1
  151. package/dist/client/assets/{index-CJtSyk8L.js → index-Y8BdgGIk.js} +1 -1
  152. package/dist/client/assets/{index-redirect-BuwZJMF3.js → index-redirect-DL0akAgS.js} +1 -1
  153. package/dist/client/assets/{index-BsSqoVQb.js → index-uCsQ7-sa.js} +1 -1
  154. package/dist/client/assets/{infiniteQueryObserver-Bho6cXmS.js → infiniteQueryObserver-C7aXhIH0.js} +1 -1
  155. package/dist/client/assets/{infra-billing-B-66d0gZ.js → infra-billing-13oeZ7x-.js} +1 -1
  156. package/dist/client/assets/{input-C4S7xqGw.js → input-CCVSxuav.js} +1 -1
  157. package/dist/client/assets/{input-BBwMBvzR.js → input-maXBlO9L.js} +1 -1
  158. package/dist/client/assets/{input-COz__3we.js → input-sJ8gmFU4.js} +1 -1
  159. package/dist/client/assets/{integration-icon-Dm2HH7L6.js → integration-icon-CKC3ONCI.js} +1 -1
  160. package/dist/client/assets/{label-BECnr8LH.js → label-Pr16htmM.js} +1 -1
  161. package/dist/client/assets/{last-preview-page-Bsty7_ZE.js → last-preview-page-BI2EgWzO.js} +1 -1
  162. package/dist/client/assets/{layout-y_WfIaY_.js → layout-DTbZemOM.js} +1 -1
  163. package/dist/client/assets/{legacy-agents-deep-Cw98tckT.js → legacy-agents-deep-CNC7Tnbi.js} +1 -1
  164. package/dist/client/assets/{legacy-main-redirect-BAof5X15.js → legacy-main-redirect-fky3keUt.js} +1 -1
  165. package/dist/client/assets/library-CrwuTcib.js +1 -0
  166. package/dist/client/assets/{library-tab-DfKpL79j.js → library-tab-Dd_Z79ga.js} +1 -1
  167. package/dist/client/assets/{login-DPRT1Su0.js → login-CQRLTeba.js} +1 -1
  168. package/dist/client/assets/{markdown-Due1h4mi.js → markdown-DKCxJ4U6.js} +1 -1
  169. package/dist/client/assets/{mcp-app-renderer-B3VIzrTv.js → mcp-app-renderer-DOApOtM9.js} +1 -1
  170. package/dist/client/assets/{mcp-oauth-DAVs1HXT.js → mcp-oauth-DRk8UTQE.js} +1 -1
  171. package/dist/client/assets/{members-D0YNl54m.js → members-BD7aogf8.js} +1 -1
  172. package/dist/client/assets/{message-templates-BIkD2e9c.js → message-templates-B00RTf46.js} +1 -1
  173. package/dist/client/assets/{mini-report-page-DQzi3qty.js → mini-report-page-9IUqd-JD.js} +1 -1
  174. package/dist/client/assets/{mock-board-BZ0Yancx.js → mock-board---XPof5V.js} +1 -1
  175. package/dist/client/assets/{monaco-editor-CqKDIDRs.js → monaco-editor-ConyEFg-.js} +1 -1
  176. package/dist/client/assets/{monitoring-stats-row-Cb3kPhnI.js → monitoring-stats-row-BwI0tOFR.js} +1 -1
  177. package/dist/client/assets/{multi-select-BNMDqhbK.js → multi-select-UjO6WYQn.js} +1 -1
  178. package/dist/client/assets/{mustache-DG5EH2Gv.js → mustache-BqdXZiUJ.js} +1 -1
  179. package/dist/client/assets/{new-project-dialog-BglGMy73.js → new-project-dialog-Y55HWlXE.js} +1 -1
  180. package/dist/client/assets/{oauth-callback-BlTZ6AJ1.js → oauth-callback-DF2PX7kH.js} +1 -1
  181. package/dist/client/assets/{oauth-callback-ai-provider-B1ag7pBO.js → oauth-callback-ai-provider-FgV36pEg.js} +1 -1
  182. package/dist/client/assets/{onboarding-Ca2ifhdE.js → onboarding-C47P75eU.js} +1 -1
  183. package/dist/client/assets/{optimistic-project-sidebar-views-C5sN6Rj3.js → optimistic-project-sidebar-views-TmBLwukA.js} +1 -1
  184. package/dist/client/assets/{org-file-open-context-CdICBbAH.js → org-file-open-context-DVRp7t9p.js} +1 -1
  185. package/dist/client/assets/{organization-choice-Bv6t1UwJ.js → organization-choice-Dpuw-51r.js} +1 -1
  186. package/dist/client/assets/{orgs-B6eY4gFh.js → orgs-BTc6bSoJ.js} +1 -1
  187. package/dist/client/assets/{page-seo-form-B38d40sz.js → page-seo-form-lgJY7gj3.js} +1 -1
  188. package/dist/client/assets/{pair-0TdjiLVI.js → pair-Y70UxIx8.js} +1 -1
  189. package/dist/client/assets/{plan-ladder-DwLy6PTi.js → plan-ladder-CTbdFfKO.js} +1 -1
  190. package/dist/client/assets/{popover-BRE8ILKE.js → popover-Dx7NKSP2.js} +1 -1
  191. package/dist/client/assets/{post-calendar-DGt_ndX4.js → post-calendar-C2gpg5ix.js} +1 -1
  192. package/dist/client/assets/{post-editor-D0eRaxXC.js → post-editor-B3X8Ac96.js} +1 -1
  193. package/dist/client/assets/{preview-content-Dn7hR4M-.js → preview-content-DXdMyolA.js} +1 -1
  194. package/dist/client/assets/{preview-dialog-Cn4XaU4a.js → preview-dialog-CWT3uuZa.js} +1 -1
  195. package/dist/client/assets/{profile-BY5KyFaz.js → profile-DTimbw9f.js} +1 -1
  196. package/dist/client/assets/{project-app-view-BUmCHgox.js → project-app-view-BhAKoN6u.js} +1 -1
  197. package/dist/client/assets/{project-feed-D1bPqPqK.js → project-feed--NJ-QfUk.js} +1 -1
  198. package/dist/client/assets/{project-icon-Do6Rnqu9.js → project-icon-BLx-zgCa.js} +1 -1
  199. package/dist/client/assets/project-reports-D8-OTk42.js +1 -0
  200. package/dist/client/assets/project-tasks-MKnx4xw3.js +1 -0
  201. package/dist/client/assets/{projects-CftQwpQj.js → projects-CsYZoyvD.js} +1 -1
  202. package/dist/client/assets/{projects-empty-state-5PDc_5Mv.js → projects-empty-state-C7p65Zfo.js} +1 -1
  203. package/dist/client/assets/{prompts-HX5a-Vhy.js → prompts-DfCp7ojV.js} +1 -1
  204. package/dist/client/assets/record-editor-vKx9Nh4V.js +1 -0
  205. package/dist/client/assets/{redirect-editor-QBPKQg9S.js → redirect-editor-BS53qHfK.js} +1 -1
  206. package/dist/client/assets/reports-7COHueTN.js +1 -0
  207. package/dist/client/assets/{reports-hSNu0AMI.js → reports-BolckNPL.js} +1 -1
  208. package/dist/client/assets/{reports-onboarding-CpiJUIbl.js → reports-onboarding-CYTg2rEl.js} +1 -1
  209. package/dist/client/assets/{reports-tab-DsX7UTDx.js → reports-tab-CA3dJZ6F.js} +2 -2
  210. package/dist/client/assets/{repositories-xKmWatiY.js → repositories-DpoFva-t.js} +1 -1
  211. package/dist/client/assets/{repository-binding-IbB3w4K1.js → repository-binding-uNpZ0Qsy.js} +1 -1
  212. package/dist/client/assets/{repository-import-picker-nfveC9uu.js → repository-import-picker-DGwu_IgY.js} +1 -1
  213. package/dist/client/assets/{repository-picker-BdcBJaAa.js → repository-picker-B8-V0_Ti.js} +1 -1
  214. package/dist/client/assets/{require-capability-0QQu-PXm.js → require-capability-CWzHe7-D.js} +1 -1
  215. package/dist/client/assets/{required-auth-layout-EBGqXDef.js → required-auth-layout-UCbwAE3I.js} +1 -1
  216. package/dist/client/assets/{reset-password-DQdWhQZ_.js → reset-password-DDRVqOeS.js} +1 -1
  217. package/dist/client/assets/{resizable-COGq4QgQ.js → resizable-DdwWSzN9.js} +1 -1
  218. package/dist/client/assets/{resolve-tab-icon-Bf_8f9iv.js → resolve-tab-icon-DIWBDYkE.js} +1 -1
  219. package/dist/client/assets/{review-settings-JcaAi2m2.js → review-settings-CxAguBeE.js} +1 -1
  220. package/dist/client/assets/{rich-text-link-control-AkFJ9YLs.js → rich-text-link-control-Dr3oJiWL.js} +1 -1
  221. package/dist/client/assets/{roles-DIaQUcS5.js → roles-MJn-vwfC.js} +1 -1
  222. package/dist/client/assets/route-B4wBefdB.js +1 -0
  223. package/dist/client/assets/{route-BfQseO66.js → route-BocWs7a4.js} +1 -1
  224. package/dist/client/assets/{route-Com2R5M0.js → route-C9U6ttFZ.js} +1 -1
  225. package/dist/client/assets/{runnable-block-editor-BguM-kty.js → runnable-block-editor-DaRgSaTA.js} +1 -1
  226. package/dist/client/assets/{sandbox-lifecycle-context-CFoOqCj0.js → sandbox-lifecycle-context-DTlpywaU.js} +1 -1
  227. package/dist/client/assets/{schema-G9rWtgSi.js → schema-DAS5Ntmx.js} +1 -1
  228. package/dist/client/assets/{scroll-area-B0xiZfJx.js → scroll-area-CfjhxT73.js} +1 -1
  229. package/dist/client/assets/{search-input-DTbSmfbu.js → search-input-DgbeGrvf.js} +1 -1
  230. package/dist/client/assets/{search-toggle-BIaj-qey.js → search-toggle-CSBcK9kl.js} +1 -1
  231. package/dist/client/assets/{secret-picker-By2xsSYR.js → secret-picker-DyNGPcpx.js} +1 -1
  232. package/dist/client/assets/{secrets-Bd-ICDic.js → secrets-CxMPhU7-.js} +1 -1
  233. package/dist/client/assets/{sections-editor-PfznHdXP.js → sections-editor-3W6ot5n0.js} +1 -1
  234. package/dist/client/assets/{select-B-7TWojP.js → select-Ca7ywgdR.js} +1 -1
  235. package/dist/client/assets/{select-model-CSB-yZOt.js → select-model-f3eFVLMu.js} +1 -1
  236. package/dist/client/assets/{seo-editor-Ba23nS22.js → seo-editor-kPV87aw4.js} +1 -1
  237. package/dist/client/assets/{separator-By-AoWOK.js → separator-rBPow4bd.js} +1 -1
  238. package/dist/client/assets/{settings-tab-BXwt3t3Z.js → settings-tab-CJFbkBcU.js} +1 -1
  239. package/dist/client/assets/{sheet-tV1MwOuF.js → sheet-BmU4xFFV.js} +1 -1
  240. package/dist/client/assets/{shell-layout-D9Y783sH.js → shell-layout-D-TY5LOq.js} +1 -1
  241. package/dist/client/assets/{skills-ChXRlY6J.js → skills-CwPxuroi.js} +1 -1
  242. package/dist/client/assets/{sso-s8xDc0Rb.js → sso-CzlwG-D5.js} +1 -1
  243. package/dist/client/assets/{suggestion-DYUHap8V.js → suggestion-D71_9gKG.js} +1 -1
  244. package/dist/client/assets/{switch-DVAJLCdX.js → switch-waswXW5Z.js} +1 -1
  245. package/dist/client/assets/{synced-repos-lAzCds6k.js → synced-repos-kc5xbP3S.js} +1 -1
  246. package/dist/client/assets/{tab-icon-glyph-hVsVWg43.js → tab-icon-glyph-BwxZ1RMz.js} +1 -1
  247. package/dist/client/assets/{table-Df8QoO5m.js → table-C10kx8IV.js} +1 -1
  248. package/dist/client/assets/{tabs-BXwDZNIq.js → tabs-CWPe65nq.js} +1 -1
  249. package/dist/client/assets/{task-board-D1I247i1.js → task-board-D69FHhCp.js} +1 -1
  250. package/dist/client/assets/{task-route-Cu5whi95.js → task-route-BB4tihbk.js} +1 -1
  251. package/dist/client/assets/{task-status-D7GC4smL.js → task-status-1h7r-Li3.js} +1 -1
  252. package/dist/client/assets/{taskboard-analytics-IPfFZM-y.js → taskboard-analytics-CBL5zR5P.js} +1 -1
  253. package/dist/client/assets/tasks-Bx5ODWo_.js +1 -0
  254. package/dist/client/assets/{tasks-Cf1kCtGA.js → tasks-D5ELcfoF.js} +1 -1
  255. package/dist/client/assets/{textarea-CRla2I1O.js → textarea-DrG3LpOe.js} +1 -1
  256. package/dist/client/assets/{thread-analytics-ClJ-onVD.js → thread-analytics-V3PbYuF7.js} +1 -1
  257. package/dist/client/assets/{thread-button-B_r_n7Hb.js → thread-button-CvxW6RA2.js} +1 -1
  258. package/dist/client/assets/{thread-intent-D4_GmX4s.js → thread-intent-CRVD-3K4.js} +1 -1
  259. package/dist/client/assets/{thread-route-C-ixgfYh.js → thread-route-CjEvfKz4.js} +1 -1
  260. package/dist/client/assets/{thread-route-CkyNBEQh.js → thread-route-Cy2pOPUd.js} +1 -1
  261. package/dist/client/assets/{thread-sheet-body-DFBbwGnF.js → thread-sheet-body-BD7vY3jr.js} +1 -1
  262. package/dist/client/assets/{toggle-group-Dpg_xjST.js → toggle-group-D2Cn02yX.js} +1 -1
  263. package/dist/client/assets/{toolbar-icon-button-C-zNG8m8.js → toolbar-icon-button-BcZKbAph.js} +1 -1
  264. package/dist/client/assets/{tooltip-DLtvNdpW.js → tooltip-B6q_5K4j.js} +1 -1
  265. package/dist/client/assets/{track-6Zj0SWSe.js → track-nochOmQB.js} +1 -1
  266. package/dist/client/assets/{types-CLudYYhK.js → types-Di7SQZbv.js} +1 -1
  267. package/dist/client/assets/{usage-stats-ggbnrdm_.js → usage-stats-D-lSGbDC.js} +1 -1
  268. package/dist/client/assets/{use-ai-providers-DXh7LZcb.js → use-ai-providers-BRuNYMhz.js} +1 -1
  269. package/dist/client/assets/{use-automations-CDpb1P6B.js → use-automations-BNagZRqy.js} +1 -1
  270. package/dist/client/assets/{use-autosave-CpQ7YUL9.js → use-autosave-BCYfxSh8.js} +1 -1
  271. package/dist/client/assets/{use-chat-layout-state-1gL-qD2O.js → use-chat-layout-state-DeQNOuuS.js} +1 -1
  272. package/dist/client/assets/{use-connect-companion-CMUydgJv.js → use-connect-companion-aN7uvCBj.js} +1 -1
  273. package/dist/client/assets/{use-connection-CZRSPnC8.js → use-connection-cLcMPTcD.js} +1 -1
  274. package/dist/client/assets/{use-copy-XwRnnX9O.js → use-copy-DEJeYdBf.js} +1 -1
  275. package/dist/client/assets/{use-create-virtual-mcp-DwigodL9.js → use-create-virtual-mcp-BfJgDQU9.js} +1 -1
  276. package/dist/client/assets/{use-date-fns-locale-C6EVhunm.js → use-date-fns-locale-2cgQ6i1M.js} +1 -1
  277. package/dist/client/assets/{use-debounced-autosave-BtWCE5ml.js → use-debounced-autosave-D_E7dqpf.js} +1 -1
  278. package/dist/client/assets/{use-debounced-value-Df5XXiWC.js → use-debounced-value-DfmB4GQ-.js} +1 -1
  279. package/dist/client/assets/{use-deco-credits-BrV-RGWx.js → use-deco-credits-BMl1Q-N_.js} +1 -1
  280. package/dist/client/assets/{use-decopilot-events-pau4MIxW.js → use-decopilot-events-bX8z85sd.js} +1 -1
  281. package/dist/client/assets/{use-delete-connection-B9igQK3R.js → use-delete-connection-C6GA9gBg.js} +1 -1
  282. package/dist/client/assets/{use-deployment-admin-Cpp8znxx.js → use-deployment-admin-CX7S75gt.js} +1 -1
  283. package/dist/client/assets/{use-fast-preview-draft-url-Bb4W0G6S.js → use-fast-preview-draft-url-eTOY78BH.js} +1 -1
  284. package/dist/client/assets/{use-file-configs-bflKgUQZ.js → use-file-configs-BQHz7unt.js} +1 -1
  285. package/dist/client/assets/{use-infinite-scroll-uKPv2aM8.js → use-infinite-scroll-z9TRtYng.js} +1 -1
  286. package/dist/client/assets/{use-join-requests-Cv1tcNNO.js → use-join-requests-CdSkpvYX.js} +1 -1
  287. package/dist/client/assets/{use-main-panel-tabs-Cms_GSXB.js → use-main-panel-tabs-BKjuUy5Q.js} +1 -1
  288. package/dist/client/assets/{use-mcp-auth-status-CbS3n7ZO.js → use-mcp-auth-status-CAEjB3Yr.js} +1 -1
  289. package/dist/client/assets/{use-mcp-client-GJ7Avhzh.js → use-mcp-client-CeQjVmci.js} +1 -1
  290. package/dist/client/assets/{use-mcp-prompts-CZeaf3zb.js → use-mcp-prompts-CPZRKvh6.js} +1 -1
  291. package/dist/client/assets/{use-mcp-tools-B36LuHKI.js → use-mcp-tools-B1PPp6Ca.js} +1 -1
  292. package/dist/client/assets/{use-members-BsM8EAty.js → use-members-DwkOV7te.js} +1 -1
  293. package/dist/client/assets/{use-mobile-X-W7raUh.js → use-mobile-lkzWUJZt.js} +1 -1
  294. package/dist/client/assets/{use-navigate-to-agent-S6T2X5iC.js → use-navigate-to-agent-DM5ZUYrW.js} +1 -1
  295. package/dist/client/assets/use-new-blocks-editor-UU8vDNn6.js +1 -0
  296. package/dist/client/assets/{use-open-billing-url-BrPfG0rC.js → use-open-billing-url-CIf_88sI.js} +1 -1
  297. package/dist/client/assets/{use-org-auth-client-DpJKNoPr.js → use-org-auth-client-DU_foxnJ.js} +1 -1
  298. package/dist/client/assets/{use-org-fs-Db_U65fA.js → use-org-fs-D8Cw_RO1.js} +1 -1
  299. package/dist/client/assets/{use-org-repo-syncs-CNnHLgIG.js → use-org-repo-syncs-Ck21oxjB.js} +1 -1
  300. package/dist/client/assets/{use-org-sso-Bzr9C2H6.js → use-org-sso-BEwcK6ea.js} +1 -1
  301. package/dist/client/assets/{use-organization-roles-DadVtHMn.js → use-organization-roles-BX5yvq2Q.js} +1 -1
  302. package/dist/client/assets/{use-organization-settings-DpQArW0s.js → use-organization-settings-PyMItVG4.js} +1 -1
  303. package/dist/client/assets/{use-panel-navigate-DPS2Zvaj.js → use-panel-navigate-DP1XKTVL.js} +1 -1
  304. package/dist/client/assets/{use-project-native-view-presence-YyFw7Uvc.js → use-project-native-view-presence-BLu903xV.js} +1 -1
  305. package/dist/client/assets/{use-project-scope-_m4cLdEj.js → use-project-scope-B0dqRxc8.js} +1 -1
  306. package/dist/client/assets/{use-releases-BuSodOwV.js → use-releases-DylItgIa.js} +1 -1
  307. package/dist/client/assets/{use-reports-diagnostic-peSDEyuH.js → use-reports-diagnostic-LI9iqDo8.js} +1 -1
  308. package/dist/client/assets/{use-secrets-CBaJAXrY.js → use-secrets-B1fGbZVs.js} +1 -1
  309. package/dist/client/assets/{use-section-preview-base-Bw0Xcs8d.js → use-section-preview-base-CG4YUzi5.js} +1 -1
  310. package/dist/client/assets/{use-session-runtime-CN6BtDG2.js → use-session-runtime-Dm4PXlXT.js} +1 -1
  311. package/dist/client/assets/{use-tags-DickAZMZ.js → use-tags-Cbm52Bj4.js} +1 -1
  312. package/dist/client/assets/{use-task-board-analytics-CGiK88Op.js → use-task-board-analytics-nFsrTOPf.js} +1 -1
  313. package/dist/client/assets/{use-task-metadata-5QbFJsYe.js → use-task-metadata-CUO6U2QO.js} +1 -1
  314. package/dist/client/assets/{use-thread-analytics-m34CmWcR.js → use-thread-analytics-BpR1jOFK.js} +1 -1
  315. package/dist/client/assets/{use-thread-outputs-Cbd1AH6z.js → use-thread-outputs-OLmK24R_.js} +1 -1
  316. package/dist/client/assets/useInfiniteQuery--Gt2fiNd.js +1 -0
  317. package/dist/client/assets/{useQueries-fdUgbPnN.js → useQueries-XvQM7ldn.js} +1 -1
  318. package/dist/client/assets/useSuspenseInfiniteQuery-Dgx8VRVa.js +1 -0
  319. package/dist/client/assets/{users-Bi6DBewt.js → users-C97-0bIT.js} +1 -1
  320. package/dist/client/assets/{utils-huVSNvIG.js → utils-vILMq0eV.js} +1 -1
  321. package/dist/client/assets/{variant-calendar-BkRUPUkt.js → variant-calendar-BOJXJkUA.js} +1 -1
  322. package/dist/client/assets/{variant-matcher-override-DhCYxx3t.js → variant-matcher-override-ehv-YmJf.js} +1 -1
  323. package/dist/client/assets/{view-mode-toggle-CKEEP_Fz.js → view-mode-toggle-D_pmI30z.js} +1 -1
  324. package/dist/client/assets/{virtual-mcp-DCz5YKSi.js → virtual-mcp-CZmvKylr.js} +1 -1
  325. package/dist/client/index.html +1 -1
  326. package/dist/server/cli.js +1 -1
  327. package/dist/server/server.js +1 -1
  328. package/package.json +1 -1
  329. package/dist/client/assets/agent-app-Bdibz-mC.js +0 -1
  330. package/dist/client/assets/agent-deck-D3B9ilYm.js +0 -1
  331. package/dist/client/assets/agent-library-Cj5vCdvo.js +0 -1
  332. package/dist/client/assets/agent-library-file-BKVVCmrm.js +0 -1
  333. package/dist/client/assets/agent-settings-BSYJzowv.js +0 -1
  334. package/dist/client/assets/agent-site-editor-code-DlzJnPjz.js +0 -2
  335. package/dist/client/assets/agent-view-DZHcKf-S.js +0 -1
  336. package/dist/client/assets/api-keys-BKfddA8i.js +0 -1
  337. package/dist/client/assets/app-editor-LKAeoVT1.js +0 -1
  338. package/dist/client/assets/flat-project-DfK9v9Di.js +0 -1
  339. package/dist/client/assets/library-SL2axwY3.js +0 -1
  340. package/dist/client/assets/project-reports-CFGttV6o.js +0 -1
  341. package/dist/client/assets/project-tasks-uhDI57uo.js +0 -1
  342. package/dist/client/assets/record-editor-Bhs8b2Go.js +0 -1
  343. package/dist/client/assets/reports-h-fJboau.js +0 -1
  344. package/dist/client/assets/route-YvCVw4s8.js +0 -1
  345. package/dist/client/assets/tasks-EQ6aeNd8.js +0 -1
  346. package/dist/client/assets/use-new-blocks-editor-C_ucb5sc.js +0 -1
  347. package/dist/client/assets/useInfiniteQuery-CSJHUxLB.js +0 -1
  348. package/dist/client/assets/useSuspenseInfiniteQuery-DW4u_6CR.js +0 -1
@@ -3692,7 +3692,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
3692
3692
  ${J.join(`
3693
3693
  `)}`:X}function Om6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3694
3694
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var j98=200,Jm6=12,Wm6,Hm6=300,mS0=3;var vN1=O(()=>{rZ();K8();cS0();Wm6={aheadBy:0,behindBy:0,files:[]}});function wm6($){if(!$||$.includes(".."))return!1;return Lm6.test($)}function P98($){return jm6.includes($)}function bN1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!wm6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function xN1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Lm6,jm6;var z98=O(()=>{Lm6=/^[\w./@-]+$/;jm6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function i40($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function T98($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new fE(T7);let J=await Oj($.storage,X,Y);if(J&&await oB($.storage,J)){let F=await HU($,J,{forceRefresh:!0}).catch((U)=>{throw new fE(U instanceof Error?U.message:T7)});await A98($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new fE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await mc({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:T7;throw new fE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await UU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=iB$(F instanceof Error?F.message:String(F));throw U?new fE(N):F});await A98($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function A98($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=pi($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await uj(K,Em6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Em6=10485760,fE;var fN1=O(()=>{DW();vS0();z10();vK0();Y00();rZ();fE=class fE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function zm6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Pm6.test(Z))throw Error(`Invalid branch name: ${$}`)}function qy($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Am6)])}async function Rm6($,Z){let Q=$.var.studioContext,Y=EU(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=ax(G?.metadata?.runtime);if(W)return W;let K=VT0(Z.virtualMcpMetadata),H=K==="cms"?await BN1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)A10(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function qm6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await CX($.var.studioContext)}catch{return null}}function My($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function si($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=i40(Z,Q);if(!X)throw new x0({provider:"github",status:404,message:"Project has no repository"});let J=G0(Y);return uc(Y,J.id,X)}function gN1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=GN$(Z);if(Y!==void 0)return $.json({error:Q},429,{...Z9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof o6)return $.json({error:Q},409,Z9);let X=jW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,Z9)}return $.json({error:Q},502,Z9)}async function yN1($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function I98($){try{let Z=await si($),Q=await dS0(Z,$.get("vmClaim").branch);return $.json(Q,200,Z9)}catch(Z){return gN1($,Z)}}function p40($,Z){let Y=(nS0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return nS0.set($,X),X.finally(()=>{if(nS0.get($)===X)nS0.delete($)}),Y}async function JQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,Z9);let Y=Q?.runner??My($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.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",...Z9}})}}let D=await B.text(),L=Q?.redactRepoDir?Mm6(D):D,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...Z9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function Mm6($){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 tS0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function Im6($){return V98.includes($)}var Pm6,R98=524288,q98=65536,Am6=1e4,M98=2000,Tm6,nS0,Z9,V98,k98=()=>{let $=new $1;$.use("/:virtualMcpId/:branch/*",Tm6),$.post("/:virtualMcpId/:branch/write",(Q)=>JQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>JQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>JQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>JQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>JQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>JQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>JQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return JQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return JQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!Im6(Y))return Q.json({error:`step must be one of: ${V98.join(", ")}`},400);let X=Q.get("vmClaim"),J=await BN1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await qm6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,Z9);if(Y==="start"){let G=G0(Q.var.studioContext),W=Sm(X.virtualMcpMetadata);try{await RT0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return JQ(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return oD(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return M58(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return I98(Q);return Z(Q)});let Z=(Q)=>JQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(M98)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return I98(Q);return JQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(M98)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await si(Q),G=await iS0(J,Y.branch,X.base);return Q.json(G,200,Z9)}catch(X){return gN1(Q,X)}return JQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,Z9);let Y=My(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return p40(X,async()=>{try{await DN1(W,Y,X);let K=i40(J,G);if(K)await T98(W,Y,X,K)}catch(K){if(K instanceof fE)return Q.json({error:K.message},403,Z9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,Z9)}return JQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return p40(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,Z9);try{let G=await si(Q);return await E98(G,Y.branch,J),Q.json({ok:!0},200,Z9)}catch(G){let W=jW(G)===409||G instanceof o6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,Z9)}});return p40(Y.claimName,()=>JQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return p40(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await si(Q),H=W.base??await K.getDefaultBranch();return await pS0(K,Y.branch,H),Q.json({ok:!0},200,Z9)}catch(W){return gN1(Q,W)}});let X=My(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return p40(J,async()=>{try{await DN1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,Z9)}return JQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k5({maxSize:R98,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=My(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=wN1(F)&&N?[F,U]:X?await Promise.all([tS0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),tS0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await si(Q);return Promise.all([dS0(w,Y.branch),iS0(w,Y.branch)])})();await lG(K,G0(K).id,"suggesting a commit message");let L=await C58(K,B,D);return Q.json(L,200,Z9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,Z9);return Q.json({error:F},502,Z9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k5({maxSize:R98,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=My(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=wN1(F)&&N?[F,U]:X?await Promise.all([tS0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),tS0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await si(Q);return Promise.all([dS0(w,Y.branch),iS0(w,Y.branch)])})();await lG(K,G0(K).id,"judging whether a change needs review");let L=await v58(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,Z9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,Z9);return Q.json({error:F},502,Z9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=My(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return yN1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",k5({maxSize:q98,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=My(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=bN1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=xN1(J,W.resolveType);return yN1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",k5({maxSize:q98,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:Y,claimName:X,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=Y?await Y.getPreviewUrl(X):Cm(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W;try{W=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!W||typeof W!=="object"||Array.isArray(W))return Q.json({error:"Invalid JSON body"},400);let K=bN1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!P98(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=xN1(G,K.resolveType);return yN1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var S98=O(()=>{Q8();dW();ii();NN1();j10();T58();qW();_m();R58();TW();tK();q58();I58();R91();P10();PN1();b58();rZ();j5();vN1();z98();IT0();fN1();Pm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Tm6=_S0(async($,Z)=>{let Q=$.var.studioContext;try{r(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=i0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=G0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{zm6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=C00({orgId:X.id,virtualMcpId:J,branch:G}),H=await t61(Q,G),F=o61(H,Y),U=A58({userId:F,projectRef:K}),N=W.metadata??null,B=await Rm6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let D;try{D=await CX(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});nS0=new Map;Z9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};V98=["clone","install","start"]});function C98($,Z,Q){let Y=hN1.get($);if(!Y)Y={pending:null,running:!1},hN1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)km6($,Y);return J}async function km6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await Sm6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)hN1.delete($)}}async function Sm6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await ri(Z,Q),W=await Z.listDecofileEntries(G,Y),K=SN1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let D=CN1(K,N),L=`${JSON.stringify(B,null,2)}
3695
- `;await D98(Z.repo,L);let w=D[0]??`${lS0(Y)}/${TN1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of CN1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await O98(Z,F.values(),X),{decofile:B,skipped:D}=g40(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:oK(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Cm6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=Vm6-1)throw N;await h$(J7(2000,200,J,2,0.5))}}}function Cm6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return F61(Y,$.deps.coAuthor)}var Vm6=3,hN1;var _98=O(()=>{$A0();xS0();m4();K8();rZ();cS0();hN1=new Map});import{createHmac as v98,randomBytes as _m6,timingSafeEqual as vm6}from"crypto";function b98(){if(oS0)return oS0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return oS0=$?Buffer.from($):_m6(32),oS0}function uN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bm6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=v98("sha256",b98()).update(Y).digest("base64url");return`${Y}.${X}`}function x98($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(v98("sha256",b98()).update(Y).digest("base64url"));if(X.length!==J.length||!vm6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var bm6=21600000,oS0=null;var f98=O(()=>{W$()});function rS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function xm6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=rS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function y98($){let Z;try{Z=rS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=xm6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=rS0(G),K=W&&rS0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as ai}from"zod";function ym6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&fm6.test($)}function c98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function n40($){let Z=$.get("decofileScope");return uc($.var.studioContext,Z.organizationId,Z.repository)}function t40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=jW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function m98(){let $=new $1;return $.use("/:virtualMcpId/:branch",l98),$.use("/:virtualMcpId/:branch/*",l98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await L98(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(y98(X.decofile),200,{...J,"content-type":"application/json"});let G=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(c98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await n40(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return t40(Z,X)}}),$.patch("/:virtualMcpId/:branch",hm6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=um6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=h40(X.data)}catch(G){if(G instanceof u40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{bS0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(AN1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await n40(Z),W=await C98(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:pi(Y)},J),K=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:c98(Z)})}catch(G){return t40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(jW(W)!==409)throw W;await pS0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(jW(G)===409)return Z.json({error:"merge-conflict"},409);if(jW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(jW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return t40(Z,Y)}}),$}var fm6,g98=500,h98=1048576,u98=1024,gm6=8388608,hm6,um6,l98;var d98=O(()=>{IT0();xS0();Q8();dW();NN1();vS0();fN1();rZ();_98();f98();vN1();cS0();tK();fm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hm6=k5({maxSize:gm6,onError:($)=>$.json({error:"Payload too large"},413)}),um6=ai.object({set:ai.record(ai.string(),ai.unknown()).optional(),delete:ai.array(ai.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=g98,{message:`Patch cannot touch more than ${g98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=h98),{message:`Each block must be at most ${h98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=u98),{message:`Each block key must be at most ${u98} characters`}),l98=_S0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!ym6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!x98(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await wJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Cm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=i40(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var i98=($)=>{let Z=new $1;if(Z.use("*",Ti),Z.use("*",L$8),Z.route("/",D$8($.voiceSessions)),Z.route("/",lk0()),Z.route("/",a$8()),Z.route("/",g$8()),Z.route("/",W58()),Z.route("/",H58()),Z.route("/",e68()),Z.route("/",J58()),Z.route("/",Z58()),Z.route("/",kS0()),Z.route("/tools",L58()),Z.route("/",B58()),Z.route("/",C68({kvStorage:$.kvStorage})),Z.route("/",k68()),Z.route("/fs",d68({getConnection:$.getNatsConnection})),Z.route("/sandbox",k98()),Z.route("/decofile",m98()),Z.route("/",r68()),Z.route("/",p68()),Z.route("/deco-sites",mk0()),Z.route("/hosting",I$8()),Z.route("/monitor",b$8()),Z.route("/sso",fk0()),Z.route("/",SS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",A$8()),$.mountDevAssets)Z.route("/dev-assets",nk0({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("/",ze$()),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",t68()),Z.route("/mcp",bq0()),Z.route("/mcp/self",qS0()),Z.route("/mcp",yq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var p98=O(()=>{Q8();O$8();w$8();Rk0();T$8();vF1();V$8();x$8();tk0();SE();VF1();gF1();S68();_68();i68();n68();S$0();PF1();gq0();YN1();o68();s68();$58();Q58();GN1();K58();F58();D58();WN1();w58();KN1();xq0();S98();d98()});import{z as n98}from"zod";class lN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return n98.object({token:n98.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var t98=()=>{};import{createHmac as lm6,timingSafeEqual as cm6}from"crypto";import{z as ei}from"zod";function r98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return lm6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function s98($,Z){let Q=Buffer.from(JSON.stringify(o98.parse($))).toString("base64url");return`${Q}.${r98(Q,Z)}`}function a98($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(r98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!cm6(W,G))return null;try{let K=o98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+n00)return null;return K.data}catch{return null}}var o98;var e98=O(()=>{Pm();o98=ei.object({sessionId:ei.string().uuid(),organizationId:ei.string().min(1).max(256),userId:ei.string().min(1).max(256),threadId:ei.string().min(1).max(256),expiresAt:ei.number().int().positive()})});import{createHash as mm6}from"crypto";import{z as o40}from"zod";function sS0($){return`user.${mm6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new ZZ8.Kvm(aS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:aS0.StorageType.Memory,ttl:QZ8.nanos(n00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+n00},Y=s98(Q,this.deps.secret),X=await this.kv(),J=sS0(Q),G=await X.get(J),W=G?.operation==="PUT"?cN1.parse(G.json()):null,K=$Z8.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=a98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=sS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?cN1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,$Z8.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(sS0($));if(Q?.operation==="PUT"&&cN1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(sS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var aS0,ZZ8,QZ8,cN1,$Z8;var YZ8=O(()=>{zG();Pm();e98();aS0=C(hH(),1),ZZ8=C(Bc(),1),QZ8=C(Zg(),1),cN1=o40.object({sessionId:o40.string().uuid(),expiresAt:o40.number(),characters:o40.number().int().nonnegative(),requests:o40.number().int().nonnegative()}),$Z8=new TextEncoder});function dm6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var im6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},XZ8=()=>{let $=new $1;return $.use("*",im6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await nJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:dm6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var JZ8=O(()=>{Q8();W$();SV0()});import{z as x1}from"zod";function YN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Zd6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Qd6($,Z,Q){try{return JSON.parse($)}catch{throw new KZ8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Yd6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Qd6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function Xd6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_F(Q.function.parameters):_F({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Jd6($){if(!$)return;return{openai:{response_format:$}}}function Gd6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GZ8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function WZ8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var pm6=256,nm6,tm6,om6,rm6,sm6,am6,em6,$d6,KZ8,HZ8,FZ8;var UZ8=O(()=>{x4();Q8();ii();jH();nm6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),tm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),om6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(tm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),rm6=x1.object({type:x1.literal("text")}),sm6=x1.object({type:x1.literal("json_object")}),am6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),em6=x1.union([rm6,sm6,am6]),$d6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(om6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(nm6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:em6.optional(),user:x1.string().optional()});KZ8=class KZ8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HZ8=new $1;HZ8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(YN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(YN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(YN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=$d6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(YN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Zd6(J.model);if(!G)return $.json(YN("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>rP(E.providerId));if(!j)return $.json(YN("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(YN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Yd6(J.messages),N=J.tools?Xd6(J.tools):void 0,B=Jd6(J.response_format),D=Gd6(),L=Math.floor(Date.now()/1000);if(J.stream)return oD($,async(w)=>{let j=GZ8(F,U,N,J,B,$.req.raw.signal);try{let E=km(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=pm6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:WZ8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=GZ8(F,U,N,J,B,$.req.raw.signal),j=await AU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:WZ8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(YN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(YN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(YN(X.message,"server_error"),500)}});FZ8=HZ8});function Wd6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NZ8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!NZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(p2(U)!==J)continue;if(!Wd6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var BZ8=O(()=>{Q8();dG()});var OZ8;var DZ8=O(()=>{OZ8={name:"decocms",version:"4.417.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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","@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:"^7.0.107","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 Fd6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Hd6}}var LZ8,Hd6="https://ph.studio.decocms.com",wZ8;var jZ8=O(()=>{Q8();ur();wf();z9();W$();GF1();DZ8();LZ8=new $1;LZ8.get("/",($)=>{let Z={version:OZ8.version,theme:p8$(),...vK().logo&&{logo:vK().logo},...PD()&&{internalUrl:Td1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:U18(),posthog:Fd6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:WO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});wZ8=LZ8});function Iy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dN1($){return(Iy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function EZ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Iy($))}&sz=${Z}`}function Ud6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function PZ8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=Ud6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as w$}from"zod";var Nd6,zZ8;var AZ8=O(()=>{Nd6=w$.object({check_id:w$.string(),title:w$.string(),description:w$.string().optional(),impact:w$.string().optional(),why:w$.string().optional(),category:w$.string(),severity:w$.string(),value_band:w$.string().optional(),value_driver:w$.string().optional(),controllability:w$.string().optional(),pages:w$.array(w$.string()),tasks:w$.array(w$.string()),evidence:w$.string(),sample_scope:w$.string().optional(),sources:w$.array(w$.string())}),zZ8=w$.object({domain:w$.string(),brand:w$.string(),favicon:w$.string().optional(),scanned_at:w$.string().nullable(),lang:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),totals:w$.object({measured:w$.number(),registry_total:w$.number(),passed:w$.number(),failed:w$.number(),blocked:w$.number()}),buckets:w$.array(w$.object({id:w$.enum(["critical","important","worth"]),label:w$.string(),items:w$.array(Nd6)})),passing:w$.object({count:w$.number(),items:w$.array(w$.object({check_id:w$.string(),title:w$.string()}))}),not_measured:w$.object({count:w$.number(),groups:w$.array(w$.object({reason:w$.string(),label:w$.string(),count:w$.number(),checks:w$.array(w$.string())}))}),categories:w$.array(w$.object({key:w$.string(),label:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),pass:w$.number(),fail:w$.number()})),screenshots:w$.array(w$.object({url:w$.string(),page_type:w$.string().optional(),viewport:w$.enum(["desktop","mobile"]),image_url:w$.string()}))})});function TZ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function eS0($,Z={}){let Q=await fetch(TZ8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return zZ8.parse(await Q.json())}async function RZ8($,Z={}){let Q=await fetch(TZ8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var iN1=O(()=>{AZ8();kB()});import{join as qZ8}from"path";async function Dd6($){try{let Z=await eS0($,{signal:AbortSignal.timeout(Bd6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function sJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Od6($,Z){let Q=Iy($),Y=Z?.brand?.trim()||dN1(Q),X=EZ8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=PZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${sJ(W)}</title>`,`<meta name="description" content="${sJ(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="${sJ(W)}" />`,`<meta property="og:description" content="${sJ(K)}" />`,`<meta property="og:url" content="${sJ(G)}" />`,`<meta property="og:image" content="${sJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${sJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${sJ(W)}" />`,`<meta name="twitter:description" content="${sJ(K)}" />`,`<meta name="twitter:image" content="${sJ(H)}" />`,`<meta name="twitter:image:alt" content="${sJ(F)}" />`,`<link rel="canonical" href="${sJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${sJ(G)}.md" />`,`<link rel="icon" href="${sJ(X)}" sizes="any" />`].join(`
3695
+ `;await D98(Z.repo,L);let w=D[0]??`${lS0(Y)}/${TN1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of CN1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await O98(Z,F.values(),X),{decofile:B,skipped:D}=g40(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:oK(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Cm6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=Vm6-1)throw N;await h$(J7(2000,200,J,2,0.5))}}}function Cm6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return F61(Y,$.deps.coAuthor)}var Vm6=3,hN1;var _98=O(()=>{$A0();xS0();m4();K8();rZ();cS0();hN1=new Map});import{createHmac as v98,randomBytes as _m6,timingSafeEqual as vm6}from"crypto";function b98(){if(oS0)return oS0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return oS0=$?Buffer.from($):_m6(32),oS0}function uN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bm6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=v98("sha256",b98()).update(Y).digest("base64url");return`${Y}.${X}`}function x98($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(v98("sha256",b98()).update(Y).digest("base64url"));if(X.length!==J.length||!vm6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var bm6=21600000,oS0=null;var f98=O(()=>{W$()});function rS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function xm6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=rS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function y98($){let Z;try{Z=rS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=xm6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=rS0(G),K=W&&rS0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as ai}from"zod";function ym6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&fm6.test($)}function c98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function n40($){let Z=$.get("decofileScope");return uc($.var.studioContext,Z.organizationId,Z.repository)}function t40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=jW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function m98(){let $=new $1;return $.use("/:virtualMcpId/:branch",l98),$.use("/:virtualMcpId/:branch/*",l98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await L98(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(y98(X.decofile),200,{...J,"content-type":"application/json"});let G=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(c98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await n40(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return t40(Z,X)}}),$.patch("/:virtualMcpId/:branch",hm6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=um6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=h40(X.data)}catch(G){if(G instanceof u40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{bS0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(AN1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await n40(Z),W=await C98(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:pi(Y)},J),K=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:c98(Z)})}catch(G){return t40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(jW(W)!==409)throw W;await pS0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(jW(G)===409)return Z.json({error:"merge-conflict"},409);if(jW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(jW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return t40(Z,Y)}}),$}var fm6,g98=500,h98=1048576,u98=1024,gm6=8388608,hm6,um6,l98;var d98=O(()=>{IT0();xS0();Q8();dW();NN1();vS0();fN1();rZ();_98();f98();vN1();cS0();tK();fm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hm6=k5({maxSize:gm6,onError:($)=>$.json({error:"Payload too large"},413)}),um6=ai.object({set:ai.record(ai.string(),ai.unknown()).optional(),delete:ai.array(ai.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=g98,{message:`Patch cannot touch more than ${g98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=h98),{message:`Each block must be at most ${h98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=u98),{message:`Each block key must be at most ${u98} characters`}),l98=_S0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!ym6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!x98(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await wJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Cm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=i40(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var i98=($)=>{let Z=new $1;if(Z.use("*",Ti),Z.use("*",L$8),Z.route("/",D$8($.voiceSessions)),Z.route("/",lk0()),Z.route("/",a$8()),Z.route("/",g$8()),Z.route("/",W58()),Z.route("/",H58()),Z.route("/",e68()),Z.route("/",J58()),Z.route("/",Z58()),Z.route("/",kS0()),Z.route("/tools",L58()),Z.route("/",B58()),Z.route("/",C68({kvStorage:$.kvStorage})),Z.route("/",k68()),Z.route("/fs",d68({getConnection:$.getNatsConnection})),Z.route("/sandbox",k98()),Z.route("/decofile",m98()),Z.route("/",r68()),Z.route("/",p68()),Z.route("/deco-sites",mk0()),Z.route("/hosting",I$8()),Z.route("/monitor",b$8()),Z.route("/sso",fk0()),Z.route("/",SS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",A$8()),$.mountDevAssets)Z.route("/dev-assets",nk0({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("/",ze$()),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",t68()),Z.route("/mcp",bq0()),Z.route("/mcp/self",qS0()),Z.route("/mcp",yq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var p98=O(()=>{Q8();O$8();w$8();Rk0();T$8();vF1();V$8();x$8();tk0();SE();VF1();gF1();S68();_68();i68();n68();S$0();PF1();gq0();YN1();o68();s68();$58();Q58();GN1();K58();F58();D58();WN1();w58();KN1();xq0();S98();d98()});import{z as n98}from"zod";class lN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return n98.object({token:n98.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var t98=()=>{};import{createHmac as lm6,timingSafeEqual as cm6}from"crypto";import{z as ei}from"zod";function r98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return lm6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function s98($,Z){let Q=Buffer.from(JSON.stringify(o98.parse($))).toString("base64url");return`${Q}.${r98(Q,Z)}`}function a98($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(r98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!cm6(W,G))return null;try{let K=o98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+n00)return null;return K.data}catch{return null}}var o98;var e98=O(()=>{Pm();o98=ei.object({sessionId:ei.string().uuid(),organizationId:ei.string().min(1).max(256),userId:ei.string().min(1).max(256),threadId:ei.string().min(1).max(256),expiresAt:ei.number().int().positive()})});import{createHash as mm6}from"crypto";import{z as o40}from"zod";function sS0($){return`user.${mm6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new ZZ8.Kvm(aS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:aS0.StorageType.Memory,ttl:QZ8.nanos(n00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+n00},Y=s98(Q,this.deps.secret),X=await this.kv(),J=sS0(Q),G=await X.get(J),W=G?.operation==="PUT"?cN1.parse(G.json()):null,K=$Z8.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=a98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=sS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?cN1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,$Z8.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(sS0($));if(Q?.operation==="PUT"&&cN1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(sS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var aS0,ZZ8,QZ8,cN1,$Z8;var YZ8=O(()=>{zG();Pm();e98();aS0=C(hH(),1),ZZ8=C(Bc(),1),QZ8=C(Zg(),1),cN1=o40.object({sessionId:o40.string().uuid(),expiresAt:o40.number(),characters:o40.number().int().nonnegative(),requests:o40.number().int().nonnegative()}),$Z8=new TextEncoder});function dm6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var im6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},XZ8=()=>{let $=new $1;return $.use("*",im6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await nJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:dm6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var JZ8=O(()=>{Q8();W$();SV0()});import{z as x1}from"zod";function YN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Zd6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Qd6($,Z,Q){try{return JSON.parse($)}catch{throw new KZ8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Yd6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Qd6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function Xd6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_F(Q.function.parameters):_F({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Jd6($){if(!$)return;return{openai:{response_format:$}}}function Gd6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GZ8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function WZ8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var pm6=256,nm6,tm6,om6,rm6,sm6,am6,em6,$d6,KZ8,HZ8,FZ8;var UZ8=O(()=>{x4();Q8();ii();jH();nm6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),tm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),om6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(tm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),rm6=x1.object({type:x1.literal("text")}),sm6=x1.object({type:x1.literal("json_object")}),am6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),em6=x1.union([rm6,sm6,am6]),$d6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(om6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(nm6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:em6.optional(),user:x1.string().optional()});KZ8=class KZ8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HZ8=new $1;HZ8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(YN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(YN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(YN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=$d6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(YN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Zd6(J.model);if(!G)return $.json(YN("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>rP(E.providerId));if(!j)return $.json(YN("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(YN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Yd6(J.messages),N=J.tools?Xd6(J.tools):void 0,B=Jd6(J.response_format),D=Gd6(),L=Math.floor(Date.now()/1000);if(J.stream)return oD($,async(w)=>{let j=GZ8(F,U,N,J,B,$.req.raw.signal);try{let E=km(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=pm6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:WZ8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=GZ8(F,U,N,J,B,$.req.raw.signal),j=await AU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:WZ8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(YN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(YN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(YN(X.message,"server_error"),500)}});FZ8=HZ8});function Wd6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NZ8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!NZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(p2(U)!==J)continue;if(!Wd6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var BZ8=O(()=>{Q8();dG()});var OZ8;var DZ8=O(()=>{OZ8={name:"decocms",version:"4.417.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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","@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:"^7.0.107","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 Fd6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Hd6}}var LZ8,Hd6="https://ph.studio.decocms.com",wZ8;var jZ8=O(()=>{Q8();ur();wf();z9();W$();GF1();DZ8();LZ8=new $1;LZ8.get("/",($)=>{let Z={version:OZ8.version,theme:p8$(),...vK().logo&&{logo:vK().logo},...PD()&&{internalUrl:Td1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:U18(),posthog:Fd6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:WO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});wZ8=LZ8});function Iy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dN1($){return(Iy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function EZ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Iy($))}&sz=${Z}`}function Ud6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function PZ8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=Ud6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as w$}from"zod";var Nd6,zZ8;var AZ8=O(()=>{Nd6=w$.object({check_id:w$.string(),title:w$.string(),description:w$.string().optional(),impact:w$.string().optional(),why:w$.string().optional(),category:w$.string(),severity:w$.string(),value_band:w$.string().optional(),value_driver:w$.string().optional(),controllability:w$.string().optional(),pages:w$.array(w$.string()),tasks:w$.array(w$.string()),evidence:w$.string(),sample_scope:w$.string().optional(),sources:w$.array(w$.string())}),zZ8=w$.object({domain:w$.string(),brand:w$.string(),favicon:w$.string().optional(),scanned_at:w$.string().nullable(),lang:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),totals:w$.object({measured:w$.number(),registry_total:w$.number(),passed:w$.number(),failed:w$.number(),blocked:w$.number()}),buckets:w$.array(w$.object({id:w$.enum(["critical","important","worth"]),label:w$.string(),items:w$.array(Nd6)})),passing:w$.object({count:w$.number(),items:w$.array(w$.object({check_id:w$.string(),title:w$.string()}))}),not_measured:w$.object({count:w$.number(),groups:w$.array(w$.object({reason:w$.string(),label:w$.string(),count:w$.number(),checks:w$.array(w$.string())}))}),categories:w$.array(w$.object({key:w$.string(),label:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),pass:w$.number(),fail:w$.number()})),screenshots:w$.array(w$.object({url:w$.string(),page_type:w$.string().optional(),viewport:w$.enum(["desktop","mobile"]),image_url:w$.string()}))})});function TZ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function eS0($,Z={}){let Q=await fetch(TZ8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return zZ8.parse(await Q.json())}async function RZ8($,Z={}){let Q=await fetch(TZ8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var iN1=O(()=>{AZ8();kB()});import{join as qZ8}from"path";async function Dd6($){try{let Z=await eS0($,{signal:AbortSignal.timeout(Bd6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function sJ($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function Od6($,Z){let Q=Iy($),Y=Z?.brand?.trim()||dN1(Q),X=EZ8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=PZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${sJ(W)}</title>`,`<meta name="description" content="${sJ(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="${sJ(W)}" />`,`<meta property="og:description" content="${sJ(K)}" />`,`<meta property="og:url" content="${sJ(G)}" />`,`<meta property="og:image" content="${sJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${sJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${sJ(W)}" />`,`<meta name="twitter:description" content="${sJ(K)}" />`,`<meta name="twitter:image" content="${sJ(H)}" />`,`<meta name="twitter:image:alt" content="${sJ(F)}" />`,`<link rel="canonical" href="${sJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${sJ(G)}.md" />`,`<link rel="icon" href="${sJ(X)}" sizes="any" />`].join(`
3696
3696
  `)}function Ld6($,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}
3697
3697
  </head>`)}function MZ8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Iy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(qZ8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(wd6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=Iy(Q.req.param("file").replace(/\.md$/,""));try{let X=await RZ8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(jd6)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?qZ8($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await Dd6(Iy(Y)),K=Od6(Y,W);return Q.html(Ld6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Bd6=2500,wd6=1e4,jd6=1e4;var IZ8=O(()=>{Q8();kB();iN1();W$()});function $C0($,Z){return fetch(`${HW({})}${$}`,Z)}async function Ed6($,Z){let Q=await eS0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function zd6($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var Pd6,sD,VZ8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},kZ8;var SZ8=O(()=>{Q8();nG();kB();iN1();Pd6=new Set(["complete","errored","terminated","unknown"]);sD=new $1;sD.use("*",async($,Z)=>{let Q=await v8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});sD.use("/link-token/*",VZ8);sD.use("/suggest",VZ8);sD.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await Ed6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});sD.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=zd6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await $C0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Cw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.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)}});sD.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await $C0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Cw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Pd6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});sD.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await $C0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});sD.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await $C0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});kZ8=sD});var Ad6=1048576,pN1;var CZ8=O(()=>{Q8();dW();W$();iH1();pN1=new $1;pN1.post("/webhook",k5({maxSize:Ad6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!R08(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=q08(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await M08(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as Td6}from"crypto";function Md6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return Td6(Buffer.from(X),Buffer.from(Y))}function Id6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function _Z8($){let Z=new $1;return Z.post("/webhook",k5({maxSize:Rd6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!Md6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!qd6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});return y00().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=Id6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Vd6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Vd6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await UC$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Rd6=5242880,qd6;var vZ8=O(()=>{Q8();dW();TW();q7();qd6=new Set(["check_suite","issue_comment"])});import{DBOS as tN1,SchedulerMode as kd6}from"@dbos-inc/dbos-sdk";async function Cd6(){try{return await _d6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function _d6(){if(!f00())return null;let $=await y00(),{RemoteSandboxProvider:Z}=await Promise.resolve().then(() => (g61(),y61));if(!($ instanceof Z))return null;let{db:Q}=O8(),{sandboxes:Y,pools:X}=await $.list(),J=Date.now(),G=mz$({sandboxes:Y,pools:X,records:await dz$(Q,Y,X),now:J}),{batches:W,failed:K}=await iz$(G,bK0(Q,new JX(E0().encryptionKey)),{now:J,orgFsLifetimeMs:wA0}),H=0,F=0;for(let U of W){let N=await $.pushCredentials(U);H+=N.stored,F+=N.kept}return{sandboxes:Y.length,pushed:H,kept:F,refused:G.refused,failed:K}}async function vd6($,Z){let Q=await tN1.runStep(Cd6,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function bZ8(){if(nN1)return;if(!E0().agentSandboxEnabled||!f00())return;nN1=tN1.registerWorkflow(vd6,{name:"sandboxCredentialPushWorkflow"}),tN1.registerScheduled(nN1,{name:"sandboxCredentialPushWorkflow",crontab:Sd6,mode:kd6.ExactlyOncePerIntervalWhenActive})}var Sd6="1-59/10 * * * *",nN1=null;var xZ8=O(()=>{AG();tO();F81();jA0();TW();W$()});function fZ8($){let Z=new gD($.db,new JX($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=Mk$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new xQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var yZ8=O(()=>{Q8();tO();r91();dj()});function gZ8($){let Z=new gD($.db,new JX($.encryptionKey));async function Q(X,J){let G=to$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await VW($.db,W.organizationId);if(!K)return;if(await vV0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new $1;return Y.post("/webhook/:secret",k5({maxSize:bd6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var bd6=1048576;var hZ8=O(()=>{Q8();dW();tO();bV0();Uf()});import{DBOS as ZC0,SchedulerMode as xd6}from"@dbos-inc/dbos-sdk";function lZ8($){rN1=$}function cZ8(){if(!rN1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return rN1}function mZ8(){let $=cZ8();return new gD($.db,new JX($.encryptionKey))}async function gd6($,Z){try{let Q=await mZ8().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await VW(cZ8().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new xQ(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${uZ8}m"`,K=0,H;for(let F=0;F<yd6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=oo$(N,N.changelog?.histories??[],Z);for(let D of B)if(await vV0(Y,Q,D)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function hd6($,Z){let Q=new Date($.getTime()-uZ8*60000),Y=await ZC0.runStep(()=>mZ8().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>ZC0.runStep(()=>gd6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function dZ8(){if(oN1)return;oN1=ZC0.registerWorkflow(hd6,{name:"jiraTriggerSweepWorkflow"}),ZC0.registerScheduled(oN1,{name:"jiraTriggerSweepWorkflow",crontab:fd6,mode:xd6.ExactlyOncePerIntervalWhenActive})}var fd6="7-59/10 * * * *",uZ8=35,yd6=5,rN1=null,oN1=null;var iZ8=O(()=>{tO();Uf();dj();bV0()});function pZ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var nZ8,ud6,ld6,tZ8;var oZ8=O(()=>{Q8();zG();em();Pc();nZ8=new $1,ud6=["range","if-none-match","if-modified-since"],ld6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];nZ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Ai($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new g1(401,{message:"Authentication required"})}if(!Q)throw new g1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new g1(400,{message:"Missing file key"});let X=await H$0(Y,Z);if(!X)throw new g1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&NW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new g1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return pZ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of ud6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new g1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new g1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of ld6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),pZ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});tZ8=nZ8});var r40=b((Vy)=>{var cd6=Vy&&Vy.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),md6=Vy&&Vy.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))cd6(Z,$,Q)};Object.defineProperty(Vy,"__esModule",{value:!0});md6(GG(),Vy)});var aZ8=b((rZ8)=>{Object.defineProperty(rZ8,"__esModule",{value:!0});rZ8.version=void 0;rZ8.version="3.4.0"});var Z78=b((XN)=>{var dd6=XN&&XN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(XN,"__esModule",{value:!0});XN.NodeTransport=XN.VERSION=void 0;XN.nodeResolveHost=rd6;var d5=r40(),id6=q0("net"),sN1=q0("tls"),pd6=q0("path"),eZ8=q0("fs"),nd6=dd6(q0("dns")),td6=aZ8();XN.VERSION=td6.version;var od6="nats.js";class $78{socket;version;lang;yields=[];signal=(0,d5.deferred)();closedNotification=(0,d5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=od6,this.version=XN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,d5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw d5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new d5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new d5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,d5.deferred)(),Q,Y=(0,id6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,d5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=d5.DataBuffer.concat(...this.yields),X=(0,d5.extractProtocolMessage)(Y);if(X!=="")try{let J=d5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,d5.deferred)();try{if($=(0,pd6.resolve)($),!(0,eZ8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,eZ8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,d5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new d5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,d5.deferred)();try{let X=(0,sN1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new d5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,d5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new d5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,d5.deferred)();try{let Y=(0,sN1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new d5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}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,d5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d5.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 sN1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d5.render)($)}`);let Z=(0,d5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,d5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,d5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}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(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}XN.NodeTransport=$78;function rd6($){let Z=(0,d5.deferred)();return nd6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var G78=b((J78)=>{Object.defineProperty(J78,"__esModule",{value:!0});J78.connect=sd6;var Q78=Z78(),Y78=r40(),X78=r40();function sd6($={}){if((0,X78.hasWsProtocol)($))return Promise.reject(X78.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Y78.setTransportFactory)({factory:()=>{return new Q78.NodeTransport},dnsResolveFn:Q78.nodeResolveHost}),Y78.NatsConnectionImpl.connect($)}});var W78=b((aD)=>{var ed6=aD&&aD.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),$i6=aD&&aD.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ed6(Z,$,Q)};Object.defineProperty(aD,"__esModule",{value:!0});aD.connect=void 0;var Zi6=G78();Object.defineProperty(aD,"connect",{enumerable:!0,get:function(){return Zi6.connect}});$i6(r40(),aD)});function U78($){let Z=$?.connectFn??Ji6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:Xi6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let L=J7(Yi6,Qi6,D-1,2,0.5);await h$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?K78.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=F78.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function Ji6($){return H78.connect($)}var K78,H78,F78,Qi6=100,Yi6=3000,Xi6=3000;var N78=O(()=>{K8();K78=C(Zg(),1),H78=C(W78(),1),F78=C(hH(),1)});function QC0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function YC0($,Z){return`${$}.${Z}`}class aN1{cache;constructor($){this.cache=QC0({ttlMs:$?.ttlMs??Gi6,maxSize:$?.maxSize??Wi6})}async get($,Z){return this.cache.get(YC0($,Z))??null}async set($,Z,Q){this.cache.set(YC0($,Z),Q)}async invalidate($,Z){this.cache.delete(YC0($,Z)),this.cache.delete(YC0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Gi6=600000,Wi6=5000;var B78=()=>{};function XC0($,Z){return`${$}:${Z}`}function eN1($){let Z=QC0({ttlMs:$?.ttlMs??Ki6,maxSize:$?.maxSize??Hi6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(D78,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(XC0(K,H))},set(K,H,F){Z.set(XC0(K,H),F)},invalidate(K,H){Z.delete(XC0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(D78),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(XC0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var D78="studio.ai-provider-keys.invalidate",Ki6=30000,Hi6=5000;var O78=()=>{};class $B1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.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 Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var L78=($)=>{let Z;return()=>Z??=$()},ZB1,QB1;var w78=O(()=>{_6();ZB1=L78(()=>A$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),QB1=L78(()=>A$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Li6($=P78){return{name:CU,subjects:[`${XQ1}.>`],storage:_H.StorageType.File,max_age:Ni6,max_bytes:Di6,max_msgs_per_subject:Oi6,discard:_H.DiscardPolicy.Old,retention:_H.RetentionPolicy.Limits,duplicate_window:Bi6,num_replicas:$}}class z78{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 j78($){let Z=E78.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function Pi6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Ui6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function zi6($,Z){return $.info?.cluster?Z:1}function Ai6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class YB1{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=async(Y,X)=>{let J=Li6(X);try{await Y.streams.info(CU),await Y.streams.update(CU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(CU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(CU),await Y.streams.add(J);else throw G}},Q=await I8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await _H.jetstreamManager($),X=zi6($,P78);try{await Z(Y,X)}catch(J){if(X<=1||!Ai6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Kd});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=Pi6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=ov$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=GQ1(H,{runId:Z}),N=performance.now()-F;ZB1().record(N),QB1().add(1,{"org.id":Y??"unknown"}),Ei6?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?j78(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),ji6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await I8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:j78(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Kd}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=GQ1(Z,{runId:$,dedup:Q});ZB1().record(performance.now()-X),QB1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=tv$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?_H.DeliverPolicy.New:_H.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=aj($),W;try{W=await I8(async()=>{return(await Y.consumers.get(CU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Kd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=Qq0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(aR0()).pipeThrough(eR0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){D(),L.close();return}let E=j;if(E.kind==="done"){if(J){D(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(CU,{filter:aj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var _H,E78,Fi6=($)=>{let Z;return()=>Z??=$()},Ui6,Ni6=86400000000000,Bi6=120000000000,Di6=4294967296,P78,Oi6=500000,wi6,ji6,Ei6;var A78=O(()=>{K8();WQ1();Yq0();$q0();_6();w78();_H=C(hH(),1),E78=C(Zg(),1),Ui6=Fi6(()=>A$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),P78=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);wi6=process.env.STREAM_ENCODE_TRACE==="1",ji6=process.env.DECOPILOT_STREAM_TRACE==="1";Ei6=wi6?new z78:null});function JC0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,ZF(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var T78=O(()=>{d8()});class XB1{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 Ti6($,Z,Q={}){let Y=$.startsWith("thread:")?FH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function JB1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await PU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Nm($,{threadId:X,runBranch:G?.branch}),K=await ee($,Q,G81(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=Ti6(W,await RA0($,X),{flat:cx(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await G3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var R78=O(()=>{rZ();qW();q7()});async function q78($,Z,Q){let Y=Z.organizationId;if(!_X(Z))return!1;if(!Nf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=JU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await r6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),B8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var M78=O(()=>{v4();xY();nm();DH();O9()});function Si6($){return $ instanceof TX}function I78($,Z){return Z-$>=Vi6}class GB1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??Ri6;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??Mi6,Q=this.options.itemIntervalMs??qi6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}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()-d91),B71);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-ki6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await F71(this.taskBoard,X,Y),await U71(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==T$.progress||_X(W)||W.assigneeId!==z8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await JB1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!I78(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:T$.progress,to:T$.review,reason:H}}).catch(()=>{}),B8(J,F),await OH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==T$.progress||G.assigneeId!==z8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await LH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),Si6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+Ii6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),B8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!I78(cB(Q,Z.reviewCycleStartedAt),Date.now()))return;await OH($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!_X(Y))return!1;let X=Y.assigneeId===z8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await JB1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await rm(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await q78(G,Y,W))return!0;if(await eb$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!G71(W))return!1;return await tm(G,Y,{previewMatchesHead:W71(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await tj($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var Ri6=60000,qi6=300000,Mi6=50,Ii6=60000,Vi6=900000,ki6=120000;var V78=O(()=>{v4();DR0();R78();kU();P$0();DH();M78();O9();wW();D71();q7();p10();om()});import{readdir as Ci6,rm as GC0}from"fs/promises";import{join as WC0}from"path";async function KC0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-_i6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await ky($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await k78($,X,Z);else if(!X.startsWith(".")){let J=WC0($,X),G=await ky(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await k78(J,K,Z)}if((await ky(J)).length===0)await GC0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function k78($,Z,Q){let Y=0,X=WC0($,Z),J=await ky(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=WC0(X,W),H=await ky(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=WC0(K,U);await GC0(B,{recursive:!0,force:!0}),Y++}}if((await ky(K)).length===0)await GC0(K,{recursive:!0,force:!0})}if((await ky(X)).length===0)await GC0(X,{recursive:!0,force:!0});return Y}async function ky($){try{return(await Ci6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var _i6=30;var WB1=()=>{};import{DBOS as KB1,SchedulerMode as vi6}from"@dbos-inc/dbos-sdk";async function xi6(){let $=[oW(),gy(),UN()],Z=0;for(let Q of $)try{Z+=await KC0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function fi6($,Z){await KB1.runStep(()=>xi6(),{name:"monitoringRetention"})}function C78(){if(S78)return;S78=!0;let $=KB1.registerWorkflow(fi6,{name:"monitoringRetentionWorkflow"});KB1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:bi6,mode:vi6.ExactlyOncePerIntervalWhenActive})}var bi6="23 4 * * *",S78=!1;var _78=O(()=>{T3();WB1()});function v78($){return async(Z,Q)=>{let Y=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","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await fQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await m2($.db,Z,Y.role);return X.boundAuth=yH1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new kz(Q,void 0,X.boundAuth,Y.role,"self"),nj(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var b78=O(()=>{TK();QU()});function yi6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function gi6(){return{services:yi6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function ui6(){for(let $ of hi6)$()}function x78($){let Z=[...HB1.logs,$];HB1={...HB1,logs:Z.length>500?Z.slice(-500):Z},ui6()}function FB1(){return li6}var HB1,hi6,li6=!1;var UB1=O(()=>{HB1=gi6(),hi6=new Set});import{EventEmitter as ci6}from"events";var NB1;var f78=O(()=>{UB1();NB1=new ci6;NB1.on("request",($)=>{x78($)})});function y78(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=$p(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>$p(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${Q9.tool}${B}${Q9.dim}(${w})${Q9.reset}`}else if(N.method)J=`${Q9.dim}${$p(N.method)}${Q9.reset}`}}catch{}}let W=$p(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Q9.mcp}${$p(F.slice(0,12))}\u2026${Q9.reset}`}else if(X==="/mcp")W=`${Q9.mcp}/mcp${Q9.reset}`;else if(X==="/mcp/registry")W=`${Q9.mcp}/mcp/registry${Q9.reset}`;let K=di6(Y),H=G?"\u25C0":"\u2190";if(!FB1())console.log(`${Q9.dim}${H}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=mi6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!FB1())console.log(`${Q9.dim}${D}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Q9.reset} ${Q9.duration}${B}${Q9.reset}`);NB1.emit("request",{method:Y,path:$p(X),status:U,duration:F,timestamp:new Date})}}}var Q9,mi6=($)=>{if($>=500)return Q9.serverError;if($>=400)return Q9.clientError;if($>=300)return Q9.redirect;return Q9.ok},di6=($)=>{return Q9[$]||Q9.reset},$p=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var g78=O(()=>{UB1();f78();Q9={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 c78}from"crypto";import{mkdir as ii6,readdir as pi6,rm as h78,stat as m78}from"fs/promises";import{join as DB1,relative as ni6}from"path";import{z as e$}from"zod";function i78($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return DB1(ti6,Z)}function p78($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function BB1($,Z){let Q=i78($),Y=p78(Z);return DB1(Q,Y)}function oi6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return c78("sha256",X).update(J).digest("hex")}function l78($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=oi6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${p78(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function n78($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${c78("md5","etag").update(Y).digest("hex")}"`}async function t78($,Z,Q,Y,X){try{let J=await pi6($,{withFileTypes:!0});for(let G of J){let W=DB1($,G.name),H=ni6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await t78(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await m78(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:n78(W,F.mtime,F.size)})}catch{}}}}catch{}}function o78($,Z){let Y=G0($).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(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=i78(Y);await ii6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await t78(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,L=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:L,commonPrefixes:Array.from(U.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(X)=>{let J=X,G=BB1(Y,J.key),W=await m78(G);return{contentType:fF1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:n78(G,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(X)=>{let J=X,G=vD(J.expiresIn,u78);return{url:l78(Z,Y,J.key,G,"GET"),expiresIn:G}}},{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(X)=>{let J=X,G=vD(J.expiresIn,u78);return{url:l78(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{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(X)=>{let J=X,G=BB1(Y,J.key);try{return await h78(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.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(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=BB1(Y,K);try{await h78(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function OB1($,Z,Q){let Y=o78(Z,Q),X=new cL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:VZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:e$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:e$.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new U3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),bW(X,J,$,"mcp:dev-assets")}async function r78($,Z,Q,Y){let J=o78(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var ti6="./data/assets",u78=3600,d78,s78;var a78=O(()=>{W$();Od();Q8();xX0();Dd();YJ();bD();tk0();d78=new $1;d78.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return OB1($.req.raw,Z,Y)});s78=d78});var e78={};R6(e78,{mountDevRoutes:()=>ri6});function ri6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return OB1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await r78(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",s78);let Q=new $1;Q.use("*",SH({mountPath:"/api/dev-assets"})),Q.route("/",nk0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var $Q8=O(()=>{Q8();kF1();tk0();a78()});var FQ8={};R6(FQ8,{watchHandler:()=>HQ8,resolveCorsOrigin:()=>WQ8,isSsoExemptPath:()=>JQ8,isAllowedOAuthRedirectUri:()=>KQ8,createApp:()=>Gp6});import{readFileSync as si6}from"fs";import{PrometheusSerializer as ai6}from"@opentelemetry/exporter-prometheus";import{DBOS as eD}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Zp6,oAuthProtectedResourceMetadata as Qp6}from"better-auth/plugins";async function ei6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,QQ8(ZQ8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),QQ8(ZQ8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function QQ8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function JQ8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${vk0}/`)||$.startsWith(`${Ik0}/`)}function GQ8($){return $==="local.studio.decocms.com"}function WQ8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(GQ8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function KQ8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||GQ8($.hostname)}async function Gp6($={}){let Z=$.database??O8(),Q=!1;$9.stop().catch((h)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",h)});let Y,X,J,G,W=new aN1,K,H,F,U=null;if($.disableNats)K=eN1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new k$0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(h)=>{return(async()=>{let c=h.getReader();try{while(!0){let{done:M0}=await c.read();if(M0)break}}catch{}finally{c.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=U78();let h=E0().natsCredsPath,c;if(h)try{c=si6(h,"utf8")}catch(P$){console.error(`[app] failed to read NATS_CREDS at ${h}; connecting anonymously`,P$)}U.init(E0().natsUrls,c?{creds:c}:void 0);let M0=r01()?new v01({getJetStream:()=>U.getJetStream()}):null;M0?.init().catch(()=>{}),Y=M0;let D0=new G51({getJetStream:()=>U.getJetStream()});D0.init().catch(()=>{}),X=D0;let h0=new Df($71,{getJetStream:()=>U.getJetStream()}),g0=new Df(n10,{getJetStream:()=>U.getJetStream()});h0.init().catch(()=>{}),g0.init().catch(()=>{}),J={reads:h0,cards:g0};let T1=new cY1({getJetStream:()=>U.getJetStream()});T1.init().catch(()=>{}),G=T1,K=eN1({getConnection:()=>U.getConnection()}),H=new $B1({getConnection:()=>U.getConnection()}),F=new YB1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),p08(U),U.onReady(()=>{M0?.init().catch((P$)=>{console.error("[McpListCache] Deferred init failed:",P$)}),D0.init().catch((P$)=>{console.error("[SkillCatalogCache] Deferred init failed:",P$)}),h0.init().catch((P$)=>{console.error("[PrReadCache] Deferred init failed:",P$)}),g0.init().catch((P$)=>{console.error("[PrCardCache] Deferred init failed:",P$)}),T1.init().catch((P$)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",P$)}),K.start(),TF$(()=>U.getConnection()),F.init().catch((P$)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",P$)})})}if(yE)await yE();b01(Y),K51(X),Z71(J),mY1(G);let B={storage:new qh(Z.db),sseHub:$9,onThreadFinished:async(h,c)=>am(new J3(Z.db),h,c,new PG(Z.db))},D=new BQ1(B),L=new r80(Z.db),w=new XB1(L);w.start(),sb$(H),H.start((h)=>{lR0(h),D.execute({type:"CANCEL",taskId:h}).catch((c)=>{console.error("[Decopilot] CancelBroadcast execute failed:",c)})}).catch((h)=>{console.error("[Decopilot] CancelBroadcast start failed:",h)}),U?.onReady(()=>{H.start().catch((h)=>{console.error("[CancelBroadcast] Deferred start failed:",h)})});let j=()=>U?.getConnection()??null;RF1(j),U?.onReady(()=>RF1(j)),zX1(j),U?.onReady(()=>zX1(j)),F.init().catch((h)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",h)}),yE=async()=>{await D.stopAll(),D.dispose(),w.dispose(),H.stop().catch(()=>{}),W$8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),RF$(),G.teardown(),b01(null),K51(null),Z71(null),mY1(null)};let E=new $1;if(E.use("*",hY1({enabled:(h)=>zi(h,"debug")==="1"})),E.use("*",SC0),E.use("/*",l08({origin:(h,c)=>WQ8(h,{baseUrl:E0().baseUrl,requestOrigin:new URL(c.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(h,c)=>{if(await c(),h.req.path.includes("/files/"))return;if(h.req.path.includes("/fs/")&&h.req.path.endsWith("/read"))return;h.header("X-Frame-Options","DENY"),h.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",y78());E.use("*",async(h,c)=>{if(await c(),Fp(h.req.path))return;if(h.res.status>=500){let D0=await h.res.clone().text();console.error(`[5xx Response] ${h.req.method} ${h.req.path} - ${h.res.status}:`,D0)}}),E.get(pY.HEALTH,(h)=>{if(Q)return h.json({status:"shutting_down"},503);return h.json({status:"ok"})}),E.get(pY.HEALTH_LIVE,(h)=>{return h.json({status:"ok"})}),E.get(pY.HEALTH_READY,async(h)=>{if(Q)return h.json({status:"shutting_down"},503);let c={};if(c.postgres={status:await ei6(Z.pool)?"up":"down"},U)c.nats=U.isConnected()?{status:"up"}:{status:"down"};else c.nats={status:"down"};let M0=c.postgres.status==="up",D0=M0?200:503;return h.json({status:M0?"ready":"not_ready",services:c},D0)}),E.get(pY.METRICS,async(h)=>{try{let c=await bC0.collect(),M0=$p6.serialize(c.resourceMetrics);return h.text(M0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(c){return console.error("Failed to collect metrics:",c),h.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${pY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(h)=>{let c=h.req.param("queueName");if(!Yp6.has(c))return h.json({error:`Unknown queue: ${c}`},404);let[M0,D0]=await Promise.all([eD.listQueuedWorkflows({queueName:c,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),eD.listQueuedWorkflows({queueName:c,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return h.json({queue_length:M0.length,in_flight:D0.length})}),E.route("/api/config",wZ8),E.route("/api/_reports",kZ8),E.route("/api/_stripe",pN1),E.route("/api/_github",_Z8({taskBoard:()=>t,contextFactory:()=>g})),E.route("/api/_git",ki);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",gZ8(T)),E.route("/api/_jira",fZ8(T)),E.route("/report",MZ8($.clientDir)),E.route("/api/auth/custom",N18),E.route("/api/auth/desktop",L18),E.all("/api/auth/admin/*",t18),E.all("/api/auth/*",async(h)=>{return await v8.handler(h.req.raw)});let z=Pe$();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",K40),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",K40),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",p80),E.route("/",qe$()),E.use("/oauth-proxy/:connectionId/*",K40),E.all("/oauth-proxy/:connectionId/*",YQ8);let A=async(h)=>{let M0=await Xp6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",K40),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(h)=>{let M0=await Jp6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=m08({ttlMs:120000}),_=await D08({db:Z.db,auth:v8,encryption:{key:E0().encryptionKey},observability:{tracer:KO,meter:A$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});fQ.set(_),Nd1({db:Z.db,baseUrl:y5()}),O08({db:Z.db}),E08({db:Z.db}),I08({db:Z.db}),lZ8({db:Z.db,encryptionKey:E0().encryptionKey}),VS$({db:Z.db}),v08({db:Z.db}),sS$({db:Z.db});let V=RY0(Z.db),y=new mo(Z.db),g=v78({db:Z.db});xY1({storage:V,studioContextFactory:g}),TQ1({systemDatabaseUrl:$r0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:$9}}),LQ1({dispatchRunFn:lv$,studioContextFactory:g,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:$9}});let m=new qh(Z.db),t=new J3(Z.db),n=new PG(Z.db),K0=new GB1(t,g,n);if(E0().taskBoardReviewSweeperEnabled){K0.start();let h=yE;yE=async()=>{await h?.(),K0.dispose()}}Kb$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let h=U?.getConnection();return h?await XQ8.jetstreamManager(h):null},messageParts:m.messageParts(),resolveRun:async(h)=>{let c=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",h).executeTakeFirst();return c?{orgId:c.organization_id,createdBy:c.created_by,version:c.message_storage_version??1,status:c.status,runFenceToken:c.run_fence_token,title:c.title??null}:null},completeRunIfNotCompleted:async(h,c)=>{let M0=await m.completeRunIfNotCompleted(h,c);if(JC0($9,c,h,M0),M0)await am(t,h,c,n);return M0},markRunRequiresAction:async(h,c)=>{let M0=await m.requiresActionIfInProgress(h,c);return JC0($9,c,h,M0),M0},markRunFailed:async(h,c,M0,D0)=>{let h0=await m.markRunFailed(h,c,M0,D0);if(JC0($9,c,h,h0),h0)await am(t,h,c,n);return h0},clearSynthesizedError:async(h,c)=>{await m.messageParts().replaceMessageParts(h,sj(h,c),[])},persistTitle:(h,c,M0)=>m.update(h,c,{title:M0}),onTitleUpdated:async({runId:h,orgId:c,title:M0})=>{let D0=await m.get(h,c).catch(()=>null);$9.emit(c,ZF(h,D0?.status??"in_progress",{title:M0,virtualMcpId:D0?.virtual_mcp_id??void 0,createdBy:D0?.created_by,triggerId:D0?.trigger_id,branch:D0?.branch??null,harnessId:D0?.harness_id??void 0,createdAt:D0?.created_at,updatedAt:D0?.updated_at}))},bumpProgress:async({runId:h,orgId:c})=>{await m.bumpProgress(h,c)},recordCompleted:async({runId:h,orgId:c,distinctId:M0,usage:D0})=>{b1.capture({distinctId:M0,event:"chat_message_completed",groups:{organization:c},properties:{organization_id:c,thread_id:h,transport:"projector",input_tokens:D0.inputTokens,output_tokens:D0.outputTokens,total_tokens:D0.totalTokens}})},recordFailed:async({runId:h,orgId:c,distinctId:M0,reason:D0,kind:h0})=>{b1.capture({distinctId:M0,event:"chat_message_failed",groups:{organization:c},properties:{organization_id:c,thread_id:h,transport:"projector",error_category:h0,error_message:D0}})},purgeRun:async(h)=>{F.purge(h)}}),Bv$({studioContextFactory:g,systemDatabaseUrl:$r0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),C78(),Bd1(),w08(),z08(),k08(),dZ8(),vS$(),x08(),aS$(),bZ8();let U0=async(h,c,M0)=>{let D0=await V.findById(h,c);if(!D0)throw Error("Automation not found");return gY1({automationId:D0.id,organizationId:D0.organization_id,triggerId:null})},Y0=new Ii(V,({automation:h,trigger:c,contextMessages:M0,idempotencyKey:D0})=>V$0({automationId:h.id,organizationId:h.organization_id,triggerId:c.id,contextMessages:M0},{idempotencyKey:D0})),L0=[oW(),gy(),UN()];for(let h of L0)KC0(h).then(()=>{}).catch((c)=>console.error("[monitoring] Retention cleanup failed:",c));let J0=()=>v8.api.deleteAllExpiredApiKeys().catch((h)=>console.error("[auth] Expired API key cleanup failed:",h));J0(),setInterval(J0,86400000).unref(),E.use("*",async(h,c)=>{if(VC0(h.req.path))return c();let M0={measure:async(h0,g0)=>{vW(h,h0);try{return await g0()}finally{N3(h,h0)}}},D0=await fQ.create(h.req.raw,{timings:M0});D0.automationRunner=U0,h.set("studioContext",D0);try{await c()}finally{let h0=D0.pendingRevalidations;if(h0.length>0)Promise.race([Promise.allSettled(h0),h$(30000)]).catch((T1)=>console.error("[studio] revalidation cleanup error:",T1))}}),E.use("/api/:org/decopilot/*",Ti),E.use("/api/:org/v1/*",Ti),E.use("/api/:org/files/*",Ti),E.use("*",async(h,c)=>{if(JQ8(h.req.path))return c();let M0=h.get("studioContext");if(!M0?.organization?.id||!M0?.auth?.user?.id)return c();if(!(await M0.storage.orgSsoConfig.getByOrgId(M0.organization.id))?.enforced)return c();if(!await M0.storage.orgSsoSessions.isValid(M0.auth.user.id,M0.organization.id))return h.json({error:"SSO authentication required for this organization"},403);return c()});let Z0=new $1;Z0.use("*",SH({mountPath:"/api/org-sso"})),Z0.route("/",fk0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(h)=>{return h.json({tools:xp0,grouped:Vz()})}),E.use("/mcp/*",async(h,c)=>{vW(h,"mcp");try{return await c()}finally{N3(h,"mcp")}});let Q0=async(h,c)=>{let M0=h.var.studioContext;if(!M0.auth.user?.id&&!M0.auth.apiKey?.id){let D0=new URL(h.req.url),h0=h.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g0=h0?`${h0}://${D0.host}`:D0.origin;return h.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g0}${D0.pathname}/.well-known/oauth-protected-resource"`}})}return await c()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),NW()){let{mountDevRoutes:h}=($Q8(),LC0(e78));h(E,Q0)}let s=new $1;s.use("*",SH({mountPath:"/mcp"})),s.route("/",bq0()),E.route("/mcp",s);let X0=new $1;X0.use("*",SH({mountPath:"/mcp/self"})),X0.route("/",qS0()),E.route("/mcp/self",X0);let c0=new $1;c0.use("*",SH({mountPath:"/mcp"})),c0.route("/",yq0()),E.route("/mcp",c0),E.use("/api/:org/models/*",async(h,c)=>{vW(h,"llm_models");try{return await c()}finally{N3(h,"llm_models")}});let S0=H$8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",S0),E.route("/api",tZ8);let B1=new $1;B1.use("*",SH({mountPath:"/api"})),B1.route("/",kS0()),E.route("/api",B1),E.route("/api",FZ8);let d0=new $1;d0.use("*",SH({mountPath:"/api"})),d0.route("/",SS0({tokenStorage:y,automationEventDispatcher:Y0})),E.route("/api",d0);let j0=new po(Z.db),w0=new $1;w0.use("*",SH({mountPath:"/api"})),w0.route("/",lk0()),E.route("/api",w0),E.route("/api/deco-sites",q$8()),E.route("/api/deco-apps",XZ8());let s0=new $1;s0.use("*",SH({mountPath:"/api/deco-sites"})),s0.route("/",mk0()),E.route("/api/deco-sites",s0),E.route(vk0,o18()),E.route(Y58,G58()),E.route("/api/_editor-resolve",NZ8()),E.route(j18,E18()),E.route(Ik0,k18());let P1=E0(),K1=new mN1({adapter:P1.elevenlabsApiKey?new lN1({apiKey:P1.elevenlabsApiKey,model:P1.elevenlabsVoiceModel,voiceId:P1.elevenlabsVoiceId}):null,secret:P1.studioJwtSecret??P1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),_0=i98({voiceSessions:K1,kvStorage:j0,runRegistry:D,streamBuffer:F,sseHub:$9,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:Y0,mountDevAssets:NW(),mcpAuth:Q0,oauthProxyHandler:YQ8,watchHandler:HQ8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",_0),E.notFound((h)=>{return h.json({error:"Not Found",path:h.req.path},404)}),E.onError(U$8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([$9.stop(),yE?Promise.resolve(yE()).finally(()=>{yE=null}):Promise.resolve()]),U)await U.drain().catch((h)=>console.error("[shutdown] NATS drain error:",h));console.log("[shutdown] Flushing telemetry..."),await uX().catch((h)=>console.error("[shutdown] Telemetry flush error:",h)),console.log("[shutdown] Closing database..."),await K5$(Z).catch((h)=>console.error("[shutdown] Database close error:",h)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await eD.registerQueue(A3,{partitionQueue:!0,concurrency:_Y1,minPollingIntervalMs:vY1}),await eD.registerQueue(z3,{partitionQueue:!0,concurrency:zQ1,priorityEnabled:!0}),await eD.registerQueue(HN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await eD.registerQueue(FN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await eD.registerQueue(GO,{partitionQueue:!0,concurrency:Nv$}),await eD.registerQueue(cE,rS$),await SF1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((h)=>eD.deleteQueue(h))),await bY1(Z.pool),k7$().catch((h)=>{console.error("[studio-pack-backfill] failed:",h)}),Dd1().catch((h)=>{console.error("[org-fs] public-sets boot sync kick failed:",h)})}})}var XQ8,ZQ8=5000,yE=null,YQ8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await fQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await wi(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await n80(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),D;if(Y==="authorize")D=B.authorization_endpoint;else if(Y==="token")D=B.token_endpoint;else if(Y==="register")D=B.registration_endpoint;if(!D)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=Re$(D);if(L)return L;let w=new URL(D),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!KQ8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(y08(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let n=atob(T.slice(6).trim()),K0=n.indexOf(":");if(K0!==-1){let U0=decodeURIComponent(n.slice(0,K0)),Y0=decodeURIComponent(n.slice(K0+1));A=U0||null,q=Y0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),m=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof m==="string"&&m)q=m;let t=new URLSearchParams;for(let[n,K0]of y.entries())t.append(n,K0.toString());z=t.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),m={};try{m=g?JSON.parse(g):{}}catch{z=g}let t=typeof m==="object"&&m!==null&&!Array.isArray(m);if(z===void 0&&!t)z=g;if(z===void 0){let n=m,K0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...K0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},z=JSON.stringify(n),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let m=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,t=null;try{t=await ji(G.connection_url)??D}catch{t=D}let n={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:m,clientId:A,clientSecret:q,tokenEndpoint:t};await new U9(X.db,X.vault).upsert(n)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},HQ8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!IU(Y)||!await VU(Z)))return $.json({error:"forbidden"},403);let W=G?aT0:Y;if(G)wD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return oD($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!$9.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{$9.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),$9.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),$9.remove(W,K),N()})})})},$p6,Yp6,Xp6=()=>Qp6(v8),Jp6=()=>Zp6(v8);var UQ8=O(()=>{K8();W$();Od1();j08();A08();S08();b$0();yZ1();f08();p10();z9();Pc();d8();Q8();Ak0();c08();uY1();nG();QU();eH1();AG();_6();X6();GF1();w18();P18();S18();NF1();r18();PF1();IF1();VF1();aK();Gk0();kF1();N$8();Rk0();p98();t98();YZ8();vF1();JZ8();xq0();S$0();UZ8();gq0();KN1();BZ8();GN1();jZ8();IZ8();SZ8();CZ8();vZ8();xZ8();yZ8();hZ8();iZ8();gF1();oZ8();WN1();YN1();N60();N78();PJ();gA0();Y71();Ne();De();iY1();B78();O78();qF1();A78();DQ1();T78();Mt();to();LD();O9();PH1();V78();_78();KG0();WB1();T3();CF1();OD();UQ1();KG0();sR0();Tp0();Rp0();b78();qu();g78();ii();eH1();im();Gd();cR0();XQ8=C(hH(),1);$p6=new ai6,Yp6=new Set([A3,z3,HN,FN,GO,cE])});var OQ8={};R6(OQ8,{resolveClientDir:()=>Bp6,resolveAssetPathWithTraversalCheck:()=>DQ8,isPathWithinDirectory:()=>BQ8,createAssetHandler:()=>Dp6});import{resolve as s40,dirname as Wp6,join as Kp6,extname as Hp6,basename as Fp6,sep as NQ8}from"path";function Up6($,Z){if($===Z||Fp6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${NQ8}assets${NQ8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function BQ8($,Z){let Q=s40(Z),Y=s40($);return Y===Q||Y.startsWith(Q+"/")}function DQ8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=s40(Z,Q);if(!BQ8(Y,Z))return null;return Y}function Bp6($,Z="../client"){let Q=new URL($),Y=Wp6(Q.pathname);return s40(Y,Z)}function Dp6($={}){let{env:Z="production",clientDir:Q=Np6,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=DQ8({requestPath:W,clientDir:Q});if(!K)return null;let H=Kp6(K,"index.html"),F=s40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Hp6(K))?[H,F]:[];for(let D of[K,...B])try{let L=Bun.file(D);if(await L.exists())return new Response(L,{headers:Up6(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Np6="./dist/client";var LQ8=()=>{};var wQ8={};R6(wQ8,{tryUpgradePreviewWs:()=>zp6,tryHandlePreviewHttp:()=>Pp6,previewWebSocketHandler:()=>Ap6,parsePreviewBaseDomain:()=>Ep6,isPreviewWsData:()=>HC0,extractHandleFromHost:()=>LB1});function wp6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function jp6(){return new Response(Lp6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Ep6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function LB1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function Pp6($,Z){let Q=LB1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return e40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Km)&&wp6($))return jp6();return X.headers.delete(Km),X}function e40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function HC0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function zp6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=LB1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return e40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return e40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return e40(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return e40(426,"upgrade failed");return}function a40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Op6=256,Lp6='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',Ap6;var jQ8=O(()=>{b00();Ap6={open($){let Z=$.data;if(!HC0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),a40($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{a40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{a40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!HC0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Op6){a40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!HC0(Z))return;a40($,Z,1000,"")}}});var AQ8={};R6(AQ8,{printBanner:()=>Rp6,bannerLines:()=>zQ8,BANNER_LINES:()=>EQ8,BANNER_GRADIENT:()=>PQ8});function Tp6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function zQ8($){let Z=EQ8.map((Q,Y)=>{let[X,J,G]=Tp6(PQ8[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function Rp6($){console.log("");for(let Z of zQ8($))console.log(Z);console.log("")}var EQ8,PQ8;var TQ8=O(()=>{EQ8=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],PQ8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});K8();var kB1="13";function SB1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:kB1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}K8();import lQ8 from"pg";var CB1=8314027461559302n,cQ8=600000,mQ8=500;async function _B1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=cQ8}=$,X=$.log??((K)=>console.log(K)),J=new lQ8.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[CB1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await h$(mQ8)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[CB1.toString()])}catch{}await J.end().catch(()=>{})}}W$();PC0();_6();function lY8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function yC0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function OD1(){let $=lY8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:yC0($,"--cpu-prof-dir")??process.cwd(),name:yC0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(yC0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}uC0();var O60;function RD1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=iE();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),O60=setInterval(()=>void Z().catch(()=>{}),$),O60.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(O60)clearInterval(O60)}}import*as dY8 from"bun:jsc";var{startSamplingProfiler:iY8,samplingProfilerStackTraces:pY8}=dY8;function qD1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{iY8()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=pY8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function MD1(){OD1();let $=[RD1(),TD1(),qD1()];return()=>{for(let Z of $)Z()}}import{existsSync as _p6}from"fs";var aJ=E0();ND1();var{DBOS:$60,DBOSClient:qp6}=await import("@dbos-inc/dbos-sdk");function AB1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Mp6=[A3,z3,HN,FN,GO,cE],Ip6=aJ.dispatchRole==="worker"?Mp6:aJ.dispatchRole==="api"?[]:void 0;$60.setConfig(SB1({systemDatabaseUrl:AB1(aJ.databaseUrl,aJ.databasePgSsl),poolSize:aJ.dbosPoolSize,executorID:aJ.podName,listenQueues:Ip6}));var{createApp:Vp6}=await Promise.resolve().then(() => (UQ8(),FQ8)),{isServerPath:kp6}=await Promise.resolve().then(() => (N60(),oB1)),{createAssetHandler:Sp6,resolveClientDir:VQ8}=await Promise.resolve().then(() => (LQ8(),OQ8)),Cp6=aJ.port,RQ8=VQ8(import.meta.url,"../client"),kQ8=_p6(RQ8)?RQ8:VQ8(import.meta.url,"../dist/client"),vp6=Sp6({clientDir:kQ8,isServerPath:kp6}),bp6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function xp6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(bp6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:fp6,tryHandlePreviewHttp:yp6,tryUpgradePreviewWs:gp6,previewWebSocketHandler:wB1,isPreviewWsData:jB1}=await Promise.resolve().then(() => (jQ8(),wQ8)),{getOrInitSharedRunner:SQ8}=await Promise.resolve().then(() => (TW(),X2$)),CQ8=fp6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),qQ8={baseDomain:CQ8??"",getRunner:SQ8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())SQ8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var FC0=await Vp6({clientDir:kQ8}),EB1=process.env.DBOS_CONDUCTOR_KEY?.trim(),MQ8=process.env.DBOS_CONDUCTOR_URL?.trim();await _B1({databaseUrl:AB1(aJ.databaseUrl,aJ.databasePgSsl)},()=>$60.launch({...EB1?{conductorKey:EB1}:{},...EB1&&MQ8?{conductorURL:MQ8}:{}}));console.log(`[dbos] application version: ${$60.applicationVersion}`);var PB1=5,zB1=0;await I8(async()=>{zB1++;try{return await FC0.initDbos()}catch($){let Z=zB1>=PB1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${zB1}/${PB1} failed, ${Z}`,$),$}},{maxAttempts:PB1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!aJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (TQ8(),AQ8));console.log("");for(let Z of $())console.log(Z)}var hp6=Bun.serve({idleTimeout:0,port:Cp6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(CQ8){let Y=await gp6($,Z,qQ8);if(Y===void 0)return;if(Y)return Y;let X=await yp6($,qQ8);if(X)return X}let Q=await vp6($);if(Q)return xp6(Q);return FC0.fetch($,{server:Z})},websocket:{open($){if(jB1($.data))wB1.open($)},message($,Z){if(jB1($.data))wB1.message($,Z)},close($){if(jB1($.data))wB1.close($)}},development:!1}),up6=MD1();if(aJ.localMode)Promise.resolve().then(() => (wf(),kR0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (wf(),kR0));Z()}catch{}});var IQ8=!1;async function lp6($){let Z;try{Z=await qp6.create({systemDatabaseUrl:AB1(aJ.databaseUrl,aJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:z3,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:z3}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function UC0($){if(IQ8)return;IQ8=!0,console.log(`
3698
3698
  [shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{up6(),FC0.markShuttingDown();let J=bB1(aJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await h$(J),await hp6.stop(!0);let G=$60.executorID;await $60.shutdown(),await lp6(G),await FC0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>UC0("SIGTERM"));process.on("SIGINT",()=>UC0("SIGINT"));process.on("SIGHUP",()=>UC0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),UC0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.417.2",
3
+ "version": "4.417.3",
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,j as s,M as u}from"./index-CyII4Hy-.js";import{C as f}from"./index-CBgMqgGr.js";import{a as x}from"./thread-route-C-ixgfYh.js";import{u as g}from"./use-task-metadata-5QbFJsYe.js";import{AppViewContent as h}from"./project-app-view-BUmCHgox.js";import"./use-mobile-X-W7raUh.js";import"./thread-button-B_r_n7Hb.js";import"./agent-icon-D7av-7g5.js";import"./AlertCircle-D9i2E7F3.js";import"./Tool01-DqqLglaA.js";import"./ArrowUp-B7hrL_y6.js";import"./ArrowLeft-u4YtETq6.js";import"./ArrowRight-C4cldeMa.js";import"./ShoppingBag01-CotBP4xM.js";import"./ZoomOut-Cb1MSdsR.js";import"./Palette-BOu3DUls.js";import"./CheckCircle-D8vl4TSp.js";import"./Check-DqhJRaRV.js";import"./ChevronUp-DluVhiDY.js";import"./UserSquare-Di4b5Jsn.js";import"./Copy01-B9W9lwCV.js";import"./CreditCard01-9sMQt6FN.js";import"./DotsVertical-Dem42mI9.js";import"./Image01-BWtqkynf.js";import"./XClose-DCiqvNA0.js";import"./Key01-DZ2hPAde.js";import"./Link01-p2T3eBYS.js";import"./LinkExternal01-IH_7eB5z.js";import"./Monitor01-CMoavpTH.js";import"./Sun-z_ISlCfq.js";import"./Plus-C8_7wQVY.js";import"./SearchMd-DAeSqGzA.js";import"./Trash01-HIeO4K0u.js";import"./Upload01-D8px3BRb.js";import"./User01-DPMM5VZN.js";import"./Users01-DHetvQx6.js";import"./X-Sz3H1SE9.js";import"./use-chat-layout-state-1gL-qD2O.js";import"./use-panel-navigate-DPS2Zvaj.js";import"./use-project-scope-_m4cLdEj.js";import"./repository-binding-IbB3w4K1.js";import"./use-mcp-client-GJ7Avhzh.js";import"./auth-sg-w8oEV.js";import"./thread-intent-D4_GmX4s.js";import"./backoff-8mStPHYB.js";import"./task-board-D1I247i1.js";import"./schema-G9rWtgSi.js";import"./slugify-CEUa2lfQ.js";import"./sheet-tV1MwOuF.js";import"./tooltip-DLtvNdpW.js";import"./index-P5RrPnBn.js";import"./toolbar-icon-button-C-zNG8m8.js";import"./shell-layout-D9Y783sH.js";import"./avatar-BSQm92_6.js";import"./download-app-dialog-DGdj2CNQ.js";import"./dialog-BAdncaXR.js";import"./command-B1IBdA6E.js";import"./index-jxGovGZE.js";import"./integration-icon-Dm2HH7L6.js";import"./project-icon-Do6Rnqu9.js";import"./new-project-dialog-BglGMy73.js";import"./input-BBwMBvzR.js";import"./label-BECnr8LH.js";import"./repository-import-picker-nfveC9uu.js";import"./use-navigate-to-agent-S6T2X5iC.js";import"./repository-picker-BdcBJaAa.js";import"./useInfiniteQuery-CSJHUxLB.js";import"./infiniteQueryObserver-Bho6cXmS.js";import"./collection-search-BKPlHOv5.js";import"./use-debounced-value-Df5XXiWC.js";import"./use-organization-settings-DpQArW0s.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-EBGqXDef.js";import"./autosend-D06niWhv.js";import"./use-org-sso-Bzr9C2H6.js";import"./resizable-COGq4QgQ.js";import"./gateway-client-Ca84PQdv.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-B36LuHKI.js";import"./sandbox-lifecycle-context-CFoOqCj0.js";import"./use-session-runtime-CN6BtDG2.js";import"./chat-context-W4FU8MtG.js";import"./use-decopilot-events-pau4MIxW.js";import"./use-ai-providers-DXh7LZcb.js";import"./location-DBePU4bz.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-B3VIzrTv.js";import"./types-CLudYYhK.js";import"./task-route-Cu5whi95.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-CMUydgJv.js";import"./companions-core-BnuxEm_5.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-C8GSbvaz.js";import"./form-CZCyqosr.js";import"./provision-repo-scoped-github-connection-B6zdkC6p.js";import"./useQueries-fdUgbPnN.js";import"./authenticate-and-persist-oauth-BSxl3jgh.js";import"./mcp-oauth-DAVs1HXT.js";import"./track-6Zj0SWSe.js";import"./extract-connection-data-PBAB1zbf.js";import"./connection-DJ3l8W0U.js";const $=u("/shell/$org/org-shell/agent-shell/projects/$agentId/apps/$connectionId/$toolName");function j(){const t=c.c(9),{connectionId:o,toolName:r}=$.useParams(),l=x(),i=g(l);let p;t[0]!==o||t[1]!==i?.expanded_tools||t[2]!==r?(p=i?.expanded_tools?.find(a=>a.appId===o&&a.toolName===r),t[0]=o,t[1]=i?.expanded_tools,t[2]=r,t[3]=p):p=t[3];const d=p,e=`${o}:${r}`,n=d?.args;let m;return t[4]!==o||t[5]!==e||t[6]!==n||t[7]!==r?(m=s.jsx(h,{connectionId:o,toolName:r,args:n},e),t[4]=o,t[5]=e,t[6]=n,t[7]=r,t[8]=m):m=t[8],m}function ho(){const t=c.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(f.Content,{children:s.jsx(j,{})}),t[0]=o):o=t[0],o}export{ho as default};
@@ -1 +0,0 @@
1
- import{c,j as p,aP as b,u as g}from"./index-CyII4Hy-.js";import{C as j}from"./index-CBgMqgGr.js";import{F as v,H as S}from"./file-share-button-B9WbHN-Z.js";import{u as k,b as y,e as _}from"./use-org-fs-Db_U65fA.js";import{S as P}from"./settings-tab-BXwt3t3Z.js";import{b as w}from"./thread-route-C-ixgfYh.js";import"./use-mobile-X-W7raUh.js";import"./thread-button-B_r_n7Hb.js";import"./agent-icon-D7av-7g5.js";import"./AlertCircle-D9i2E7F3.js";import"./Tool01-DqqLglaA.js";import"./ArrowUp-B7hrL_y6.js";import"./ArrowLeft-u4YtETq6.js";import"./ArrowRight-C4cldeMa.js";import"./ShoppingBag01-CotBP4xM.js";import"./ZoomOut-Cb1MSdsR.js";import"./Palette-BOu3DUls.js";import"./CheckCircle-D8vl4TSp.js";import"./Check-DqhJRaRV.js";import"./ChevronUp-DluVhiDY.js";import"./UserSquare-Di4b5Jsn.js";import"./Copy01-B9W9lwCV.js";import"./CreditCard01-9sMQt6FN.js";import"./DotsVertical-Dem42mI9.js";import"./Image01-BWtqkynf.js";import"./XClose-DCiqvNA0.js";import"./Key01-DZ2hPAde.js";import"./Link01-p2T3eBYS.js";import"./LinkExternal01-IH_7eB5z.js";import"./Monitor01-CMoavpTH.js";import"./Sun-z_ISlCfq.js";import"./Plus-C8_7wQVY.js";import"./SearchMd-DAeSqGzA.js";import"./Trash01-HIeO4K0u.js";import"./Upload01-D8px3BRb.js";import"./User01-DPMM5VZN.js";import"./Users01-DHetvQx6.js";import"./X-Sz3H1SE9.js";import"./use-chat-layout-state-1gL-qD2O.js";import"./use-panel-navigate-DPS2Zvaj.js";import"./use-project-scope-_m4cLdEj.js";import"./repository-binding-IbB3w4K1.js";import"./use-mcp-client-GJ7Avhzh.js";import"./auth-sg-w8oEV.js";import"./thread-intent-D4_GmX4s.js";import"./backoff-8mStPHYB.js";import"./task-board-D1I247i1.js";import"./schema-G9rWtgSi.js";import"./slugify-CEUa2lfQ.js";import"./sheet-tV1MwOuF.js";import"./tooltip-DLtvNdpW.js";import"./index-P5RrPnBn.js";import"./toolbar-icon-button-C-zNG8m8.js";import"./shell-layout-D9Y783sH.js";import"./avatar-BSQm92_6.js";import"./download-app-dialog-DGdj2CNQ.js";import"./dialog-BAdncaXR.js";import"./command-B1IBdA6E.js";import"./index-jxGovGZE.js";import"./integration-icon-Dm2HH7L6.js";import"./project-icon-Do6Rnqu9.js";import"./new-project-dialog-BglGMy73.js";import"./input-BBwMBvzR.js";import"./label-BECnr8LH.js";import"./repository-import-picker-nfveC9uu.js";import"./use-navigate-to-agent-S6T2X5iC.js";import"./repository-picker-BdcBJaAa.js";import"./useInfiniteQuery-CSJHUxLB.js";import"./infiniteQueryObserver-Bho6cXmS.js";import"./collection-search-BKPlHOv5.js";import"./use-debounced-value-Df5XXiWC.js";import"./use-organization-settings-DpQArW0s.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-EBGqXDef.js";import"./autosend-D06niWhv.js";import"./use-org-sso-Bzr9C2H6.js";import"./resizable-COGq4QgQ.js";import"./popover-BRE8ILKE.js";import"./extract-connection-data-PBAB1zbf.js";import"./metadata-D72DunRR.js";import"./connection-DJ3l8W0U.js";import"./chat-context-W4FU8MtG.js";import"./use-decopilot-events-pau4MIxW.js";import"./use-ai-providers-DXh7LZcb.js";import"./location-DBePU4bz.js";import"./build-improve-prompt-doc-eFUmBuqz.js";import"./empty-state-BNUJszzA.js";import"./use-date-fns-locale-C6EVhunm.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-CZRSPnC8.js";import"./mcp-oauth-DAVs1HXT.js";import"./alert-dialog-jP-5jm3B.js";import"./textarea-CRla2I1O.js";import"./use-debounced-autosave-BtWCE5ml.js";import"./add-connection-dialog-BQ-RcQt0.js";import"./connection-card-B7FNddNF.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-zM2wJmT-.js";import"./form-CZCyqosr.js";import"./select-B-7TWojP.js";import"./connection-form-helpers-5EJj7jiQ.js";import"./authenticate-and-persist-oauth-BSxl3jgh.js";import"./collection-tabs-6aixyobS.js";import"./badge-UT8CIPlI.js";import"./use-infinite-scroll-uKPv2aM8.js";import"./useSuspenseInfiniteQuery-DW4u_6CR.js";import"./file-type-icon-Bq6mw2Ps.js";import"./checkbox-DS24sqZF.js";import"./search-input-DTbSmfbu.js";import"./use-mcp-auth-status-CbS3n7ZO.js";import"./types-CLudYYhK.js";import"./use-mcp-tools-B36LuHKI.js";import"./use-mcp-prompts-CZeaf3zb.js";import"./utils-CVEq3hMx.js";import"./switch-DVAJLCdX.js";import"./scroll-area-B0xiZfJx.js";import"./use-project-native-view-presence-YyFw7Uvc.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-bflKgUQZ.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-C5sN6Rj3.js";import"./virtual-mcp-DCz5YKSi.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-By2xsSYR.js";import"./use-secrets-CBaJAXrY.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function M(i){const t=c.c(5),{label:r}=i;let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=p.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=e):e=t[0];let o;t[1]!==r?(o=r&&p.jsx("p",{className:"text-xs text-muted-foreground",children:r}),t[1]=r,t[2]=o):o=t[2];let m;return t[3]!==o?(m=p.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[e,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e={refetchIntervalWhenAbsent:2e3},t[0]=e):e=t[0];const o=k(x,r,e),m=y(x)(r);if(o.isPending||!o.data){const h=!o.isPending&&!o.data?"Waiting for the deck to sync…":void 0;let l;return t[1]!==h?(l=p.jsx(M,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=p.jsx(v,{volume:x,path:r,shareMode:f,effectivePublic:u,url:d}),t[5]=r,t[6]=f,t[7]=u,t[8]=d,t[9]=a):a=t[9];let n;return t[10]!==r||t[11]!==m||t[12]!==s||t[13]!==a?(n=p.jsx(S,{readUrl:m,marker:s,title:r,savePath:r,trailing:a}),t[10]=r,t[11]=m,t[12]=s,t[13]=a,t[14]=n):n=t[14],n}function C(){const i=c.c(4);let t;i[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},i[0]=t):t=i[0];const r=g(t),e=w(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==e?(m=o?p.jsx(D,{path:o},o):p.jsx(P,{virtualMcpId:e}),i[1]=o,i[2]=e,i[3]=m):m=i[3],m}function Qo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=p.jsx(j.Content,{children:p.jsx(C,{})}),i[0]=t):t=i[0],t}export{Qo as default};
@@ -1 +0,0 @@
1
- import{c as s,j as e}from"./index-CyII4Hy-.js";import{C as a}from"./index-CBgMqgGr.js";import{p as n,L as c}from"./library-tab-DfKpL79j.js";import{u as l}from"./use-project-scope-_m4cLdEj.js";import"./use-mobile-X-W7raUh.js";import"./thread-button-B_r_n7Hb.js";import"./agent-icon-D7av-7g5.js";import"./AlertCircle-D9i2E7F3.js";import"./Tool01-DqqLglaA.js";import"./ArrowUp-B7hrL_y6.js";import"./ArrowLeft-u4YtETq6.js";import"./ArrowRight-C4cldeMa.js";import"./ShoppingBag01-CotBP4xM.js";import"./ZoomOut-Cb1MSdsR.js";import"./Palette-BOu3DUls.js";import"./CheckCircle-D8vl4TSp.js";import"./Check-DqhJRaRV.js";import"./ChevronUp-DluVhiDY.js";import"./UserSquare-Di4b5Jsn.js";import"./Copy01-B9W9lwCV.js";import"./CreditCard01-9sMQt6FN.js";import"./DotsVertical-Dem42mI9.js";import"./Image01-BWtqkynf.js";import"./XClose-DCiqvNA0.js";import"./Key01-DZ2hPAde.js";import"./Link01-p2T3eBYS.js";import"./LinkExternal01-IH_7eB5z.js";import"./Monitor01-CMoavpTH.js";import"./Sun-z_ISlCfq.js";import"./Plus-C8_7wQVY.js";import"./SearchMd-DAeSqGzA.js";import"./Trash01-HIeO4K0u.js";import"./Upload01-D8px3BRb.js";import"./User01-DPMM5VZN.js";import"./Users01-DHetvQx6.js";import"./X-Sz3H1SE9.js";import"./use-chat-layout-state-1gL-qD2O.js";import"./thread-route-C-ixgfYh.js";import"./use-panel-navigate-DPS2Zvaj.js";import"./thread-intent-D4_GmX4s.js";import"./use-mcp-client-GJ7Avhzh.js";import"./auth-sg-w8oEV.js";import"./backoff-8mStPHYB.js";import"./task-board-D1I247i1.js";import"./schema-G9rWtgSi.js";import"./slugify-CEUa2lfQ.js";import"./sheet-tV1MwOuF.js";import"./tooltip-DLtvNdpW.js";import"./index-P5RrPnBn.js";import"./toolbar-icon-button-C-zNG8m8.js";import"./shell-layout-D9Y783sH.js";import"./avatar-BSQm92_6.js";import"./download-app-dialog-DGdj2CNQ.js";import"./dialog-BAdncaXR.js";import"./command-B1IBdA6E.js";import"./index-jxGovGZE.js";import"./integration-icon-Dm2HH7L6.js";import"./project-icon-Do6Rnqu9.js";import"./new-project-dialog-BglGMy73.js";import"./input-BBwMBvzR.js";import"./label-BECnr8LH.js";import"./repository-import-picker-nfveC9uu.js";import"./use-navigate-to-agent-S6T2X5iC.js";import"./repository-binding-IbB3w4K1.js";import"./repository-picker-BdcBJaAa.js";import"./useInfiniteQuery-CSJHUxLB.js";import"./infiniteQueryObserver-Bho6cXmS.js";import"./collection-search-BKPlHOv5.js";import"./use-debounced-value-Df5XXiWC.js";import"./use-organization-settings-DpQArW0s.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-EBGqXDef.js";import"./autosend-D06niWhv.js";import"./use-org-sso-Bzr9C2H6.js";import"./resizable-COGq4QgQ.js";import"./search-toggle-BIaj-qey.js";import"./alert-dialog-jP-5jm3B.js";import"./location-DBePU4bz.js";import"./use-org-fs-Db_U65fA.js";import"./use-org-repo-syncs-CNnHLgIG.js";import"./textarea-CRla2I1O.js";import"./markdown-Due1h4mi.js";import"./org-file-open-context-CdICBbAH.js";import"./file-share-button-B9WbHN-Z.js";import"./popover-BRE8ILKE.js";import"./preview-dialog-Cn4XaU4a.js";import"./preview-content-Dn7hR4M-.js";import"./file-preview-BVIQNwsF.js";import"./utils-huVSNvIG.js";import"./editor-G2b4JEg0.js";import"./file-type-icon-Bq6mw2Ps.js";import"./folder-icon-B3im8_vL.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-Df8QoO5m.js";function to(){const t=s.c(6),{project:o}=l(),p=o?.id??"pending";let r;t[0]!==o?(r=o?n(o):void 0,t[0]=o,t[1]=r):r=t[1];const m=o?.title??void 0;let i;return t[2]!==p||t[3]!==r||t[4]!==m?(i=e.jsx(a.Content,{children:e.jsx(c,{root:r,rootLabel:m},p)}),t[2]=p,t[3]=r,t[4]=m,t[5]=i):i=t[5],i}export{to as default};
@@ -1 +0,0 @@
1
- import{c as a,j as s,u as n}from"./index-CyII4Hy-.js";import{C as l}from"./index-CBgMqgGr.js";import{L as c}from"./preview-content-Dn7hR4M-.js";import{a as f}from"./use-panel-navigate-DPS2Zvaj.js";import{S as u}from"./settings-tab-BXwt3t3Z.js";import{b as h}from"./thread-route-C-ixgfYh.js";import"./use-mobile-X-W7raUh.js";import"./thread-button-B_r_n7Hb.js";import"./agent-icon-D7av-7g5.js";import"./AlertCircle-D9i2E7F3.js";import"./Tool01-DqqLglaA.js";import"./ArrowUp-B7hrL_y6.js";import"./ArrowLeft-u4YtETq6.js";import"./ArrowRight-C4cldeMa.js";import"./ShoppingBag01-CotBP4xM.js";import"./ZoomOut-Cb1MSdsR.js";import"./Palette-BOu3DUls.js";import"./CheckCircle-D8vl4TSp.js";import"./Check-DqhJRaRV.js";import"./ChevronUp-DluVhiDY.js";import"./UserSquare-Di4b5Jsn.js";import"./Copy01-B9W9lwCV.js";import"./CreditCard01-9sMQt6FN.js";import"./DotsVertical-Dem42mI9.js";import"./Image01-BWtqkynf.js";import"./XClose-DCiqvNA0.js";import"./Key01-DZ2hPAde.js";import"./Link01-p2T3eBYS.js";import"./LinkExternal01-IH_7eB5z.js";import"./Monitor01-CMoavpTH.js";import"./Sun-z_ISlCfq.js";import"./Plus-C8_7wQVY.js";import"./SearchMd-DAeSqGzA.js";import"./Trash01-HIeO4K0u.js";import"./Upload01-D8px3BRb.js";import"./User01-DPMM5VZN.js";import"./Users01-DHetvQx6.js";import"./X-Sz3H1SE9.js";import"./use-chat-layout-state-1gL-qD2O.js";import"./thread-intent-D4_GmX4s.js";import"./use-mcp-client-GJ7Avhzh.js";import"./auth-sg-w8oEV.js";import"./backoff-8mStPHYB.js";import"./task-board-D1I247i1.js";import"./schema-G9rWtgSi.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-_m4cLdEj.js";import"./repository-binding-IbB3w4K1.js";import"./sheet-tV1MwOuF.js";import"./tooltip-DLtvNdpW.js";import"./index-P5RrPnBn.js";import"./toolbar-icon-button-C-zNG8m8.js";import"./shell-layout-D9Y783sH.js";import"./avatar-BSQm92_6.js";import"./download-app-dialog-DGdj2CNQ.js";import"./dialog-BAdncaXR.js";import"./command-B1IBdA6E.js";import"./index-jxGovGZE.js";import"./integration-icon-Dm2HH7L6.js";import"./project-icon-Do6Rnqu9.js";import"./new-project-dialog-BglGMy73.js";import"./input-BBwMBvzR.js";import"./label-BECnr8LH.js";import"./repository-import-picker-nfveC9uu.js";import"./use-navigate-to-agent-S6T2X5iC.js";import"./repository-picker-BdcBJaAa.js";import"./useInfiniteQuery-CSJHUxLB.js";import"./infiniteQueryObserver-Bho6cXmS.js";import"./collection-search-BKPlHOv5.js";import"./use-debounced-value-Df5XXiWC.js";import"./use-organization-settings-DpQArW0s.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-EBGqXDef.js";import"./autosend-D06niWhv.js";import"./use-org-sso-Bzr9C2H6.js";import"./resizable-COGq4QgQ.js";import"./file-preview-BVIQNwsF.js";import"./use-org-fs-Db_U65fA.js";import"./utils-huVSNvIG.js";import"./editor-G2b4JEg0.js";import"./file-type-icon-Bq6mw2Ps.js";import"./markdown-Due1h4mi.js";import"./org-file-open-context-CdICBbAH.js";import"./file-share-button-B9WbHN-Z.js";import"./popover-BRE8ILKE.js";import"./location-DBePU4bz.js";import"./extract-connection-data-PBAB1zbf.js";import"./metadata-D72DunRR.js";import"./connection-DJ3l8W0U.js";import"./chat-context-W4FU8MtG.js";import"./use-decopilot-events-pau4MIxW.js";import"./use-ai-providers-DXh7LZcb.js";import"./build-improve-prompt-doc-eFUmBuqz.js";import"./empty-state-BNUJszzA.js";import"./use-date-fns-locale-C6EVhunm.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-CZRSPnC8.js";import"./mcp-oauth-DAVs1HXT.js";import"./alert-dialog-jP-5jm3B.js";import"./textarea-CRla2I1O.js";import"./use-debounced-autosave-BtWCE5ml.js";import"./add-connection-dialog-BQ-RcQt0.js";import"./connection-card-B7FNddNF.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-zM2wJmT-.js";import"./form-CZCyqosr.js";import"./select-B-7TWojP.js";import"./connection-form-helpers-5EJj7jiQ.js";import"./authenticate-and-persist-oauth-BSxl3jgh.js";import"./collection-tabs-6aixyobS.js";import"./badge-UT8CIPlI.js";import"./use-infinite-scroll-uKPv2aM8.js";import"./useSuspenseInfiniteQuery-DW4u_6CR.js";import"./checkbox-DS24sqZF.js";import"./search-input-DTbSmfbu.js";import"./use-mcp-auth-status-CbS3n7ZO.js";import"./types-CLudYYhK.js";import"./use-mcp-tools-B36LuHKI.js";import"./use-mcp-prompts-CZeaf3zb.js";import"./utils-CVEq3hMx.js";import"./switch-DVAJLCdX.js";import"./scroll-area-B0xiZfJx.js";import"./use-project-native-view-presence-YyFw7Uvc.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-bflKgUQZ.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-C5sN6Rj3.js";import"./virtual-mcp-DCz5YKSi.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-By2xsSYR.js";import"./use-secrets-CBaJAXrY.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(4),{previewPath:m,onClose:p,showSeeInLibrary:o}=r,i=o===void 0?!1:o;let e;return t[0]!==p||t[1]!==m||t[2]!==i?(e=s.jsx("div",{className:"flex h-full w-full flex-col bg-background",children:s.jsx(c,{previewPath:m,onClose:p,showSeeInLibrary:i,variant:"panel"})}),t[0]=p,t[1]=m,t[2]=i,t[3]=e):e=t[3],e}function x(r){const t=a.c(5),{path:m}=r,{closePanel:p}=f();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let e;return t[2]!==i||t[3]!==m?(e=s.jsx(b,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=e):e=t[4],e}function y(){const r=a.c(4);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},r[0]=t):t=r[0];const m=n(t),p=h(),o="path"in m&&typeof m.path=="string"?m.path:void 0;let i;return r[1]!==o||r[2]!==p?(i=o?s.jsx(x,{path:o},o):s.jsx(u,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Gr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(l.Content,{children:s.jsx(y,{})}),r[0]=t):t=r[0],t}export{Gr as default};
@@ -1 +0,0 @@
1
- import{c as m,j as i}from"./index-CyII4Hy-.js";import{C as p}from"./index-CBgMqgGr.js";import{S as e}from"./settings-tab-BXwt3t3Z.js";import{b as n}from"./thread-route-C-ixgfYh.js";import"./use-mobile-X-W7raUh.js";import"./thread-button-B_r_n7Hb.js";import"./agent-icon-D7av-7g5.js";import"./AlertCircle-D9i2E7F3.js";import"./Tool01-DqqLglaA.js";import"./ArrowUp-B7hrL_y6.js";import"./ArrowLeft-u4YtETq6.js";import"./ArrowRight-C4cldeMa.js";import"./ShoppingBag01-CotBP4xM.js";import"./ZoomOut-Cb1MSdsR.js";import"./Palette-BOu3DUls.js";import"./CheckCircle-D8vl4TSp.js";import"./Check-DqhJRaRV.js";import"./ChevronUp-DluVhiDY.js";import"./UserSquare-Di4b5Jsn.js";import"./Copy01-B9W9lwCV.js";import"./CreditCard01-9sMQt6FN.js";import"./DotsVertical-Dem42mI9.js";import"./Image01-BWtqkynf.js";import"./XClose-DCiqvNA0.js";import"./Key01-DZ2hPAde.js";import"./Link01-p2T3eBYS.js";import"./LinkExternal01-IH_7eB5z.js";import"./Monitor01-CMoavpTH.js";import"./Sun-z_ISlCfq.js";import"./Plus-C8_7wQVY.js";import"./SearchMd-DAeSqGzA.js";import"./Trash01-HIeO4K0u.js";import"./Upload01-D8px3BRb.js";import"./User01-DPMM5VZN.js";import"./Users01-DHetvQx6.js";import"./X-Sz3H1SE9.js";import"./use-chat-layout-state-1gL-qD2O.js";import"./use-panel-navigate-DPS2Zvaj.js";import"./use-project-scope-_m4cLdEj.js";import"./repository-binding-IbB3w4K1.js";import"./use-mcp-client-GJ7Avhzh.js";import"./auth-sg-w8oEV.js";import"./thread-intent-D4_GmX4s.js";import"./backoff-8mStPHYB.js";import"./task-board-D1I247i1.js";import"./schema-G9rWtgSi.js";import"./slugify-CEUa2lfQ.js";import"./sheet-tV1MwOuF.js";import"./tooltip-DLtvNdpW.js";import"./index-P5RrPnBn.js";import"./toolbar-icon-button-C-zNG8m8.js";import"./shell-layout-D9Y783sH.js";import"./avatar-BSQm92_6.js";import"./download-app-dialog-DGdj2CNQ.js";import"./dialog-BAdncaXR.js";import"./command-B1IBdA6E.js";import"./index-jxGovGZE.js";import"./integration-icon-Dm2HH7L6.js";import"./project-icon-Do6Rnqu9.js";import"./new-project-dialog-BglGMy73.js";import"./input-BBwMBvzR.js";import"./label-BECnr8LH.js";import"./repository-import-picker-nfveC9uu.js";import"./use-navigate-to-agent-S6T2X5iC.js";import"./repository-picker-BdcBJaAa.js";import"./useInfiniteQuery-CSJHUxLB.js";import"./infiniteQueryObserver-Bho6cXmS.js";import"./collection-search-BKPlHOv5.js";import"./use-debounced-value-Df5XXiWC.js";import"./use-organization-settings-DpQArW0s.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-EBGqXDef.js";import"./autosend-D06niWhv.js";import"./use-org-sso-Bzr9C2H6.js";import"./resizable-COGq4QgQ.js";import"./extract-connection-data-PBAB1zbf.js";import"./metadata-D72DunRR.js";import"./connection-DJ3l8W0U.js";import"./chat-context-W4FU8MtG.js";import"./use-decopilot-events-pau4MIxW.js";import"./use-ai-providers-DXh7LZcb.js";import"./location-DBePU4bz.js";import"./build-improve-prompt-doc-eFUmBuqz.js";import"./empty-state-BNUJszzA.js";import"./use-date-fns-locale-C6EVhunm.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-CZRSPnC8.js";import"./mcp-oauth-DAVs1HXT.js";import"./alert-dialog-jP-5jm3B.js";import"./textarea-CRla2I1O.js";import"./use-debounced-autosave-BtWCE5ml.js";import"./add-connection-dialog-BQ-RcQt0.js";import"./connection-card-B7FNddNF.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-zM2wJmT-.js";import"./form-CZCyqosr.js";import"./select-B-7TWojP.js";import"./connection-form-helpers-5EJj7jiQ.js";import"./authenticate-and-persist-oauth-BSxl3jgh.js";import"./collection-tabs-6aixyobS.js";import"./badge-UT8CIPlI.js";import"./use-infinite-scroll-uKPv2aM8.js";import"./useSuspenseInfiniteQuery-DW4u_6CR.js";import"./file-type-icon-Bq6mw2Ps.js";import"./use-org-fs-Db_U65fA.js";import"./checkbox-DS24sqZF.js";import"./search-input-DTbSmfbu.js";import"./use-mcp-auth-status-CbS3n7ZO.js";import"./types-CLudYYhK.js";import"./use-mcp-tools-B36LuHKI.js";import"./use-mcp-prompts-CZeaf3zb.js";import"./utils-CVEq3hMx.js";import"./switch-DVAJLCdX.js";import"./popover-BRE8ILKE.js";import"./scroll-area-B0xiZfJx.js";import"./use-project-native-view-presence-YyFw7Uvc.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-bflKgUQZ.js";import"./site-slug-DebpOoQq.js";import"./optimistic-project-sidebar-views-C5sN6Rj3.js";import"./virtual-mcp-DCz5YKSi.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-By2xsSYR.js";import"./use-secrets-CBaJAXrY.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function s(){const t=m.c(2),o=n();let r;return t[0]!==o?(r=i.jsx(e,{virtualMcpId:o}),t[0]=o,t[1]=r):r=t[1],r}function _o(){const t=m.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=i.jsx(p.Content,{children:i.jsx(s,{})}),t[0]=o):o=t[0],o}export{_o as default};