decocms 4.429.9 → 4.429.10

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 (351) hide show
  1. package/dist/client/assets/{AlertCircle-D6fR9-Kh.js → AlertCircle-DKmCApDa.js} +1 -1
  2. package/dist/client/assets/{AreaChart-D3g6jK1A.js → AreaChart-DIXuz0Cd.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-DiOkGCI1.js → ArrowLeft-BwFqyUG8.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-DNObFWEA.js → ArrowRight-CHV05UUB.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-Qm1_vfBa.js → ArrowUp-BJY8NUma.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-CIQ2bcnU.js → CartesianChart-BuoW_-QK.js} +1 -1
  7. package/dist/client/assets/{Check-p5ZrYqb6.js → Check-DNTKbOF1.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-DjVa5rwp.js → CheckCircle-Dk8xW2dQ.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-CQ_Ndmgv.js → ChevronUp-DGldI0Ph.js} +1 -1
  10. package/dist/client/assets/{Copy01-no2ZZAoV.js → Copy01-6fj6p2dr.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-BPdTH-LK.js → CreditCard01-BIdq_aTI.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-FLvQTkZX.js → DotsVertical-CgKNtAHX.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext-Bf9yjefH.js → ErrorBarContext-BBG_EAjz.js} +1 -1
  14. package/dist/client/assets/{Image01-Bjku8bco.js → Image01-0p0qVrVu.js} +1 -1
  15. package/dist/client/assets/{Key01-D548PT0E.js → Key01-D7BOKCsv.js} +1 -1
  16. package/dist/client/assets/{Line-BSHtBz42.js → Line-CJ6HzoSY.js} +1 -1
  17. package/dist/client/assets/{Link01-DX6Qdft3.js → Link01-BY6r9e0W.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-o2rJBAh0.js → LinkExternal01-7OpzTzCD.js} +1 -1
  19. package/dist/client/assets/{Monitor01-De6BgGjU.js → Monitor01-Wlo-v8rP.js} +1 -1
  20. package/dist/client/assets/{Palette-CTKkYfpz.js → Palette-DZVSqT20.js} +1 -1
  21. package/dist/client/assets/{Plus-7DucV5vT.js → Plus-BZ-9hfZe.js} +1 -1
  22. package/dist/client/assets/{SearchMd-QN2wlvPm.js → SearchMd-CtjLEzGO.js} +1 -1
  23. package/dist/client/assets/{Sector-6zmPiR9T.js → Sector-DG2ZMYxc.js} +1 -1
  24. package/dist/client/assets/{ShoppingBag01-D7jpE92Z.js → ShoppingBag01-DznHZPA0.js} +1 -1
  25. package/dist/client/assets/{Sun-CF1vsofy.js → Sun-eXH36H9e.js} +1 -1
  26. package/dist/client/assets/{Tool01-7fCUFk4M.js → Tool01-Dk2ye-LU.js} +1 -1
  27. package/dist/client/assets/{Trash01-CiA3gHsE.js → Trash01-Gu3_9b_o.js} +1 -1
  28. package/dist/client/assets/{Upload01-aKM-oPPY.js → Upload01-uetj4iXc.js} +1 -1
  29. package/dist/client/assets/{User01-vQ2joBqZ.js → User01-D1mABHDT.js} +1 -1
  30. package/dist/client/assets/{UserSquare-D6OSjogb.js → UserSquare-lb7I00eF.js} +1 -1
  31. package/dist/client/assets/{Users01-C3PXAlQO.js → Users01-CobN2IHd.js} +1 -1
  32. package/dist/client/assets/{X-DCDQ3QOD.js → X-BdLoi6uz.js} +1 -1
  33. package/dist/client/assets/{XAxis-QiWeOkaO.js → XAxis-BgPA12lx.js} +1 -1
  34. package/dist/client/assets/{XClose-DPKustWd.js → XClose-C5QcJ6D0.js} +1 -1
  35. package/dist/client/assets/{ZoomOut-Cx0_RhkV.js → ZoomOut-BWkCTBCz.js} +1 -1
  36. package/dist/client/assets/{access-gate-da5dSFPS.js → access-gate-Cey1OqXz.js} +1 -1
  37. package/dist/client/assets/{add-connection-dialog-DZDyC_s4.js → add-connection-dialog-1ztWzBZ8.js} +1 -1
  38. package/dist/client/assets/{agent-analytics-FvD3tKln.js → agent-analytics-Gt7o_wzT.js} +1 -1
  39. package/dist/client/assets/agent-app-Dbe-7vgH.js +1 -0
  40. package/dist/client/assets/{agent-assets-BOqP65qC.js → agent-assets-CuDfZttC.js} +1 -1
  41. package/dist/client/assets/{agent-automation-DGwvVKUF.js → agent-automation-CoOBVhBN.js} +1 -1
  42. package/dist/client/assets/{agent-automations-DrLCjBc3.js → agent-automations-CO-xugvW.js} +1 -1
  43. package/dist/client/assets/{agent-connect-sources-B6lH7pxN.js → agent-connect-sources-Ca8AD8mq.js} +1 -1
  44. package/dist/client/assets/agent-deck-CSLkMaif.js +1 -0
  45. package/dist/client/assets/{agent-e2e-CN41euIX.js → agent-e2e-BK7Euu9m.js} +1 -1
  46. package/dist/client/assets/{agent-experiments-CI9HL_qf.js → agent-experiments-nyAADWuK.js} +1 -1
  47. package/dist/client/assets/{agent-file-DG6THDTg.js → agent-file-D-xcqFZI.js} +1 -1
  48. package/dist/client/assets/{agent-git-BEB-ZRI3.js → agent-git-BfL9IA4Y.js} +1 -1
  49. package/dist/client/assets/{agent-hosting-B7gL6NW3.js → agent-hosting-Dut4cUJc.js} +1 -1
  50. package/dist/client/assets/{agent-icon-CU0i04so.js → agent-icon-vRJX06Pc.js} +1 -1
  51. package/dist/client/assets/agent-library-ZvK_jjQF.js +1 -0
  52. package/dist/client/assets/agent-library-file-54TS4_RN.js +1 -0
  53. package/dist/client/assets/{agent-monitor-CvE7W-kh.js → agent-monitor-CviCJRUD.js} +1 -1
  54. package/dist/client/assets/{agent-overview-ymvObxGX.js → agent-overview-9muBKyf7.js} +1 -1
  55. package/dist/client/assets/agent-settings-BAsOnUPJ.js +1 -0
  56. package/dist/client/assets/{agent-site-editor-VM0cGdql.js → agent-site-editor-DRo4ld7V.js} +1 -1
  57. package/dist/client/assets/agent-site-editor-code-BdzLMsuB.js +2 -0
  58. package/dist/client/assets/{agent-site-editor-content-C1bhzwk0.js → agent-site-editor-content-CqksOsD1.js} +3 -3
  59. package/dist/client/assets/{agent-site-editor-preview-CMRwVo8Z.js → agent-site-editor-preview-DdNev6__.js} +3 -3
  60. package/dist/client/assets/agent-view-CLQ9a3Xs.js +1 -0
  61. package/dist/client/assets/{agent-view-guard-ONCvFPsE.js → agent-view-guard-CMm4aT4X.js} +1 -1
  62. package/dist/client/assets/{agents-list-Ccm2cM2d.js → agents-list-C2WRI5B_.js} +1 -1
  63. package/dist/client/assets/{ai-providers-Dg72o8bX.js → ai-providers-DUEvqOGo.js} +1 -1
  64. package/dist/client/assets/{alert-dialog-D2qUdh2f.js → alert-dialog-D1CSBuVt.js} +1 -1
  65. package/dist/client/assets/{alert-zg70ln5j.js → alert-m4enA-72.js} +1 -1
  66. package/dist/client/assets/{analytics-sections-F1MA5NJa.js → analytics-sections-DWzLfe6K.js} +1 -1
  67. package/dist/client/assets/{api-keys-Ddl2zKRP.js → api-keys-D3W3-bn5.js} +1 -1
  68. package/dist/client/assets/api-keys-DXx_tj2n.js +1 -0
  69. package/dist/client/assets/{app-editor-DhlDIvP_.js → app-editor-BrO4LSqn.js} +1 -1
  70. package/dist/client/assets/{asset-utils-DdnFk1ID.js → asset-utils-Cs-9a-z2.js} +1 -1
  71. package/dist/client/assets/{auth-catchall-Dvxy-XoT.js → auth-catchall-CCf0yXyK.js} +1 -1
  72. package/dist/client/assets/{auth-entry-BJqMofGi.js → auth-entry-DcyQGSPS.js} +1 -1
  73. package/dist/client/assets/{auth-BME_-CgD.js → auth-oZFMRz6f.js} +1 -1
  74. package/dist/client/assets/{auth-split-layout-D8xVEYCp.js → auth-split-layout-BL2AdBXg.js} +1 -1
  75. package/dist/client/assets/{authenticate-and-persist-oauth-BoehZcx9.js → authenticate-and-persist-oauth-Dz4Ev2mn.js} +1 -1
  76. package/dist/client/assets/{automation-list-row-DdsKAMX_.js → automation-list-row-vzvjcxcS.js} +1 -1
  77. package/dist/client/assets/{automation-runs-ByAFFz8U.js → automation-runs-Cj0X1wWP.js} +1 -1
  78. package/dist/client/assets/{automations-DgDBnY3i.js → automations-x6-pockc.js} +1 -1
  79. package/dist/client/assets/{autosend-CTahflnC.js → autosend-BR-AxRqX.js} +1 -1
  80. package/dist/client/assets/{avatar-BrhFB-vr.js → avatar-CVyfIjHq.js} +1 -1
  81. package/dist/client/assets/{badge-B9v8v8eG.js → badge-DKTieZTi.js} +1 -1
  82. package/dist/client/assets/{block-document-Bkth-ApC.js → block-document-RyWbjZfD.js} +1 -1
  83. package/dist/client/assets/{blocks-preview-workspace-context-BwDAcqvZ.js → blocks-preview-workspace-context-BGHIo01Y.js} +1 -1
  84. package/dist/client/assets/{buckets-J5lW_PXM.js → buckets-BRECsjIs.js} +1 -1
  85. package/dist/client/assets/{build-improve-prompt-doc-C4UobK7K.js → build-improve-prompt-doc-CGhfAuK4.js} +1 -1
  86. package/dist/client/assets/{calendar-DTTqJkwq.js → calendar-CxuTxwoq.js} +1 -1
  87. package/dist/client/assets/{capability-load-error-tbPsNSsn.js → capability-load-error-N5DqAlNc.js} +1 -1
  88. package/dist/client/assets/{category-editor-CzagSeDk.js → category-editor-1NaveyUf.js} +1 -1
  89. package/dist/client/assets/{chart-C3Z9gE6e.js → chart-DFFsotOE.js} +1 -1
  90. package/dist/client/assets/{chat-context-D1RQ0hn6.js → chat-context-CHMvG291.js} +1 -1
  91. package/dist/client/assets/{chat-draft-Rop4w833.js → chat-draft-2zID_cRw.js} +1 -1
  92. package/dist/client/assets/{checkbox-CdMaRU6A.js → checkbox-CijMXhyl.js} +1 -1
  93. package/dist/client/assets/{choose-editor-CFBBTZj5.js → choose-editor-BIgunT0x.js} +1 -1
  94. package/dist/client/assets/{claim-phase-copy-DbTpDsdS.js → claim-phase-copy-Cf-QyyNw.js} +1 -1
  95. package/dist/client/assets/{cli-auth-success-OgyK1vp5.js → cli-auth-success-Dyfd46XD.js} +1 -1
  96. package/dist/client/assets/{client-icons-CjK-B4SQ.js → client-icons-C_FQZmqO.js} +1 -1
  97. package/dist/client/assets/{collapsible-DCazOdpt.js → collapsible-CmaYMPSs.js} +1 -1
  98. package/dist/client/assets/{collection-detail-BNiGcnH_.js → collection-detail-CvQdogjL.js} +1 -1
  99. package/dist/client/assets/{collection-display-button-B8SvlYyL.js → collection-display-button-CJaFMQ5Q.js} +1 -1
  100. package/dist/client/assets/{collection-search-BF8lJCHd.js → collection-search-VYsS9TLc.js} +1 -1
  101. package/dist/client/assets/{collection-table-wrapper-CuE_VJ7G.js → collection-table-wrapper--hFtmZm7.js} +1 -1
  102. package/dist/client/assets/{collection-tabs-D3itJSz3.js → collection-tabs-AcGOMqBb.js} +1 -1
  103. package/dist/client/assets/{combobox-Bw5wYR-0.js → combobox-uLE3dkRC.js} +1 -1
  104. package/dist/client/assets/{command-B--xK9e7.js → command-B3-BMEIX.js} +1 -1
  105. package/dist/client/assets/{companion-mcps-section-C-Jd6iHr.js → companion-mcps-section-BZIKI587.js} +1 -1
  106. package/dist/client/assets/{config-DQXaNT9g.js → config-DQZquT9x.js} +1 -1
  107. package/dist/client/assets/{connect-B5I2xOR7.js → connect-Cf7v5Bzx.js} +1 -1
  108. package/dist/client/assets/{connect-layout-DzGD_Odc.js → connect-layout-BhHjDcvb.js} +1 -1
  109. package/dist/client/assets/{connection--ml1d00t.js → connection-Bxp8CJIF.js} +1 -1
  110. package/dist/client/assets/{connection-card-wiltHPZ1.js → connection-card-GKtXOpG9.js} +1 -1
  111. package/dist/client/assets/{connection-detail-pIzH_4h3.js → connection-detail-DUhnrG9K.js} +1 -1
  112. package/dist/client/assets/{connection-form-helpers-goLtSvt6.js → connection-form-helpers-my3nU4YI.js} +1 -1
  113. package/dist/client/assets/{connections-JUHnLgfe.js → connections-B0H64xaE.js} +1 -1
  114. package/dist/client/assets/{context-PWYHxIhk.js → context-DhI4bt3K.js} +1 -1
  115. package/dist/client/assets/{context-menu-CZLB6_c8.js → context-menu-D8wMMh_Q.js} +1 -1
  116. package/dist/client/assets/{create-organization-dialog-CO0wJH61.js → create-organization-dialog-CUp0pkrl.js} +1 -1
  117. package/dist/client/assets/{daily-pulse-BaFwFPPZ.js → daily-pulse-Cn1ARmzt.js} +1 -1
  118. package/dist/client/assets/{decopilot-BSgekotY.js → decopilot-zV1W4LOx.js} +1 -1
  119. package/dist/client/assets/{dialog-DQNNu_f1.js → dialog-Dlbcts3k.js} +1 -1
  120. package/dist/client/assets/{discover-BfrAOTVO.js → discover-DK_xCp7V.js} +1 -1
  121. package/dist/client/assets/{domain-settings-BEcdmXJZ.js → domain-settings-wtMFvdQc.js} +1 -1
  122. package/dist/client/assets/{download-app-dialog-CD7kK8MH.js → download-app-dialog-eZatHcib.js} +1 -1
  123. package/dist/client/assets/{drawer-BzY4tdXy.js → drawer-DspCN2Yn.js} +1 -1
  124. package/dist/client/assets/{editor-CJ05XGg1.js → editor-AvxByRxT.js} +1 -1
  125. package/dist/client/assets/{empty-state-CtEq3xuD.js → empty-state-CZAXET6T.js} +1 -1
  126. package/dist/client/assets/{empty-state-CadUnitN.js → empty-state-DuvEAg1G.js} +1 -1
  127. package/dist/client/assets/{extract-connection-data-BhLqPUG4.js → extract-connection-data-Du6rlDFh.js} +1 -1
  128. package/dist/client/assets/{feature-gate-DNLsHU30.js → feature-gate-DDoeGDb8.js} +1 -1
  129. package/dist/client/assets/{feature-paywall-D0PH-I-M.js → feature-paywall-CCumYX5V.js} +1 -1
  130. package/dist/client/assets/{file-explorer-DLGs4T_f.js → file-explorer-CnDhlMyr.js} +1 -1
  131. package/dist/client/assets/{file-preview-CigrKhHQ.js → file-preview-DNltN574.js} +1 -1
  132. package/dist/client/assets/{file-share-button-CIGySu_4.js → file-share-button-C7miXF89.js} +1 -1
  133. package/dist/client/assets/{file-type-icon-D4fy_gBA.js → file-type-icon-BYKr6xB1.js} +1 -1
  134. package/dist/client/assets/flat-project-DCpSTtn-.js +1 -0
  135. package/dist/client/assets/{folder-icon-BesYWk0I.js → folder-icon-jYk3JQng.js} +1 -1
  136. package/dist/client/assets/{form-PPys9GfZ.js → form-iuvY0qFv.js} +1 -1
  137. package/dist/client/assets/{gateway-client-B_5Pnywu.js → gateway-client-C_0iBipI.js} +1 -1
  138. package/dist/client/assets/{general-CylsKp5I.js → general-Be31QF3E.js} +1 -1
  139. package/dist/client/assets/{home-BaaBv835.js → home-DN7k7NzJ.js} +1 -1
  140. package/dist/client/assets/{icon-button-BQIN0baN.js → icon-button-CAsMR7wt.js} +1 -1
  141. package/dist/client/assets/{index-CqBgee54.js → index-4xsRRDQ0.js} +1 -1
  142. package/dist/client/assets/{index-DZBQ5pnK.js → index-BHW38fGm.js} +2 -2
  143. package/dist/client/assets/{index-DR9xwPLz.js → index-BonzOgjL.js} +1 -1
  144. package/dist/client/assets/{index-DsDNebU_.js → index-CIf44JW3.js} +1 -1
  145. package/dist/client/assets/{index-Dzu1eSUT.js → index-CckhdqK3.js} +1 -1
  146. package/dist/client/assets/{index-CZzS4-kW.js → index-ChE2ezk7.js} +1 -1
  147. package/dist/client/assets/{index-DYpm1LTw.js → index-Cpvm6arG.js} +1 -1
  148. package/dist/client/assets/{index-5C5Y6fog.js → index-CtqgTxfG.js} +1 -1
  149. package/dist/client/assets/{index-CKELzPxK.js → index-DABxIqAx.js} +1 -1
  150. package/dist/client/assets/{index-DHuw79Pq.js → index-DE0-9ECf.js} +3 -3
  151. package/dist/client/assets/{index-D8-n4neo.js → index-Du_VeRVE.js} +1 -1
  152. package/dist/client/assets/{index-D94jgO7k.js → index-Dv3h3cqm.js} +1 -1
  153. package/dist/client/assets/{index-C6j8vkbx.js → index-EKW9WLpv.js} +1 -1
  154. package/dist/client/assets/{index-redirect-BnyH-Hi_.js → index-redirect-DrJRfytP.js} +1 -1
  155. package/dist/client/assets/{index-DYebWDZA.js → index-t_eDpwK9.js} +1 -1
  156. package/dist/client/assets/{index-O3cKdi88.js → index-vOT5DJhb.js} +1 -1
  157. package/dist/client/assets/{infiniteQueryObserver-Db8Je-eI.js → infiniteQueryObserver-C4v_Tvdc.js} +1 -1
  158. package/dist/client/assets/{infra-billing-CO97-my3.js → infra-billing-VbIz9yIS.js} +1 -1
  159. package/dist/client/assets/{input-BiNRWxFp.js → input-Bgau-d45.js} +1 -1
  160. package/dist/client/assets/{input-D7Pveqzt.js → input-DPbtX44w.js} +1 -1
  161. package/dist/client/assets/{input-5TfImLgg.js → input-Dtm4W-QI.js} +3 -3
  162. package/dist/client/assets/{integration-icon-Dznni3P6.js → integration-icon-C8GyVZME.js} +1 -1
  163. package/dist/client/assets/{label-CbGYdCUa.js → label-BHCiWeM9.js} +1 -1
  164. package/dist/client/assets/{last-preview-page-B66iZ_7L.js → last-preview-page-CZQ-9qtW.js} +1 -1
  165. package/dist/client/assets/{layout-JghjWMYu.js → layout-V7H1wMvJ.js} +1 -1
  166. package/dist/client/assets/{legacy-agents-deep-DwiyiXhB.js → legacy-agents-deep-GOrA2Nmb.js} +1 -1
  167. package/dist/client/assets/{legacy-main-redirect-vYtsnLSf.js → legacy-main-redirect-yNAuK_Xl.js} +1 -1
  168. package/dist/client/assets/library-CbAjcyVz.js +1 -0
  169. package/dist/client/assets/{library-tab-BXidRO6s.js → library-tab-D6ZlaAwG.js} +1 -1
  170. package/dist/client/assets/{login-BHm4mxjj.js → login-ClvQ5CFn.js} +1 -1
  171. package/dist/client/assets/{markdown-toDOgADF.js → markdown-D2cGXSVI.js} +1 -1
  172. package/dist/client/assets/{mcp-app-renderer-Bom1W11v.js → mcp-app-renderer-CG-JWdEV.js} +1 -1
  173. package/dist/client/assets/{mcp-oauth-DMXsQOs9.js → mcp-oauth-DtCcr-SV.js} +1 -1
  174. package/dist/client/assets/{members-DiAGMgH5.js → members-CO5ga5kN.js} +1 -1
  175. package/dist/client/assets/{message-templates-D5rRhch8.js → message-templates-DxEMICkA.js} +1 -1
  176. package/dist/client/assets/{mini-report-page-DjC3-YlE.js → mini-report-page-PQj3eFhR.js} +1 -1
  177. package/dist/client/assets/{mock-board-CKJpTOR8.js → mock-board-hewQy5Jn.js} +1 -1
  178. package/dist/client/assets/{monaco-editor-XLslvLAa.js → monaco-editor-DzZjrazj.js} +1 -1
  179. package/dist/client/assets/{monitoring-stats-row-C5wJXWvg.js → monitoring-stats-row-GGwy01IS.js} +1 -1
  180. package/dist/client/assets/{multi-select-CK1qihl4.js → multi-select-CjR3J1AB.js} +1 -1
  181. package/dist/client/assets/{mustache-DVPV68lR.js → mustache-DM5IbMl5.js} +1 -1
  182. package/dist/client/assets/{new-project-dialog-BkEZfgZM.js → new-project-dialog-CNtRe0-Y.js} +1 -1
  183. package/dist/client/assets/{oauth-callback-DxIQPlFn.js → oauth-callback-B1YQQR4V.js} +1 -1
  184. package/dist/client/assets/{oauth-callback-ai-provider-Cux-r-iC.js → oauth-callback-ai-provider-BIoknp12.js} +1 -1
  185. package/dist/client/assets/{onboarding-D_3hO5Zi.js → onboarding-C4RJxyrL.js} +1 -1
  186. package/dist/client/assets/{openai-conversation-oM48RqXg.js → openai-conversation-C0Q_JdxR.js} +1 -1
  187. package/dist/client/assets/{optimistic-project-sidebar-views-BxEtZaho.js → optimistic-project-sidebar-views-CPz7V3PC.js} +1 -1
  188. package/dist/client/assets/{org-file-open-context-BkAoUQAN.js → org-file-open-context-UWr7N1Z6.js} +1 -1
  189. package/dist/client/assets/{organization-choice-B23Ys-4G.js → organization-choice-hd0X96eE.js} +1 -1
  190. package/dist/client/assets/{orgs-Bi6PVtkA.js → orgs-cTxDbxPG.js} +1 -1
  191. package/dist/client/assets/{page-seo-form-gzaghpQQ.js → page-seo-form-UZBab-aN.js} +1 -1
  192. package/dist/client/assets/{pair-C-DSqZ6u.js → pair-CZInYVHx.js} +1 -1
  193. package/dist/client/assets/{plan-ladder-BX8e_J6O.js → plan-ladder-DKLtAA-T.js} +1 -1
  194. package/dist/client/assets/{popover-DHUcPo1r.js → popover-BSszguOU.js} +1 -1
  195. package/dist/client/assets/{post-calendar-BuVcXO7I.js → post-calendar-2XlrWH-t.js} +1 -1
  196. package/dist/client/assets/{post-editor-DRKVpniU.js → post-editor-jcqkk7um.js} +1 -1
  197. package/dist/client/assets/{preview-content-C2zuZls8.js → preview-content-BTNwFllc.js} +1 -1
  198. package/dist/client/assets/{preview-dialog-Div-6vzY.js → preview-dialog--VxiYPfE.js} +1 -1
  199. package/dist/client/assets/{profile-w-U1YUy-.js → profile-BGHQuceX.js} +1 -1
  200. package/dist/client/assets/{project-app-view-CTkkJXZf.js → project-app-view-Ca7TdLgY.js} +1 -1
  201. package/dist/client/assets/{project-feed-CIKKDaUv.js → project-feed-Dj2xUGdB.js} +1 -1
  202. package/dist/client/assets/{project-icon-Dv5T9UXQ.js → project-icon-CEvmcihT.js} +1 -1
  203. package/dist/client/assets/project-reports-CBenIcsf.js +1 -0
  204. package/dist/client/assets/project-tasks-CEyu6nsw.js +1 -0
  205. package/dist/client/assets/{projects-0mPeWaUw.js → projects-DVM1GvN-.js} +1 -1
  206. package/dist/client/assets/{projects-empty-state-qRbFEP1a.js → projects-empty-state-OJ8FQpgE.js} +1 -1
  207. package/dist/client/assets/{prompts-FPQYcY8_.js → prompts-B1WNDS5-.js} +1 -1
  208. package/dist/client/assets/record-editor-BjakPc8B.js +1 -0
  209. package/dist/client/assets/{redirect-editor-DGJ9lwKX.js → redirect-editor-D8l9UTlG.js} +1 -1
  210. package/dist/client/assets/reports-CPtD3Fqy.js +1 -0
  211. package/dist/client/assets/{reports-BmFsfB-t.js → reports-Dlh0FA1v.js} +1 -1
  212. package/dist/client/assets/{reports-onboarding-6XVICcRr.js → reports-onboarding-C0v_SWM2.js} +1 -1
  213. package/dist/client/assets/{reports-tab-CKAtnV_W.js → reports-tab-BtxDljzK.js} +2 -2
  214. package/dist/client/assets/{repositories-Kx63fHV7.js → repositories-BHtWIvsV.js} +1 -1
  215. package/dist/client/assets/{repository-binding-D2nl3E9m.js → repository-binding-BT7w56g8.js} +1 -1
  216. package/dist/client/assets/{repository-import-picker-C4UUR7Lt.js → repository-import-picker-BvwCcqd0.js} +1 -1
  217. package/dist/client/assets/{repository-picker-C9g49n3G.js → repository-picker-WnaJ3OBj.js} +1 -1
  218. package/dist/client/assets/{require-capability-DGjTQApq.js → require-capability-D0xfatZe.js} +1 -1
  219. package/dist/client/assets/{required-auth-layout-DH23GR15.js → required-auth-layout-oADKB4ry.js} +1 -1
  220. package/dist/client/assets/{reset-password-BwSzqw0H.js → reset-password-Dio__1ur.js} +1 -1
  221. package/dist/client/assets/{resizable-MsT9Iquy.js → resizable-BNj764ip.js} +1 -1
  222. package/dist/client/assets/{resolve-tab-icon-Cx-bOLi-.js → resolve-tab-icon-xbN42Afa.js} +1 -1
  223. package/dist/client/assets/{review-settings-D9CPsAF9.js → review-settings-LtoHVq4j.js} +1 -1
  224. package/dist/client/assets/{rich-text-link-control-DfuAHVFX.js → rich-text-link-control-CU6p-_ze.js} +1 -1
  225. package/dist/client/assets/{roles-DKVk8OJh.js → roles-D2prme-T.js} +1 -1
  226. package/dist/client/assets/{route-cksgldWz.js → route-BTaie41e.js} +1 -1
  227. package/dist/client/assets/route-C60qUrLW.js +1 -0
  228. package/dist/client/assets/route-CxrJTCMU.js +1 -0
  229. package/dist/client/assets/{runnable-block-editor-oGO4SpDx.js → runnable-block-editor-LWTXtTvm.js} +1 -1
  230. package/dist/client/assets/{sandbox-lifecycle-context-DeDlVqJ-.js → sandbox-lifecycle-context-2SHs2v83.js} +1 -1
  231. package/dist/client/assets/{schema-C5Lr3NgE.js → schema-HLNkH6Wb.js} +1 -1
  232. package/dist/client/assets/{scroll-area-Bjp7MJ8C.js → scroll-area-DKRRTLu0.js} +1 -1
  233. package/dist/client/assets/{search-input-_rysHpm7.js → search-input-BHYasbw5.js} +1 -1
  234. package/dist/client/assets/{search-toggle-D88qbPIv.js → search-toggle-BQKj1zgn.js} +1 -1
  235. package/dist/client/assets/{secret-picker-5ZvS8PcI.js → secret-picker-RqDX5vq4.js} +1 -1
  236. package/dist/client/assets/{secrets-BR1Uct_E.js → secrets-uW3Eg9z0.js} +1 -1
  237. package/dist/client/assets/{sections-editor-EcDLaZRZ.js → sections-editor-BktUgYu2.js} +1 -1
  238. package/dist/client/assets/{select-Cz-o9PEJ.js → select-D-HKKCDO.js} +1 -1
  239. package/dist/client/assets/{select-model-BuAbRLcQ.js → select-model-BEjnrAnQ.js} +1 -1
  240. package/dist/client/assets/{seo-editor-CHNZw1_K.js → seo-editor-ClLbbOJB.js} +1 -1
  241. package/dist/client/assets/{separator-BkBMsQ_7.js → separator-CzRdsgWL.js} +1 -1
  242. package/dist/client/assets/{settings-tab-D9bw6k3t.js → settings-tab-DPXMGLLf.js} +1 -1
  243. package/dist/client/assets/{sheet-DsThkx1E.js → sheet-BUa8giCx.js} +1 -1
  244. package/dist/client/assets/{shell-layout-DBvOp7at.js → shell-layout-C1uyapYT.js} +1 -1
  245. package/dist/client/assets/{skills-B_K2qpIo.js → skills-DsfyBgy9.js} +1 -1
  246. package/dist/client/assets/{sso-DTHpDJVQ.js → sso-vpLekJCG.js} +1 -1
  247. package/dist/client/assets/{suggestion-BoL4aGbo.js → suggestion--qxJAqqv.js} +1 -1
  248. package/dist/client/assets/{switch-DcWJRerK.js → switch-Bb9pIsgz.js} +1 -1
  249. package/dist/client/assets/{synced-repos-CACQuO21.js → synced-repos-DviEZ_Mw.js} +1 -1
  250. package/dist/client/assets/{tab-icon-glyph-CtbRVkli.js → tab-icon-glyph-C74gExPD.js} +1 -1
  251. package/dist/client/assets/{table-wfzNVXjf.js → table-Cfz5hCc5.js} +1 -1
  252. package/dist/client/assets/{tabs-Cjw7-YIz.js → tabs-ocmvOnqQ.js} +1 -1
  253. package/dist/client/assets/{task-board-UgijzwOv.js → task-board-CV8L72bN.js} +1 -1
  254. package/dist/client/assets/{task-route-BJNk9z_I.js → task-route-Ou0nHr59.js} +1 -1
  255. package/dist/client/assets/{task-status-BTLSYdOf.js → task-status-BfR7W4Fk.js} +1 -1
  256. package/dist/client/assets/{taskboard-analytics-B_uCO32V.js → taskboard-analytics-k3X2sZNx.js} +1 -1
  257. package/dist/client/assets/tasks-BU2rWe18.js +1 -0
  258. package/dist/client/assets/{tasks-D-IkMJYR.js → tasks-BYskW7rM.js} +1 -1
  259. package/dist/client/assets/{textarea-yG3fP7UK.js → textarea-ah6ZJJWF.js} +1 -1
  260. package/dist/client/assets/{thread-analytics-BrZzoT4x.js → thread-analytics-BV7N5Ioq.js} +1 -1
  261. package/dist/client/assets/{thread-intent-D45ZuXub.js → thread-intent-DVeAqXLf.js} +1 -1
  262. package/dist/client/assets/{thread-route-hhzohhx0.js → thread-route-CyO6ijat.js} +1 -1
  263. package/dist/client/assets/{thread-route-Cc8Rnkyi.js → thread-route-D8LjpvTD.js} +1 -1
  264. package/dist/client/assets/{thread-sheet-body-GfOZtMv2.js → thread-sheet-body-BON5_bQt.js} +1 -1
  265. package/dist/client/assets/{toggle-group-hKLMSDYW.js → toggle-group-DE4I1qS9.js} +1 -1
  266. package/dist/client/assets/{toolbar-icon-button-CmvWHMWS.js → toolbar-icon-button-DxlBQUA0.js} +1 -1
  267. package/dist/client/assets/{tooltip-V0jMCwI1.js → tooltip-PjEixjdK.js} +1 -1
  268. package/dist/client/assets/{track-ClA9bvTA.js → track-BLVj1ZUT.js} +1 -1
  269. package/dist/client/assets/{types-Bfx6WemM.js → types-CPdp5CPi.js} +1 -1
  270. package/dist/client/assets/{usage-stats-8fJ3lLlx.js → usage-stats-Cfj19dMy.js} +1 -1
  271. package/dist/client/assets/{use-ai-providers-BiezPBdC.js → use-ai-providers-D89dN8IX.js} +1 -1
  272. package/dist/client/assets/{use-automations-CzJvLh6y.js → use-automations-CeEadf4K.js} +1 -1
  273. package/dist/client/assets/{use-autosave-C5AE6tVZ.js → use-autosave-CBseprgx.js} +1 -1
  274. package/dist/client/assets/{use-chat-layout-state-Bjv6Kmqp.js → use-chat-layout-state-Do-NwJXn.js} +1 -1
  275. package/dist/client/assets/{use-connect-companion-Edkf4-6e.js → use-connect-companion-38CXwgKO.js} +1 -1
  276. package/dist/client/assets/{use-connection-TzIfXScd.js → use-connection-Dv9IwOJe.js} +1 -1
  277. package/dist/client/assets/{use-copy-yiXmKlwe.js → use-copy-DJcJjSfR.js} +1 -1
  278. package/dist/client/assets/{use-create-virtual-mcp-B8iud2Sc.js → use-create-virtual-mcp-pS0pWpnu.js} +1 -1
  279. package/dist/client/assets/{use-date-fns-locale-DEFDZEQ8.js → use-date-fns-locale-BS-G9k3y.js} +1 -1
  280. package/dist/client/assets/{use-debounced-autosave-CqmmZdyR.js → use-debounced-autosave-CcAIWC5r.js} +1 -1
  281. package/dist/client/assets/{use-debounced-value-BeO0DJwg.js → use-debounced-value-BmJwJfAX.js} +1 -1
  282. package/dist/client/assets/{use-deco-credits-aHYDh6Nu.js → use-deco-credits-DVM8T-vX.js} +1 -1
  283. package/dist/client/assets/{use-decopilot-events-d7FsiRbY.js → use-decopilot-events-Dz3T4koV.js} +1 -1
  284. package/dist/client/assets/{use-delete-connection-C6-e1hl2.js → use-delete-connection-BA2uXHip.js} +1 -1
  285. package/dist/client/assets/{use-deployment-admin-D4Aiw9gd.js → use-deployment-admin-eFdraYGL.js} +1 -1
  286. package/dist/client/assets/{use-fast-preview-draft-url-C2NMaYVu.js → use-fast-preview-draft-url-DftYyPUL.js} +1 -1
  287. package/dist/client/assets/{use-file-configs-Bb5i5kzp.js → use-file-configs-CYpkv-K6.js} +1 -1
  288. package/dist/client/assets/{use-infinite-scroll-M-6zbbsB.js → use-infinite-scroll-DRg5D3Ci.js} +1 -1
  289. package/dist/client/assets/{use-join-requests-DdJv9q2n.js → use-join-requests-BcHXx_vJ.js} +1 -1
  290. package/dist/client/assets/{use-main-panel-tabs-DfNPCvDK.js → use-main-panel-tabs-DFEF_AsU.js} +1 -1
  291. package/dist/client/assets/{use-mcp-auth-status-BGPcEhML.js → use-mcp-auth-status-CU2sLwi7.js} +1 -1
  292. package/dist/client/assets/{use-mcp-client-DGrcPC5r.js → use-mcp-client-BXMLDsCy.js} +1 -1
  293. package/dist/client/assets/{use-mcp-prompts-IUYMfB-t.js → use-mcp-prompts-BeUMXZG4.js} +1 -1
  294. package/dist/client/assets/{use-mcp-tools-CqzyWLqP.js → use-mcp-tools-CzIY_sDu.js} +1 -1
  295. package/dist/client/assets/{use-members-BFVKg_WJ.js → use-members-CqgWLfoS.js} +1 -1
  296. package/dist/client/assets/{use-mobile-BbZ9Bk36.js → use-mobile-DIdf1Sl6.js} +1 -1
  297. package/dist/client/assets/{use-navigate-to-agent-v6_M_Lv8.js → use-navigate-to-agent-w4dyiPcQ.js} +1 -1
  298. package/dist/client/assets/use-new-blocks-editor-Cf8IZn6F.js +1 -0
  299. package/dist/client/assets/{use-open-billing-url-CBRV16pr.js → use-open-billing-url-D8WOGdFe.js} +1 -1
  300. package/dist/client/assets/{use-org-auth-client-s3yV-gCV.js → use-org-auth-client-CPcci4x9.js} +1 -1
  301. package/dist/client/assets/{use-org-fs-DLLHrevC.js → use-org-fs-DGDwjtxZ.js} +1 -1
  302. package/dist/client/assets/{use-org-repo-syncs-DCNujM3B.js → use-org-repo-syncs-BO-YlCPV.js} +1 -1
  303. package/dist/client/assets/{use-org-sso-GuXeEBOc.js → use-org-sso-Cccoz5_e.js} +1 -1
  304. package/dist/client/assets/{use-organization-roles-ZmVwWDLk.js → use-organization-roles-7OfC34Y2.js} +1 -1
  305. package/dist/client/assets/{use-organization-settings-Bud8t-pB.js → use-organization-settings-DrCEGV8b.js} +1 -1
  306. package/dist/client/assets/{use-panel-navigate-P-qoUN3Y.js → use-panel-navigate-Cz0Mqgtu.js} +1 -1
  307. package/dist/client/assets/{use-project-scope-CKrmwpiF.js → use-project-scope-BVOC74Pv.js} +1 -1
  308. package/dist/client/assets/{use-releases-C1Rf328o.js → use-releases-CenNp5C8.js} +1 -1
  309. package/dist/client/assets/{use-reports-diagnostic-B1Shnig3.js → use-reports-diagnostic-CrsbISH4.js} +1 -1
  310. package/dist/client/assets/{use-secrets-Diaq210I.js → use-secrets-Ewd87uQe.js} +1 -1
  311. package/dist/client/assets/{use-section-preview-base-vrUWdFAS.js → use-section-preview-base-DLJ0mf7i.js} +1 -1
  312. package/dist/client/assets/{use-session-runtime-Dd4IC7IN.js → use-session-runtime-CP-CHF9M.js} +1 -1
  313. package/dist/client/assets/{use-tags-BrQETtMc.js → use-tags-CiSSC1Zw.js} +1 -1
  314. package/dist/client/assets/{use-task-board-analytics-C1XXYkja.js → use-task-board-analytics-DQ9orTZ3.js} +1 -1
  315. package/dist/client/assets/{use-task-board-events-DW_ymOYd.js → use-task-board-events-S4eOT-Db.js} +1 -1
  316. package/dist/client/assets/{use-task-metadata-CHJgQsit.js → use-task-metadata-Y6hbPlVY.js} +1 -1
  317. package/dist/client/assets/{use-thread-analytics-XGBihKjG.js → use-thread-analytics-mI_QslnV.js} +1 -1
  318. package/dist/client/assets/{use-thread-outputs-CZi91IMj.js → use-thread-outputs-D36c0oXJ.js} +1 -1
  319. package/dist/client/assets/useInfiniteQuery-C-pCSug8.js +1 -0
  320. package/dist/client/assets/{useQueries-Cii8MVzd.js → useQueries-JvyAIObw.js} +1 -1
  321. package/dist/client/assets/useSuspenseInfiniteQuery-BJb93R4Z.js +1 -0
  322. package/dist/client/assets/{users-C-N_QqPz.js → users-a6pfGwXa.js} +1 -1
  323. package/dist/client/assets/{utils-DdYfsNrk.js → utils-7K5OBDxA.js} +1 -1
  324. package/dist/client/assets/{variant-calendar-CbolY3W4.js → variant-calendar-CC6Z4TJm.js} +1 -1
  325. package/dist/client/assets/{variant-matcher-override-BE-XpZUe.js → variant-matcher-override-B0LIaNEX.js} +1 -1
  326. package/dist/client/assets/{view-mode-toggle-UcflwKbx.js → view-mode-toggle-CR4yGwhs.js} +1 -1
  327. package/dist/client/assets/{virtual-mcp-5qC_v8pJ.js → virtual-mcp-Bjm883Pp.js} +1 -1
  328. package/dist/client/index.html +1 -1
  329. package/dist/server/cli.js +1 -1
  330. package/dist/server/server.js +1 -1
  331. package/package.json +1 -1
  332. package/dist/client/assets/agent-app-BhmwaXpz.js +0 -1
  333. package/dist/client/assets/agent-deck-Cyl90eqt.js +0 -1
  334. package/dist/client/assets/agent-library-Ev_ZnLTN.js +0 -1
  335. package/dist/client/assets/agent-library-file-CVAOCG3S.js +0 -1
  336. package/dist/client/assets/agent-settings-Dg4hz_AU.js +0 -1
  337. package/dist/client/assets/agent-site-editor-code-IIouddwd.js +0 -2
  338. package/dist/client/assets/agent-view-5kLPHs5Y.js +0 -1
  339. package/dist/client/assets/api-keys-CNrhvLa5.js +0 -1
  340. package/dist/client/assets/flat-project-D7xgVWbZ.js +0 -1
  341. package/dist/client/assets/library-Cj7GFkYr.js +0 -1
  342. package/dist/client/assets/project-reports-R2nxKE9N.js +0 -1
  343. package/dist/client/assets/project-tasks-B-TqLh_E.js +0 -1
  344. package/dist/client/assets/record-editor-BdDJOWw7.js +0 -1
  345. package/dist/client/assets/reports-DsLoZ4VI.js +0 -1
  346. package/dist/client/assets/route-CHyxOjjb.js +0 -1
  347. package/dist/client/assets/route-XD1IeFV8.js +0 -1
  348. package/dist/client/assets/tasks-BMYAskJr.js +0 -1
  349. package/dist/client/assets/use-new-blocks-editor-C-Vw3tr-.js +0 -1
  350. package/dist/client/assets/useInfiniteQuery-Pi2cEwSS.js +0 -1
  351. package/dist/client/assets/useSuspenseInfiniteQuery-3wEhSKVP.js +0 -1
@@ -3734,7 +3734,7 @@ ${J.join(`
3734
3734
  `)}`:X}function Mt6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3735
3735
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var ZY8=200,Lt6=12,jt6,zt6=300,iC0=3;var kD1=D(()=>{Z7();a$();dC0();jt6={aheadBy:0,behindBy:0,files:[]}});function Vt6($){if(!$||$.includes(".."))return!1;return It6.test($)}function YY8($){return kt6.includes($)}function SD1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Vt6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function CD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var It6,kt6;var XY8=D(()=>{It6=/^[\w./@-]+$/;kt6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function g60($,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 GY8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new $z(k7);let J=await Cj($.storage,X,Y);if(J&&await ND($.storage,J)){let F=await PU($,J,{forceRefresh:!0}).catch((U)=>{throw new $z(U instanceof Error?U.message:k7)});await JY8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new $z("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Om({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:k7;throw new $z(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await TU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=QL$(F instanceof Error?F.message:String(F));throw U?new $z(N):F});await JY8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function JY8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Vp($),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 YE(K,St6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var St6=10485760,$z;var _D1=D(()=>{TW();xC0();D$0();TH0();c00();Z7();$z=class $z extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function _t6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Ct6.test(Z))throw Error(`Invalid branch name: ${$}`)}function py($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(vt6)])}async function xt6($,Z){let Q=$.var.studioContext,Y=_U(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=zf(G?.metadata?.runtime);if(W)return W;let K=qR0(Z.virtualMcpMetadata),H=K==="cms"?await HD1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)O$0(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 ft6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await gX($.var.studioContext)}catch{return null}}function ny($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function vp($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=g60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return Nm(Y,J.id,X)}function bD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=wD$(Z);if(Y!==void 0)return $.json({error:Q},429,{...G9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,G9);let X=IW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,G9)}return $.json({error:Q},502,G9)}async function vD1($,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 FY8($){try{let Z=await vp($),Q=await pC0(Z,$.get("vmClaim").branch);return $.json(Q,200,G9)}catch(Z){return bD1($,Z)}}function h60($,Z){let Y=(oC0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return oC0.set($,X),X.finally(()=>{if(oC0.get($)===X)oC0.delete($)}),Y}async function NQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,G9);let Y=Q?.runner??ny($);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",...G9}})}}let O=await B.text(),L=Q?.redactRepoDir?yt6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...G9}})};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 O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function yt6($){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 rC0($,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 gt6($){return UY8.includes($)}var Ct6,WY8=524288,KY8=65536,vt6=1e4,HY8=2000,bt6,oC0,G9,UY8,NY8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",bt6),$.post("/:virtualMcpId/:branch/write",(Q)=>NQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>NQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>NQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>NQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>NQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>NQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>NQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:py(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 NQ(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 NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!gt6(Y))return Q.json({error:`step must be one of: ${UY8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await HD1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await ft6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,G9);if(Y==="start"){let G=J0(Q.var.studioContext),W=Hd(X.virtualMcpMetadata);try{await PR0({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 NQ(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 UO(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 HQ8(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 FY8(Q);return Z(Q)});let Z=(Q)=>NQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(HY8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return FY8(Q);return NQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(HY8)])})}),$.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 vp(Q),G=await nC0(J,Y.branch,X.base);return Q.json(G,200,G9)}catch(X){return bD1(Q,X)}return NQ(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,G9);let Y=ny(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return h60(X,async()=>{try{await FD1(W,Y,X);let K=g60(J,G);if(K)await GY8(W,Y,X,K)}catch(K){if(K instanceof $z)return Q.json({error:K.message},403,G9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,G9)}return NQ(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 h60(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,G9);try{let G=await vp(Q);return await QY8(G,Y.branch,J),Q.json({ok:!0},200,G9)}catch(G){let W=IW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,G9)}});return h60(Y.claimName,()=>NQ(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 h60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await vp(Q),H=W.base??await K.getDefaultBranch();return await tC0(K,Y.branch,H),Q.json({ok:!0},200,G9)}catch(W){return bD1(Q,W)}});let X=ny(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return h60(J,async()=>{try{await FD1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,G9)}return NQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",x5({maxSize:WY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ny(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,O]=BD1(F)&&N?[F,U]:X?await Promise.all([rC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),rC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await vp(Q);return Promise.all([pC0(w,Y.branch),nC0(w,Y.branch)])})();await oG(K,J0(K).id,"suggesting a commit message");let L=await DQ8(K,B,O);return Q.json(L,200,G9)}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,G9);return Q.json({error:F},502,G9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",x5({maxSize:WY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ny(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,O]=BD1(F)&&N?[F,U]:X?await Promise.all([rC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),rC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await vp(Q);return Promise.all([pC0(w,Y.branch),nC0(w,Y.branch)])})();await oG(K,J0(K).id,"judging whether a change needs review");let L=await LQ8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,G9)}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,G9);return Q.json({error:F},502,G9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=ny(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 vD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",x5({maxSize:KY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=ny(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=SD1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=CD1(J,W.resolveType);return vD1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",x5({maxSize:KY8,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):Fd(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=SD1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!YY8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=CD1(G,K.resolveType);return vD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var BY8=D(()=>{J8();eW();Ip();KD1();Kd();GQ8();xW();Ud();WQ8();vW();JH();KQ8();FQ8();D71();B$0();LD1();wQ8();Z7();T5();kD1();XY8();RR0();_D1();Ct6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bt6=bC0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=p0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=J0(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{_t6(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=w10({orgId:X.id,virtualMcpId:J,branch:G}),H=await f91(Q,G),F=y91(H,Y),U=JQ8({userId:F,projectRef:K}),N=W.metadata??null,B=await xt6($,{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 O;try{O=await gX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});oC0=new Map;G9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};UY8=["clone","install","start"]});function DY8($,Z,Q){let Y=xD1.get($);if(!Y)Y={pending:null,running:!1},xD1.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)ut6($,Y);return J}async function ut6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await lt6(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)xD1.delete($)}}async function lt6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await _p(Z,Q),W=await Z.listDecofileEntries(G,Y),K=MD1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=ID1(K,N),L=`${JSON.stringify(B,null,2)}
3736
3736
  `;await sQ8(Z.repo,L);let w=O[0]??`${mC0(Y)}/${ED1(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 O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of ID1(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 aQ8(Z,F.values(),X),{decofile:B,skipped:O}=C60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:GH(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:ct6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=ht6-1)throw N;await O$(U7(2000,200,J,2,0.5))}}}function ct6($){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 O51(Y,$.deps.coAuthor)}var ht6=3,xD1;var OY8=D(()=>{dA0();yC0();i4();a$();Z7();dC0();xD1=new Map});import{createHmac as LY8,randomBytes as mt6,timingSafeEqual as dt6}from"crypto";function wY8(){if(sC0)return sC0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return sC0=$?Buffer.from($):mt6(32),sC0}function fD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+it6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=LY8("sha256",wY8()).update(Y).digest("base64url");return`${Y}.${X}`}function jY8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(LY8("sha256",wY8()).update(Y).digest("base64url"));if(X.length!==J.length||!dt6(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 it6=21600000,sC0=null;var EY8=D(()=>{X$()});function aC0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function pt6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=aC0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function zY8($){let Z;try{Z=aC0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=pt6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=aC0(G),K=W&&aC0(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 bp}from"zod";function tt6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&nt6.test($)}function qY8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function u60($){let Z=$.get("decofileScope");return Nm($.var.studioContext,Z.organizationId,Z.repository)}function l60($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=IW(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 MY8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",RY8),$.use("/:virtualMcpId/:branch/*",RY8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await u60(Z),X=await eQ8(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(zY8(X.decofile),200,{...J,"content-type":"application/json"});let G=fD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(qY8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return l60(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 u60(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 l60(Z,X)}}),$.patch("/:virtualMcpId/:branch",rt6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=st6.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=_60(X.data)}catch(G){if(G instanceof v60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{fC0(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(jD1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await u60(Z),W=await DY8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Vp(Y)},J),K=fD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:qY8(Z)})}catch(G){return l60(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await u60(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(IW(W)!==409)throw W;await tC0(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(IW(G)===409)return Z.json({error:"merge-conflict"},409);if(IW(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 l60(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await u60(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(IW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return l60(Z,Y)}}),$}var nt6,PY8=500,AY8=1048576,TY8=1024,ot6=8388608,rt6,st6,RY8;var IY8=D(()=>{RR0();yC0();J8();eW();KD1();xC0();_D1();Z7();OY8();EY8();kD1();dC0();JH();nt6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;rt6=x5({maxSize:ot6,onError:($)=>$.json({error:"Payload too large"},413)}),st6=bp.object({set:bp.record(bp.string(),bp.unknown()).optional(),delete:bp.array(bp.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)<=PY8,{message:`Patch cannot touch more than ${PY8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=AY8),{message:`Each block must be at most ${AY8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=TY8),{message:`Each block key must be at most ${TY8} characters`}),RY8=bC0(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(!tt6(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||!jY8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await IJ(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(!Fd(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=g60(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 VY8=($)=>{let Z=new Z1;if(Z.use("*",Jp),Z.use("*",e68),Z.route("/",s68($.voiceSessions)),Z.route("/",mS0()),Z.route("/",x58()),Z.route("/",P58()),Z.route("/",d78()),Z.route("/",p78()),Z.route("/",f78()),Z.route("/",c78()),Z.route("/",g78()),Z.route("/",CC0()),Z.route("/tools",e78()),Z.route("/",r78()),Z.route("/",D78({kvStorage:$.kvStorage})),Z.route("/",N78()),Z.route("/fs",I78({getConnection:$.getNatsConnection})),Z.route("/sandbox",NY8()),Z.route("/decofile",MY8()),Z.route("/",v78()),Z.route("/",k78()),Z.route("/deco-sites",iS0()),Z.route("/hosting",F58()),Z.route("/monitor",w58()),Z.route("/sso",gS0()),Z.route("/",_C0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",J58()),$.mountDevAssets)Z.route("/dev-assets",oS0({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("/",Y88()),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",C78()),Z.route("/mcp",bM0()),Z.route("/mcp/self",IC0()),Z.route("/mcp",yM0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var kY8=D(()=>{J8();a68();$58();MS0();G58();kN1();U58();j58();rS0();tE();RN1();bN1();B78();O78();V78();S78();A80();LN1();gM0();eB1();_78();b78();y78();h78();QD1();i78();n78();s78();YD1();$Q8();XD1();xM0();BY8();IY8()});import{z as ty}from"zod";class yD1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new _Y8.Kvm(eC0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:eC0.StorageType.Memory,ttl:vY8.nanos(qD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?CY8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await O$(200);continue}let G=SY8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await O$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,SY8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?CY8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var eC0,_Y8,vY8,SY8,CY8;var bY8=D(()=>{OJ();bU();a$();eC0=C(BK(),1),_Y8=C($A(),1),vY8=C(zz(),1),SY8=new TextEncoder,CY8=ty.discriminatedUnion("state",[ty.object({state:ty.literal("ready"),agentId:ty.string()}),ty.object({state:ty.literal("creating"),expiresAt:ty.number()})])});import{z as xp}from"zod";function at6($){return{model:$.model,instructions:`${nR$}
3737
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class gD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:at6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:xp.object({session:xp.object({id:xp.string().min(1)}),transport:xp.object({type:xp.literal("webrtc"),sdp:xp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var xY8=D(()=>{bU()});var fY8;var yY8=D(()=>{fY8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function hD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:iR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:fY8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:qD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var gY8=D(()=>{bU();yY8()});import{z as nX}from"zod";import{createHash as et6,createHmac as $o6}from"crypto";class $_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=et6("sha256").update(JSON.stringify(hD1($))).digest("hex"),this.conversationKey=$o6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new $_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"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 ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...hD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.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 hY8=D(()=>{gY8()});import{createHmac as Zo6,timingSafeEqual as Qo6}from"crypto";import{z as fp}from"zod";function lY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Zo6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function cY8($,Z){let Q=Buffer.from(JSON.stringify(uY8.parse($))).toString("base64url");return`${Q}.${lY8(Q,Z)}`}function mY8($,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(lY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Qo6(W,G))return null;try{let K=uY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+qD)return null;return K.data}catch{return null}}var uY8;var dY8=D(()=>{bU();uY8=fp.object({sessionId:fp.string().uuid(),organizationId:fp.string().min(1).max(256),userId:fp.string().min(1).max(256),threadId:fp.string().min(1).max(256),expiresAt:fp.number().int().positive()})});import{z as uD1}from"zod";function iY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return lD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var lD1;var pY8=D(()=>{lD1=uD1.object({provider:uD1.enum(["elevenlabs","openai"]),model:uD1.string().trim().min(1).max(128)})});import{createHash as Yo6}from"crypto";import{z as yp}from"zod";function gp($){return`user.${Yo6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new nY8.Kvm(Q_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Q_0.StorageType.Memory,ttl:tY8.nanos(qD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=iY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+qD},W=cY8(G,this.deps.secret),K=await this.kv(),H=gp(G),F=await K.get(H),U=F?.operation==="PUT"?Z_0.parse(F.json()):null,N=cD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:gp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=mY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=gp(Q),J=await Y.get(X),G=J?.operation==="PUT"?Z_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,cD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=gp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Z_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,cD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(gp($));if(Q?.operation==="PUT"&&Z_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(gp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Q_0,nY8,tY8,Z_0,cD1;var oY8=D(()=>{OJ();bU();dY8();pY8();Q_0=C(BK(),1),nY8=C($A(),1),tY8=C(zz(),1),Z_0=yp.object({sessionId:yp.string().uuid(),expiresAt:yp.number(),connected:yp.boolean().optional(),conversation:lD1.optional(),characters:yp.number().int().nonnegative(),requests:yp.number().int().nonnegative()}),cD1=new TextEncoder});function Xo6($){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 Jo6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},rY8=()=>{let $=new Z1;return $.use("*",Jo6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Xo6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var sY8=D(()=>{J8();X$();Sk0()});import{z as y1}from"zod";function jN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Oo6($){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 Lo6($,Z,Q){try{return JSON.parse($)}catch{throw new $X8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function wo6($){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:Lo6(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 jo6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?dF(Q.function.parameters):dF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Eo6($){if(!$)return;return{openai:{response_format:$}}}function zo6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function aY8($,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 eY8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Go6=256,Wo6,Ko6,Ho6,Fo6,Uo6,No6,Bo6,Do6,$X8,ZX8,QX8;var YX8=D(()=>{y4();J8();Ip();CH();Wo6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Ko6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Ho6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Ko6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Fo6=y1.object({type:y1.literal("text")}),Uo6=y1.object({type:y1.literal("json_object")}),No6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),Bo6=y1.union([Fo6,Uo6,No6]),Do6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Ho6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Wo6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:Bo6.optional(),user:y1.string().optional()});$X8=class $X8 extends Error{constructor($){super($);this.name="MessageConversionError"}};ZX8=new Z1;ZX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jN("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(jN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Do6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Oo6(J.model);if(!G)return $.json(jN("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)=>LP(E.providerId));if(!j)return $.json(jN("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(jN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=wo6(J.messages),N=J.tools?jo6(J.tools):void 0,B=Eo6(J.response_format),O=zo6(),L=Math.floor(Date.now()/1000);if(J.stream)return UO($,async(w)=>{let j=aY8(F,U,N,J,B,$.req.raw.signal);try{let E=Wd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,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(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=Go6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,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 P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:eY8(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 P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=aY8(F,U,N,J,B,$.req.raw.signal),j=await fU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:eY8(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(jN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(jN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(jN(X.message,"server_error"),500)}});QX8=ZX8});function Po6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function XX8(){let $=new Z1;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=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(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||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(NA(U)!==J)continue;if(!Po6(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 JX8=D(()=>{J8();aG()});var WX8;var GX8=D(()=>{WX8={name:"decocms",version:"4.429.9",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 Ro6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??To6}}var KX8,To6="https://ph.studio.decocms.com",HX8;var FX8=D(()=>{J8();qs();gf();I9();X$();QN1();GX8();KX8=new Z1;KX8.get("/",($)=>{let Z={version:WX8.version,theme:Q5$(),...dK().logo&&{logo:dK().logo},...fD()&&{internalUrl:Ip1()},...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:o48(),posthog:Ro6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:TO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});HX8=KX8});function oy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dD1($){return(oy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function UX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(oy($))}&sz=${Z}`}function qo6($,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 NX8($){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=qo6(`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 z$}from"zod";var Mo6,BX8;var DX8=D(()=>{Mo6=z$.object({check_id:z$.string(),title:z$.string(),description:z$.string().optional(),impact:z$.string().optional(),why:z$.string().optional(),category:z$.string(),severity:z$.string(),value_band:z$.string().optional(),value_driver:z$.string().optional(),controllability:z$.string().optional(),pages:z$.array(z$.string()),tasks:z$.array(z$.string()),evidence:z$.string(),sample_scope:z$.string().optional(),sources:z$.array(z$.string())}),BX8=z$.object({domain:z$.string(),brand:z$.string(),favicon:z$.string().optional(),scanned_at:z$.string().nullable(),lang:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),totals:z$.object({measured:z$.number(),registry_total:z$.number(),passed:z$.number(),failed:z$.number(),blocked:z$.number()}),buckets:z$.array(z$.object({id:z$.enum(["critical","important","worth"]),label:z$.string(),items:z$.array(Mo6)})),passing:z$.object({count:z$.number(),items:z$.array(z$.object({check_id:z$.string(),title:z$.string()}))}),not_measured:z$.object({count:z$.number(),groups:z$.array(z$.object({reason:z$.string(),label:z$.string(),count:z$.number(),checks:z$.array(z$.string())}))}),categories:z$.array(z$.object({key:z$.string(),label:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),pass:z$.number(),fail:z$.number()})),screenshots:z$.array(z$.object({url:z$.string(),page_type:z$.string().optional(),viewport:z$.enum(["desktop","mobile"]),image_url:z$.string()}))})});function OX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Y_0($,Z={}){let Q=await fetch(OX8($,"",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 BX8.parse(await Q.json())}async function LX8($,Z={}){let Q=await fetch(OX8($,".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 iD1=D(()=>{DX8();pB()});import{join as wX8}from"path";async function Vo6($){try{let Z=await Y_0($,{signal:AbortSignal.timeout(Io6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ko6($,Z){let Q=oy($),Y=Z?.brand?.trim()||dD1(Q),X=UX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=NX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(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="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
3737
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class gD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:at6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:xp.object({session:xp.object({id:xp.string().min(1)}),transport:xp.object({type:xp.literal("webrtc"),sdp:xp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var xY8=D(()=>{bU()});var fY8;var yY8=D(()=>{fY8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function hD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:iR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:fY8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:qD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var gY8=D(()=>{bU();yY8()});import{z as nX}from"zod";import{createHash as et6,createHmac as $o6}from"crypto";class $_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=et6("sha256").update(JSON.stringify(hD1($))).digest("hex"),this.conversationKey=$o6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new $_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"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 ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...hD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.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 hY8=D(()=>{gY8()});import{createHmac as Zo6,timingSafeEqual as Qo6}from"crypto";import{z as fp}from"zod";function lY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Zo6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function cY8($,Z){let Q=Buffer.from(JSON.stringify(uY8.parse($))).toString("base64url");return`${Q}.${lY8(Q,Z)}`}function mY8($,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(lY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Qo6(W,G))return null;try{let K=uY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+qD)return null;return K.data}catch{return null}}var uY8;var dY8=D(()=>{bU();uY8=fp.object({sessionId:fp.string().uuid(),organizationId:fp.string().min(1).max(256),userId:fp.string().min(1).max(256),threadId:fp.string().min(1).max(256),expiresAt:fp.number().int().positive()})});import{z as uD1}from"zod";function iY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return lD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var lD1;var pY8=D(()=>{lD1=uD1.object({provider:uD1.enum(["elevenlabs","openai"]),model:uD1.string().trim().min(1).max(128)})});import{createHash as Yo6}from"crypto";import{z as yp}from"zod";function gp($){return`user.${Yo6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new nY8.Kvm(Q_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Q_0.StorageType.Memory,ttl:tY8.nanos(qD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=iY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+qD},W=cY8(G,this.deps.secret),K=await this.kv(),H=gp(G),F=await K.get(H),U=F?.operation==="PUT"?Z_0.parse(F.json()):null,N=cD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:gp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=mY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=gp(Q),J=await Y.get(X),G=J?.operation==="PUT"?Z_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,cD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=gp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Z_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,cD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(gp($));if(Q?.operation==="PUT"&&Z_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(gp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Q_0,nY8,tY8,Z_0,cD1;var oY8=D(()=>{OJ();bU();dY8();pY8();Q_0=C(BK(),1),nY8=C($A(),1),tY8=C(zz(),1),Z_0=yp.object({sessionId:yp.string().uuid(),expiresAt:yp.number(),connected:yp.boolean().optional(),conversation:lD1.optional(),characters:yp.number().int().nonnegative(),requests:yp.number().int().nonnegative()}),cD1=new TextEncoder});function Xo6($){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 Jo6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},rY8=()=>{let $=new Z1;return $.use("*",Jo6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Xo6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var sY8=D(()=>{J8();X$();Sk0()});import{z as y1}from"zod";function jN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Oo6($){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 Lo6($,Z,Q){try{return JSON.parse($)}catch{throw new $X8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function wo6($){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:Lo6(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 jo6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?dF(Q.function.parameters):dF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Eo6($){if(!$)return;return{openai:{response_format:$}}}function zo6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function aY8($,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 eY8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Go6=256,Wo6,Ko6,Ho6,Fo6,Uo6,No6,Bo6,Do6,$X8,ZX8,QX8;var YX8=D(()=>{y4();J8();Ip();CH();Wo6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Ko6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Ho6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Ko6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Fo6=y1.object({type:y1.literal("text")}),Uo6=y1.object({type:y1.literal("json_object")}),No6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),Bo6=y1.union([Fo6,Uo6,No6]),Do6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Ho6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Wo6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:Bo6.optional(),user:y1.string().optional()});$X8=class $X8 extends Error{constructor($){super($);this.name="MessageConversionError"}};ZX8=new Z1;ZX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jN("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(jN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Do6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Oo6(J.model);if(!G)return $.json(jN("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)=>LP(E.providerId));if(!j)return $.json(jN("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(jN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=wo6(J.messages),N=J.tools?jo6(J.tools):void 0,B=Eo6(J.response_format),O=zo6(),L=Math.floor(Date.now()/1000);if(J.stream)return UO($,async(w)=>{let j=aY8(F,U,N,J,B,$.req.raw.signal);try{let E=Wd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,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(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=Go6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,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 P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:eY8(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 P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=aY8(F,U,N,J,B,$.req.raw.signal),j=await fU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:eY8(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(jN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(jN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(jN(X.message,"server_error"),500)}});QX8=ZX8});function Po6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function XX8(){let $=new Z1;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=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(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||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(NA(U)!==J)continue;if(!Po6(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 JX8=D(()=>{J8();aG()});var WX8;var GX8=D(()=>{WX8={name:"decocms",version:"4.429.10",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 Ro6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??To6}}var KX8,To6="https://ph.studio.decocms.com",HX8;var FX8=D(()=>{J8();qs();gf();I9();X$();QN1();GX8();KX8=new Z1;KX8.get("/",($)=>{let Z={version:WX8.version,theme:Q5$(),...dK().logo&&{logo:dK().logo},...fD()&&{internalUrl:Ip1()},...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:o48(),posthog:Ro6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:TO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});HX8=KX8});function oy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dD1($){return(oy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function UX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(oy($))}&sz=${Z}`}function qo6($,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 NX8($){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=qo6(`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 z$}from"zod";var Mo6,BX8;var DX8=D(()=>{Mo6=z$.object({check_id:z$.string(),title:z$.string(),description:z$.string().optional(),impact:z$.string().optional(),why:z$.string().optional(),category:z$.string(),severity:z$.string(),value_band:z$.string().optional(),value_driver:z$.string().optional(),controllability:z$.string().optional(),pages:z$.array(z$.string()),tasks:z$.array(z$.string()),evidence:z$.string(),sample_scope:z$.string().optional(),sources:z$.array(z$.string())}),BX8=z$.object({domain:z$.string(),brand:z$.string(),favicon:z$.string().optional(),scanned_at:z$.string().nullable(),lang:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),totals:z$.object({measured:z$.number(),registry_total:z$.number(),passed:z$.number(),failed:z$.number(),blocked:z$.number()}),buckets:z$.array(z$.object({id:z$.enum(["critical","important","worth"]),label:z$.string(),items:z$.array(Mo6)})),passing:z$.object({count:z$.number(),items:z$.array(z$.object({check_id:z$.string(),title:z$.string()}))}),not_measured:z$.object({count:z$.number(),groups:z$.array(z$.object({reason:z$.string(),label:z$.string(),count:z$.number(),checks:z$.array(z$.string())}))}),categories:z$.array(z$.object({key:z$.string(),label:z$.string(),score:z$.number().nullable(),band:z$.string().nullable(),pass:z$.number(),fail:z$.number()})),screenshots:z$.array(z$.object({url:z$.string(),page_type:z$.string().optional(),viewport:z$.enum(["desktop","mobile"]),image_url:z$.string()}))})});function OX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Y_0($,Z={}){let Q=await fetch(OX8($,"",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 BX8.parse(await Q.json())}async function LX8($,Z={}){let Q=await fetch(OX8($,".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 iD1=D(()=>{DX8();pB()});import{join as wX8}from"path";async function Vo6($){try{let Z=await Y_0($,{signal:AbortSignal.timeout(Io6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ko6($,Z){let Q=oy($),Y=Z?.brand?.trim()||dD1(Q),X=UX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=NX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(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="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
3738
3738
  `)}function So6($,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}
3739
3739
  </head>`)}function jX8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=oy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(wX8($,"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(`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(Co6)}),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=oy(Q.req.param("file").replace(/\.md$/,""));try{let X=await LX8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(_o6)});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=$?wX8($,"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 Vo6(oy(Y)),K=ko6(Y,W);return Q.html(So6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Io6=2500,Co6=1e4,_o6=1e4;var EX8=D(()=>{J8();pB();iD1();X$()});function X_0($,Z){return fetch(`${jW({})}${$}`,Z)}async function vo6($,Z){let Q=await Y_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function xo6($){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 bo6,BO,zX8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},PX8;var AX8=D(()=>{J8();Z3();pB();iD1();bo6=new Set(["complete","errored","terminated","unknown"]);BO=new Z1;BO.use("*",async($,Z)=>{let Q=await x8.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});BO.use("/link-token/*",zX8);BO.use("/suggest",zX8);BO.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 vo6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});BO.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}=xo6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await X_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${nw({})}`},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)}});BO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await X_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${nw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:bo6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});BO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await X_0(`/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)}});BO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await X_0(`/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:[]})}});PX8=BO});var fo6=1048576,pD1;var TX8=D(()=>{J8();eW();X$();lU1();pD1=new Z1;pD1.post("/webhook",x5({maxSize:fo6,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(!K48(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=H48(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await F48(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as yo6}from"crypto";function uo6($,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 yo6(Buffer.from(X),Buffer.from(Y))}function lo6($,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 RX8($){let Z=new Z1;return Z.post("/webhook",x5({maxSize:go6,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(!uo6(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"&&!ho6.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 C10().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=lo6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await co6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function co6($,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 fb$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var go6=5242880,ho6;var qX8=D(()=>{J8();eW();vW();C7();ho6=new Set(["check_suite","issue_comment"])});import{DBOS as tD1,SchedulerMode as mo6}from"@dbos-inc/dbos-sdk";async function io6(){try{return await po6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function po6(){if(!S10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (M91(),q91)),Promise.resolve().then(() => (R91(),T91))]),Q=await C10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=D8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=QT$({sandboxes:J,pools:G,records:await YT$(X,J,G),legacyPools:YT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await XT$(K,RH0(X,new UX(E0().encryptionKey)),{now:W,orgFsLifetimeMs:GT0}),U=0,N=0,B=0;for(let O of H)try{let L=await Y.pushCredentials(O);U+=L.stored,N+=L.kept}catch(L){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${L instanceof Error?L.message:String(L)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function no6($,Z){let Q=await tD1.runStep(io6,{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 MX8(){if(nD1)return;if(!E0().agentSandboxEnabled||!S10())return;nD1=tD1.registerWorkflow(no6,{name:"sandboxCredentialPushWorkflow"}),tD1.registerScheduled(nD1,{name:"sandboxCredentialPushWorkflow",crontab:do6,mode:mo6.ExactlyOncePerIntervalWhenActive})}var do6="1-59/10 * * * *",nD1=null;var IX8=D(()=>{SG();FL();D41();WT0();XT0();vW();X$()});function VX8($){let Z=new $O($.db,new UX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=s_$(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 lQ(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 kX8=D(()=>{J8();FL();u71();KE();d40()});import{DBOS as Zz,SchedulerMode as to6}from"@dbos-inc/dbos-sdk";function SX8($){rD1=$}function aD1(){if(!rD1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return rD1}function eD1(){let $=aD1();return new $O($.db,new UX($.encryptionKey))}async function eo6($){try{let Z=await eD1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await MH(aD1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new lQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${ro6}m"`,W=0,K;for(let H=0;H<so6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await rH1(Q,Z,{issueId:U.id,now:Date.now()})==="started")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,started:W}}catch(Z){return{integrationId:$,started:0,error:Z instanceof Error?Z.message:String(Z)}}}async function $r6($,Z){let Q=await Zz.runStep(()=>eD1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Zz.runStep(()=>eo6(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.started>0)console.log(`[jira-trigger] integration ${X.integrationId} started ${X.started} run(s) the webhook missed`)}async function Zr6($,Z){try{let Q=await eD1().getById($);if(!Q?.enabled)return"disabled";let Y=await MH(aD1().db,Q.organizationId);if(!Y)return"disabled";let X=await rH1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="started")console.log(`[jira-trigger] started a run for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no run`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function Qr6($,Z){await Zz.sleep(vk0()+ao6),await Zz.runStep(()=>Zr6($,Z),{name:"settleJiraMove"})}async function CX8($,Z){if(!sD1)throw Error("[jira-trigger] settle workflow is not registered");await Zz.startWorkflow(sD1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function _X8(){if(oD1)return;sD1=Zz.registerWorkflow(Qr6,{name:"jiraSettleWorkflow"}),oD1=Zz.registerWorkflow($r6,{name:"jiraTriggerSweepWorkflow"}),Zz.registerScheduled(oD1,{name:"jiraTriggerSweepWorkflow",crontab:oo6,mode:to6.ExactlyOncePerIntervalWhenActive})}var oo6="7-59/10 * * * *",ro6=35,so6=5,ao6=5000,rD1=null,sD1=null,oD1=null;var $O1=D(()=>{FL();d40();Md();KE();tH1();bk0()});function vX8($){let Z=new $O($.db,new UX($.encryptionKey));async function Q(X,J){let G=_e$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await CX8(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",x5({maxSize:Yr6}),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 Yr6=1048576;var bX8=D(()=>{J8();eW();FL();$O1();bk0();d40()});function xX8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var fX8,Xr6,Jr6,yX8;var gX8=D(()=>{J8();OJ();bd();pc();fX8=new Z1,Xr6=["range","if-none-match","if-modified-since"],Jr6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];fX8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Xp($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await Z80(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&PW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(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 xX8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Xr6){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 q1(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 q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Jr6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),xX8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});yX8=fX8});var c60=b((ry)=>{var Gr6=ry&&ry.__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]}),Wr6=ry&&ry.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Gr6(Z,$,Q)};Object.defineProperty(ry,"__esModule",{value:!0});Wr6(OG(),ry)});var lX8=b((hX8)=>{Object.defineProperty(hX8,"__esModule",{value:!0});hX8.version=void 0;hX8.version="3.4.0"});var dX8=b((EN)=>{var Kr6=EN&&EN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(EN,"__esModule",{value:!0});EN.NodeTransport=EN.VERSION=void 0;EN.nodeResolveHost=Dr6;var s5=c60(),Hr6=M0("net"),ZO1=M0("tls"),Fr6=M0("path"),cX8=M0("fs"),Ur6=Kr6(M0("dns")),Nr6=lX8();EN.VERSION=Nr6.version;var Br6="nats.js";class mX8{socket;version;lang;yields=[];signal=(0,s5.deferred)();closedNotification=(0,s5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=Br6,this.version=EN.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,s5.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 s5.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 s5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new s5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,s5.deferred)(),Q,Y=(0,Hr6.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,s5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=s5.DataBuffer.concat(...this.yields),X=(0,s5.extractProtocolMessage)(Y);if(X!=="")try{let J=s5.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,s5.deferred)();try{if($=(0,Fr6.resolve)($),!(0,cX8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,cX8.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,s5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new s5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,s5.deferred)();try{let X=(0,ZO1.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 s5.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,s5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new s5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s5.deferred)();try{let Y=(0,ZO1.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 s5.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,s5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s5.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 ZO1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s5.render)($)}`);let Z=(0,s5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,s5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,s5.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}}EN.NodeTransport=mX8;function Dr6($){let Z=(0,s5.deferred)();return Ur6.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 oX8=b((tX8)=>{Object.defineProperty(tX8,"__esModule",{value:!0});tX8.connect=Or6;var iX8=dX8(),pX8=c60(),nX8=c60();function Or6($={}){if((0,nX8.hasWsProtocol)($))return Promise.reject(nX8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,pX8.setTransportFactory)({factory:()=>{return new iX8.NodeTransport},dnsResolveFn:iX8.nodeResolveHost}),pX8.NatsConnectionImpl.connect($)}});var rX8=b((DO)=>{var wr6=DO&&DO.__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]}),jr6=DO&&DO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))wr6(Z,$,Q)};Object.defineProperty(DO,"__esModule",{value:!0});DO.connect=void 0;var Er6=oX8();Object.defineProperty(DO,"connect",{enumerable:!0,get:function(){return Er6.connect}});jr6(c60(),DO)});function $J8($){let Z=$?.connectFn??Tr6,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 O=0;while(!J)try{Q=await Z({servers:N,timeout:Ar6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=U7(Pr6,zr6,O-1,2,0.5);await O$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?sX8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=eX8.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 Tr6($){return aX8.connect($)}var sX8,aX8,eX8,zr6=100,Pr6=3000,Ar6=3000;var ZJ8=D(()=>{a$();sX8=C(zz(),1),aX8=C(rX8(),1),eX8=C(BK(),1)});function J_0($){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 G_0($,Z){return`${$}.${Z}`}class QO1{cache;constructor($){this.cache=J_0({ttlMs:$?.ttlMs??Rr6,maxSize:$?.maxSize??qr6})}async get($,Z){return this.cache.get(G_0($,Z))??null}async set($,Z,Q){this.cache.set(G_0($,Z),Q)}async invalidate($,Z){this.cache.delete(G_0($,Z)),this.cache.delete(G_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Rr6=600000,qr6=5000;var QJ8=()=>{};function W_0($,Z){return`${$}:${Z}`}function YO1($){let Z=J_0({ttlMs:$?.ttlMs??Mr6,maxSize:$?.maxSize??Ir6}),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(YJ8,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(W_0(K,H))},set(K,H,F){Z.set(W_0(K,H),F)},invalidate(K,H){Z.delete(W_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(YJ8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(W_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var YJ8="studio.ai-provider-keys.invalidate",Mr6=30000,Ir6=5000;var XJ8=()=>{};class XO1{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 JJ8=($)=>{let Z;return()=>Z??=$()},JO1,GO1;var GJ8=D(()=>{k6();JO1=JJ8(()=>e1.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),GO1=JJ8(()=>e1.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function br6($=HJ8){return{name:pU,subjects:[`${pY1}.>`],storage:iH.StorageType.File,max_age:Sr6,max_bytes:_r6,max_msgs_per_subject:vr6,discard:iH.DiscardPolicy.Old,retention:iH.RetentionPolicy.Limits,duplicate_window:Cr6,num_replicas:$}}class FJ8{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 WJ8($){let Z=KJ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function gr6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,kr6().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 hr6($,Z){return $.info?.cluster?Z:1}function ur6($){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 WO1{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=br6(X);try{await Y.streams.info(pU),await Y.streams.update(pU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(pU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(pU),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await iH.jetstreamManager($),X=hr6($,HJ8);try{await Z(Y,X)}catch(J){if(X<=1||!ur6(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:md});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=gr6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=zy$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=tY1(H,{runId:Z}),N=performance.now()-F;JO1().record(N),GO1().add(1,{"org.id":Y??"unknown"}),yr6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?WJ8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),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(),fr6)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 E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:WJ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:md}),!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=tY1(Z,{runId:$,dedup:Q});JO1().record(performance.now()-X),GO1().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=Ey$({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"?iH.DeliverPolicy.New:iH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=LE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(pU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:md})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=ZM0({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(sq0()).pipeThrough(aq0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(pU,{filter:LE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var iH,KJ8,Vr6=($)=>{let Z;return()=>Z??=$()},kr6,Sr6=86400000000000,Cr6=120000000000,_r6=4294967296,HJ8,vr6=500000,xr6,fr6,yr6;var UJ8=D(()=>{a$();oY1();QM0();eq0();k6();GJ8();iH=C(BK(),1),KJ8=C(zz(),1),kr6=Vr6(()=>e1.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),HJ8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);xr6=process.env.STREAM_ENCODE_TRACE==="1",fr6=process.env.DECOPILOT_STREAM_TRACE==="1";yr6=xr6?new FJ8:null});function K_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,NF(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 NJ8=D(()=>{p8()});class KO1{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 lr6($,Z,Q={}){let Y=$.startsWith("thread:")?AH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function HO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await vU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await im($,{threadId:X,runBranch:G?.branch}),K=await g00($,Q,F41(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=lr6(W,await PT0($,X),{flat:Uf(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 O3(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 BJ8=D(()=>{Z7();xW();C7()});async function DJ8($,Z,Q){let Y=Z.organizationId;if(!uX(Z))return!1;if(!vf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=wU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await $5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),L8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var OJ8=D(()=>{x4();cY();Vd();IH();P9()});function tr6($){return $ instanceof kX}function LJ8($,Z){return Z-$>=pr6}class FO1{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??cr6;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??dr6,Q=this.options.itemIntervalMs??mr6,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()-b71),ZY1);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()-nr6));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 aQ1(this.taskBoard,X,Y),await eQ1(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!==R$.progress||uX(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await HO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!LJ8(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:R$.progress,to:R$.review,reason:H}}).catch(()=>{}),L8(J,F),await VH(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!==R$.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await kH(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),tr6(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()+ir6)).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!==R$.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(()=>{}),L8(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(!LJ8(JD(Q,Z.reviewCycleStartedAt),Date.now()))return;await VH($,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(!uX(Y))return!1;let X=Y.assigneeId===R8,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 HO1(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 Cd(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 DJ8(G,Y,W))return!0;if(await Tg$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!tQ1(W))return!1;return await kd(G,Y,{previewMatchesHead:oQ1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await NE($,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 cr6=60000,mr6=300000,dr6=50,ir6=60000,pr6=900000,nr6=120000;var wJ8=D(()=>{x4();Bq0();BJ8();dU();N80();IH();OJ8();P9();MW();QY1();C7();g$0();Sd()});import{readdir as or6,rm as H_0}from"fs/promises";import{join as F_0}from"path";async function U_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-rr6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await sy($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await jJ8($,X,Z);else if(!X.startsWith(".")){let J=F_0($,X),G=await sy(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await jJ8(J,K,Z)}if((await sy(J)).length===0)await H_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function jJ8($,Z,Q){let Y=0,X=F_0($,Z),J=await sy(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=F_0(X,W),H=await sy(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=F_0(K,U);await H_0(B,{recursive:!0,force:!0}),Y++}}if((await sy(K)).length===0)await H_0(K,{recursive:!0,force:!0})}if((await sy(X)).length===0)await H_0(X,{recursive:!0,force:!0});return Y}async function sy($){try{return(await or6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var rr6=30;var UO1=()=>{};import{DBOS as NO1,SchedulerMode as sr6}from"@dbos-inc/dbos-sdk";async function er6(){let $=[JK(),Gg(),MN()],Z=0;for(let Q of $)try{Z+=await U_0(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 $s6($,Z){await NO1.runStep(()=>er6(),{name:"monitoringRetention"})}function zJ8(){if(EJ8)return;EJ8=!0;let $=NO1.registerWorkflow($s6,{name:"monitoringRetentionWorkflow"});NO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:ar6,mode:sr6.ExactlyOncePerIntervalWhenActive})}var ar6="23 4 * * *",EJ8=!1;var PJ8=D(()=>{_3();UO1()});function AJ8($){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 cQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await HA($.db,Z,Y.role);return X.boundAuth=vU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new oP(Q,void 0,X.boundAuth,Y.role,"self"),UE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var TJ8=D(()=>{bK();DU()});function Zs6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Qs6(){return{services:Zs6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Xs6(){for(let $ of Ys6)$()}function RJ8($){let Z=[...BO1.logs,$];BO1={...BO1,logs:Z.length>500?Z.slice(-500):Z},Xs6()}function DO1(){return Js6}var BO1,Ys6,Js6=!1;var OO1=D(()=>{BO1=Qs6(),Ys6=new Set});import{EventEmitter as Gs6}from"events";var LO1;var qJ8=D(()=>{OO1();LO1=new Gs6;LO1.on("request",($)=>{RJ8($)})});function MJ8(){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=hp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>hp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${W9.tool}${B}${W9.dim}(${w})${W9.reset}`}else if(N.method)J=`${W9.dim}${hp(N.method)}${W9.reset}`}}catch{}}let W=hp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${W9.mcp}${hp(F.slice(0,12))}\u2026${W9.reset}`}else if(X==="/mcp")W=`${W9.mcp}/mcp${W9.reset}`;else if(X==="/mcp/registry")W=`${W9.mcp}/mcp/registry${W9.reset}`;let K=Ks6(Y),H=G?"\u25C0":"\u2190";if(!DO1())console.log(`${W9.dim}${H}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Ws6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!DO1())console.log(`${W9.dim}${O}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""} ${N}${U}${W9.reset} ${W9.duration}${B}${W9.reset}`);LO1.emit("request",{method:Y,path:hp(X),status:U,duration:F,timestamp:new Date})}}}var W9,Ws6=($)=>{if($>=500)return W9.serverError;if($>=400)return W9.clientError;if($>=300)return W9.redirect;return W9.ok},Ks6=($)=>{return W9[$]||W9.reset},hp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var IJ8=D(()=>{OO1();qJ8();W9={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 CJ8}from"crypto";import{mkdir as Hs6,readdir as Fs6,rm as VJ8,stat as _J8}from"fs/promises";import{join as jO1,relative as Us6}from"path";import{z as Q8}from"zod";function bJ8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return jO1(Ns6,Z)}function xJ8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function wO1($,Z){let Q=bJ8($),Y=xJ8(Z);return jO1(Q,Y)}function Bs6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return CJ8("sha256",X).update(J).digest("hex")}function SJ8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Bs6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${xJ8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function fJ8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${CJ8("md5","etag").update(Y).digest("hex")}"`}async function yJ8($,Z,Q,Y,X){try{let J=await Fs6($,{withFileTypes:!0});for(let G of J){let W=jO1($,G.name),H=Us6(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 yJ8(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 _J8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:fJ8(W,F.mtime,F.size)})}catch{}}}}catch{}}function gJ8($,Z){let Y=J0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Q8.object({prefix:Q8.string().optional(),maxKeys:Q8.number().optional().default(1000),continuationToken:Q8.string().optional(),delimiter:Q8.string().optional()}),outputSchema:Q8.object({objects:Q8.array(Q8.object({key:Q8.string(),size:Q8.number(),lastModified:Q8.string(),etag:Q8.string()})),nextContinuationToken:Q8.string().optional(),isTruncated:Q8.boolean(),commonPrefixes:Q8.array(Q8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=bJ8(Y);await Hs6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await yJ8(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),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=wO1(Y,J.key),W=await _J8(G);return{contentType:_N1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:fJ8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=oD(J.expiresIn,kJ8);return{url:SJ8(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:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional(),contentType:Q8.string().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=oD(J.expiresIn,kJ8);return{url:SJ8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({success:Q8.boolean(),key:Q8.string()}),handler:async(X)=>{let J=X,G=wO1(Y,J.key);try{return await VJ8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Q8.object({keys:Q8.array(Q8.string()).max(1000)}),outputSchema:Q8.object({deleted:Q8.array(Q8.string()),errors:Q8.array(Q8.object({key:Q8.string(),message:Q8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=wO1(Y,K);try{await VJ8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function EO1($,Z,Q){let Y=gJ8(Z,Q),X=new Xw({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:Q8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Q8.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 z3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),mW(X,J,$,"mcp:dev-assets")}async function hJ8($,Z,Q,Y){let J=gJ8(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 Ns6="./data/assets",kJ8=3600,vJ8,uJ8;var lJ8=D(()=>{X$();rd();J8();VJ0();od();NJ();rD();rS0();vJ8=new Z1;vJ8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return EO1($.req.raw,Z,Y)});uJ8=vJ8});var cJ8={};$6(cJ8,{mountDevRoutes:()=>Ds6});function Ds6($,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 EO1(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 hJ8(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",uJ8);let Q=new Z1;Q.use("*",mH({mountPath:"/api/dev-assets"})),Q.route("/",oS0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var mJ8=D(()=>{J8();qN1();rS0();lJ8()});var eJ8={};$6(eJ8,{watchHandler:()=>aJ8,resolveCorsOrigin:()=>rJ8,isSsoExemptPath:()=>tJ8,isAllowedOAuthRedirectUri:()=>sJ8,createApp:()=>Rs6});import{readFileSync as Os6}from"fs";import{PrometheusSerializer as Ls6}from"@opentelemetry/exporter-prometheus";import{DBOS as OO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Es6,oAuthProtectedResourceMetadata as zs6}from"better-auth/plugins";async function ws6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,iJ8(dJ8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),iJ8(dJ8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function iJ8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function tJ8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${xS0}/`)||$.startsWith(`${kS0}/`)}function oJ8($){return $==="local.studio.decocms.com"}function rJ8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(oJ8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function sJ8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||oJ8($.hostname)}async function Rs6($={}){let Z=$.database??D8(),Q=!1;_5.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new QO1,K,H,F,U=null;if($.disableNats)K=YO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new P80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:R0}=await H0.read();if(R0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=$J8();let K0=E0().natsCredsPath,H0;if(K0)try{H0=Os6(K0,"utf8")}catch(w8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,w8)}U.init(E0().natsUrls,H0?{creds:H0}:void 0);let R0=$$1()?new y11({getJetStream:()=>U.getJetStream()}):null;R0?.init().catch(()=>{}),Y=R0;let A0=new r91({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new xf(cQ1,{getJetStream:()=>U.getJetStream()}),x$=new xf(h$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),x$.init().catch(()=>{}),J={reads:D1,cards:x$};let i$=new CJ1({getJetStream:()=>U.getJetStream()});i$.init().catch(()=>{}),G=i$,K=YO1({getConnection:()=>U.getConnection()}),H=new XO1({getConnection:()=>U.getConnection()}),F=new WO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),S48(U),U.onReady(()=>{R0?.init().catch((w8)=>{console.error("[McpListCache] Deferred init failed:",w8)}),A0.init().catch((w8)=>{console.error("[SkillCatalogCache] Deferred init failed:",w8)}),D1.init().catch((w8)=>{console.error("[PrReadCache] Deferred init failed:",w8)}),x$.init().catch((w8)=>{console.error("[PrCardCache] Deferred init failed:",w8)}),i$.init().catch((w8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",w8)}),K.start(),vN$(()=>U.getConnection()),F.init().catch((w8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",w8)})})}if(Qz)await Qz();g11(Y),a91(X),mQ1(J),_J1(G);let B={storage:new ph(Z.db),sseHub:_5,onThreadFinished:async(K0,H0)=>vd(new D3(Z.db),K0,H0,new kG(Z.db))},O=new ZX1(B),L=new l40(Z.db),w=new KO1(L);w.start(),Pg$(H),H.start((K0)=>{uq0(K0),O.execute({type:"CANCEL",taskId:K0}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",H0)})}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast start failed:",K0)}),U?.onReady(()=>{H.start().catch((K0)=>{console.error("[CancelBroadcast] Deferred start failed:",K0)})});let j=()=>U?.getConnection()??null;zN1(j),U?.onReady(()=>zN1(j)),BG1(j),U?.onReady(()=>BG1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),Qz=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),i68(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),bN$(),G.teardown(),g11(null),a91(null),mQ1(null),_J1(null)};let E=new Z1;if(E.use("*",VJ1({enabled:(K0)=>Yp(K0,"debug")==="1"})),E.use("*",v_0),E.use("/*",q48({origin:(K0,H0)=>rJ8(K0,{baseUrl:E0().baseUrl,requestOrigin:new URL(H0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(K0,H0)=>{if(await H0(),K0.req.path.includes("/files/"))return;if(K0.req.path.includes("/fs/")&&K0.req.path.endsWith("/read"))return;K0.header("X-Frame-Options","DENY"),K0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",MJ8());E.use("*",async(K0,H0)=>{if(await H0(),op(K0.req.path))return;if(K0.res.status>=500){let A0=await K0.res.clone().text();console.error(`[5xx Response] ${K0.req.method} ${K0.req.path} - ${K0.res.status}:`,A0)}}),E.get(aY.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get(aY.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get(aY.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await ws6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let R0=H0.postgres.status==="up",A0=R0?200:503;return K0.json({status:R0?"ready":"not_ready",services:H0},A0)}),E.get(aY.METRICS,async(K0)=>{try{let H0=await y_0.collect(),R0=js6.serialize(H0.resourceMetrics);return K0.text(R0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(H0){return console.error("Failed to collect metrics:",H0),K0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${aY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!Ps6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[R0,A0]=await Promise.all([OO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),OO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:R0.length,in_flight:A0.length})}),E.route("/api/config",HX8),E.route("/api/_reports",PX8),E.route("/api/_stripe",pD1),E.route("/api/_github",RX8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Up);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",vX8(T)),E.route("/api/_jira",VX8(T)),E.route("/report",jX8($.clientDir)),E.route("/api/auth/custom",r48),E.route("/api/auth/desktop",$68),E.all("/api/auth/admin/*",_68),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let A=Q88();A.use("/.well-known/oauth-protected-resource/mcp/:connectionId",$60),A.use("/mcp/:connectionId/.well-known/oauth-protected-resource",$60),E.route("/",A),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",h40),E.route("/",W88()),E.use("/oauth-proxy/:connectionId/*",$60),E.all("/oauth-proxy/:connectionId/*",pJ8);let P=async(K0)=>{let R0=await As6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",P);let q=async(K0)=>{let R0=await Ts6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=I48({ttlMs:120000}),_=await a88({db:Z.db,auth:x8,encryption:{key:E0().encryptionKey},observability:{tracer:RO,meter:e1},modelListCache:W,providerKeyCache:K,memberRoleCache:x});cQ.set(_),Lp1({db:Z.db,baseUrl:m5()}),e88({db:Z.db}),Y48({db:Z.db}),U48({db:Z.db}),SX8({db:Z.db,encryptionKey:E0().encryptionKey}),ev$({db:Z.db}),w48({db:Z.db}),Ab$({db:Z.db});let V=LX0(Z.db),y=new kr(Z.db),g=AJ8({db:Z.db});RJ1({storage:V,studioContextFactory:g}),UX1({systemDatabaseUrl:Js0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}}),XX1({dispatchRunFn:Ny$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}});let l=new ph(Z.db),i=new D3(Z.db),p=new kG(Z.db),U0=new FO1(i,g,p);if(E0().taskBoardReviewSweeperEnabled){U0.start();let K0=Qz;Qz=async()=>{await K0?.(),U0.dispose()}}vy$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await nJ8.jetstreamManager(K0):null},messageParts:l.messageParts(),resolveRun:async(K0)=>{let H0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",K0).executeTakeFirst();return H0?{orgId:H0.organization_id,createdBy:H0.created_by,version:H0.message_storage_version??1,status:H0.status,runFenceToken:H0.run_fence_token,title:H0.title??null}:null},completeRunIfNotCompleted:async(K0,H0)=>{let R0=await l.completeRunIfNotCompleted(K0,H0);if(K_0(_5,H0,K0,R0),R0)await vd(i,K0,H0,p);return R0},markRunRequiresAction:async(K0,H0)=>{let R0=await l.requiresActionIfInProgress(K0,H0);return K_0(_5,H0,K0,R0),R0},markRunFailed:async(K0,H0,R0,A0)=>{let D1=await l.markRunFailed(K0,H0,R0,A0);if(K_0(_5,H0,K0,D1),D1)await vd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,OE(K0,H0),[])},persistTitle:(K0,H0,R0)=>l.update(K0,H0,{title:R0}),onTitleUpdated:async({runId:K0,orgId:H0,title:R0})=>{let A0=await l.get(K0,H0).catch(()=>null);_5.emit(H0,NF(K0,A0?.status??"in_progress",{title:R0,virtualMcpId:A0?.virtual_mcp_id??void 0,createdBy:A0?.created_by,triggerId:A0?.trigger_id,branch:A0?.branch??null,harnessId:A0?.harness_id??void 0,createdAt:A0?.created_at,updatedAt:A0?.updated_at}))},bumpProgress:async({runId:K0,orgId:H0})=>{await l.bumpProgress(K0,H0)},recordCompleted:async({runId:K0,orgId:H0,distinctId:R0,usage:A0})=>{f1.capture({distinctId:R0,event:"chat_message_completed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",input_tokens:A0.inputTokens,output_tokens:A0.outputTokens,total_tokens:A0.totalTokens}})},recordFailed:async({runId:K0,orgId:H0,distinctId:R0,reason:A0,kind:D1})=>{f1.capture({distinctId:R0,event:"chat_message_failed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",error_category:D1,error_message:A0}})},purgeRun:async(K0)=>{F.purge(K0)}}),gf$({studioContextFactory:g,systemDatabaseUrl:Js0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),zJ8(),wp1(),Z48(),J48(),B48(),_X8(),Xb$(),E48(),Tb$(),MX8();let v0=async(K0,H0,R0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return IJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},G0=new Hp(V,({automation:K0,trigger:H0,contextMessages:R0,idempotencyKey:A0})=>z80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:R0},{idempotencyKey:A0})),N0=[JK(),Gg(),MN()];for(let K0 of N0)U_0(K0).then(()=>{}).catch((H0)=>console.error("[monitoring] Retention cleanup failed:",H0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((K0)=>console.error("[auth] Expired API key cleanup failed:",K0));o(),setInterval(o,86400000).unref(),E.use("*",async(K0,H0)=>{if(C_0(K0.req.path))return H0();let R0={measure:async(D1,x$)=>{cW(K0,D1);try{return await x$()}finally{P3(K0,D1)}}},A0=await cQ.create(K0.req.raw,{timings:R0});A0.automationRunner=v0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),O$(30000)]).catch((i$)=>console.error("[studio] revalidation cleanup error:",i$))}}),E.use("/api/:org/decopilot/*",Jp),E.use("/api/:org/v1/*",Jp),E.use("/api/:org/files/*",Jp),E.use("*",async(K0,H0)=>{if(tJ8(K0.req.path))return H0();let R0=K0.get("studioContext");if(!R0?.organization?.id||!R0?.auth?.user?.id)return H0();if(!(await R0.storage.orgSsoConfig.getByOrgId(R0.organization.id))?.enforced)return H0();if(!await R0.storage.orgSsoSessions.isValid(R0.auth.user.id,R0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let $0=new Z1;$0.use("*",mH({mountPath:"/api/org-sso"})),$0.route("/",gS0()),E.route("/api/org-sso",$0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:un0,grouped:tP()})}),E.use("/mcp/*",async(K0,H0)=>{cW(K0,"mcp");try{return await H0()}finally{P3(K0,"mcp")}});let Z0=async(K0,H0)=>{let R0=K0.var.studioContext;if(!R0.auth.user?.id&&!R0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),x$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${x$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Z0),E.use("/mcp/gateway/:virtualMcpId?",Z0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Z0),E.use("/mcp/self",Z0),PW()){let{mountDevRoutes:K0}=(mJ8(),E_0(cJ8));K0(E,Z0)}let r=new Z1;r.use("*",mH({mountPath:"/mcp"})),r.route("/",bM0()),E.route("/mcp",r);let Y0=new Z1;Y0.use("*",mH({mountPath:"/mcp/self"})),Y0.route("/",IC0()),E.route("/mcp/self",Y0);let d0=new Z1;d0.use("*",mH({mountPath:"/mcp"})),d0.route("/",yM0()),E.route("/mcp",d0),E.use("/api/:org/models/*",async(K0,H0)=>{cW(K0,"llm_models");try{return await H0()}finally{P3(K0,"llm_models")}});let S0=n68({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",S0),E.route("/api",yX8);let W1=new Z1;W1.use("*",mH({mountPath:"/api"})),W1.route("/",CC0()),E.route("/api",W1),E.route("/api",QX8);let u0=new Z1;u0.use("*",mH({mountPath:"/api"})),u0.route("/",_C0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",u0);let L0=new Cr(Z.db),j0=new Z1;j0.use("*",mH({mountPath:"/api"})),j0.route("/",mS0()),E.route("/api",j0),E.route("/api/deco-sites",K58()),E.route("/api/deco-apps",rY8());let l0=new Z1;l0.use("*",mH({mountPath:"/api/deco-sites"})),l0.route("/",iS0()),E.route("/api/deco-sites",l0),E.route(xS0,v68()),E.route(u78,m78()),E.route("/api/_editor-resolve",XX8()),E.route(Q68,Y68()),E.route(kS0,B68());let O1=E0(),Q1=O1.elevenlabsApiKey?new $_0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,_0={openai:O1.openaiLiveApiKey?new gD1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:Q1?new yD1(Q1,()=>U?.getConnection()??null):null},m0=new mD1({adapter:Q1,conversationAdapters:_0,defaults:O1,secret:O1.studioJwtSecret??O1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),i0=VY8({voiceSessions:m0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:_5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:PW(),mcpAuth:Z0,oauthProxyHandler:pJ8,watchHandler:aJ8,betterAuthProtectedResourceHandler:P,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(o68),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([_5.stop(),Qz?Promise.resolve(Qz()).finally(()=>{Qz=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await oX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await jZ$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await OO.registerQueue(C3,{partitionQueue:!0,concurrency:PJ1,minPollingIntervalMs:AJ1}),await OO.registerQueue(S3,{partitionQueue:!0,concurrency:HX1,priorityEnabled:!0}),await OO.registerQueue(RN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await OO.registerQueue(qN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await OO.registerQueue(AO,{partitionQueue:!0,concurrency:yf$}),await OO.registerQueue(Wz,Pb$),await MN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>OO.deleteQueue(K0))),await TJ1(Z.pool),hY$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),jp1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var nJ8,dJ8=5000,Qz=null,pJ8=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 cQ.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 ei(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 u40(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=G88(O);if(L)return L;let w=new URL(O),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(!sJ8(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(P48(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"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let A,P=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));P=v0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)P=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());A=i.toString()}else if(Y==="register"&&z?.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(),l={};try{l=g?JSON.parse(g):{}}catch{A=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(A===void 0&&!i)A=g;if(A===void 0){let p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},A=JSON.stringify(p),E["Content-Type"]="application/json"}}else A=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:A,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 l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await $p(G.connection_url)??O}catch{i=O}let p={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:l,clientId:P,clientSecret:q,tokenEndpoint:i};await new w9(X.db,X.vault).upsert(p)}}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:_})},aJ8=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&&(!cU(Y)||!await mU(Z)))return $.json({error:"forbidden"},403);let W=G?sR0:Y;if(G)vD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return UO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!_5.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(()=>{_5.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),_5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),_5.remove(W,K),N()})})})},js6,Ps6,As6=()=>zs6(x8),Ts6=()=>Es6(x8);var $G8=D(()=>{a$();X$();Ep1();Q48();G48();D48();M80();qQ1();z48();g$0();I9();pc();p8();J8();RS0();M48();kJ1();Z3();DU();oU1();SG();k6();G6();QN1();Z68();X68();D68();KN1();b68();LN1();TN1();RN1();HH();GS0();qN1();r68();MS0();kY8();bY8();xY8();hY8();oY8();kN1();sY8();xM0();A80();YX8();gM0();XD1();JX8();QD1();FX8();EX8();AX8();TX8();qX8();IX8();kX8();bX8();$O1();bN1();gX8();YD1();eB1();X50();ZJ8();SJ();xT0();iQ1();se();ee();bJ1();QJ8();XJ8();PN1();UJ8();QX1();NJ8();Uo();br();_D();P9();LU1();wJ8();PJ8();$30();UO1();_3();IN1();CD();eY1();$30();rq0();Mn0();In0();TJ8();ou();IJ8();Ip();oU1();qd();ld();lq0();nJ8=C(BK(),1);js6=new Ls6,Ps6=new Set([C3,S3,RN,qN,AO,Wz])});var XG8={};$6(XG8,{resolveClientDir:()=>Cs6,resolveAssetPathWithTraversalCheck:()=>YG8,isPathWithinDirectory:()=>QG8,createAssetHandler:()=>_s6});import{resolve as m60,dirname as qs6,join as Ms6,extname as Is6,basename as Vs6,sep as ZG8}from"path";function ks6($,Z){if($===Z||Vs6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${ZG8}assets${ZG8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function QG8($,Z){let Q=m60(Z),Y=m60($);return Y===Q||Y.startsWith(Q+"/")}function YG8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=m60(Z,Q);if(!QG8(Y,Z))return null;return Y}function Cs6($,Z="../client"){let Q=new URL($),Y=qs6(Q.pathname);return m60(Y,Z)}function _s6($={}){let{env:Z="production",clientDir:Q=Ss6,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=YG8({requestPath:W,clientDir:Q});if(!K)return null;let H=Ms6(K,"index.html"),F=m60(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Is6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:ks6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Ss6="./dist/client";var JG8=()=>{};var GG8={};$6(GG8,{tryUpgradePreviewWs:()=>hs6,tryHandlePreviewHttp:()=>gs6,previewWebSocketHandler:()=>us6,parsePreviewBaseDomain:()=>ys6,isPreviewWsData:()=>N_0,extractHandleFromHost:()=>zO1});function xs6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function fs6(){return new Response(bs6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function ys6($){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 zO1($,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 gs6($,Z){let Q=zO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return i60(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(ym)&&xs6($))return fs6();return X.headers.delete(ym),X}function i60($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function N_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function hs6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=zO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return i60(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return i60(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return i60(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 i60(426,"upgrade failed");return}function d60($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var vs6=256,bs6='<!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>',us6;var WG8=D(()=>{A10();us6={open($){let Z=$.data;if(!N_0(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)}`),d60($,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)=>{d60($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{d60($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!N_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=vs6){d60($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!N_0(Z))return;d60($,Z,1000,"")}}});var UG8={};$6(UG8,{printBanner:()=>cs6,bannerLines:()=>FG8,BANNER_LINES:()=>KG8,BANNER_GRADIENT:()=>HG8});function ls6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function FG8($){let Z=KG8.map((Q,Y)=>{let[X,J,G]=ls6(HG8[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 cs6($){console.log("");for(let Z of FG8($))console.log(Z);console.log("")}var KG8,HG8;var NG8=D(()=>{KG8=[" \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 "],HG8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});a$();var vO1="13";function bO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:vO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}a$();import SG8 from"pg";var xO1=8314027461559302n,CG8=600000,_G8=500;async function fO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=CG8}=$,X=$.log??((K)=>console.log(K)),J=new SG8.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",[xO1.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 O$(_G8)}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)",[xO1.toString()])}catch{}await J.end().catch(()=>{})}}X$();T_0();k6();function S38(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function u_0($,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 EL1(){let $=S38();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:u_0($,"--cpu-prof-dir")??process.cwd(),name:u_0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(u_0($,"--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.'}))}m_0();var W50;function VL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Fz();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(()=>{}),W50=setInterval(()=>void Z().catch(()=>{}),$),W50.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(W50)clearInterval(W50)}}import*as v38 from"bun:jsc";var{startSamplingProfiler:b38,samplingProfilerStackTraces:x38}=v38;function kL1(){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{b38()}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=x38()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.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 SL1(){EL1();let $=[VL1(),IL1(),kL1()];return()=>{for(let Z of $)Z()}}import{existsSync as rs6}from"fs";var WG=E0();LL1();var{DBOS:p60,DBOSClient:ms6}=await import("@dbos-inc/dbos-sdk");function MO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var ds6=[C3,S3,RN,qN,AO,Wz],is6=WG.dispatchRole==="worker"?ds6:WG.dispatchRole==="api"?[]:void 0;p60.setConfig(bO1({systemDatabaseUrl:MO1(WG.databaseUrl,WG.databasePgSsl),poolSize:WG.dbosPoolSize,executorID:WG.podName,listenQueues:is6}));var{createApp:ps6}=await Promise.resolve().then(() => ($G8(),eJ8)),{isServerPath:ns6}=await Promise.resolve().then(() => (X50(),eO1)),{createAssetHandler:ts6,resolveClientDir:wG8}=await Promise.resolve().then(() => (JG8(),XG8)),os6=WG.port,BG8=wG8(import.meta.url,"../client"),jG8=rs6(BG8)?BG8:wG8(import.meta.url,"../dist/client"),ss6=ts6({clientDir:jG8,isServerPath:ns6}),as6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function es6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(as6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:$a6,tryHandlePreviewHttp:Za6,tryUpgradePreviewWs:Qa6,previewWebSocketHandler:PO1,isPreviewWsData:AO1}=await Promise.resolve().then(() => (WG8(),GG8)),{getOrInitSharedRunner:EG8}=await Promise.resolve().then(() => (vW(),wR$)),zG8=$a6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),DG8={baseDomain:zG8??"",getRunner:EG8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())EG8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var B_0=await ps6({clientDir:jG8}),TO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),OG8=process.env.DBOS_CONDUCTOR_URL?.trim();await fO1({databaseUrl:MO1(WG.databaseUrl,WG.databasePgSsl)},()=>p60.launch({...TO1?{conductorKey:TO1}:{},...TO1&&OG8?{conductorURL:OG8}:{}}));console.log(`[dbos] application version: ${p60.applicationVersion}`);var RO1=5,qO1=0;await E8(async()=>{qO1++;try{return await B_0.initDbos()}catch($){let Z=qO1>=RO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${qO1}/${RO1} failed, ${Z}`,$),$}},{maxAttempts:RO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!WG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (NG8(),UG8));console.log("");for(let Z of $())console.log(Z)}var Ya6=Bun.serve({idleTimeout:0,port:os6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(zG8){let Y=await Qa6($,Z,DG8);if(Y===void 0)return;if(Y)return Y;let X=await Za6($,DG8);if(X)return X}let Q=await ss6($);if(Q)return es6(Q);return B_0.fetch($,{server:Z})},websocket:{open($){if(AO1($.data))PO1.open($)},message($,Z){if(AO1($.data))PO1.message($,Z)},close($){if(AO1($.data))PO1.close($)}},development:!1}),Xa6=SL1();if(WG.localMode)Promise.resolve().then(() => (gf(),Vq0)).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(() => (gf(),Vq0));Z()}catch{}});var LG8=!1;async function Ja6($){let Z;try{Z=await ms6.create({systemDatabaseUrl:MO1(WG.databaseUrl,WG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:S3,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:S3}),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 D_0($){if(LG8)return;LG8=!0,console.log(`
3740
3740
  [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{Xa6(),B_0.markShuttingDown();let J=gO1(WG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await O$(J),await Ya6.stop(!0);let G=p60.executorID;await p60.shutdown(),await Ja6(G),await B_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>D_0("SIGTERM"));process.on("SIGINT",()=>D_0("SIGINT"));process.on("SIGHUP",()=>D_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),D_0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.429.9",
3
+ "version": "4.429.10",
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-DZBQ5pnK.js";import{C as f}from"./index-5C5Y6fog.js";import{a as x}from"./thread-route-Cc8Rnkyi.js";import{u as g}from"./use-task-metadata-CHJgQsit.js";import{AppViewContent as h}from"./project-app-view-CTkkJXZf.js";import"./use-mobile-BbZ9Bk36.js";import"./icon-button-BQIN0baN.js";import"./agent-icon-CU0i04so.js";import"./AlertCircle-D6fR9-Kh.js";import"./Tool01-7fCUFk4M.js";import"./ArrowUp-Qm1_vfBa.js";import"./ArrowLeft-DiOkGCI1.js";import"./ArrowRight-DNObFWEA.js";import"./ShoppingBag01-D7jpE92Z.js";import"./ZoomOut-Cx0_RhkV.js";import"./Palette-CTKkYfpz.js";import"./CheckCircle-DjVa5rwp.js";import"./Check-p5ZrYqb6.js";import"./ChevronUp-CQ_Ndmgv.js";import"./UserSquare-D6OSjogb.js";import"./Copy01-no2ZZAoV.js";import"./CreditCard01-BPdTH-LK.js";import"./DotsVertical-FLvQTkZX.js";import"./Image01-Bjku8bco.js";import"./XClose-DPKustWd.js";import"./Key01-D548PT0E.js";import"./Link01-DX6Qdft3.js";import"./LinkExternal01-o2rJBAh0.js";import"./Monitor01-De6BgGjU.js";import"./Sun-CF1vsofy.js";import"./Plus-7DucV5vT.js";import"./SearchMd-QN2wlvPm.js";import"./Trash01-CiA3gHsE.js";import"./Upload01-aKM-oPPY.js";import"./User01-vQ2joBqZ.js";import"./Users01-C3PXAlQO.js";import"./X-DCDQ3QOD.js";import"./use-chat-layout-state-Bjv6Kmqp.js";import"./use-file-configs-Bb5i5kzp.js";import"./use-organization-settings-Bud8t-pB.js";import"./schema-C5Lr3NgE.js";import"./task-board-UgijzwOv.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-P-qoUN3Y.js";import"./use-project-scope-CKrmwpiF.js";import"./repository-binding-D2nl3E9m.js";import"./use-mcp-client-DGrcPC5r.js";import"./auth-BME_-CgD.js";import"./thread-intent-D45ZuXub.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DsThkx1E.js";import"./tooltip-V0jMCwI1.js";import"./index-DYpm1LTw.js";import"./toolbar-icon-button-CmvWHMWS.js";import"./shell-layout-DBvOp7at.js";import"./avatar-BrhFB-vr.js";import"./download-app-dialog-CD7kK8MH.js";import"./dialog-DQNNu_f1.js";import"./command-B--xK9e7.js";import"./index-O3cKdi88.js";import"./integration-icon-Dznni3P6.js";import"./project-icon-Dv5T9UXQ.js";import"./new-project-dialog-BkEZfgZM.js";import"./input-D7Pveqzt.js";import"./label-CbGYdCUa.js";import"./repository-import-picker-C4UUR7Lt.js";import"./use-navigate-to-agent-v6_M_Lv8.js";import"./repository-picker-C9g49n3G.js";import"./useInfiniteQuery-Pi2cEwSS.js";import"./infiniteQueryObserver-Db8Je-eI.js";import"./collection-search-BF8lJCHd.js";import"./use-debounced-value-BeO0DJwg.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DH23GR15.js";import"./autosend-CTahflnC.js";import"./use-org-sso-GuXeEBOc.js";import"./resizable-MsT9Iquy.js";import"./gateway-client-B_5Pnywu.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-CqzyWLqP.js";import"./sandbox-lifecycle-context-DeDlVqJ-.js";import"./use-session-runtime-Dd4IC7IN.js";import"./chat-context-D1RQ0hn6.js";import"./use-decopilot-events-d7FsiRbY.js";import"./use-ai-providers-BiezPBdC.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-Bom1W11v.js";import"./types-Bfx6WemM.js";import"./task-route-BJNk9z_I.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-Edkf4-6e.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-PPys9GfZ.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-Cii8MVzd.js";import"./authenticate-and-persist-oauth-BoehZcx9.js";import"./mcp-oauth-DMXsQOs9.js";import"./track-ClA9bvTA.js";import"./extract-connection-data-BhLqPUG4.js";import"./connection--ml1d00t.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 jo(){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{jo as default};
@@ -1 +0,0 @@
1
- import{c,j as p,aS as b,u as g}from"./index-DZBQ5pnK.js";import{C as j}from"./index-5C5Y6fog.js";import{F as v,H as S}from"./file-share-button-CIGySu_4.js";import{u as k,b as y,e as _}from"./use-org-fs-DLLHrevC.js";import{S as w}from"./settings-tab-D9bw6k3t.js";import{b as M}from"./thread-route-Cc8Rnkyi.js";import"./use-mobile-BbZ9Bk36.js";import"./icon-button-BQIN0baN.js";import"./agent-icon-CU0i04so.js";import"./AlertCircle-D6fR9-Kh.js";import"./Tool01-7fCUFk4M.js";import"./ArrowUp-Qm1_vfBa.js";import"./ArrowLeft-DiOkGCI1.js";import"./ArrowRight-DNObFWEA.js";import"./ShoppingBag01-D7jpE92Z.js";import"./ZoomOut-Cx0_RhkV.js";import"./Palette-CTKkYfpz.js";import"./CheckCircle-DjVa5rwp.js";import"./Check-p5ZrYqb6.js";import"./ChevronUp-CQ_Ndmgv.js";import"./UserSquare-D6OSjogb.js";import"./Copy01-no2ZZAoV.js";import"./CreditCard01-BPdTH-LK.js";import"./DotsVertical-FLvQTkZX.js";import"./Image01-Bjku8bco.js";import"./XClose-DPKustWd.js";import"./Key01-D548PT0E.js";import"./Link01-DX6Qdft3.js";import"./LinkExternal01-o2rJBAh0.js";import"./Monitor01-De6BgGjU.js";import"./Sun-CF1vsofy.js";import"./Plus-7DucV5vT.js";import"./SearchMd-QN2wlvPm.js";import"./Trash01-CiA3gHsE.js";import"./Upload01-aKM-oPPY.js";import"./User01-vQ2joBqZ.js";import"./Users01-C3PXAlQO.js";import"./X-DCDQ3QOD.js";import"./use-chat-layout-state-Bjv6Kmqp.js";import"./use-file-configs-Bb5i5kzp.js";import"./use-organization-settings-Bud8t-pB.js";import"./schema-C5Lr3NgE.js";import"./task-board-UgijzwOv.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-P-qoUN3Y.js";import"./use-project-scope-CKrmwpiF.js";import"./repository-binding-D2nl3E9m.js";import"./use-mcp-client-DGrcPC5r.js";import"./auth-BME_-CgD.js";import"./thread-intent-D45ZuXub.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DsThkx1E.js";import"./tooltip-V0jMCwI1.js";import"./index-DYpm1LTw.js";import"./toolbar-icon-button-CmvWHMWS.js";import"./shell-layout-DBvOp7at.js";import"./avatar-BrhFB-vr.js";import"./download-app-dialog-CD7kK8MH.js";import"./dialog-DQNNu_f1.js";import"./command-B--xK9e7.js";import"./index-O3cKdi88.js";import"./integration-icon-Dznni3P6.js";import"./project-icon-Dv5T9UXQ.js";import"./new-project-dialog-BkEZfgZM.js";import"./input-D7Pveqzt.js";import"./label-CbGYdCUa.js";import"./repository-import-picker-C4UUR7Lt.js";import"./use-navigate-to-agent-v6_M_Lv8.js";import"./repository-picker-C9g49n3G.js";import"./useInfiniteQuery-Pi2cEwSS.js";import"./infiniteQueryObserver-Db8Je-eI.js";import"./collection-search-BF8lJCHd.js";import"./use-debounced-value-BeO0DJwg.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DH23GR15.js";import"./autosend-CTahflnC.js";import"./use-org-sso-GuXeEBOc.js";import"./resizable-MsT9Iquy.js";import"./popover-DHUcPo1r.js";import"./extract-connection-data-BhLqPUG4.js";import"./metadata-D72DunRR.js";import"./connection--ml1d00t.js";import"./chat-context-D1RQ0hn6.js";import"./use-decopilot-events-d7FsiRbY.js";import"./use-ai-providers-BiezPBdC.js";import"./location-DBePU4bz.js";import"./build-improve-prompt-doc-C4UobK7K.js";import"./empty-state-CadUnitN.js";import"./use-date-fns-locale-DEFDZEQ8.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-TzIfXScd.js";import"./mcp-oauth-DMXsQOs9.js";import"./alert-dialog-D2qUdh2f.js";import"./textarea-yG3fP7UK.js";import"./use-debounced-autosave-CqmmZdyR.js";import"./add-connection-dialog-DZDyC_s4.js";import"./connection-card-wiltHPZ1.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-BzY4tdXy.js";import"./form-PPys9GfZ.js";import"./select-Cz-o9PEJ.js";import"./connection-form-helpers-goLtSvt6.js";import"./authenticate-and-persist-oauth-BoehZcx9.js";import"./collection-tabs-D3itJSz3.js";import"./badge-B9v8v8eG.js";import"./use-infinite-scroll-M-6zbbsB.js";import"./useSuspenseInfiniteQuery-3wEhSKVP.js";import"./file-type-icon-D4fy_gBA.js";import"./checkbox-CdMaRU6A.js";import"./search-input-_rysHpm7.js";import"./use-mcp-auth-status-BGPcEhML.js";import"./types-Bfx6WemM.js";import"./use-mcp-tools-CqzyWLqP.js";import"./use-mcp-prompts-IUYMfB-t.js";import"./utils-CVEq3hMx.js";import"./switch-DcWJRerK.js";import"./scroll-area-Bjp7MJ8C.js";import"./optimistic-project-sidebar-views-BxEtZaho.js";import"./virtual-mcp-5qC_v8pJ.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-5ZvS8PcI.js";import"./use-secrets-Diaq210I.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(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(P,{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=M(),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(w,{virtualMcpId:e}),i[1]=o,i[2]=e,i[3]=m):m=i[3],m}function Jo(){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{Jo as default};
@@ -1 +0,0 @@
1
- import{c as s,j as e}from"./index-DZBQ5pnK.js";import{C as a}from"./index-5C5Y6fog.js";import{p as n,L as c}from"./library-tab-BXidRO6s.js";import{u as l}from"./use-project-scope-CKrmwpiF.js";import"./use-mobile-BbZ9Bk36.js";import"./icon-button-BQIN0baN.js";import"./agent-icon-CU0i04so.js";import"./AlertCircle-D6fR9-Kh.js";import"./Tool01-7fCUFk4M.js";import"./ArrowUp-Qm1_vfBa.js";import"./ArrowLeft-DiOkGCI1.js";import"./ArrowRight-DNObFWEA.js";import"./ShoppingBag01-D7jpE92Z.js";import"./ZoomOut-Cx0_RhkV.js";import"./Palette-CTKkYfpz.js";import"./CheckCircle-DjVa5rwp.js";import"./Check-p5ZrYqb6.js";import"./ChevronUp-CQ_Ndmgv.js";import"./UserSquare-D6OSjogb.js";import"./Copy01-no2ZZAoV.js";import"./CreditCard01-BPdTH-LK.js";import"./DotsVertical-FLvQTkZX.js";import"./Image01-Bjku8bco.js";import"./XClose-DPKustWd.js";import"./Key01-D548PT0E.js";import"./Link01-DX6Qdft3.js";import"./LinkExternal01-o2rJBAh0.js";import"./Monitor01-De6BgGjU.js";import"./Sun-CF1vsofy.js";import"./Plus-7DucV5vT.js";import"./SearchMd-QN2wlvPm.js";import"./Trash01-CiA3gHsE.js";import"./Upload01-aKM-oPPY.js";import"./User01-vQ2joBqZ.js";import"./Users01-C3PXAlQO.js";import"./X-DCDQ3QOD.js";import"./use-chat-layout-state-Bjv6Kmqp.js";import"./use-file-configs-Bb5i5kzp.js";import"./use-organization-settings-Bud8t-pB.js";import"./schema-C5Lr3NgE.js";import"./task-board-UgijzwOv.js";import"./site-slug-DebpOoQq.js";import"./thread-route-Cc8Rnkyi.js";import"./use-panel-navigate-P-qoUN3Y.js";import"./thread-intent-D45ZuXub.js";import"./use-mcp-client-DGrcPC5r.js";import"./auth-BME_-CgD.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DsThkx1E.js";import"./tooltip-V0jMCwI1.js";import"./index-DYpm1LTw.js";import"./toolbar-icon-button-CmvWHMWS.js";import"./shell-layout-DBvOp7at.js";import"./avatar-BrhFB-vr.js";import"./download-app-dialog-CD7kK8MH.js";import"./dialog-DQNNu_f1.js";import"./command-B--xK9e7.js";import"./index-O3cKdi88.js";import"./integration-icon-Dznni3P6.js";import"./project-icon-Dv5T9UXQ.js";import"./new-project-dialog-BkEZfgZM.js";import"./input-D7Pveqzt.js";import"./label-CbGYdCUa.js";import"./repository-import-picker-C4UUR7Lt.js";import"./use-navigate-to-agent-v6_M_Lv8.js";import"./repository-binding-D2nl3E9m.js";import"./repository-picker-C9g49n3G.js";import"./useInfiniteQuery-Pi2cEwSS.js";import"./infiniteQueryObserver-Db8Je-eI.js";import"./collection-search-BF8lJCHd.js";import"./use-debounced-value-BeO0DJwg.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DH23GR15.js";import"./autosend-CTahflnC.js";import"./use-org-sso-GuXeEBOc.js";import"./resizable-MsT9Iquy.js";import"./search-toggle-D88qbPIv.js";import"./alert-dialog-D2qUdh2f.js";import"./location-DBePU4bz.js";import"./use-org-fs-DLLHrevC.js";import"./use-org-repo-syncs-DCNujM3B.js";import"./textarea-yG3fP7UK.js";import"./markdown-toDOgADF.js";import"./org-file-open-context-BkAoUQAN.js";import"./file-share-button-CIGySu_4.js";import"./popover-DHUcPo1r.js";import"./preview-dialog-Div-6vzY.js";import"./preview-content-C2zuZls8.js";import"./file-preview-CigrKhHQ.js";import"./utils-DdYfsNrk.js";import"./editor-CJ05XGg1.js";import"./file-type-icon-D4fy_gBA.js";import"./folder-icon-BesYWk0I.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-wfzNVXjf.js";function ro(){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{ro as default};
@@ -1 +0,0 @@
1
- import{c as a,j as s,u as n}from"./index-DZBQ5pnK.js";import{C as l}from"./index-5C5Y6fog.js";import{L as c}from"./preview-content-C2zuZls8.js";import{a as f}from"./use-panel-navigate-P-qoUN3Y.js";import{S as u}from"./settings-tab-D9bw6k3t.js";import{b as h}from"./thread-route-Cc8Rnkyi.js";import"./use-mobile-BbZ9Bk36.js";import"./icon-button-BQIN0baN.js";import"./agent-icon-CU0i04so.js";import"./AlertCircle-D6fR9-Kh.js";import"./Tool01-7fCUFk4M.js";import"./ArrowUp-Qm1_vfBa.js";import"./ArrowLeft-DiOkGCI1.js";import"./ArrowRight-DNObFWEA.js";import"./ShoppingBag01-D7jpE92Z.js";import"./ZoomOut-Cx0_RhkV.js";import"./Palette-CTKkYfpz.js";import"./CheckCircle-DjVa5rwp.js";import"./Check-p5ZrYqb6.js";import"./ChevronUp-CQ_Ndmgv.js";import"./UserSquare-D6OSjogb.js";import"./Copy01-no2ZZAoV.js";import"./CreditCard01-BPdTH-LK.js";import"./DotsVertical-FLvQTkZX.js";import"./Image01-Bjku8bco.js";import"./XClose-DPKustWd.js";import"./Key01-D548PT0E.js";import"./Link01-DX6Qdft3.js";import"./LinkExternal01-o2rJBAh0.js";import"./Monitor01-De6BgGjU.js";import"./Sun-CF1vsofy.js";import"./Plus-7DucV5vT.js";import"./SearchMd-QN2wlvPm.js";import"./Trash01-CiA3gHsE.js";import"./Upload01-aKM-oPPY.js";import"./User01-vQ2joBqZ.js";import"./Users01-C3PXAlQO.js";import"./X-DCDQ3QOD.js";import"./use-chat-layout-state-Bjv6Kmqp.js";import"./use-file-configs-Bb5i5kzp.js";import"./use-organization-settings-Bud8t-pB.js";import"./schema-C5Lr3NgE.js";import"./task-board-UgijzwOv.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-D45ZuXub.js";import"./use-mcp-client-DGrcPC5r.js";import"./auth-BME_-CgD.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-CKrmwpiF.js";import"./repository-binding-D2nl3E9m.js";import"./sheet-DsThkx1E.js";import"./tooltip-V0jMCwI1.js";import"./index-DYpm1LTw.js";import"./toolbar-icon-button-CmvWHMWS.js";import"./shell-layout-DBvOp7at.js";import"./avatar-BrhFB-vr.js";import"./download-app-dialog-CD7kK8MH.js";import"./dialog-DQNNu_f1.js";import"./command-B--xK9e7.js";import"./index-O3cKdi88.js";import"./integration-icon-Dznni3P6.js";import"./project-icon-Dv5T9UXQ.js";import"./new-project-dialog-BkEZfgZM.js";import"./input-D7Pveqzt.js";import"./label-CbGYdCUa.js";import"./repository-import-picker-C4UUR7Lt.js";import"./use-navigate-to-agent-v6_M_Lv8.js";import"./repository-picker-C9g49n3G.js";import"./useInfiniteQuery-Pi2cEwSS.js";import"./infiniteQueryObserver-Db8Je-eI.js";import"./collection-search-BF8lJCHd.js";import"./use-debounced-value-BeO0DJwg.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DH23GR15.js";import"./autosend-CTahflnC.js";import"./use-org-sso-GuXeEBOc.js";import"./resizable-MsT9Iquy.js";import"./file-preview-CigrKhHQ.js";import"./use-org-fs-DLLHrevC.js";import"./utils-DdYfsNrk.js";import"./editor-CJ05XGg1.js";import"./file-type-icon-D4fy_gBA.js";import"./markdown-toDOgADF.js";import"./org-file-open-context-BkAoUQAN.js";import"./file-share-button-CIGySu_4.js";import"./popover-DHUcPo1r.js";import"./location-DBePU4bz.js";import"./extract-connection-data-BhLqPUG4.js";import"./metadata-D72DunRR.js";import"./connection--ml1d00t.js";import"./chat-context-D1RQ0hn6.js";import"./use-decopilot-events-d7FsiRbY.js";import"./use-ai-providers-BiezPBdC.js";import"./build-improve-prompt-doc-C4UobK7K.js";import"./empty-state-CadUnitN.js";import"./use-date-fns-locale-DEFDZEQ8.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-TzIfXScd.js";import"./mcp-oauth-DMXsQOs9.js";import"./alert-dialog-D2qUdh2f.js";import"./textarea-yG3fP7UK.js";import"./use-debounced-autosave-CqmmZdyR.js";import"./add-connection-dialog-DZDyC_s4.js";import"./connection-card-wiltHPZ1.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-BzY4tdXy.js";import"./form-PPys9GfZ.js";import"./select-Cz-o9PEJ.js";import"./connection-form-helpers-goLtSvt6.js";import"./authenticate-and-persist-oauth-BoehZcx9.js";import"./collection-tabs-D3itJSz3.js";import"./badge-B9v8v8eG.js";import"./use-infinite-scroll-M-6zbbsB.js";import"./useSuspenseInfiniteQuery-3wEhSKVP.js";import"./checkbox-CdMaRU6A.js";import"./search-input-_rysHpm7.js";import"./use-mcp-auth-status-BGPcEhML.js";import"./types-Bfx6WemM.js";import"./use-mcp-tools-CqzyWLqP.js";import"./use-mcp-prompts-IUYMfB-t.js";import"./utils-CVEq3hMx.js";import"./switch-DcWJRerK.js";import"./scroll-area-Bjp7MJ8C.js";import"./optimistic-project-sidebar-views-BxEtZaho.js";import"./virtual-mcp-5qC_v8pJ.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-5ZvS8PcI.js";import"./use-secrets-Diaq210I.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 Br(){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{Br as default};