decocms 4.495.1 → 4.496.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/dist/client/assets/{ActiveShapeUtils-h1pqy1tf.js → ActiveShapeUtils-BVT17h1W.js} +1 -1
  2. package/dist/client/assets/{AlertCircle-CIcaLchq.js → AlertCircle-DY8bqCha.js} +1 -1
  3. package/dist/client/assets/{AreaChart-CZ-42bmk.js → AreaChart-C85WUbhU.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-DfXjYrQi.js → ArrowLeft--XLYCrc5.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-B8mx1ol5.js → ArrowUp-YDXnrJ7G.js} +1 -1
  6. package/dist/client/assets/{BarChart-CEMnTLeo.js → BarChart-CJTCxyya.js} +1 -1
  7. package/dist/client/assets/{Building02-BPQ9fMgU.js → Building02-NwIw90j5.js} +1 -1
  8. package/dist/client/assets/{CategoricalChart-M1P6vf9W.js → CategoricalChart-DgAbcYNa.js} +1 -1
  9. package/dist/client/assets/{CheckCircle-ChTvVqPO.js → CheckCircle-nhmFTvE6.js} +1 -1
  10. package/dist/client/assets/{ChevronSelectorVertical-zoEWZ9sC.js → ChevronSelectorVertical-DTio1rjg.js} +1 -1
  11. package/dist/client/assets/{ChevronUp-DckC0O5o.js → ChevronUp-CqUEILrt.js} +1 -1
  12. package/dist/client/assets/{Copy01-Corfj4_5.js → Copy01-CvPIDjuG.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-DlMgd9ia.js → CreditCard01-DCfqvozy.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-uTiOtqeH.js → DotsVertical-CSCmFu8Q.js} +1 -1
  15. package/dist/client/assets/{ErrorBarContext-B19L0BAB.js → ErrorBarContext-9--7esXK.js} +1 -1
  16. package/dist/client/assets/{Globe04-CL3-GeAh.js → Globe04-DG7jBKGP.js} +1 -1
  17. package/dist/client/assets/{Image01-gtPlqhVq.js → Image01-cbCHFYmk.js} +1 -1
  18. package/dist/client/assets/{Key01-BQnNEHGn.js → Key01-04C5Cb93.js} +1 -1
  19. package/dist/client/assets/{Link01-BSAGxXho.js → Link01-Cq7ZQK57.js} +1 -1
  20. package/dist/client/assets/{LinkBroken01-t0qEt8Lb.js → LinkBroken01-ydPCJGh6.js} +1 -1
  21. package/dist/client/assets/{Monitor01-BIhKjgAf.js → Monitor01-BosmGMIH.js} +1 -1
  22. package/dist/client/assets/{Play-Ba5tQ65L.js → Play-BGed4f8X.js} +1 -1
  23. package/dist/client/assets/{Plus-4vFTW30B.js → Plus-CS-imxjk.js} +1 -1
  24. package/dist/client/assets/{SearchMd-DqzvTdT2.js → SearchMd-DpDuLpr9.js} +1 -1
  25. package/dist/client/assets/{Sector-CdUfaAFg.js → Sector-DmYQYvNe.js} +1 -1
  26. package/dist/client/assets/{ShoppingBag01-C6V1h_2Z.js → ShoppingBag01-CAuMgtYk.js} +1 -1
  27. package/dist/client/assets/{Sun-DlWI3pkK.js → Sun-DNYaWg-8.js} +1 -1
  28. package/dist/client/assets/{SwitchHorizontal01-DN4m9K18.js → SwitchHorizontal01-TWyW2jhZ.js} +1 -1
  29. package/dist/client/assets/{Tool01-BJxIe84T.js → Tool01-PXS7oM2l.js} +1 -1
  30. package/dist/client/assets/{Trash01-Dvqfc9le.js → Trash01-DD84camw.js} +1 -1
  31. package/dist/client/assets/{Upload01-BxWCGLDw.js → Upload01-B7IJQr07.js} +1 -1
  32. package/dist/client/assets/{User01-Dh_l7uq-.js → User01-eOIeHV7h.js} +1 -1
  33. package/dist/client/assets/{UserSquare-B4EnRc3E.js → UserSquare-D5P__qW1.js} +1 -1
  34. package/dist/client/assets/{Users01-CIo5W1LA.js → Users01-UUMGKcsN.js} +1 -1
  35. package/dist/client/assets/{XAxis-B_TwRkrI.js → XAxis-D93kHNyl.js} +1 -1
  36. package/dist/client/assets/{XClose-D59UZ-3l.js → XClose-TrpNsToi.js} +1 -1
  37. package/dist/client/assets/{ZoomOut-BwebNTOr.js → ZoomOut-DmuBfqXK.js} +1 -1
  38. package/dist/client/assets/{access-gate-gXgyWrzR.js → access-gate-CzXMCDQe.js} +1 -1
  39. package/dist/client/assets/{add-connection-dialog-BWXm_ufM.js → add-connection-dialog-Co74MHAY.js} +1 -1
  40. package/dist/client/assets/{agent-analytics-C-L1VtQz.js → agent-analytics-D8I2BkKH.js} +1 -1
  41. package/dist/client/assets/agent-app-CwZ2kAfk.js +1 -0
  42. package/dist/client/assets/{agent-assets-C7fUNq2M.js → agent-assets-DeODDcT0.js} +1 -1
  43. package/dist/client/assets/{agent-automation-Dpa5yDG5.js → agent-automation-Dkp6V5Sj.js} +1 -1
  44. package/dist/client/assets/{agent-automations-BP9tDs5d.js → agent-automations-BV-Io4eo.js} +1 -1
  45. package/dist/client/assets/{agent-connect-sources-DpyMUK1-.js → agent-connect-sources-DEzxvIm0.js} +1 -1
  46. package/dist/client/assets/agent-deck-XD5-oNlw.js +1 -0
  47. package/dist/client/assets/{agent-e2e-C-WfEm6u.js → agent-e2e-BfCWUHGd.js} +1 -1
  48. package/dist/client/assets/{agent-experiments-eTfavUjm.js → agent-experiments---UoWIs9.js} +1 -1
  49. package/dist/client/assets/{agent-file-DQ-Axvcs.js → agent-file-VG03O57l.js} +1 -1
  50. package/dist/client/assets/{agent-hosting-DnmQYnCT.js → agent-hosting-DSyte2d6.js} +1 -1
  51. package/dist/client/assets/{agent-icon-B6BGlN8Z.js → agent-icon-qroW1Utf.js} +1 -1
  52. package/dist/client/assets/agent-library-CF-9ULgs.js +1 -0
  53. package/dist/client/assets/agent-library-file-C-qUhWdr.js +1 -0
  54. package/dist/client/assets/{agent-monitor-DVgP3QNe.js → agent-monitor-Csn8HW-o.js} +1 -1
  55. package/dist/client/assets/{agent-overview-d4b3y6_i.js → agent-overview-DEew4Ktb.js} +1 -1
  56. package/dist/client/assets/agent-settings-BSWQd9s-.js +1 -0
  57. package/dist/client/assets/agent-site-editor-code-BEv9_ttW.js +2 -0
  58. package/dist/client/assets/{agent-site-editor-content-2sl9AU9q.js → agent-site-editor-content-B2KIymmj.js} +3 -3
  59. package/dist/client/assets/{agent-site-editor-preview-CXCXzBai.js → agent-site-editor-preview-CBMBSUB9.js} +3 -3
  60. package/dist/client/assets/{agent-site-editor-BwrjcFt1.js → agent-site-editor-uBf1cOid.js} +1 -1
  61. package/dist/client/assets/agent-view-BVhy8qXU.js +1 -0
  62. package/dist/client/assets/{agent-view-guard-CGvorA84.js → agent-view-guard-D7znUA8E.js} +1 -1
  63. package/dist/client/assets/{agents-list-DoqG_xIw.js → agents-list-C-Vfe442.js} +1 -1
  64. package/dist/client/assets/{ai-providers-D4PaL9-3.js → ai-providers-DYkLkRTi.js} +1 -1
  65. package/dist/client/assets/{alert-sNWraY0q.js → alert-CknKmC4I.js} +1 -1
  66. package/dist/client/assets/{alert-dialog-G7y5OQF6.js → alert-dialog-BEcI3FD3.js} +1 -1
  67. package/dist/client/assets/{analytics-sections-BjxK3DaP.js → analytics-sections-DkIfraxE.js} +1 -1
  68. package/dist/client/assets/{api-keys-DWxZSE3m.js → api-keys-RdHH5-HO.js} +1 -1
  69. package/dist/client/assets/api-keys-ZMfH16wP.js +1 -0
  70. package/dist/client/assets/app-editor-Bexwu6y3.js +1 -0
  71. package/dist/client/assets/{asset-utils-C3b9KJ52.js → asset-utils-D1WmQlcr.js} +1 -1
  72. package/dist/client/assets/{auth-CK5qaIjH.js → auth-DQ7KFfQG.js} +1 -1
  73. package/dist/client/assets/{auth-catchall-CBQrYLJa.js → auth-catchall-Bj80qHUZ.js} +1 -1
  74. package/dist/client/assets/{auth-entry-5fZpsKca.js → auth-entry-CVAWLxXS.js} +1 -1
  75. package/dist/client/assets/{auth-split-layout-_2GxCjhr.js → auth-split-layout-DO_EbQUI.js} +1 -1
  76. package/dist/client/assets/{authenticate-and-persist-oauth-BqWfXARS.js → authenticate-and-persist-oauth-BPoB61oq.js} +1 -1
  77. package/dist/client/assets/{automation-list-row-DkLqeS2t.js → automation-list-row-DwzUqOw8.js} +1 -1
  78. package/dist/client/assets/{automation-runs-KOVQ8ghD.js → automation-runs-Bp65TXd7.js} +1 -1
  79. package/dist/client/assets/{automations-GiLoIizc.js → automations-CqVssJOq.js} +1 -1
  80. package/dist/client/assets/{autosend-CACWNbxC.js → autosend-CcQyaIGA.js} +1 -1
  81. package/dist/client/assets/{avatar-CFdg60BT.js → avatar-Cv41gISF.js} +1 -1
  82. package/dist/client/assets/{badge-2H20v0nO.js → badge-Ba3u97Pl.js} +1 -1
  83. package/dist/client/assets/{block-document-BJBufMup.js → block-document-CTLqTC_r.js} +1 -1
  84. package/dist/client/assets/{blocks-preview-workspace-context-45OWUgi1.js → blocks-preview-workspace-context-DjdV5Qlt.js} +1 -1
  85. package/dist/client/assets/{blog-schema-C3v2xT_H.js → blog-schema-B-FGyljD.js} +1 -1
  86. package/dist/client/assets/{board-analytics-DXWCCmjm.js → board-analytics-CAsp769l.js} +1 -1
  87. package/dist/client/assets/{buckets-C4_hXb9P.js → buckets-CdAJQdCr.js} +1 -1
  88. package/dist/client/assets/{build-improve-prompt-doc-D_-kPQOz.js → build-improve-prompt-doc-DrohBDE-.js} +1 -1
  89. package/dist/client/assets/{calendar-BYqJ2k4j.js → calendar-CgbisEND.js} +1 -1
  90. package/dist/client/assets/{capability-load-error-D-0oMipl.js → capability-load-error-BXZ3jboY.js} +1 -1
  91. package/dist/client/assets/category-editor-CT5MZmjt.js +1 -0
  92. package/dist/client/assets/{chart-BPIcOkoH.js → chart-DwidbVF_.js} +1 -1
  93. package/dist/client/assets/{chat-context-Dh5tO9W1.js → chat-context-22ccNySK.js} +1 -1
  94. package/dist/client/assets/{chat-draft-Bck3d8Ok.js → chat-draft-N3NbVf44.js} +1 -1
  95. package/dist/client/assets/{checkbox-BRl2nVIa.js → checkbox-C0LvF7-W.js} +1 -1
  96. package/dist/client/assets/{choose-editor-BOSYr3Y3.js → choose-editor-qFu7w2K7.js} +1 -1
  97. package/dist/client/assets/{claim-phase-copy-De8hliCj.js → claim-phase-copy-BFltSmg_.js} +1 -1
  98. package/dist/client/assets/{cli-auth-success-BHU-QcJX.js → cli-auth-success-DXxpngeJ.js} +1 -1
  99. package/dist/client/assets/{client-icons-9yzx81xM.js → client-icons-CnVFxZ_i.js} +1 -1
  100. package/dist/client/assets/{collapsible-CQEd_xSV.js → collapsible-Cu-qIf8C.js} +1 -1
  101. package/dist/client/assets/{collection-detail-DRnSuti2.js → collection-detail-BVSz_Cdh.js} +1 -1
  102. package/dist/client/assets/{collection-display-button-B_HjtsMm.js → collection-display-button-Pi1sZkcY.js} +1 -1
  103. package/dist/client/assets/{collection-search-BPtx8G1f.js → collection-search-Bo0RkeZA.js} +1 -1
  104. package/dist/client/assets/{collection-table-wrapper-BryChMzP.js → collection-table-wrapper-5r6oHUdW.js} +1 -1
  105. package/dist/client/assets/{collection-tabs-rDrGFt87.js → collection-tabs-BA6WZZHi.js} +1 -1
  106. package/dist/client/assets/{column-rules-CBDddx-X.js → column-rules-DTQgaEq6.js} +1 -1
  107. package/dist/client/assets/{combobox-CUJidMCM.js → combobox-DvC3aUQL.js} +1 -1
  108. package/dist/client/assets/{command-CdSfLL9P.js → command-Z9XxdQ7J.js} +1 -1
  109. package/dist/client/assets/{companion-mcps-section-CapqSyeR.js → companion-mcps-section-UDqr78P2.js} +1 -1
  110. package/dist/client/assets/{config-DYtJAhTs.js → config-DMRqiLdR.js} +1 -1
  111. package/dist/client/assets/{connect-DzC_JY0O.js → connect-CZP0LsuB.js} +1 -1
  112. package/dist/client/assets/{connect-layout-CwfCc-Yp.js → connect-layout-vkDPzLhT.js} +1 -1
  113. package/dist/client/assets/{connection-KGhvUETQ.js → connection-CTQgZPtk.js} +1 -1
  114. package/dist/client/assets/{connection-card-CmOjRIm5.js → connection-card-uIuWBJMs.js} +1 -1
  115. package/dist/client/assets/{connection-detail-8IXvecot.js → connection-detail-CuXCNQCD.js} +1 -1
  116. package/dist/client/assets/{connection-form-helpers-DwH5XcOW.js → connection-form-helpers-CLLIaKV6.js} +1 -1
  117. package/dist/client/assets/{connections-Bl-ms1sl.js → connections-DXNCmB8T.js} +1 -1
  118. package/dist/client/assets/context-BWyGxyVQ.js +1 -0
  119. package/dist/client/assets/{context-menu-BONDmMvs.js → context-menu-D9MgVZQW.js} +1 -1
  120. package/dist/client/assets/{core.esm-gbvtUb0d.js → core.esm-BI45RQ70.js} +1 -1
  121. package/dist/client/assets/{create-organization-dialog--_vdq0__.js → create-organization-dialog-C91DEkEa.js} +1 -1
  122. package/dist/client/assets/{daily-pulse-BBYJtLUK.js → daily-pulse-B38J6G9s.js} +1 -1
  123. package/dist/client/assets/{device-hint-C3mf2rBk.js → device-hint-7yMCN-Os.js} +1 -1
  124. package/dist/client/assets/{discover-Dg3bEYIg.js → discover-lgSKE5DK.js} +1 -1
  125. package/dist/client/assets/{domain-settings-BLJaGYt5.js → domain-settings-c_5HmpJ-.js} +1 -1
  126. package/dist/client/assets/{drawer-C9byc45q.js → drawer-D2dqAMx2.js} +1 -1
  127. package/dist/client/assets/{editor-vTtvQU6U.js → editor-jgAlbT28.js} +1 -1
  128. package/dist/client/assets/{empty-state-MzgkrW8i.js → empty-state-DR-VrfEb.js} +1 -1
  129. package/dist/client/assets/{empty-state-OuooYiXX.js → empty-state-lGlHfKio.js} +1 -1
  130. package/dist/client/assets/{extract-connection-data-DKxAapkS.js → extract-connection-data-rmLW_gvu.js} +1 -1
  131. package/dist/client/assets/{feature-gate-DthOZE3T.js → feature-gate-C3ALU4KU.js} +1 -1
  132. package/dist/client/assets/{feature-paywall-B43OWr6s.js → feature-paywall-AtCK-SZi.js} +1 -1
  133. package/dist/client/assets/{file-explorer-BK6CBYkh.js → file-explorer-CXoqHKQi.js} +1 -1
  134. package/dist/client/assets/{file-preview-Cp_wgKZ4.js → file-preview-D3qj3-ZX.js} +1 -1
  135. package/dist/client/assets/{file-share-button-BFJJKHR1.js → file-share-button-v1acUQhc.js} +1 -1
  136. package/dist/client/assets/{file-type-icon-D_YzVdyI.js → file-type-icon-Cw2ugH1T.js} +1 -1
  137. package/dist/client/assets/flat-project-C-qoLMQo.js +1 -0
  138. package/dist/client/assets/{folder-icon-DDtGpklD.js → folder-icon-BRkty9N7.js} +1 -1
  139. package/dist/client/assets/{form-CJ_Xz43P.js → form-Ce4lrl07.js} +1 -1
  140. package/dist/client/assets/{general-BZXk3K5d.js → general-BoFQ5PDD.js} +1 -1
  141. package/dist/client/assets/{home-BujtXmg1.js → home-DBwVydAm.js} +1 -1
  142. package/dist/client/assets/{icon-button-HZupTrz9.js → icon-button-BzCBL3cR.js} +1 -1
  143. package/dist/client/assets/{index-CcyJ-5NJ.js → index-2xZGo1OZ.js} +1 -1
  144. package/dist/client/assets/{index-CsOndfWq.js → index-AwfdJWsb.js} +5 -5
  145. package/dist/client/assets/{index-DLLBoYqS.js → index-BJTeBjsQ.js} +1 -1
  146. package/dist/client/assets/{index-BZvXKYts.js → index-BjUlsUMg.js} +1 -1
  147. package/dist/client/assets/{index-D3DgX6eB.js → index-BzVl4964.js} +1 -1
  148. package/dist/client/assets/{index-ABTatWfQ.js → index-C7aH47aJ.js} +1 -1
  149. package/dist/client/assets/{index-C-fX0RCG.js → index-COZCf2PU.js} +1 -1
  150. package/dist/client/assets/{index-vXsAhBzz.js → index-CwyPrlmP.js} +1 -1
  151. package/dist/client/assets/{index-D6j44vfq.js → index-D7Q80Ibd.js} +3 -3
  152. package/dist/client/assets/{index-BpzCwtjK.js → index-DEPeya4x.js} +1 -1
  153. package/dist/client/assets/{index-DWDW9ng6.js → index-DI6dvB42.js} +1 -1
  154. package/dist/client/assets/{index-C759w8PG.js → index-DkUf25py.js} +1 -1
  155. package/dist/client/assets/{index-redirect-BQZIR8Rn.js → index-redirect-3-u4Q02Y.js} +1 -1
  156. package/dist/client/assets/{index-BRlpwCN0.js → index-xJHUGJmd.js} +1 -1
  157. package/dist/client/assets/{infiniteQueryObserver-pU9pZci3.js → infiniteQueryObserver-BoYQIhRm.js} +1 -1
  158. package/dist/client/assets/{infra-billing-CJ1SDWNW.js → infra-billing-DRk7Hgam.js} +1 -1
  159. package/dist/client/assets/{input-EIjvUWwG.js → input-BJm-bJdI.js} +3 -3
  160. package/dist/client/assets/{input-D_3UHFsb.js → input-C-7hE1b2.js} +1 -1
  161. package/dist/client/assets/{integration-icon-D2n5_i5E.js → integration-icon-WQ1MJmJE.js} +1 -1
  162. package/dist/client/assets/{jira-icon-BtEsLcr1.js → jira-icon-w0P2pjzT.js} +1 -1
  163. package/dist/client/assets/{label-PMOCFxAK.js → label-BEIrQZc-.js} +1 -1
  164. package/dist/client/assets/{layout-ChMyQ0My.js → layout-pNLUGjKH.js} +1 -1
  165. package/dist/client/assets/{legacy-agents-deep-CPBbZTxM.js → legacy-agents-deep-DQLIe0rx.js} +1 -1
  166. package/dist/client/assets/{legacy-main-redirect-uv67id5O.js → legacy-main-redirect-DDC0imIe.js} +1 -1
  167. package/dist/client/assets/library-C6afhHWm.js +1 -0
  168. package/dist/client/assets/{library-tab-De6d8NXP.js → library-tab-DIJB0pOD.js} +1 -1
  169. package/dist/client/assets/{login-ew7OWyIA.js → login-Blmg5PpX.js} +1 -1
  170. package/dist/client/assets/{markdown-jtizwWYK.js → markdown-C_1El3UD.js} +1 -1
  171. package/dist/client/assets/{mcp-app-renderer-URE_9VC7.js → mcp-app-renderer-B9dOa3ev.js} +1 -1
  172. package/dist/client/assets/{mcp-oauth-CtduGE9o.js → mcp-oauth-D1ywKFbc.js} +1 -1
  173. package/dist/client/assets/{mcp-oauth-CS7wEky-.js → mcp-oauth-IPmD_N5m.js} +1 -1
  174. package/dist/client/assets/{members-4nC3G4fN.js → members-DkW4wjLL.js} +1 -1
  175. package/dist/client/assets/{memory-DjFNyy0l.js → memory-pQ7XA0lM.js} +1 -1
  176. package/dist/client/assets/{mini-report-page-SXYfkfsJ.js → mini-report-page-B6fFtRpy.js} +1 -1
  177. package/dist/client/assets/{mock-board-DOPI9v1n.js → mock-board-wk6TYt7w.js} +1 -1
  178. package/dist/client/assets/{monaco-editor--q8pYjVp.js → monaco-editor-D3D0ilFy.js} +1 -1
  179. package/dist/client/assets/{monitoring-stats-row-CEOJr_Mr.js → monitoring-stats-row-CG8CcLbD.js} +1 -1
  180. package/dist/client/assets/{multi-select-B5EYUvVe.js → multi-select-zXW_B1rE.js} +1 -1
  181. package/dist/client/assets/{mustache-CwOtagWC.js → mustache-Fgl0g-Er.js} +1 -1
  182. package/dist/client/assets/{new-project-dialog-DNSDpVVm.js → new-project-dialog-CDF0Rsm8.js} +1 -1
  183. package/dist/client/assets/{oauth-callback-N9EX0dsT.js → oauth-callback-Dfc-046A.js} +1 -1
  184. package/dist/client/assets/{oauth-callback-ai-provider-DYJWavL1.js → oauth-callback-ai-provider-CR3Sx1WR.js} +1 -1
  185. package/dist/client/assets/{onboarding-Cf4I151E.js → onboarding-Fj_h1pZF.js} +1 -1
  186. package/dist/client/assets/{openai-conversation-DGz26UPY.js → openai-conversation-ZCiR-nel.js} +1 -1
  187. package/dist/client/assets/{optimistic-project-sidebar-views-7KZes5Aj.js → optimistic-project-sidebar-views-gdyjY474.js} +1 -1
  188. package/dist/client/assets/{organization-choice-BjXMGiEn.js → organization-choice-C6SRJ7u5.js} +1 -1
  189. package/dist/client/assets/{orgs-Co8dpTJE.js → orgs-COfkZLkX.js} +1 -1
  190. package/dist/client/assets/{page-seo-form-BKnLWhFP.js → page-seo-form-COwmjwMF.js} +1 -1
  191. package/dist/client/assets/{pair-B5n9SRL4.js → pair-DH8DyC8q.js} +1 -1
  192. package/dist/client/assets/{plan-ladder-Bue-fGj1.js → plan-ladder-BiocTbbz.js} +1 -1
  193. package/dist/client/assets/{popover-Cz5BF_3m.js → popover-qqnMuKN1.js} +1 -1
  194. package/dist/client/assets/post-calendar-BkJyfSYh.js +1 -0
  195. package/dist/client/assets/{post-editor-BnKzHRjp.js → post-editor-CYX-gw_e.js} +2 -2
  196. package/dist/client/assets/{preview-content-B68u7aBy.js → preview-content-wDBnyIay.js} +1 -1
  197. package/dist/client/assets/{preview-dialog-BrKZ8Eye.js → preview-dialog-CZ8zzX0u.js} +1 -1
  198. package/dist/client/assets/{preview-panel-hieScKI7.js → preview-panel-Ck3MEGJq.js} +1 -1
  199. package/dist/client/assets/{product-picker-dialog-DI1rZSm9.js → product-picker-dialog-DdC0pd1-.js} +1 -1
  200. package/dist/client/assets/{profile-DHWmm71D.js → profile-D0Plzjli.js} +1 -1
  201. package/dist/client/assets/{project-app-view-DfvTxGtE.js → project-app-view-BGndj_I_.js} +1 -1
  202. package/dist/client/assets/{project-feed-DZ1W25Hn.js → project-feed-DaaaTGHC.js} +1 -1
  203. package/dist/client/assets/{project-icon-EnEce15b.js → project-icon-B-WU0_0D.js} +1 -1
  204. package/dist/client/assets/project-reports-We-E3RnV.js +1 -0
  205. package/dist/client/assets/project-tasks-DEpXI9YC.js +1 -0
  206. package/dist/client/assets/{projects-empty-state-B0ZQBktO.js → projects-empty-state-DW2UrEaZ.js} +1 -1
  207. package/dist/client/assets/{projects-QOPxi_mI.js → projects-ok5J9tL9.js} +1 -1
  208. package/dist/client/assets/{prompts-CezqR9ud.js → prompts-CNAdfpQM.js} +1 -1
  209. package/dist/client/assets/record-editor-p5Q3f0yi.js +1 -0
  210. package/dist/client/assets/redirect-editor-CtcJbNoE.js +1 -0
  211. package/dist/client/assets/reports-CNpDrbV0.js +1 -0
  212. package/dist/client/assets/{reports-BG-GKzeu.js → reports-CzOE1tR3.js} +1 -1
  213. package/dist/client/assets/{reports-onboarding-5j0jaaNw.js → reports-onboarding-BmEr1mIf.js} +1 -1
  214. package/dist/client/assets/{reports-tab-BkTRSHA7.js → reports-tab-DKCT0JIU.js} +2 -2
  215. package/dist/client/assets/{repositories-BGagF1EN.js → repositories-CQq6WnJq.js} +1 -1
  216. package/dist/client/assets/{repository-binding-CXF8Iqmd.js → repository-binding-BNg5TQOZ.js} +1 -1
  217. package/dist/client/assets/{repository-import-picker-DqDsZx5W.js → repository-import-picker-CcMvghJ5.js} +1 -1
  218. package/dist/client/assets/{repository-picker-DLkKyJUN.js → repository-picker-SvnnQoi6.js} +1 -1
  219. package/dist/client/assets/{require-capability-BM6Ybgn3.js → require-capability-DlJRrlRZ.js} +1 -1
  220. package/dist/client/assets/{required-auth-layout-CVWrBxoR.js → required-auth-layout-CDNeII8u.js} +1 -1
  221. package/dist/client/assets/{reset-password-CEx0Ff3M.js → reset-password-Dbn4jIkW.js} +1 -1
  222. package/dist/client/assets/{resizable-DyTZr2pU.js → resizable-CZ4aTSlX.js} +1 -1
  223. package/dist/client/assets/{resolve-tab-icon-DfIQZFlu.js → resolve-tab-icon-CXK_bXUY.js} +1 -1
  224. package/dist/client/assets/{review-settings-ClvQY-hD.js → review-settings-BDPAXKXb.js} +1 -1
  225. package/dist/client/assets/{rich-text-link-control-mLwtvxkK.js → rich-text-link-control-ClVdMqVI.js} +1 -1
  226. package/dist/client/assets/{roles-lRXToodJ.js → roles-DOI1mfYR.js} +1 -1
  227. package/dist/client/assets/{route-BhRw08bH.js → route-CKk6J4lQ.js} +1 -1
  228. package/dist/client/assets/{route-DDzvkEDQ.js → route-C_x1XS5V.js} +1 -1
  229. package/dist/client/assets/route-D9aStTQZ.js +1 -0
  230. package/dist/client/assets/runnable-block-editor-DxlrjseU.js +17 -0
  231. package/dist/client/assets/{sandbox-lifecycle-context-CyWspjuL.js → sandbox-lifecycle-context-CDjLFL25.js} +1 -1
  232. package/dist/client/assets/{schema-D6ibRSPf.js → schema-C3CtA8cz.js} +1 -1
  233. package/dist/client/assets/{scroll-area-C8BYcujI.js → scroll-area-BJzbQI7x.js} +1 -1
  234. package/dist/client/assets/{search-input-ChI_JhrH.js → search-input-CWqVQgLT.js} +1 -1
  235. package/dist/client/assets/{search-toggle-CUWWqFsW.js → search-toggle-CZJ34jiu.js} +1 -1
  236. package/dist/client/assets/{secret-picker-CxU-8m-r.js → secret-picker-fggAfKvz.js} +1 -1
  237. package/dist/client/assets/{secrets-BmlGwv-i.js → secrets-aGD7EHkw.js} +1 -1
  238. package/dist/client/assets/sections-editor-d3ZH3NnB.js +1 -0
  239. package/dist/client/assets/{select-CMFCWFoG.js → select-6ljk5DPS.js} +1 -1
  240. package/dist/client/assets/{select-model-BGcA4VFt.js → select-model-BKzRZEfy.js} +1 -1
  241. package/dist/client/assets/seo-editor-cv3-M4dT.js +1 -0
  242. package/dist/client/assets/{separator-CF3-tizq.js → separator-BJL1NbSA.js} +1 -1
  243. package/dist/client/assets/{settings-tab-cuNoLFSI.js → settings-tab-BAGW7JQB.js} +1 -1
  244. package/dist/client/assets/{sheet-DDYhwyXr.js → sheet-CiBJ72wj.js} +1 -1
  245. package/dist/client/assets/{shell-layout-J-egCYHs.js → shell-layout-CGcdMFur.js} +1 -1
  246. package/dist/client/assets/{skills-DHf4Wnnh.js → skills-DRGboJI3.js} +1 -1
  247. package/dist/client/assets/{slider-BiFHboSa.js → slider-Dx78M_Dr.js} +1 -1
  248. package/dist/client/assets/{sortable.esm-D8MkW_Mj.js → sortable.esm--kYjBfXA.js} +1 -1
  249. package/dist/client/assets/{sso-B2O83AEI.js → sso-BbuCPd_C.js} +1 -1
  250. package/dist/client/assets/{suggestion-CzlBu15n.js → suggestion-53Llg-e1.js} +1 -1
  251. package/dist/client/assets/{switch-CkoldjL2.js → switch-nJdDORbC.js} +1 -1
  252. package/dist/client/assets/{symbol-Bd69ZTHX.js → symbol-DPWCgLFf.js} +1 -1
  253. package/dist/client/assets/{synced-repos-Nygw9-io.js → synced-repos-63wThZ7a.js} +1 -1
  254. package/dist/client/assets/{tab-icon-glyph-DPo9bSSl.js → tab-icon-glyph-C1TUieB9.js} +1 -1
  255. package/dist/client/assets/{table-CxKhFuEH.js → table-DRoBPaFJ.js} +1 -1
  256. package/dist/client/assets/{tabs-DLw8-jiv.js → tabs-DDxLPvSM.js} +1 -1
  257. package/dist/client/assets/{task-board-B6zg05l8.js → task-board-BWigQAz0.js} +1 -1
  258. package/dist/client/assets/{task-route-Da1wUewT.js → task-route-BAXJnQiB.js} +1 -1
  259. package/dist/client/assets/{task-status-ENyxLffS.js → task-status-HT2A-rBc.js} +1 -1
  260. package/dist/client/assets/taskboard-analytics-D34967tP.js +1 -0
  261. package/dist/client/assets/tasks-C199SCss.js +1 -0
  262. package/dist/client/assets/{tasks-CIFURdGc.js → tasks-qzLf1kZw.js} +1 -1
  263. package/dist/client/assets/{textarea-DtmaxKHE.js → textarea-BemV8MtB.js} +1 -1
  264. package/dist/client/assets/{thread-analytics-DIbC04_x.js → thread-analytics-xCoRSlkG.js} +1 -1
  265. package/dist/client/assets/{thread-button-VjZAd4E3.js → thread-button-D7_O34uV.js} +1 -1
  266. package/dist/client/assets/{thread-intent-iex-fi8o.js → thread-intent-DWaXIzM6.js} +1 -1
  267. package/dist/client/assets/{thread-route-B-vRjZGb.js → thread-route-BrqTE6Me.js} +1 -1
  268. package/dist/client/assets/{thread-route-Cl51Xz5G.js → thread-route-kfygoR33.js} +1 -1
  269. package/dist/client/assets/{thread-sheet-body-C_srY05t.js → thread-sheet-body-CN1lXMVz.js} +1 -1
  270. package/dist/client/assets/{time-range-picker-C5iiqrEW.js → time-range-picker-C761CjtW.js} +1 -1
  271. package/dist/client/assets/{toggle-group-DlGyqAyH.js → toggle-group-NJ6o2Ub6.js} +1 -1
  272. package/dist/client/assets/{tool-namespace-4DMlS5tP.js → tool-namespace-D4Qkj0Hw.js} +1 -1
  273. package/dist/client/assets/{toolbar-icon-button-D0koaCWD.js → toolbar-icon-button-zP-xIu_D.js} +1 -1
  274. package/dist/client/assets/{tooltip-UhT0N_rD.js → tooltip-a0H1qyBK.js} +1 -1
  275. package/dist/client/assets/{tooltipContext-Cyn3L__C.js → tooltipContext-B3CTU34j.js} +1 -1
  276. package/dist/client/assets/{track-BMoyL32N.js → track-CS4z8T1x.js} +1 -1
  277. package/dist/client/assets/{types-DHDp1Ix5.js → types-Bx_rltIM.js} +1 -1
  278. package/dist/client/assets/{url-slug-QrQmlYwX.js → url-slug-CDmaNVX6.js} +1 -1
  279. package/dist/client/assets/{usage-stats-CC8M4nNz.js → usage-stats-AcDv8Dsz.js} +1 -1
  280. package/dist/client/assets/{use-ai-providers-Cz8n-q9d.js → use-ai-providers-zmp15jyt.js} +1 -1
  281. package/dist/client/assets/{use-automations-C_6nt9Zp.js → use-automations-BZM3cLj4.js} +1 -1
  282. package/dist/client/assets/{use-autosave-BgX70Gz2.js → use-autosave-B0YK0x6h.js} +1 -1
  283. package/dist/client/assets/{use-chat-layout-state-C60DGNO2.js → use-chat-layout-state-Bcmu5rP3.js} +1 -1
  284. package/dist/client/assets/{use-chat-navigation-CyFm8cEg.js → use-chat-navigation-Cc_f0d0S.js} +1 -1
  285. package/dist/client/assets/{use-clock-tick-BKZqeY5S.js → use-clock-tick-AzE8VO15.js} +1 -1
  286. package/dist/client/assets/{use-connect-companion-DTmLU6ot.js → use-connect-companion-8hS3GtOc.js} +1 -1
  287. package/dist/client/assets/{use-connection-UE8r2cKi.js → use-connection-CI8uhNVS.js} +1 -1
  288. package/dist/client/assets/{use-copy-qR80P2m5.js → use-copy-CQYz3fr0.js} +1 -1
  289. package/dist/client/assets/{use-create-virtual-mcp-DRMHi1dT.js → use-create-virtual-mcp-DHX0--iP.js} +1 -1
  290. package/dist/client/assets/{use-date-fns-locale-CoZazUfP.js → use-date-fns-locale-9fXcEdhO.js} +1 -1
  291. package/dist/client/assets/{use-debounced-autosave-CYyabydu.js → use-debounced-autosave-DHqky-9Q.js} +1 -1
  292. package/dist/client/assets/{use-debounced-value-XS_u63Qy.js → use-debounced-value-CeEbKwrV.js} +1 -1
  293. package/dist/client/assets/{use-deco-credits-BWgRmbgF.js → use-deco-credits-BC6kbiHd.js} +1 -1
  294. package/dist/client/assets/{use-decopilot-events-BatPvp4V.js → use-decopilot-events-Dd86Tcia.js} +1 -1
  295. package/dist/client/assets/{use-delete-connection-VV7G6Dis.js → use-delete-connection-DVwUwOIY.js} +1 -1
  296. package/dist/client/assets/{use-deployment-admin-DW4_2QbY.js → use-deployment-admin-DAj-k6S1.js} +1 -1
  297. package/dist/client/assets/{use-ensure-project-folder-D3lq0ueh.js → use-ensure-project-folder-DmmxnF8g.js} +1 -1
  298. package/dist/client/assets/{use-fast-preview-draft-url-mXiWjLYU.js → use-fast-preview-draft-url-BiKkW-Ju.js} +1 -1
  299. package/dist/client/assets/{use-file-configs-B6MWoy0P.js → use-file-configs-CyNbQHOb.js} +1 -1
  300. package/dist/client/assets/{use-infinite-scroll-BD4__gTJ.js → use-infinite-scroll-DvyXq-Gj.js} +1 -1
  301. package/dist/client/assets/{use-join-requests-IoygYkkX.js → use-join-requests-Dt-0BSi5.js} +1 -1
  302. package/dist/client/assets/{use-main-panel-tabs-z1NdoakW.js → use-main-panel-tabs-B_s-ZlV6.js} +1 -1
  303. package/dist/client/assets/{use-mcp-auth-status-CDCKWbI3.js → use-mcp-auth-status-D873xSfO.js} +1 -1
  304. package/dist/client/assets/{use-mcp-client-DaCLGUbW.js → use-mcp-client-G9kTaeLN.js} +1 -1
  305. package/dist/client/assets/{use-mcp-prompts-Cj8TKxv6.js → use-mcp-prompts-TIlwVbKk.js} +1 -1
  306. package/dist/client/assets/{use-mcp-tools-B_v6Xc8f.js → use-mcp-tools-Y4CsChTF.js} +1 -1
  307. package/dist/client/assets/{use-members-COPm4P5W.js → use-members-G69DqUHv.js} +1 -1
  308. package/dist/client/assets/{use-mobile-CSIXbJHF.js → use-mobile-lU_VA-Wz.js} +1 -1
  309. package/dist/client/assets/{use-navigate-to-agent-CyIa0H8E.js → use-navigate-to-agent-C6i1wdll.js} +1 -1
  310. package/dist/client/assets/use-new-blocks-editor-CI1Vo0BF.js +1 -0
  311. package/dist/client/assets/{use-open-billing-url-ByV0ShcL.js → use-open-billing-url-D2RlzIda.js} +1 -1
  312. package/dist/client/assets/{use-org-auth-client-DYKRjiNi.js → use-org-auth-client-qcwb5Xwg.js} +1 -1
  313. package/dist/client/assets/{use-org-fs-DcHowQO9.js → use-org-fs-r_UASbiH.js} +1 -1
  314. package/dist/client/assets/{use-org-repo-syncs-CpMqTwr0.js → use-org-repo-syncs-CXCL1qVI.js} +1 -1
  315. package/dist/client/assets/{use-org-sso-Bhc1WrbS.js → use-org-sso-CMW8M6X6.js} +1 -1
  316. package/dist/client/assets/{use-organization-roles-CPv4-j68.js → use-organization-roles-BrmyYVth.js} +1 -1
  317. package/dist/client/assets/{use-organization-settings-DxhpqnYO.js → use-organization-settings-X0pPEcR2.js} +1 -1
  318. package/dist/client/assets/{use-panel-navigate-B75ATwR5.js → use-panel-navigate-CoagQzmq.js} +1 -1
  319. package/dist/client/assets/{use-project-scope-YpfqNFMB.js → use-project-scope-DfhWNvXs.js} +1 -1
  320. package/dist/client/assets/{use-releases-DpsGlymp.js → use-releases-NV2VbJG3.js} +1 -1
  321. package/dist/client/assets/{use-reports-diagnostic-BacLoY5G.js → use-reports-diagnostic-6rpu_ggR.js} +1 -1
  322. package/dist/client/assets/{use-sandbox-events-BnBgyYjB.js → use-sandbox-events-BMDgKkRX.js} +1 -1
  323. package/dist/client/assets/{use-secrets-CkRBiULT.js → use-secrets-DHJQDVTM.js} +1 -1
  324. package/dist/client/assets/{use-section-preview-base-Bzis1rCo.js → use-section-preview-base-BV9hqpLn.js} +1 -1
  325. package/dist/client/assets/{use-tags-D6F6hDK1.js → use-tags-BJ2Hh6BN.js} +1 -1
  326. package/dist/client/assets/{use-task-board-analytics-DGP81lZo.js → use-task-board-analytics-BCuCs7sP.js} +1 -1
  327. package/dist/client/assets/{use-task-board-events-CMdVOm7R.js → use-task-board-events-UhXVQ3a7.js} +1 -1
  328. package/dist/client/assets/{use-task-board-item-prs-DsMQwqER.js → use-task-board-item-prs-DFJZfuP4.js} +1 -1
  329. package/dist/client/assets/{use-task-board-items-SO19iMil.js → use-task-board-items-jZeevl5p.js} +1 -1
  330. package/dist/client/assets/{use-task-metadata-DSX2LZld.js → use-task-metadata-CU_uNdjx.js} +1 -1
  331. package/dist/client/assets/{use-thread-analytics-CVouJyNf.js → use-thread-analytics-8O_JAIrn.js} +1 -1
  332. package/dist/client/assets/{use-thread-outputs-PwDDA0de.js → use-thread-outputs-CLewPMZ8.js} +1 -1
  333. package/dist/client/assets/useInfiniteQuery-K_CnrRFE.js +1 -0
  334. package/dist/client/assets/{useQueries-DYlwY_7i.js → useQueries-BZgifabX.js} +1 -1
  335. package/dist/client/assets/useSuspenseInfiniteQuery-CstC5ADZ.js +1 -0
  336. package/dist/client/assets/{users-CYFJuXuG.js → users-rimZAqXM.js} +1 -1
  337. package/dist/client/assets/{utils-VljhGZNh.js → utils-C3P6RRqb.js} +1 -1
  338. package/dist/client/assets/{variant-calendar-CmxcC_ep.js → variant-calendar-1RNKsmjA.js} +1 -1
  339. package/dist/client/assets/{variant-matcher-override-wPBIsNi7.js → variant-matcher-override-BybutIRM.js} +1 -1
  340. package/dist/client/assets/{view-mode-toggle-Bsl9fIVT.js → view-mode-toggle-C5yHwVoW.js} +1 -1
  341. package/dist/client/assets/{virtual-mcp-DUsuHWMj.js → virtual-mcp-B1D6GXag.js} +1 -1
  342. package/dist/client/assets/{watch-sse-pool-BxFXPxOj.js → watch-sse-pool-Binkw30f.js} +1 -1
  343. package/dist/client/index.html +1 -1
  344. package/dist/server/server.js +1 -1
  345. package/package.json +1 -1
  346. package/dist/client/assets/agent-app-DdLgacxL.js +0 -1
  347. package/dist/client/assets/agent-deck-BYEYsFu3.js +0 -1
  348. package/dist/client/assets/agent-library-587LhhOs.js +0 -1
  349. package/dist/client/assets/agent-library-file-DYqQlnsg.js +0 -1
  350. package/dist/client/assets/agent-settings-Df-14Bch.js +0 -1
  351. package/dist/client/assets/agent-site-editor-code-BS_mQuFD.js +0 -2
  352. package/dist/client/assets/agent-view-BhxMS98G.js +0 -1
  353. package/dist/client/assets/api-keys-Dd4XvmOL.js +0 -1
  354. package/dist/client/assets/app-editor-D525MffA.js +0 -1
  355. package/dist/client/assets/category-editor-Bq4nzviJ.js +0 -1
  356. package/dist/client/assets/context-CQ5RUVRk.js +0 -1
  357. package/dist/client/assets/flat-project-OqAYQvXi.js +0 -1
  358. package/dist/client/assets/library-C5qrWpgG.js +0 -1
  359. package/dist/client/assets/post-calendar-CEBSrXXn.js +0 -1
  360. package/dist/client/assets/project-reports-DkXaua8h.js +0 -1
  361. package/dist/client/assets/project-tasks-Bh6cwC6Y.js +0 -1
  362. package/dist/client/assets/record-editor-C_Y1Wo0r.js +0 -1
  363. package/dist/client/assets/redirect-editor-CjFXK1kC.js +0 -1
  364. package/dist/client/assets/reports-BoLey7zx.js +0 -1
  365. package/dist/client/assets/route-CndEOl6m.js +0 -1
  366. package/dist/client/assets/runnable-block-editor-Cr3HQlva.js +0 -17
  367. package/dist/client/assets/sections-editor-DTefyMnC.js +0 -1
  368. package/dist/client/assets/seo-editor-VyAPTq8i.js +0 -1
  369. package/dist/client/assets/taskboard-analytics-Bq1qJL1-.js +0 -1
  370. package/dist/client/assets/tasks-DK3Yxxu5.js +0 -1
  371. package/dist/client/assets/use-new-blocks-editor-CFDJQWsr.js +0 -1
  372. package/dist/client/assets/useInfiniteQuery-C6j7p53s.js +0 -1
  373. package/dist/client/assets/useSuspenseInfiniteQuery-LN6pz4nD.js +0 -1
@@ -4323,7 +4323,7 @@ ${J.join(`
4323
4323
  `)}`:X}function Y55($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
4324
4324
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var RH8=200,i65=12,p65,t65,o65=6,r65=300,Hx0=3;var xE1=L(()=>{O7();GZ0();r$();Kx0();p65={aheadBy:0,behindBy:0,files:[]};t65=/(?:^|\/)\.deco\/blocks\/[^/]+\.json$/i});function J55($){if(!$||$.includes(".."))return!1;return X55.test($)}function IH8($){return G55.includes($)}function fE1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!J55(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function yE1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var X55,G55;var VH8=L(()=>{X55=/^[\w./@-]+$/;G55=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function UZ0($,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 SH8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new jz(t7);let J=await TN($.storage,X,Y);if(J&&await NL($.storage,J)){let F=await AN($,J,{forceRefresh:!0}).catch((U)=>{throw new jz(U instanceof Error?U.message:t7)});await kH8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new jz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Zi({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:t7;throw new jz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await qN(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=Iz$(F instanceof Error?F.message:String(F));throw U?new jz(N):F});await kH8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function kH8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Rt($),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 XP(K,W55).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var W55=10485760,jz;var gE1=L(()=>{_3();ab0();m80();eU0();p$0();O7();jz=class jz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function H55($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!K55.test(Z))throw Error(`Invalid branch name: ${$}`)}function kh($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(U55)])}async function B55($,Z){let Q=$.var.studioContext,Y=DX(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=fy(G?.metadata?.runtime);if(W)return W;let K=JM0(Z.virtualMcpMetadata),H=K==="cms"?await BE1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)d80(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 D55($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await Y7($.var.studioContext)}catch{return null}}function St($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function BZ0($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=UZ0(Z,Q);if(!X)throw new y0({provider:"github",status:404,message:"Project has no repository"});let J=Y0(Y);return ad(Y,J.id,X)}function uE1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=lE$(Z);if(Y!==void 0)return $.json({error:Q},429,{...gZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof Z5)return $.json({error:Q},409,gZ);let X=BK(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,gZ)}return $.json({error:Q},502,gZ)}async function hE1($,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 vH8($){try{let Z=await BZ0($),Q=await vE1(Z,$.get("vmClaim").branch);return $.json(Q,200,gZ)}catch(Z){return uE1($,Z)}}function NZ0($,Z){let Y=(Ux0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return Ux0.set($,X),X.finally(()=>{if(Ux0.get($)===X)Ux0.delete($)}),Y}async function bQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,gZ);let Y=Q?.runner??St($);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",...gZ}})}}let D=await B.text(),O=Q?.redactRepoDir?L55(D):D,w=B.headers.get("content-type")??"application/json";return new Response(O,{status:B.status,headers:{"content-type":w,...gZ}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((O,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function L55($){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 bH8($,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 O55($){return xH8.includes($)}var K55,F55=524288,CH8=65536,U55=1e4,_H8=2000,N55,Ux0,gZ,xH8,fH8=()=>{let $=new Q1;$.use("/:virtualMcpId/:branch/*",N55),$.post("/:virtualMcpId/:branch/write",(Q)=>bQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:kh(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>bQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:kh(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>bQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:kh(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>bQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:kh(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>bQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:kh(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>bQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:kh(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>bQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:kh(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 bQ(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 bQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>bQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>bQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!O55(Y))return Q.json({error:`step must be one of: ${xH8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await BE1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await D55(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,gZ);if(Y==="start"){let G=Y0(Q.var.studioContext),W=xi(X.virtualMcpMetadata);try{await ZM0({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 bQ(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 jO(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 _K8(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 vH8(Q);return Z(Q)});let Z=(Q)=>bQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(_H8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return vH8(Q);return bQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(_H8)])})}),$.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 BZ0(Q),G=await bE1(J,Y.branch,X.base);return Q.json(G,200,gZ)}catch(X){return uE1(Q,X)}return bQ(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,gZ);let Y=St(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return NZ0(X,async()=>{try{await DE1(W,Y,X);let K=UZ0(J,G);if(K)await SH8(W,Y,X,K)}catch(K){if(K instanceof jz)return Q.json({error:K.message},403,gZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,gZ)}return bQ(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 NZ0(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,gZ);try{let G=await BZ0(Q);return await MH8(G,Y.branch,J),Q.json({ok:!0},200,gZ)}catch(G){let W=BK(G)===409||G instanceof Z5?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,gZ)}});return NZ0(Y.claimName,()=>bQ(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 NZ0(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await BZ0(Q),H=W.base??await K.getDefaultBranch();return await Fx0(K,Y.branch,H),Q.json({ok:!0},200,gZ)}catch(W){return uE1(Q,W)}});let X=St(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return NZ0(J,async()=>{try{await DE1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,gZ)}return bQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",g5({maxSize:F55,onError:(Q)=>Q.json({error:"Payload too large"},413,gZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=St(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=xK8(F)&&N?[F,U]:X?await Promise.all([bH8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),bH8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await BZ0(Q);return Promise.all([vE1(w,Y.branch),bE1(w,Y.branch)])})();await XK(K,Y0(K).id,"judging whether a change needs review");let O=await gK8(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(O,200,gZ)}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,gZ);return Q.json({error:F},502,gZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=St(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 hE1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",g5({maxSize:CH8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=St(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=fE1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=yE1(J,W.resolveType);return hE1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",g5({maxSize:CH8,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):fi(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=fE1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!IH8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=yE1(G,K.resolveType);return hE1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var yH8=L(()=>{W8();oK();Tt();NE1();bi();kK8();BX();yi();SK8();RJ();QF();CK8();vK8();kY1();c80();hK8();O7();k5();xE1();VH8();i80();gE1();K55=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;N55=rb0(async($,Z)=>{let Q=$.var.studioContext;try{p(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=_0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=Y0(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{H55(G)}catch(O){let w=O instanceof Error?O.message:String(O);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=z80({orgId:X.id,virtualMcpId:J,branch:G}),H=await xY1(Q,G),F=fY1(H,Y),U=VK8({userId:F,projectRef:K}),N=W.metadata??null,B=await B55($,{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((O)=>O.connection_id)??[],runtime:B}),Z();let D;try{D=await Y7(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],runtime:B}),Z()});Ux0=new Map;gZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};xH8=["clone","install","start"]});function gH8($,Z,Q){let Y=lE1.get($);if(!Y)Y={pending:null,running:!1},lE1.set($,Y);if(!Y.pending)Y.pending={patches:[],deps:Z};let X=Y.pending;X.deps=Z;let J=new Promise((G,W)=>{X.patches.push({patch:Q,resolve:G,reject:W})});if(!Y.running)j55($,Y);return J}async function j55($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let{sha:Y,accepted:X,conflicts:J}=await z55(Q);for(let G of X)G.resolve(Y);for(let{queued:G,blocks:W}of J)G.reject(new Nx0(W))}catch(Y){for(let X of Q.patches)X.reject(Y)}}}finally{if(Z.running=!1,!Z.pending)lE1.delete($)}}async function E55($,Z,Q,Y){let X=new Map,J=[];for(let W of Q){let K=Wx0(Z,W)[0],H=K?Z.find((F)=>F.path===K):void 0;if(!H)X.set(W,null);else J.push({key:W,stem:H.stem,sha:H.sha})}let G=await CE1($,J,Y);for(let[W,{content:K}]of G.entries()){let H=J[W].key;try{X.set(H,await $x0(JSON.parse(K)))}catch{X.set(H,hH8)}}return X}async function P55($,Z){let Q=new Map(Z),Y=[],X=[];for(let J of $){let{patch:G}=J,W=Object.entries(G.expect??{}).filter(([K,H])=>{let F=Q.get(K);return F!==hH8&&F!==H}).map(([K])=>K);if(W.length>0){X.push({queued:J,blocks:W});continue}Y.push(J);for(let[K,H]of Object.entries(G.set??{}))if(Q.has(K))Q.set(K,await $x0(H));for(let K of G.delete??[])if(Q.has(K))Q.set(K,null)}return{accepted:Y,conflicts:X}}async function z55($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await kt(Z,Q),W=await Z.listDecofileEntries(G,Y),K=SE1(W,Y),H=new Set($.patches.flatMap(({patch:j})=>Object.keys(j.expect??{}))),{accepted:F,conflicts:U}=await P55($.patches,H.size>0?await E55(Z,K,H,X):new Map),N=new Map,B=new Set;for(let{patch:j}of F){for(let[E,P]of Object.entries(j.set??{}))N.set(E,P),B.delete(E);for(let E of j.delete??[])B.add(E),N.delete(E)}let D=[],O=new Map(K.map((j)=>[j.path,{stem:j.stem,sha:j.sha}]));for(let[j,E]of N){let P=Wx0(K,j),T=`${JSON.stringify(E,null,2)}
4325
4325
  `;await zH8(Z.repo,T);let z=P[0]??`${Gx0(Y)}/${EE1(j)}.json`;D.push({path:z,content:T});let A=z.slice(z.lastIndexOf("/")+1,-5);O.set(z,{stem:A,content:T});for(let q of P.slice(1))D.push({path:q,deleted:!0}),O.delete(q)}for(let j of B)for(let E of Wx0(K,j))D.push({path:E,deleted:!0}),O.delete(E);if(D.length===0)return{sha:G,accepted:F,conflicts:U};let w=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((j)=>j.type==="blob"&&j.path===w)){let j=await CE1(Z,O.values(),X),{decofile:E,skipped:P}=YZ0(j);if(P.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:YF(Z.repo),branch:Q,packagePath:Y,blocks:P.map((T)=>T.key)});D.push({path:w,content:E})}try{let{sha:j}=await Z.commitFiles({branch:Q,message:A55(N,B,$.deps.coAuthor),expectedHead:G,changes:D});return{sha:j,accepted:F,conflicts:U}}catch(j){if(!(j instanceof Z5)||J>=w55-1)throw j;await D$(I7(2000,200,J,2,0.5))}}}function A55($,Z,Q){let Y=(G)=>{let W=G.slice(0,3).join(", ");return G.length>3?`${W} (+${G.length-3} more)`:W},X=[];if($.size>0)X.push(`update ${Y([...$.keys()])}`);if(Z.size>0)X.push(`delete ${Y([...Z])}`);let J=`chore(decofile): ${X.join("; ")}`;return ZQ1(J,Q)}var w55=3,Nx0,lE1,hH8;var uH8=L(()=>{Pq0();GZ0();t4();r$();O7();Kx0();Nx0=class Nx0 extends Error{blocks;constructor($){super(`Blocks changed since they were loaded: ${$.join(", ")}`);this.blocks=$;this.name="BlockConflictError"}};lE1=new Map;hH8=Symbol("unreadable")});import{createHmac as lH8,randomBytes as T55,timingSafeEqual as R55}from"crypto";function cH8(){if(Bx0)return Bx0;let $;try{let Z=L0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Bx0=$?Buffer.from($):T55(32),Bx0}function cE1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+q55)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=lH8("sha256",cH8()).update(Y).digest("base64url");return`${Y}.${X}`}function mH8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(lH8("sha256",cH8()).update(Y).digest("base64url"));if(X.length!==J.length||!R55(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 q55=21600000,Bx0=null;var dH8=L(()=>{r1()});function Dx0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function M55($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=Dx0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function iH8($){let Z;try{Z=Dx0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=M55(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=Dx0(G),K=W&&Dx0(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 PO}from"zod";function V55($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&I55.test($)}function sH8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function DZ0($){let Z=$.get("decofileScope");return ad($.var.studioContext,Z.organizationId,Z.repository)}function LZ0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof Nx0)return $.json({error:Q,code:"block-conflict",blocks:Z.blocks},409);if(Z instanceof Z5)return $.json({error:Q},409);let Y=BK(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 rH8(){let $=new Q1;return $.use("/:virtualMcpId/:branch",oH8),$.use("/:virtualMcpId/:branch/*",oH8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await DZ0(Z),X=await AH8(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(iH8(X.decofile),200,{...J,"content-type":"application/json"});let G=cE1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(sH8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return LZ0(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 DZ0(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 LZ0(Z,X)}}),$.patch("/:virtualMcpId/:branch",S55,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=C55.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=Ih(X.data)}catch(G){if(G instanceof XZ0)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{eb0(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(jE1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await DZ0(Z),W=await gH8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Rt(Y)},J),K=cE1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:sH8(Z)})}catch(G){return LZ0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await DZ0(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(BK(W)!==409)throw W;await Fx0(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(BK(G)===409)return Z.json({error:"merge-conflict"},409);if(BK(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 LZ0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await DZ0(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(BK(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return LZ0(Z,Y)}}),$}var I55,pH8=500,nH8=1048576,tH8=1024,k55=8388608,S55,C55,oH8;var aH8=L(()=>{i80();GZ0();W8();oK();NE1();ab0();gE1();O7();uH8();dH8();xE1();Kx0();QF();I55=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;S55=g5({maxSize:k55,onError:($)=>$.json({error:"Payload too large"},413)}),C55=PO.object({set:PO.record(PO.string(),PO.unknown()).optional(),delete:PO.array(PO.string()).optional(),expect:PO.record(PO.string(),PO.string().regex(/^[0-9a-f]{64}$/).nullable()).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)<=pH8,{message:`Patch cannot touch more than ${pH8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=nH8),{message:`Each block must be at most ${nH8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=tH8),{message:`Each block key must be at most ${tH8} characters`}).refine(($)=>Object.keys($.expect??{}).every((Z)=>(Z in($.set??{}))||($.delete??[]).includes(Z)),{message:"Each expected block must be one the patch sets or deletes"}).refine(($)=>Object.keys($.set??{}).every((Z)=>!($.delete??[]).includes(Z)),{message:"A block cannot be both set and deleted in the same patch"}),oH8=rb0(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(!V55(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||!mH8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await BG(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(!fi(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=UZ0(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 eH8=($)=>{let Z=new Q1;if(Z.use("*",$t),Z.use("*",RJ8),Z.route("/",AJ8($.voiceSessions)),Z.route("/",Gb0()),Z.route("/",rJ8()),Z.route("/",HG8()),Z.route("/",pJ8()),Z.route("/",BK8()),Z.route("/",LK8()),Z.route("/",JK8()),Z.route("/",UK8()),Z.route("/",WK8()),Z.route("/",tb0()),Z.route("/tools",AK8()),Z.route("/",EK8()),Z.route("/",hW8({kvStorage:$.kvStorage})),Z.route("/",yW8()),Z.route("/fs",sW8({getConnection:$.getNatsConnection})),Z.route("/sandbox",fH8()),Z.route("/decofile",rH8()),Z.route("/",QK8()),Z.route("/",aW8()),Z.route("/deco-sites",Kb0()),Z.route("/hosting",xJ8()),Z.route("/monitor",cJ8()),Z.route("/sso",$b0()),Z.route("/",ob0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",SJ8()),$.mountDevAssets)Z.route("/dev-assets",Nb0({orgFromPath:!0}));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);for(let Q of YE1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",EQ8()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of YE1)Z.route(Q,$K8());return Z.route("/mcp",yk0()),Z.route("/mcp/self",db0()),Z.route("/mcp",uk0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var $F8=L(()=>{W8();TJ8();qJ8();mv0();CJ8();Cw1();fJ8();mJ8();Bb0();Nz();Mw1();aJ8();fw1();gW8();uW8();rW8();eW8();m60();ww1();lk0();QE1();ZK8();YK8();GK8();KK8();GE1();DK8();OK8();PK8();WE1();TK8();KE1();gk0();yH8();aH8()});import{z as Sh}from"zod";class mE1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new k1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new YF8.Kvm(Lx0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Lx0.StorageType.Memory,ttl:XF8.nanos(qL),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"?QF8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await D$(200);continue}let G=ZF8.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 D$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,ZF8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new k1(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"?QF8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var Lx0,YF8,XF8,ZF8,QF8;var JF8=L(()=>{$G();yN();r$();Lx0=C(KH(),1),YF8=C(MT(),1),XF8=C(uz(),1),ZF8=new TextEncoder,QF8=Sh.discriminatedUnion("state",[Sh.object({state:Sh.literal("ready"),agentId:Sh.string()}),Sh.object({state:Sh.literal("creating"),expiresAt:Sh.number()})])});import{z as Ct}from"zod";function _55($){return{model:$.model,instructions:`${tS$}
4326
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class dE1{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:_55({...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:Ct.object({session:Ct.object({id:Ct.string().min(1)}),transport:Ct.object({type:Ct.literal("webrtc"),sdp:Ct.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var GF8=L(()=>{yN()});var WF8;var KF8=L(()=>{WF8=[{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 iE1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:pS$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:WF8.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:qL/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 HF8=L(()=>{yN();KF8()});import{z as vJ}from"zod";import{createHash as v55,createHmac as b55}from"crypto";class Ox0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=v55("sha256").update(JSON.stringify(iE1($))).digest("hex"),this.conversationKey=b55("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Ox0({...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}=vJ.object({agents:vJ.array(vJ.object({agent_id:vJ.string(),name:vJ.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 vJ.object({platform_settings:vJ.object({auth:vJ.object({enable_auth:vJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...iE1(this.config)},AbortSignal.timeout(15000));return vJ.object({agent_id:vJ.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 vJ.object({token:vJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return vJ.object({token:vJ.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 FF8=L(()=>{HF8()});import{createHmac as x55,timingSafeEqual as f55}from"crypto";import{z as _t}from"zod";function NF8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return x55("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function BF8($,Z){let Q=Buffer.from(JSON.stringify(UF8.parse($))).toString("base64url");return`${Q}.${NF8(Q,Z)}`}function DF8($,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(NF8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!f55(W,G))return null;try{let K=UF8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+qL)return null;return K.data}catch{return null}}var UF8;var LF8=L(()=>{yN();UF8=_t.object({sessionId:_t.string().uuid(),organizationId:_t.string().min(1).max(256),userId:_t.string().min(1).max(256),threadId:_t.string().min(1).max(256),expiresAt:_t.number().int().positive()})});import{z as pE1}from"zod";function OF8($,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 nE1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var nE1;var wF8=L(()=>{nE1=pE1.object({provider:pE1.enum(["elevenlabs","openai"]),model:pE1.string().trim().min(1).max(128)})});import{createHash as y55}from"crypto";import{z as vt}from"zod";function bt($){return`user.${y55("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class oE1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new k1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new jF8.Kvm(jx0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:jx0.StorageType.Memory,ttl:EF8.nanos(qL),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new k1(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=OF8(this.deps.defaults,Y)}catch{throw new k1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new k1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+qL},W=BF8(G,this.deps.secret),K=await this.kv(),H=bt(G),F=await K.get(H),U=F?.operation==="PUT"?wx0.parse(F.json()):null,N=tE1.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 k1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:bt($)});return{token:W,...D,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=DF8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new k1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=bt(Q),J=await Y.get(X),G=J?.operation==="PUT"?wx0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new k1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new k1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new k1(409,{message:"Voice session already connected"});try{await Y.update(X,tE1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new k1(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=bt(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?wx0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new k1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new k1(429,{message:"Voice session speech limit reached"});try{await J.update(G,tE1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new k1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(bt($));if(Q?.operation==="PUT"&&wx0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(bt($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var jx0,jF8,EF8,wx0,tE1;var PF8=L(()=>{$G();yN();LF8();wF8();jx0=C(KH(),1),jF8=C(MT(),1),EF8=C(uz(),1),wx0=vt.object({sessionId:vt.string().uuid(),expiresAt:vt.number(),connected:vt.boolean().optional(),conversation:nE1.optional(),characters:vt.number().int().nonnegative(),requests:vt.number().int().nonnegative()}),tE1=new TextEncoder});function g55($){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 h55=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},zF8=()=>{let $=new Q1;return $.use("*",h55),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await yG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:g55(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var AF8=L(()=>{W8();r1();k_0()});import{z as c1}from"zod";function jB($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function o55($){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 s55($,Z,Q){try{return JSON.parse($)}catch{throw new qF8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function r55($){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:s55(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 a55($){let Z=$.map((Q)=>{let Y=Q.function.parameters?iU(Q.function.parameters):iU({type:"object",properties:{}});return[Q.function.name,t$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function e55($){if(!$)return;return{openai:{response_format:$}}}function $95(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function TF8($,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 RF8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var u55=256,l55,c55,m55,d55,i55,p55,n55,t55,qF8,MF8,IF8;var VF8=L(()=>{u4();W8();Tt();MF();l55=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),c55=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),m55=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(c55).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),d55=c1.object({type:c1.literal("text")}),i55=c1.object({type:c1.literal("json_object")}),p55=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),n55=c1.union([d55,i55,p55]),t55=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(m55),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(l55).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:n55.optional(),user:c1.string().optional()});qF8=class qF8 extends Error{constructor($){super($);this.name="MessageConversionError"}};MF8=new Q1;MF8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jB("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jB("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(jB("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=t55.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jB(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=o55(J.model);if(!G)return $.json(jB("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)=>b2(E.providerId));if(!j)return $.json(jB("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(jB(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=r55(J.messages),N=J.tools?a55(J.tools):void 0,B=e55(J.response_format),D=$95(),O=Math.floor(Date.now()/1000);if(J.stream)return jO($,async(w)=>{let j=TF8(F,U,N,J,B,$.req.raw.signal);try{let E=$p(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=u55)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:RF8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=TF8(F,U,N,J,B,$.req.raw.signal),j=await kL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:RF8(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(jB("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(jB(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(jB(X.message,"server_error"),500)}});IF8=MF8});function Z95($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function kF8(){let $=new Q1;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=_0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!G9(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||f9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(h2(U)!==J)continue;if(!Z95(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 SF8=L(()=>{W8();iX()});var Ex0;var sE1=L(()=>{Ex0={name:"decocms",version:"4.495.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch 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","@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",kysely:"^0.28.12","posthog-node":"^5.0.0"},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 X95(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Y95}}var CF8,Y95="https://ph.studio.decocms.com",_F8;var vF8=L(()=>{W8();Te();Bg();w9();r1();Yw1();sE1();CF8=new Q1;CF8.get("/",($)=>{let Z={version:Ex0.version,theme:LY$(),...hH().logo&&{logo:hH().logo},...hL()&&{internalUrl:fr1()},...L0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:DX8(),posthog:X95(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:iF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});_F8=CF8});import{z as q$}from"zod";var J95,bF8;var xF8=L(()=>{J95=q$.object({check_id:q$.string(),title:q$.string(),description:q$.string().optional(),impact:q$.string().optional(),why:q$.string().optional(),category:q$.string(),severity:q$.string(),value_band:q$.string().optional(),value_driver:q$.string().optional(),controllability:q$.string().optional(),pages:q$.array(q$.string()),tasks:q$.array(q$.string()),evidence:q$.string(),sample_scope:q$.string().optional(),sources:q$.array(q$.string())}),bF8=q$.object({domain:q$.string(),brand:q$.string(),favicon:q$.string().optional(),scanned_at:q$.string().nullable(),lang:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),totals:q$.object({measured:q$.number(),registry_total:q$.number(),passed:q$.number(),failed:q$.number(),blocked:q$.number()}),buckets:q$.array(q$.object({id:q$.enum(["critical","important","worth"]),label:q$.string(),items:q$.array(J95)})),passing:q$.object({count:q$.number(),items:q$.array(q$.object({check_id:q$.string(),title:q$.string()}))}),not_measured:q$.object({count:q$.number(),groups:q$.array(q$.object({reason:q$.string(),label:q$.string(),count:q$.number(),checks:q$.array(q$.string())}))}),categories:q$.array(q$.object({key:q$.string(),label:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),pass:q$.number(),fail:q$.number()})),screenshots:q$.array(q$.object({url:q$.string(),page_type:q$.string().optional(),viewport:q$.enum(["desktop","mobile"]),image_url:q$.string()}))})});function fF8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${JK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Px0($,Z={}){let Q=await fetch(fF8($,"",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 bF8.parse(await Q.json())}async function yF8($,Z={}){let Q=await fetch(fF8($,".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 rE1=L(()=>{xF8();sD()});import{join as gF8}from"path";async function W95($){try{let Z=await Px0($,{signal:AbortSignal.timeout(G95)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||aD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function lG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function K95($,Z){let Q=Uh($),Y=Z?.brand?.trim()||aD1(Q),X=BZ8(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=DZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${lG(W)}</title>`,`<meta name="description" content="${lG(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="${lG(W)}" />`,`<meta property="og:description" content="${lG(K)}" />`,`<meta property="og:url" content="${lG(G)}" />`,`<meta property="og:image" content="${lG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lG(W)}" />`,`<meta name="twitter:description" content="${lG(K)}" />`,`<meta name="twitter:image" content="${lG(H)}" />`,`<meta name="twitter:image:alt" content="${lG(F)}" />`,`<link rel="canonical" href="${lG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${lG(G)}.md" />`,`<link rel="icon" href="${lG(X)}" sizes="any" />`].join(`
4326
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class dE1{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:_55({...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:Ct.object({session:Ct.object({id:Ct.string().min(1)}),transport:Ct.object({type:Ct.literal("webrtc"),sdp:Ct.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var GF8=L(()=>{yN()});var WF8;var KF8=L(()=>{WF8=[{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 iE1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:pS$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:WF8.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:qL/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 HF8=L(()=>{yN();KF8()});import{z as vJ}from"zod";import{createHash as v55,createHmac as b55}from"crypto";class Ox0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=v55("sha256").update(JSON.stringify(iE1($))).digest("hex"),this.conversationKey=b55("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Ox0({...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}=vJ.object({agents:vJ.array(vJ.object({agent_id:vJ.string(),name:vJ.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 vJ.object({platform_settings:vJ.object({auth:vJ.object({enable_auth:vJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...iE1(this.config)},AbortSignal.timeout(15000));return vJ.object({agent_id:vJ.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 vJ.object({token:vJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return vJ.object({token:vJ.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 FF8=L(()=>{HF8()});import{createHmac as x55,timingSafeEqual as f55}from"crypto";import{z as _t}from"zod";function NF8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return x55("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function BF8($,Z){let Q=Buffer.from(JSON.stringify(UF8.parse($))).toString("base64url");return`${Q}.${NF8(Q,Z)}`}function DF8($,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(NF8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!f55(W,G))return null;try{let K=UF8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+qL)return null;return K.data}catch{return null}}var UF8;var LF8=L(()=>{yN();UF8=_t.object({sessionId:_t.string().uuid(),organizationId:_t.string().min(1).max(256),userId:_t.string().min(1).max(256),threadId:_t.string().min(1).max(256),expiresAt:_t.number().int().positive()})});import{z as pE1}from"zod";function OF8($,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 nE1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var nE1;var wF8=L(()=>{nE1=pE1.object({provider:pE1.enum(["elevenlabs","openai"]),model:pE1.string().trim().min(1).max(128)})});import{createHash as y55}from"crypto";import{z as vt}from"zod";function bt($){return`user.${y55("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class oE1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new k1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new jF8.Kvm(jx0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:jx0.StorageType.Memory,ttl:EF8.nanos(qL),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new k1(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=OF8(this.deps.defaults,Y)}catch{throw new k1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new k1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+qL},W=BF8(G,this.deps.secret),K=await this.kv(),H=bt(G),F=await K.get(H),U=F?.operation==="PUT"?wx0.parse(F.json()):null,N=tE1.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 k1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:bt($)});return{token:W,...D,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=DF8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new k1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=bt(Q),J=await Y.get(X),G=J?.operation==="PUT"?wx0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new k1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new k1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new k1(409,{message:"Voice session already connected"});try{await Y.update(X,tE1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new k1(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=bt(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?wx0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new k1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new k1(429,{message:"Voice session speech limit reached"});try{await J.update(G,tE1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new k1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(bt($));if(Q?.operation==="PUT"&&wx0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(bt($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var jx0,jF8,EF8,wx0,tE1;var PF8=L(()=>{$G();yN();LF8();wF8();jx0=C(KH(),1),jF8=C(MT(),1),EF8=C(uz(),1),wx0=vt.object({sessionId:vt.string().uuid(),expiresAt:vt.number(),connected:vt.boolean().optional(),conversation:nE1.optional(),characters:vt.number().int().nonnegative(),requests:vt.number().int().nonnegative()}),tE1=new TextEncoder});function g55($){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 h55=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},zF8=()=>{let $=new Q1;return $.use("*",h55),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await yG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:g55(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var AF8=L(()=>{W8();r1();k_0()});import{z as c1}from"zod";function jB($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function o55($){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 s55($,Z,Q){try{return JSON.parse($)}catch{throw new qF8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function r55($){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:s55(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 a55($){let Z=$.map((Q)=>{let Y=Q.function.parameters?iU(Q.function.parameters):iU({type:"object",properties:{}});return[Q.function.name,t$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function e55($){if(!$)return;return{openai:{response_format:$}}}function $95(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function TF8($,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 RF8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var u55=256,l55,c55,m55,d55,i55,p55,n55,t55,qF8,MF8,IF8;var VF8=L(()=>{u4();W8();Tt();MF();l55=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),c55=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),m55=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(c55).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),d55=c1.object({type:c1.literal("text")}),i55=c1.object({type:c1.literal("json_object")}),p55=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),n55=c1.union([d55,i55,p55]),t55=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(m55),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(l55).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:n55.optional(),user:c1.string().optional()});qF8=class qF8 extends Error{constructor($){super($);this.name="MessageConversionError"}};MF8=new Q1;MF8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jB("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jB("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(jB("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=t55.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jB(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=o55(J.model);if(!G)return $.json(jB("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)=>b2(E.providerId));if(!j)return $.json(jB("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(jB(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=r55(J.messages),N=J.tools?a55(J.tools):void 0,B=e55(J.response_format),D=$95(),O=Math.floor(Date.now()/1000);if(J.stream)return jO($,async(w)=>{let j=TF8(F,U,N,J,B,$.req.raw.signal);try{let E=$p(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=u55)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:RF8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=TF8(F,U,N,J,B,$.req.raw.signal),j=await kL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:RF8(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(jB("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(jB(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(jB(X.message,"server_error"),500)}});IF8=MF8});function Z95($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function kF8(){let $=new Q1;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=_0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!G9(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||f9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(h2(U)!==J)continue;if(!Z95(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 SF8=L(()=>{W8();iX()});var Ex0;var sE1=L(()=>{Ex0={name:"decocms",version:"4.496.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch 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","@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",kysely:"^0.28.12","posthog-node":"^5.0.0"},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 X95(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Y95}}var CF8,Y95="https://ph.studio.decocms.com",_F8;var vF8=L(()=>{W8();Te();Bg();w9();r1();Yw1();sE1();CF8=new Q1;CF8.get("/",($)=>{let Z={version:Ex0.version,theme:LY$(),...hH().logo&&{logo:hH().logo},...hL()&&{internalUrl:fr1()},...L0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:DX8(),posthog:X95(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:iF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});_F8=CF8});import{z as q$}from"zod";var J95,bF8;var xF8=L(()=>{J95=q$.object({check_id:q$.string(),title:q$.string(),description:q$.string().optional(),impact:q$.string().optional(),why:q$.string().optional(),category:q$.string(),severity:q$.string(),value_band:q$.string().optional(),value_driver:q$.string().optional(),controllability:q$.string().optional(),pages:q$.array(q$.string()),tasks:q$.array(q$.string()),evidence:q$.string(),sample_scope:q$.string().optional(),sources:q$.array(q$.string())}),bF8=q$.object({domain:q$.string(),brand:q$.string(),favicon:q$.string().optional(),scanned_at:q$.string().nullable(),lang:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),totals:q$.object({measured:q$.number(),registry_total:q$.number(),passed:q$.number(),failed:q$.number(),blocked:q$.number()}),buckets:q$.array(q$.object({id:q$.enum(["critical","important","worth"]),label:q$.string(),items:q$.array(J95)})),passing:q$.object({count:q$.number(),items:q$.array(q$.object({check_id:q$.string(),title:q$.string()}))}),not_measured:q$.object({count:q$.number(),groups:q$.array(q$.object({reason:q$.string(),label:q$.string(),count:q$.number(),checks:q$.array(q$.string())}))}),categories:q$.array(q$.object({key:q$.string(),label:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),pass:q$.number(),fail:q$.number()})),screenshots:q$.array(q$.object({url:q$.string(),page_type:q$.string().optional(),viewport:q$.enum(["desktop","mobile"]),image_url:q$.string()}))})});function fF8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${JK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Px0($,Z={}){let Q=await fetch(fF8($,"",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 bF8.parse(await Q.json())}async function yF8($,Z={}){let Q=await fetch(fF8($,".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 rE1=L(()=>{xF8();sD()});import{join as gF8}from"path";async function W95($){try{let Z=await Px0($,{signal:AbortSignal.timeout(G95)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||aD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function lG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function K95($,Z){let Q=Uh($),Y=Z?.brand?.trim()||aD1(Q),X=BZ8(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=DZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${lG(W)}</title>`,`<meta name="description" content="${lG(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="${lG(W)}" />`,`<meta property="og:description" content="${lG(K)}" />`,`<meta property="og:url" content="${lG(G)}" />`,`<meta property="og:image" content="${lG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${lG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${lG(W)}" />`,`<meta name="twitter:description" content="${lG(K)}" />`,`<meta name="twitter:image" content="${lG(H)}" />`,`<meta name="twitter:image:alt" content="${lG(F)}" />`,`<link rel="canonical" href="${lG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${lG(G)}.md" />`,`<link rel="icon" href="${lG(X)}" sizes="any" />`].join(`
4327
4327
  `)}function H95($,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}
4328
4328
  </head>`)}function hF8($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Uh(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(gF8($,"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(`${JK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(F95)}),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=Uh(Q.req.param("file").replace(/\.md$/,""));try{let X=await yF8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(U95)});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=$?gF8($,"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 W95(Uh(Y)),K=K95(Y,W);return Q.html(H95(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var G95=2500,F95=1e4,U95=1e4;var uF8=L(()=>{W8();sD();rE1();r1()});function zx0($,Z){return fetch(`${JK({})}${$}`,Z)}async function N95($,Z){let Q=await Px0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function D95($){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 B95,zO,lF8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},cF8;var mF8=L(()=>{W8();NK();sD();rE1();B95=new Set(["complete","errored","terminated","unknown"]);zO=new Q1;zO.use("*",async($,Z)=>{let Q=await B4.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});zO.use("/link-token/*",lF8);zO.use("/suggest",lF8);zO.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 N95(Z,Q))}catch{return $.json({error:"report read failed"},502)}});zO.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}=D95(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await zx0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${UE({})}`},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)}});zO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await zx0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${UE({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:B95.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});zO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await zx0(`/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)}});zO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await zx0(`/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:[]})}});cF8=zO});var L95=1048576,aE1;var dF8=L(()=>{W8();oK();r1();cO1();aE1=new Q1;aE1.post("/webhook",g5({maxSize:L95,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=L0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!IY8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=VY8(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await kY8(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as O95}from"crypto";function E95($,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 O95(Buffer.from(X),Buffer.from(Y))}function P95($,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 iF8($){let Z=new Q1;return Z.post("/webhook",g5({maxSize:w95,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(!E95(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"&&!j95.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 f80().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=P95(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await z95($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function z95($,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 Bu$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var w95=5242880,j95;var pF8=L(()=>{W8();oK();RJ();MQ();j95=new Set(["check_suite","issue_comment"])});import{DBOS as $P1,SchedulerMode as A95}from"@dbos-inc/dbos-sdk";async function R95(){try{return await q95()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function q95(){if(!x80())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (DY1(),BY1)),Promise.resolve().then(() => (NY1(),UY1))]),Q=await f80(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=z8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=VV$({sandboxes:J,pools:G,records:await kV$(X,J,G),legacyPools:vq0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await SV$(K,$N0(X,new dX(L0().encryptionKey)),{now:W,orgFsLifetimeMs:fq0}),U=0,N=0,B=0;for(let D of H)try{let O=await Y.pushCredentials(D);U+=O.stored,N+=O.kept}catch(O){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${O instanceof Error?O.message:String(O)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function M95($,Z){let Q=await $P1.runStep(R95,{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 nF8(){if(eE1)return;if(!L0().agentSandboxEnabled||!x80())return;eE1=$P1.registerWorkflow(M95,{name:"sandboxCredentialPushWorkflow"}),$P1.registerScheduled(eE1,{name:"sandboxCredentialPushWorkflow",crontab:T95,mode:A95.ExactlyOncePerIntervalWhenActive})}var T95="1-59/10 * * * *",eE1=null;var tF8=L(()=>{N3();Ew();$Z1();yq0();bq0();RJ();r1()});function oF8($){let Z=new WO($.db,new dX($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(Y)=>{let X=Eg$(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 s7(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 sF8=L(()=>{W8();Ew();yJ1();SL()});function Ax0(){try{return L0().jiraSettleSeconds*1000}catch{return VP}}function rF8($,Z){let Q=Z.windowMs??VP,Y=$.at(-1);if(!Y)return null;if(Z.changeId!==void 0&&Y.id!==Z.changeId)return{kind:"superseded"};if(Z.now!==void 0&&Z.now-Y.at<Q)return{kind:"moving"};let X=I95($,Q);if((X.id&&Y.toId?X.id===Y.toId:!1)||!X.id&&X.name===Y.to)return{kind:"returned",change:Y};return{kind:"moved",change:Y,from:X}}function I95($,Z){for(let Y=$.length-2;Y>=0;Y--){let X=$[Y],J=$[Y+1];if(X&&J&&J.at-X.at>=Z)return{id:X.toId,name:X.to}}let Q=$[0];return{id:Q?.fromId??null,name:Q?.from??null}}var ZP1=L(()=>{uL();r1()});function aF8($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let Q=Z.issue?.id,Y=Z.issue?.key,X=Z.changelog?.id;if(typeof Q!=="string"&&typeof Q!=="number"||typeof Y!=="string"||typeof X!=="string"&&typeof X!=="number")return null;let J=Z.changelog?.items?.find((G)=>G.field==="status");if(!J||typeof J.toString!=="string")return null;return{issueId:String(Q),issueKey:Y,toStatus:J.toString,changelogId:String(X)}}async function QP1($,Z,Q){if(!Z.enabled)return"disabled";let Y=Z.organizationId,X=new s7(Z.siteUrl,Z.email,Z.apiToken),J=rF8(await X.listStatusChanges(Q.issueId),{changeId:Q.changelogId,now:Q.now,windowMs:Ax0()});if(!J)return"no_rule";if(J.kind!=="moved")return J.kind;let{change:G,from:W}=J,K=(await $.storage.automations.listJiraTransitionTriggers(Y,{jiraStatus:G.to,activeOnly:!0})).map((N)=>({...N,from:IP(N)})),H=Xd$(K)&&Z.boardId?Yd$(await X.getBoardColumnStatusIds(Z.boardId),W.id,G.toId):null,F=Qd$(K,W.name,H);if(!F)return"no_rule";if(!await $.storage.jiraIntegrations.claimTrigger(Y,Q.issueId,G.id))return"duplicate";return await MK({automationId:F.automation_id,organizationId:Y,triggerId:F.id,target:{kind:"jira",issues:[Q.issueId],move:{toStatus:G.to,fromStatus:W.name,movedBy:G.by,movedAt:new Date(G.at).toISOString()},eventKey:G.id}},{idempotencyKey:`jira:${F.id}:${G.id}`}),"fired"}var YP1=L(()=>{RF();SL();xp();ZP1()});import{DBOS as Ez,SchedulerMode as V95}from"@dbos-inc/dbos-sdk";function eF8($){JP1=$}function WP1(){if(!JP1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return JP1}function KP1(){let $=WP1();return new WO($.db,new dX($.encryptionKey))}async function v95($){try{let Z=await KP1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,fired:0};let Q=await n3(WP1().db,Z.organizationId);if(!Q)return{integrationId:$,fired:0};if((await Q.storage.automations.listJiraTransitionTriggers(Z.organizationId,{activeOnly:!0})).length===0)return{integrationId:$,fired:0};let X=new s7(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${S95}m"`,W=0,K;for(let H=0;H<C95;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await QP1(Q,Z,{issueId:U.id,now:Date.now()})==="fired")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,fired:W}}catch(Z){return{integrationId:$,fired:0,error:Z instanceof Error?Z.message:String(Z)}}}async function b95($,Z){let Q=await Ez.runStep(()=>KP1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Ez.runStep(()=>v95(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.fired>0)console.log(`[jira-trigger] integration ${X.integrationId} fired ${X.fired} automation(s) the webhook missed`)}async function x95($,Z){try{let Q=await KP1().getById($);if(!Q?.enabled)return"disabled";let Y=await n3(WP1().db,Q.organizationId);if(!Y)return"disabled";let X=await QP1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="fired")console.log(`[jira-trigger] fired an automation 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 fire`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function f95($,Z){await Ez.sleep(Ax0()+_95),await Ez.runStep(()=>x95($,Z),{name:"settleJiraMove"})}async function $U8($,Z){if(!GP1)throw Error("[jira-trigger] settle workflow is not registered");await Ez.startWorkflow(GP1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function ZU8(){if(XP1)return;GP1=Ez.registerWorkflow(f95,{name:"jiraSettleWorkflow"}),XP1=Ez.registerWorkflow(b95,{name:"jiraTriggerSweepWorkflow"}),Ez.registerScheduled(XP1,{name:"jiraTriggerSweepWorkflow",crontab:k95,mode:V95.ExactlyOncePerIntervalWhenActive})}var k95="*/5 * * * *",S95=20,C95=5,_95=5000,JP1=null,GP1=null,XP1=null;var HP1=L(()=>{Ew();Hg();SL();ZP1();YP1()});function QU8($){let Z=new WO($.db,new dX($.encryptionKey)),Q=kc($.db);async function Y(J,G){let W=aF8(G);if(!W)return;let K=await Z.getByWebhookSecret(J);if(!K?.enabled)return;if((await Q.listJiraTransitionTriggers(K.organizationId,{activeOnly:!0})).length===0)return;await $U8(K.id,W)}let X=new Q1;return X.post("/webhook/:secret",g5({maxSize:y95}),async(J)=>{let G=J.req.param("secret");if(!await Z.getByWebhookSecret(G))return J.json({error:"Unknown webhook"},404);let K;try{K=await J.req.json()}catch{return J.json({error:"Body must be JSON"},400)}return Y(G,K).catch((H)=>{console.error("[jira-webhook] trigger failed",H)}),J.body(null,202)}),X}var y95=1048576;var YU8=L(()=>{W8();oK();Ew();HP1();YP1();oG0()});function XU8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var JU8,g95,h95,GU8;var WU8=L(()=>{W8();$G();Rp();Sd();JU8=new Q1,g95=["range","if-none-match","if-modified-since"],h95=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];JU8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(en($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new k1(401,{message:"Authentication required"})}if(!Q)throw new k1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new k1(400,{message:"Missing file key"});let X=await O60(Y,Z);if(!X)throw new k1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&KK()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new k1(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 XU8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of g95){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 k1(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 k1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of h95){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),XU8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});GU8=JU8});var OZ0=b((Ch)=>{var u95=Ch&&Ch.__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]}),l95=Ch&&Ch.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))u95(Z,$,Q)};Object.defineProperty(Ch,"__esModule",{value:!0});l95(oG(),Ch)});var FU8=b((KU8)=>{Object.defineProperty(KU8,"__esModule",{value:!0});KU8.version=void 0;KU8.version="3.4.0"});var BU8=b((EB)=>{var c95=EB&&EB.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(EB,"__esModule",{value:!0});EB.NodeTransport=EB.VERSION=void 0;EB.nodeResolveHost=t95;var Q9=OZ0(),m95=I0("net"),FP1=I0("tls"),d95=I0("path"),UU8=I0("fs"),i95=c95(I0("dns")),p95=FU8();EB.VERSION=p95.version;var n95="nats.js";class NU8{socket;version;lang;yields=[];signal=(0,Q9.deferred)();closedNotification=(0,Q9.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=n95,this.version=EB.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,Q9.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 Q9.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 Q9.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new Q9.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,Q9.deferred)(),Q,Y=(0,m95.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,Q9.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=Q9.DataBuffer.concat(...this.yields),X=(0,Q9.extractProtocolMessage)(Y);if(X!=="")try{let J=Q9.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,Q9.deferred)();try{if($=(0,d95.resolve)($),!(0,UU8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,UU8.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,Q9.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new Q9.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,Q9.deferred)();try{let X=(0,FP1.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 Q9.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,Q9.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new Q9.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,Q9.deferred)();try{let Y=(0,FP1.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 Q9.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,Q9.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,Q9.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 FP1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,Q9.render)($)}`);let Z=(0,Q9.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,Q9.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,Q9.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}}EB.NodeTransport=NU8;function t95($){let Z=(0,Q9.deferred)();return i95.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 jU8=b((wU8)=>{Object.defineProperty(wU8,"__esModule",{value:!0});wU8.connect=o95;var DU8=BU8(),LU8=OZ0(),OU8=OZ0();function o95($={}){if((0,OU8.hasWsProtocol)($))return Promise.reject(OU8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,LU8.setTransportFactory)({factory:()=>{return new DU8.NodeTransport},dnsResolveFn:DU8.nodeResolveHost}),LU8.NatsConnectionImpl.connect($)}});var EU8=b((AO)=>{var r95=AO&&AO.__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]}),a95=AO&&AO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))r95(Z,$,Q)};Object.defineProperty(AO,"__esModule",{value:!0});AO.connect=void 0;var e95=jU8();Object.defineProperty(AO,"connect",{enumerable:!0,get:function(){return e95.connect}});a95(OZ0(),AO)});function AU8($){let Z=$?.connectFn??YZ5,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:QZ5,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let O=I7(ZZ5,$Z5,D-1,2,0.5);await D$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?Tx0.credsAuthenticator(new TextEncoder().encode(B.creds)):B?.user?Tx0.usernamePasswordAuthenticator(B.user,B.password):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=zU8.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 YZ5($){return PU8.connect($)}var Tx0,PU8,zU8,$Z5=100,ZZ5=3000,QZ5=3000;var TU8=L(()=>{r$();Tx0=C(uz(),1),PU8=C(EU8(),1),zU8=C(KH(),1)});function Rx0($){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 qx0($,Z){return`${$}.${Z}`}class UP1{cache;constructor($){this.cache=Rx0({ttlMs:$?.ttlMs??XZ5,maxSize:$?.maxSize??JZ5})}async get($,Z){return this.cache.get(qx0($,Z))??null}async set($,Z,Q){this.cache.set(qx0($,Z),Q)}async invalidate($,Z){this.cache.delete(qx0($,Z)),this.cache.delete(qx0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var XZ5=600000,JZ5=5000;var RU8=()=>{};function Mx0($,Z){return`${$}:${Z}`}function NP1($){let Z=Rx0({ttlMs:$?.ttlMs??GZ5,maxSize:$?.maxSize??WZ5}),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(qU8,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(Mx0(K,H))},set(K,H,F){Z.set(Mx0(K,H),F)},invalidate(K,H){Z.delete(Mx0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(qU8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(Mx0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var qU8="studio.ai-provider-keys.invalidate",GZ5=30000,WZ5=5000;var MU8=()=>{};class BP1{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 IU8=($)=>{let Z;return()=>Z??=$()},DP1,LP1;var VU8=L(()=>{v6();DP1=IU8(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),LP1=IU8(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function DZ5($=CU8){return{name:nN,subjects:[`${TW1}.>`],storage:cF.StorageType.File,max_age:FZ5,max_bytes:NZ5,max_msgs_per_subject:BZ5,discard:cF.DiscardPolicy.Old,retention:cF.RetentionPolicy.Limits,duplicate_window:UZ5,num_replicas:$}}class _U8{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 kU8($){let Z=SU8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function jZ5($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,HZ5().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 EZ5($,Z){return $.info?.cluster?Z:1}function PZ5($){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 OP1{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=DZ5(X);try{await Y.streams.info(nN),await Y.streams.update(nN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(nN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(nN),await Y.streams.add(J);else throw G}},Q=await D8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await cF.jetstreamManager($),X=EZ5($,CU8);try{await Z(Y,X)}catch(J){if(X<=1||!PZ5(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:bp});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=jZ5(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=Cm$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=qW1(H,{runId:Z}),N=performance.now()-F;DP1().record(N),LP1().add(1,{"org.id":Y??"unknown"}),wZ5?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?kU8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((O)=>setImmediate(O))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),OZ5)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 D8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:kU8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:bp}),!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=qW1(Z,{runId:$,dedup:Q});DP1().record(performance.now()-X),LP1().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=Sm$({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"?cF.DeliverPolicy.New:cF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=MP($),W;try{W=await D8(async()=>{return(await Y.consumers.get(nN,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:bp})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=Qk0({messages:async function*(){try{for await(let O of W)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(aV0()).pipeThrough(eV0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:w,value:j}=await F.read();if(w){D(),O.close();return}let E=j;if(E.kind==="done"){if(J){D(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(nN,{filter:MP($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var cF,SU8,KZ5=($)=>{let Z;return()=>Z??=$()},HZ5,FZ5=86400000000000,UZ5=120000000000,NZ5=4294967296,CU8,BZ5=500000,LZ5,OZ5,wZ5;var vU8=L(()=>{r$();MW1();Yk0();$k0();v6();VU8();cF=C(KH(),1),SU8=C(uz(),1),HZ5=KZ5(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),CU8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);LZ5=process.env.STREAM_ENCODE_TRACE==="1",OZ5=process.env.DECOPILOT_STREAM_TRACE==="1";wZ5=LZ5?new _U8:null});function Ix0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,FU(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 bU8=L(()=>{R8()});class wP1{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 zZ5($,Z,Q={}){let Y=$.startsWith("thread:")?LF($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function jP1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await fN($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await JP($,{threadId:X,runBranch:G?.branch}),K=await c$0($,Q,o91(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=zZ5(W,await GM0($,X),{flat:gy(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 t3(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 xU8=L(()=>{O7();BX();MQ()});async function fU8($,Z,Q){let Y=Z.organizationId;if(!IJ(Z))return!1;if(!Fg(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=D1.shipped,J=await $.storage.taskBoard.update(Z.id,Y,{status:X},Z.updatedBy);return await r5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:X,reason:"pr_merged"}}),w8(Y,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${X}`),!0}var yU8=L(()=>{m8();jX();Op();AF();a5()});function VZ5($){return $ instanceof XX}function gU8($,Z){return Z-$>=MZ5}class EP1{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??AZ5;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??RZ5,Q=this.options.itemIntervalMs??TZ5,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()-SJ1),Q31);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()-IZ5));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 $31(this.taskBoard,X,Y),await Z31(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!==D1.progress||IJ(W)||W.assigneeId!==F8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await jP1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!gU8(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.advanceFromProgress(X,J,D1.review,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:D1.progress,to:D1.review,reason:H}}).catch(()=>{}),w8(J,F),await TF(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!==D1.progress||G.assigneeId!==F8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await xL(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),VZ5(G)){await this.returnToBacklog(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+qZ5)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToBacklog($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==D1.progress)return;let X=await this.taskBoard.returnToBacklogAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:D1.progress,to:D1.intake,reason:Q,retriesSpent:Y.retryAttempts}}).catch(()=>{}),w8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to backlog failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!gU8(kD(Q,Z.reviewCycleStartedAt),Date.now()))return;await TF($,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(!IJ(Y))return!1;let X=Y.assigneeId===F8,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 jP1(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 Ep(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 fU8(G,Y,W))return!0;if(!X)return!1;if(await ku$(G,Y))return!0;if(!sG1(W))return!1;return await jp(G,Y,{previewMatchesHead:rG1(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var AZ5=60000,TZ5=300000,RZ5=50,qZ5=60000,MZ5=900000,IZ5=120000;var hU8=L(()=>{m8();aI0();xU8();fL();Tp();AF();yU8();a5();b3();Y31();MQ();l40()});async function uU8($,Z,Q=VP){return await cU8($,Z,Q,{})}async function lU8($,Z,Q,Y=VP){return await cU8($,Q,Y,{activityId:Z})}async function cU8($,Z,Q,Y){let X=await $.automations.findActiveBoardColumnTriggers();if(X.length===0)return 0;let J=new Map;for(let K of X){let H=K.automation.organization_id;J.set(H,[...J.get(H)??[],K])}let G=await $.taskBoard.listSettledTransitions({organizationIds:[...J.keys()],since:new Date(Z-kZ5),settledBefore:new Date(Z-Q),limit:SZ5,...Y}),W=0;for(let K of G)try{let H=(J.get(K.organizationId)??[]).filter((U)=>U.column_key===K.to&&Date.parse(U.created_at)<Date.parse(K.occurredAt));if(H.length===0)continue;let F=await CZ5($.taskBoard,K,Q);for(let U of H){if(!Gd$(U,{from:F,to:K.to}))continue;if(!await $.automations.claimTriggerFire(U.id,K.activityId))continue;await $.fire({automationId:U.automation_id,organizationId:K.organizationId,triggerId:U.id,target:{kind:"card",itemId:K.itemId,columnKey:K.to,eventKey:K.activityId,movedBy:K.actorId}},{idempotencyKey:`board:${U.id}:${K.activityId}`}),W++}}catch(H){console.error(`[automations] board transition ${K.activityId} failed`,H)}return W}async function CZ5($,Z,Q){let X=(await $.listActivity(Z.itemId,Z.organizationId)).flatMap((J)=>{let G=J.data;if(J.action!=="status_changed"||typeof G?.to!=="string")return[];let W=typeof G.from==="string"?G.from:null;return W===G.to?[]:[{from:W,to:G.to,occurredAt:J.occurredAt}]});return X.length>0?Wd$(X,Q):Z.from}var kZ5=1800000,SZ5=200;var mU8=L(()=>{uL()});import{DBOS as Pz,DBOSClient as _Z5,SchedulerMode as vZ5}from"@dbos-inc/dbos-sdk";function dU8($){TO=$}async function fZ5($){if(!TO)return 0;try{return await lU8(TO,$,Date.now(),TO.settleMs)}catch(Z){return console.error(`[automations] settling board move ${$} failed`,Z),0}}async function yZ5(){if(!TO)return 0;try{return await uU8(TO,Date.now(),TO.settleMs)}catch($){return console.error("[automations] board transition sweep failed",$),0}}async function gZ5($){await Pz.sleep((TO?.settleMs??VP)+xZ5),await Pz.runStep(()=>fZ5($),{name:"settleBoardMove"})}async function hZ5($,Z){let Q=await Pz.runStep(()=>yZ5(),{name:"sweepBoardMoves"});if(Q>0)console.log(`[automations] board transition sweep fired ${Q} trigger(s) the settle wait missed`)}async function pU8($){let Z=TO;if(!Z||!zP1)return;if(!await Z.automations.hasActiveBoardColumnTrigger($.taskBoardItemId,$.to))return;let Q=`board-settle:${$.activityId}`;if(!Pz.isWithinWorkflow()){await Pz.startWorkflow(zP1,{workflowID:Q,queueName:Iz})($.activityId);return}let Y=await _Z5.create({systemDatabaseUrl:Z.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:1});try{await Y.enqueue({workflowName:iU8,queueName:Iz,workflowID:Q},$.activityId)}finally{await Y.destroy()}}function nU8(){if(PP1)return;zP1=Pz.registerWorkflow(gZ5,{name:iU8}),PP1=Pz.registerWorkflow(hZ5,{name:"boardTransitionSweepWorkflow"}),Pz.registerScheduled(PP1,{name:"boardTransitionSweepWorkflow",crontab:bZ5,mode:vZ5.ExactlyOncePerIntervalWhenActive})}var bZ5="*/5 * * * *",xZ5=2000,TO=null,iU8="boardTransitionSettleWorkflow",zP1=null,PP1=null;var tU8=L(()=>{uL();mU8()});import{readdir as uZ5,rm as Vx0}from"fs/promises";import{join as kx0}from"path";async function Sx0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-lZ5),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await _h($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await oU8($,X,Z);else if(!X.startsWith(".")){let J=kx0($,X),G=await _h(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await oU8(J,K,Z)}if((await _h(J)).length===0)await Vx0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function oU8($,Z,Q){let Y=0,X=kx0($,Z),J=await _h(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=kx0(X,W),H=await _h(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=kx0(K,U);await Vx0(B,{recursive:!0,force:!0}),Y++}}if((await _h(K)).length===0)await Vx0(K,{recursive:!0,force:!0})}if((await _h(X)).length===0)await Vx0(X,{recursive:!0,force:!0});return Y}async function _h($){try{return(await uZ5($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var lZ5=30;var AP1=()=>{};import{DBOS as TP1,SchedulerMode as cZ5}from"@dbos-inc/dbos-sdk";async function dZ5(){let $=[$H(),lh(),IB()],Z=0;for(let Q of $)try{Z+=await Sx0(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 iZ5($,Z){await TP1.runStep(()=>dZ5(),{name:"monitoringRetention"})}function rU8(){if(sU8)return;sU8=!0;let $=TP1.registerWorkflow(iZ5,{name:"monitoringRetentionWorkflow"});TP1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:mZ5,mode:cZ5.ExactlyOncePerIntervalWhenActive})}var mZ5="23 4 * * *",sU8=!1;var aU8=L(()=>{jW();AP1()});function eU8($){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 NY.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await PE($.db,Z,Y.role);return X.boundAuth=bO1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new OA(Q,void 0,X.boundAuth,Y.role,"self"),AP(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var $N8=L(()=>{nX();wN()});function ZN8(){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=wZ0(N.params.name),D=N.params.arguments||{},O=Object.keys(D).map((j)=>wZ0(j)),w=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${N9.tool}${B}${N9.dim}(${w})${N9.reset}`}else if(N.method)J=`${N9.dim}${wZ0(N.method)}${N9.reset}`}}catch{}}let W=wZ0(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${N9.mcp}${wZ0(F.slice(0,12))}\u2026${N9.reset}`}else if(X==="/mcp")W=`${N9.mcp}/mcp${N9.reset}`;else if(X==="/mcp/registry")W=`${N9.mcp}/mcp/registry${N9.reset}`;let K=nZ5(Y),H=G?"\u25C0":"\u2190";console.log(`${N9.dim}${H}${N9.reset} ${K}${Y}${N9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=pZ5(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";console.log(`${N9.dim}${D}${N9.reset} ${K}${Y}${N9.reset} ${W}${J?` ${J}`:""} ${N}${U}${N9.reset} ${N9.duration}${B}${N9.reset}`)}}}var N9,pZ5=($)=>{if($>=500)return N9.serverError;if($>=400)return N9.clientError;if($>=300)return N9.redirect;return N9.ok},nZ5=($)=>{return N9[$]||N9.reset},wZ0=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var QN8=L(()=>{N9={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 GN8}from"crypto";import{mkdir as tZ5,readdir as oZ5,rm as YN8,stat as WN8}from"fs/promises";import{join as qP1,relative as sZ5}from"path";import{z as Y8}from"zod";function HN8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return qP1(rZ5,Z)}function FN8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function RP1($,Z){let Q=HN8($),Y=FN8(Z);return qP1(Q,Y)}function aZ5($,Z,Q,Y){let X=L0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return GN8("sha256",X).update(J).digest("hex")}function JN8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=aZ5(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${FN8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function UN8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${GN8("md5","etag").update(Y).digest("hex")}"`}async function NN8($,Z,Q,Y,X){try{let J=await oZ5($,{withFileTypes:!0});for(let G of J){let W=qP1($,G.name),H=sZ5(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 NN8(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 WN8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:UN8(W,F.mtime,F.size)})}catch{}}}}catch{}}function BN8($,Z){let Y=Y0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Y8.object({prefix:Y8.string().optional(),maxKeys:Y8.number().optional().default(1000),continuationToken:Y8.string().optional(),delimiter:Y8.string().optional()}),outputSchema:Y8.object({objects:Y8.array(Y8.object({key:Y8.string(),size:Y8.number(),lastModified:Y8.string(),etag:Y8.string()})),nextContinuationToken:Y8.string().optional(),isTruncated:Y8.boolean(),commonPrefixes:Y8.array(Y8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=HN8(Y);await tZ5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await NN8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,O=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:O,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Y8.object({key:Y8.string()}),outputSchema:Y8.object({contentType:Y8.string().optional(),contentLength:Y8.number(),lastModified:Y8.string(),etag:Y8.string(),metadata:Y8.record(Y8.string(),Y8.string()).optional()}),handler:async(X)=>{let J=X,G=RP1(Y,J.key),W=await WN8(G);return{contentType:bw1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:UN8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Y8.object({key:Y8.string(),expiresIn:Y8.number().optional()}),outputSchema:Y8.object({url:Y8.string(),expiresIn:Y8.number()}),handler:async(X)=>{let J=X,G=$O(J.expiresIn,XN8);return{url:JN8(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:Y8.object({key:Y8.string(),expiresIn:Y8.number().optional(),contentType:Y8.string().optional()}),outputSchema:Y8.object({url:Y8.string(),expiresIn:Y8.number()}),handler:async(X)=>{let J=X,G=$O(J.expiresIn,XN8);return{url:JN8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Y8.object({key:Y8.string()}),outputSchema:Y8.object({success:Y8.boolean(),key:Y8.string()}),handler:async(X)=>{let J=X,G=RP1(Y,J.key);try{return await YN8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Y8.object({keys:Y8.array(Y8.string()).max(1000)}),outputSchema:Y8.object({deleted:Y8.array(Y8.string()),errors:Y8.array(Y8.object({key:Y8.string(),message:Y8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=RP1(Y,K);try{await YN8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function MP1($,Z,Q){let Y=BN8(Z,Q),X=new Ej({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:t9});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Y8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Y8.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 $W({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),xK(X,J,$,"mcp:dev-assets")}async function DN8($,Z,Q,Y){let J=BN8(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 rZ5="./data/assets",XN8=3600,KN8,LN8;var ON8=L(()=>{r1();ip();W8();GW0();dp();aX();ZO();Bb0();KN8=new Q1;KN8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return MP1($.req.raw,Z,Y)});LN8=KN8});var wN8={};O6(wN8,{mountDevRoutes:()=>eZ5});function eZ5($,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 MP1(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 DN8(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",LN8);let Q=new Q1;Q.use("*",uF({mountPath:"/api/dev-assets"})),Q.route("/",Nb0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var jN8=L(()=>{W8();Iw1();Bb0();ON8()});var VN8={};O6(VN8,{watchHandler:()=>IN8,resolveVoiceSigningSecret:()=>RN8,resolveCorsOrigin:()=>qN8,isSsoExemptPath:()=>TN8,isAllowedOAuthRedirectUri:()=>MN8,createApp:()=>F75});import{readFileSync as $75}from"fs";import{randomBytes as Z75}from"crypto";import{PrometheusSerializer as Q75}from"@opentelemetry/exporter-prometheus";import{DBOS as PB}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as J75,oAuthProtectedResourceMetadata as G75}from"better-auth/plugins";async function Y75($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,PN8(EN8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),PN8(EN8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function PN8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function TN8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${rv0}/`)||$.startsWith(`${iv0}/`)}function RN8($){let Z=$.studioJwtSecret||$.betterAuthSecret;if(Z)return Z;return console.warn("STUDIO_JWT_SECRET/BETTER_AUTH_SECRET not set - generating a random secret for voice sessions (not persistent across restarts)"),Z75(32).toString("base64")}function qN8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function MN8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"}async function F75($={}){let Z=$.database??z8(),Q=!1;g6.stop().catch((H0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",H0)});let Y,X,J,G,W=new UP1,K,H,F,U=null;if($.disableNats)K=NP1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new c60,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(H0)=>{return(async()=>{let J0=H0.getReader();try{while(!0){let{done:P0}=await J0.read();if(P0)break}}catch{}finally{J0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=AU8();let H0=L0().natsCredsPath,J0;if(H0)try{J0=$75(H0,"utf8")}catch(U8){console.error(`[app] failed to read NATS_CREDS at ${H0}; connecting anonymously`,U8)}U.init(L0().natsUrls,{creds:J0,user:L0().natsUser,password:L0().natsPassword});let P0=v61()?new w61({getJetStream:()=>U.getJetStream(),selfListVersion:Ex0.version}):null;P0?.init().catch(()=>{}),Y=P0;let z0=new Y51({getJetStream:()=>U.getJetStream()});z0.init().catch(()=>{}),X=z0;let w1=new Ug(dG1,{getJetStream:()=>U.getJetStream()}),b$=new Ug(c40,{getJetStream:()=>U.getJetStream()});w1.init().catch(()=>{}),b$.init().catch(()=>{}),J={reads:w1,cards:b$};let o$=new FH1({getJetStream:()=>U.getJetStream()});o$.init().catch(()=>{}),G=o$,K=NP1({getConnection:()=>U.getConnection()}),H=new BP1({getConnection:()=>U.getConnection()}),F=new OP1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),oY8(U),U.onReady(()=>{P0?.init().catch((U8)=>{console.error("[McpListCache] Deferred init failed:",U8)}),z0.init().catch((U8)=>{console.error("[SkillCatalogCache] Deferred init failed:",U8)}),w1.init().catch((U8)=>{console.error("[PrReadCache] Deferred init failed:",U8)}),b$.init().catch((U8)=>{console.error("[PrCardCache] Deferred init failed:",U8)}),o$.init().catch((U8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",U8)}),K.start(),$j$(()=>U.getConnection()),F.init().catch((U8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",U8)})})}if(zz)await zz();j61(Y),J51(X),W51(()=>U?.getConnection()??null),iG1(J),UH1(G);let B={storage:new Sl(Z.db),sseHub:g6,onThreadFinished:async(H0,J0)=>zp(new p3(Z.db),H0,J0,new U3(Z.db))},D=new i31(B),O=new O90(Z.db),w=new wP1(O);w.start(),Dd$(H),H.start((H0)=>{cV0(H0),D.execute({type:"CANCEL",taskId:H0}).catch((J0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",J0)})}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast start failed:",H0)}),U?.onReady(()=>{H.start().catch((H0)=>{console.error("[CancelBroadcast] Deferred start failed:",H0)})});let j=()=>U?.getConnection()??null;zw1(j),U?.onReady(()=>zw1(j)),iH1(j),U?.onReady(()=>iH1(j)),F.init().catch((H0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",H0)}),zz=async()=>{await D.stopAll(),D.dispose(),w.dispose(),H.stop().catch(()=>{}),NJ8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),Zj$(),G.teardown(),j61(null),J51(null),W51(null),iG1(null),UH1(null)};let E=new Q1;if(E.use("*",WH1({enabled:(H0)=>an(H0,"debug")==="1"})),E.use("*",ax0),E.use("/*",dY8({origin:(H0,J0)=>qN8(H0,{baseUrl:L0().baseUrl,requestOrigin:new URL(J0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(H0,J0)=>{if(await J0(),H0.req.path.includes("/files/"))return;if(H0.req.path.includes("/fs/")&&H0.req.path.endsWith("/read"))return;H0.header("X-Frame-Options","DENY"),H0.header("Content-Security-Policy","frame-ancestors 'none'")}),L0().nodeEnv==="development")E.use("*",ZN8());E.use("*",async(H0,J0)=>{if(await J0(),dt(H0.req.path))return;if(H0.res.status>=500){let z0=await H0.res.clone().text();console.error(`[5xx Response] ${H0.req.method} ${H0.req.path} - ${H0.res.status}:`,z0)}}),E.get(CX.HEALTH,(H0)=>{if(Q)return H0.json({status:"shutting_down"},503);return H0.json({status:"ok"})}),E.get(CX.HEALTH_LIVE,(H0)=>{return H0.json({status:"ok"})}),E.get(CX.HEALTH_READY,async(H0)=>{if(Q)return H0.json({status:"shutting_down"},503);let J0={};if(J0.postgres={status:await Y75(Z.pool)?"up":"down"},U)J0.nats=U.isConnected()?{status:"up"}:{status:"down"};else J0.nats={status:"down"};let P0=J0.postgres.status==="up",z0=P0?200:503;return H0.json({status:P0?"ready":"not_ready",services:J0},z0)}),E.get(CX.METRICS,async(H0)=>{try{let J0=await Qf0.collect(),P0=X75.serialize(J0.resourceMetrics);return H0.text(P0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(J0){return console.error("Failed to collect metrics:",J0),H0.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${CX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(H0)=>{let J0=H0.req.param("queueName");if(!W75.has(J0))return H0.json({error:`Unknown queue: ${J0}`},404);let[P0,z0]=await Promise.all([PB.listQueuedWorkflows({queueName:J0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),PB.listQueuedWorkflows({queueName:J0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return H0.json({queue_length:P0.length,in_flight:z0.length})}),E.route("/api/config",_F8),E.route("/api/_reports",cF8),E.route("/api/_stripe",aE1),E.route("/api/_github",iF8({taskBoard:()=>i,contextFactory:()=>y})),E.route("/api/_git",Gt);let T={db:Z.db,encryptionKey:L0().encryptionKey};E.route("/api/_jira",QU8(T)),E.route("/api/_jira",oF8(T)),E.route("/report",hF8($.clientDir)),E.route("/api/auth/custom",LX8),E.all("/api/auth/admin/*",eX8),E.all("/api/auth/*",async(H0)=>{return await B4.handler(H0.req.raw)});let z=jQ8();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",I90),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",I90),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",B90),E.route("/",TQ8()),E.use("/oauth-proxy/:connectionId/*",I90),E.all("/oauth-proxy/:connectionId/*",zN8);let A=async(H0)=>{let P0=await K75()(H0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",I90),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(H0)=>{let P0=await H75()(H0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=pY8({ttlMs:120000}),_=await wY8({db:Z.db,auth:B4,encryption:{key:L0().encryptionKey},observability:{tracer:CO,meter:J$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});NY.set(_),qr1({db:Z.db,baseUrl:N5()}),jY8({db:Z.db}),AY8({db:Z.db}),SY8({db:Z.db}),eF8({db:Z.db,encryptionKey:L0().encryptionKey}),Ah$({db:Z.db}),fY8({db:Z.db}),eh$({db:Z.db});let V=kc(Z.db),g=new Ma(Z.db),y=eU8({db:Z.db});QK1({storage:V,studioContextFactory:y,orgContextFactory:(H0)=>n3(Z.db,H0),systemDatabaseUrl:fe(L0().databaseUrl,L0().databasePgSsl)}),hW1({systemDatabaseUrl:fe(L0().databaseUrl,L0().databasePgSsl),studioContextFactory:y,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:g6}}),_W1({dispatchRunFn:Tm$,studioContextFactory:y,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:g6}});let u=new Sl(Z.db),i=new p3(Z.db),n=new U3(Z.db),U0=new EP1(i,y,n);if(L0().taskBoardReviewSweeperEnabled){U0.start();let H0=zz;zz=async()=>{await H0?.(),U0.dispose()}}dU8({automations:V,taskBoard:i,fire:MK,systemDatabaseUrl:fe(L0().databaseUrl,L0().databasePgSsl),settleMs:L0().boardTransitionSettleSeconds*1000}),Ch$(pU8),dm$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let H0=U?.getConnection();return H0?await AN8.jetstreamManager(H0):null},messageParts:u.messageParts(),resolveRun:async(H0)=>{let J0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",H0).executeTakeFirst();return J0?{orgId:J0.organization_id,createdBy:J0.created_by,version:J0.message_storage_version??1,status:J0.status,runFenceToken:J0.run_fence_token,title:J0.title??null}:null},completeRunIfNotCompleted:async(H0,J0)=>{let P0=await u.completeRunIfNotCompleted(H0,J0);if(Ix0(g6,J0,H0,P0),P0)await zp(i,H0,J0,n);return P0},markRunRequiresAction:async(H0,J0)=>{let P0=await u.requiresActionIfInProgress(H0,J0);return Ix0(g6,J0,H0,P0),P0},markRunFailed:async(H0,J0,P0,z0)=>{let w1=await u.markRunFailed(H0,J0,P0,z0);if(Ix0(g6,J0,H0,w1),w1)await zp(i,H0,J0,n);return w1},clearSynthesizedError:async(H0,J0)=>{await u.messageParts().replaceMessageParts(H0,qP(H0,J0),[])},persistTitle:(H0,J0,P0)=>u.update(H0,J0,{title:P0}),onTitleUpdated:async({runId:H0,orgId:J0,title:P0})=>{let z0=await u.get(H0,J0).catch(()=>null);g6.emit(J0,FU(H0,z0?.status??"in_progress",{title:P0,virtualMcpId:z0?.virtual_mcp_id??void 0,createdBy:z0?.created_by,triggerId:z0?.trigger_id,branch:z0?.branch??null,harnessId:z0?.harness_id??void 0,createdAt:z0?.created_at,updatedAt:z0?.updated_at}))},bumpProgress:async({runId:H0,orgId:J0})=>{await u.bumpProgress(H0,J0)},recordCompleted:async({runId:H0,orgId:J0,distinctId:P0,usage:z0})=>{l1.capture({distinctId:P0,event:"chat_message_completed",groups:{organization:J0},properties:{organization_id:J0,thread_id:H0,transport:"projector",input_tokens:z0.inputTokens,output_tokens:z0.outputTokens,total_tokens:z0.totalTokens}})},recordFailed:async({runId:H0,orgId:J0,distinctId:P0,reason:z0,kind:w1})=>{l1.capture({distinctId:P0,event:"chat_message_failed",groups:{organization:J0},properties:{organization_id:J0,thread_id:H0,transport:"projector",error_category:w1,error_message:z0}})},purgeRun:async(H0)=>{F.purge(H0)}}),ic$({studioContextFactory:y,systemDatabaseUrl:fe(L0().databaseUrl,L0().databasePgSsl),streamBuffer:F}),rU8(),Mr1(),PY8(),RY8(),_Y8(),ZU8(),nU8(),Ih$(),gY8(),$u$(),nF8();let b0=async(H0,J0,P0)=>{let z0=await V.findById(H0,J0);if(!z0)throw Error("Automation not found");return WK1({automationId:z0.id,organizationId:z0.organization_id,triggerId:null})},G0=new Xt(V,({automation:H0,trigger:J0,contextMessages:P0,idempotencyKey:z0})=>MK({automationId:H0.id,organizationId:H0.organization_id,triggerId:J0.id,contextMessages:P0},{idempotencyKey:z0})),N0=[$H(),lh(),IB()];for(let H0 of N0)Sx0(H0).then(()=>{}).catch((J0)=>console.error("[monitoring] Retention cleanup failed:",J0));let o=()=>B4.api.deleteAllExpiredApiKeys().catch((H0)=>console.error("[auth] Expired API key cleanup failed:",H0));o(),setInterval(o,86400000).unref(),E.use("*",async(H0,J0)=>{if(sx0(H0.req.path))return J0();let P0={measure:async(w1,b$)=>{bK(H0,w1);try{return await b$()}finally{ZW(H0,w1)}}},z0=await NY.create(H0.req.raw,{timings:P0});z0.automationRunner=b0,H0.set("studioContext",z0);try{await J0()}finally{let w1=z0.pendingRevalidations;if(w1.length>0)Promise.race([Promise.allSettled(w1),D$(30000)]).catch((o$)=>console.error("[studio] revalidation cleanup error:",o$))}}),E.use("/api/:org/decopilot/*",$t),E.use("/api/:org/v1/*",$t),E.use("/api/:org/files/*",$t),E.use("*",async(H0,J0)=>{if(TN8(H0.req.path))return J0();let P0=H0.get("studioContext");if(!P0?.organization?.id||!P0?.auth?.user?.id)return J0();if(!(await P0.storage.orgSsoConfig.getByOrgId(P0.organization.id))?.enforced)return J0();if(!await P0.storage.orgSsoSessions.isValid(P0.auth.user.id,P0.organization.id))return H0.json({error:"SSO authentication required for this organization"},403);return J0()});let e=new Q1;e.use("*",uF({mountPath:"/api/org-sso"})),e.route("/",$b0()),E.route("/api/org-sso",e),E.get("/api/tools/management",(H0)=>{return H0.json({tools:Ca,grouped:DA()})}),E.use("/mcp/*",async(H0,J0)=>{bK(H0,"mcp");try{return await J0()}finally{ZW(H0,"mcp")}});let Q0=async(H0,J0)=>{let P0=H0.var.studioContext;if(!P0.auth.user?.id&&!P0.auth.apiKey?.id){let z0=new URL(H0.req.url),w1=H0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),b$=w1?`${w1}://${z0.host}`:z0.origin;return H0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${b$}${z0.pathname}/.well-known/oauth-protected-resource"`}})}return await J0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),KK()){let{mountDevRoutes:H0}=(jN8(),gx0(wN8));H0(E,Q0)}let $0=new Q1;$0.use("*",uF({mountPath:"/mcp"})),$0.route("/",yk0()),E.route("/mcp",$0);let X0=new Q1;X0.use("*",uF({mountPath:"/mcp/self"})),X0.route("/",db0()),E.route("/mcp/self",X0);let h0=new Q1;h0.use("*",uF({mountPath:"/mcp"})),h0.route("/",uk0()),E.route("/mcp",h0),E.use("/api/:org/models/*",async(H0,J0)=>{bK(H0,"llm_models");try{return await J0()}finally{ZW(H0,"llm_models")}});let k0=jJ8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",k0),E.route("/api",GU8);let K1=new Q1;K1.use("*",uF({mountPath:"/api"})),K1.route("/",tb0()),E.route("/api",K1),E.route("/api",IF8);let c0=new Q1;c0.use("*",uF({mountPath:"/api"})),c0.route("/",ob0({tokenStorage:g,automationEventDispatcher:G0})),E.route("/api",c0);let w0=new Ia(Z.db),E0=new Q1;E0.use("*",uF({mountPath:"/api"})),E0.route("/",Gb0()),E.route("/api",E0),E.route("/api/deco-sites",vJ8()),E.route("/api/deco-apps",zF8());let n0=new Q1;n0.use("*",uF({mountPath:"/api/deco-sites"})),n0.route("/",Kb0()),E.route("/api/deco-sites",n0),E.route(rv0,$J8()),E.route(HK8,NK8()),E.route("/api/_editor-resolve",kF8()),E.route(jX8,EX8()),E.route(iv0,bX8());let O1=L0(),o0=O1.elevenlabsApiKey?new Ox0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,v0={openai:O1.openaiLiveApiKey?new dE1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:o0?new mE1(o0,()=>U?.getConnection()??null):null},d0=new oE1({adapter:o0,conversationAdapters:v0,defaults:O1,secret:RN8(O1),getConnection:()=>U?.getConnection()??null}),i0=eH8({voiceSessions:d0,kvStorage:w0,runRegistry:D,streamBuffer:F,sseHub:g6,cancelBroadcast:H,tokenStorage:g,automationEventDispatcher:G0,mountDevAssets:KK(),mcpAuth:Q0,oauthProxyHandler:zN8,watchHandler:IN8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((H0)=>{return H0.json({error:"Not Found",path:H0.req.path},404)}),E.onError(PJ8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([g6.stop(),zz?Promise.resolve(zz()).finally(()=>{zz=null}):Promise.resolve()]),U)await U.drain().catch((H0)=>console.error("[shutdown] NATS drain error:",H0));console.log("[shutdown] Flushing telemetry..."),await xJ().catch((H0)=>console.error("[shutdown] Telemetry flush error:",H0)),console.log("[shutdown] Closing database..."),await CJ$(Z).catch((H0)=>console.error("[shutdown] Database close error:",H0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await PB.registerQueue(iG,{partitionQueue:!0,concurrency:eW1,minPollingIntervalMs:$K1}),await PB.registerQueue(OW,{partitionQueue:!0,concurrency:yW1,priorityEnabled:!0}),await PB.registerQueue(qB,{workerConcurrency:L0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await PB.registerQueue(MB,{workerConcurrency:L0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await PB.registerQueue(SO,{partitionQueue:!0,concurrency:dc$}),await PB.registerQueue(Mz,ah$),await PB.registerQueue(Iz),await Vw1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((H0)=>PB.deleteQueue(H0))),await ZK1(Z.pool),HK$().catch((H0)=>{console.error("[studio-pack-backfill] failed:",H0)}),Am(Z.db).catch((H0)=>{console.error("[automations] built-in seed failed:",H0)}),Ir1().catch((H0)=>{console.error("[org-fs] public-sets boot sync kick failed:",H0)})}})}var AN8,EN8=5000,zz=null,zN8=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 NY.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 g=await $.req.json().catch(()=>({}));return $.json({...typeof g==="object"&&g!==null?g:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await on(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=YO1(await W.json());if(!K)K=H.origin;let N=await D90(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),D;if(Y==="authorize")D=B.authorization_endpoint;else if(Y==="token")D=B.token_endpoint;else if(Y==="register")D=B.registration_endpoint;if(!D)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=AQ8(D);if(O)return O;let w=new URL(D),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let g=w.searchParams.get("redirect_uri");if(g){let y=L0().baseUrl??j.origin;try{if(!MN8(new URL(g),y))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",g)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(uY8(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let n=atob(T.slice(6).trim()),U0=n.indexOf(":");if(U0!==-1){let b0=decodeURIComponent(n.slice(0,U0)),G0=decodeURIComponent(n.slice(U0+1));A=b0||null,q=G0||null}}catch{}let g=await $.req.formData();if(g.has("resource"))g.set("resource",U);let y=g.get("client_id"),u=g.get("client_secret");if(typeof y==="string"&&y)A=y;if(typeof u==="string"&&u)q=u;let i=new URLSearchParams;for(let[n,U0]of g.entries())i.append(n,U0.toString());z=i.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let g=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),y=await $.req.text(),u={};try{u=y?JSON.parse(y):{}}catch{z=y}let i=typeof u==="object"&&u!==null&&!Array.isArray(u);if(z===void 0&&!i)z=y;if(z===void 0){let n=u,U0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...U0,organization_id:G.organization_id,...g?.slug?{organization_slug:g.slug}:{},...g?.name?{organization_name:g.name}:{}},z=JSON.stringify(n),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[g,y]of x.headers.entries())if(!V.includes(g.toLowerCase()))_.set(g,y);if(Y==="token"&&x.ok){let g=await x.text();try{let y=JSON.parse(g);if(typeof y.access_token==="string"&&y.access_token){let u=typeof y.expires_in==="number"?new Date(Date.now()+y.expires_in*1000):null,i=null;try{i=await Kz(G.connection_url)??D}catch{i=D}let n={connectionId:Z,accessToken:y.access_token,refreshToken:typeof y.refresh_token==="string"?y.refresh_token:null,scope:typeof y.scope==="string"?y.scope:null,expiresAt:u,clientId:A,clientSecret:q,tokenEndpoint:i};await new o5(X.db,X.vault).upsert(n)}}catch(y){console.error("[oauth-proxy] failed to persist downstream token:",y)}return new Response(g,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},IN8=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&&(!mN(Y)||!await dN(Z)))return $.json({error:"forbidden"},403);let W=G?gI0:Y;if(G)bL({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return jO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!g6.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(()=>{g6.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),g6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),g6.remove(W,K),N()})})})},X75,W75,K75=()=>G75(B4),H75=()=>J75(B4);var kN8=L(()=>{r$();r1();Vr1();zY8();qY8();vY8();o60();RG1();hY8();l40();w9();Sd();R8();W8();lv0();iY8();KH1();NK();wN();sO1();N3();v6();Q6();Yw1();PX8();xX8();Kw1();ZJ8();ww1();qw1();Mw1();HK();L90();Iw1();zJ8();mv0();$F8();JF8();GF8();FF8();PF8();Cw1();AF8();gk0();m60();VF8();lk0();KE1();SF8();GE1();vF8();uF8();mF8();dF8();pF8();tF8();sF8();YU8();HP1();fw1();WU8();WE1();QE1();_Z0();TU8();sE1();FJ();NU0();H$0();nG1();Y$0();J$0();BH1();RU8();MU8();Aw1();vU8();CV0();bU8();Kr();Sa();vL();a5();jO1();hU8();tU8();_U();Hg();aU8();vK0();AP1();jW();kw1();_L();SW1();vK0();rV0();oG0();Yr0();$N8();Wj();QN8();Tt();sO1();Dp();_p();mV0();AN8=C(KH(),1);X75=new Q75,W75=new Set([iG,OW,qB,MB,SO,Mz])});var vN8={};O6(vN8,{resolveClientDir:()=>w75,resolveAssetPathWithTraversalCheck:()=>_N8,isPathWithinDirectory:()=>CN8,createAssetHandler:()=>j75});import{resolve as jZ0,dirname as U75,join as N75,extname as B75,basename as D75,sep as SN8}from"path";function L75($,Z){if($===Z||D75($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${SN8}assets${SN8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function CN8($,Z){let Q=jZ0(Z),Y=jZ0($);return Y===Q||Y.startsWith(Q+"/")}function _N8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=jZ0(Z,Q);if(!CN8(Y,Z))return null;return Y}function w75($,Z="../client"){let Q=new URL($),Y=U75(Q.pathname);return jZ0(Y,Z)}function j75($={}){let{env:Z="production",clientDir:Q=O75,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=_N8({requestPath:W,clientDir:Q});if(!K)return null;let H=N75(K,"index.html"),F=jZ0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(B75(K))?[H,F]:[];for(let D of[K,...B])try{let O=Bun.file(D);if(await O.exists())return new Response(O,{headers:L75(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var O75="./dist/client";var bN8=()=>{};var xN8={};O6(xN8,{tryUpgradePreviewWs:()=>q75,tryHandlePreviewHttp:()=>R75,previewWebSocketHandler:()=>M75,parsePreviewBaseDomain:()=>T75,isPreviewWsData:()=>Cx0,extractHandleFromHost:()=>IP1});function z75($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function A75(){return new Response(P75,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function T75($){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 IP1($,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 R75($,Z){let Q=IP1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return PZ0(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Ti)&&z75($))return A75();return X.headers.delete(Ti),X}function PZ0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Cx0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function q75($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=IP1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return PZ0(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return PZ0(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return PZ0(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 PZ0(426,"upgrade failed");return}function EZ0($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var E75=256,P75='<!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>',M75;var fN8=L(()=>{q80();M75={open($){let Z=$.data;if(!Cx0(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)}`),EZ0($,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)=>{EZ0($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{EZ0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Cx0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=E75){EZ0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Cx0(Z))return;EZ0($,Z,1000,"")}}});r$();var uP1="13";function lP1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:uP1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import $B8 from"pg";var cP1=8314027461559302n,ZB8=600000,QB8=500;async function mP1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=ZB8}=$,X=$.log??((K)=>console.log(K)),J=new $B8.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",[cP1.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 D$(QB8)}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)",[cP1.toString()])}catch{}await J.end().catch(()=>{})}}r1();cx0();v6();function $D8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Jf0($,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 qz1(){let $=$D8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Jf0($,"--cpu-prof-dir")??process.cwd(),name:Jf0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Jf0($,"--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.'}))}Kf0();var xZ0;function bz1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Sz();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(()=>{}),xZ0=setInterval(()=>void Z().catch(()=>{}),$),xZ0.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(xZ0)clearInterval(xZ0)}}import*as YD8 from"bun:jsc";var{startSamplingProfiler:XD8,samplingProfilerStackTraces:JD8}=YD8;function xz1(){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{XD8()}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=JD8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function fz1(){qz1();let $=[bz1(),vz1(),xz1()];return()=>{for(let Z of $)Z()}}import{existsSync as b75}from"fs";var DW=L0();Az1();var{DBOS:zZ0,DBOSClient:I75}=await import("@dbos-inc/dbos-sdk");function vP1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var V75=[iG,OW,qB,MB,SO,Mz,Iz],k75=DW.dispatchRole==="worker"?V75:DW.dispatchRole==="api"?[]:void 0;zZ0.setConfig(lP1({systemDatabaseUrl:vP1(DW.databaseUrl,DW.databasePgSsl),poolSize:DW.dbosPoolSize,executorID:DW.podName,listenQueues:k75}));var{createApp:S75}=await Promise.resolve().then(() => (kN8(),VN8)),{isServerPath:C75}=await Promise.resolve().then(() => (_Z0(),Jz1)),{createAssetHandler:_75,resolveClientDir:lN8}=await Promise.resolve().then(() => (bN8(),vN8)),v75=DW.port,yN8=lN8(import.meta.url,"../client"),cN8=b75(yN8)?yN8:lN8(import.meta.url,"../dist/client"),x75=_75({clientDir:cN8,isServerPath:C75}),f75={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function y75($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(f75))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:g75,tryHandlePreviewHttp:h75,tryUpgradePreviewWs:u75,previewWebSocketHandler:VP1,isPreviewWsData:kP1}=await Promise.resolve().then(() => (fN8(),xN8)),{getOrInitSharedRunner:mN8}=await Promise.resolve().then(() => (RJ(),ck$)),dN8=g75(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),gN8={baseDomain:dN8??"",getRunner:mN8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())mN8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var _x0=await S75({clientDir:cN8}),SP1=process.env.DBOS_CONDUCTOR_KEY?.trim(),hN8=process.env.DBOS_CONDUCTOR_URL?.trim();await mP1({databaseUrl:vP1(DW.databaseUrl,DW.databasePgSsl)},()=>zZ0.launch({...SP1?{conductorKey:SP1}:{},...SP1&&hN8?{conductorURL:hN8}:{}}));console.log(`[dbos] application version: ${zZ0.applicationVersion}`);var CP1=5,_P1=0;await D8(async()=>{_P1++;try{return await _x0.initDbos()}catch($){let Z=_P1>=CP1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${_P1}/${CP1} failed, ${Z}`,$),$}},{maxAttempts:CP1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});var l75=Bun.serve({idleTimeout:0,port:v75,hostname:"0.0.0.0",fetch:async($,Z)=>{if(dN8){let Y=await u75($,Z,gN8);if(Y===void 0)return;if(Y)return Y;let X=await h75($,gN8);if(X)return X}let Q=await x75($);if(Q)return y75(Q);return _x0.fetch($,{server:Z})},websocket:{open($){if(kP1($.data))VP1.open($)},message($,Z){if(kP1($.data))VP1.message($,Z)},close($){if(kP1($.data))VP1.close($)}},development:!1}),c75=fz1();if(DW.localMode)Promise.resolve().then(() => (Bg(),RV0)).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(() => (Bg(),RV0));Z()}catch{}});var uN8=!1;async function m75($){let Z;try{Z=await I75.create({systemDatabaseUrl:vP1(DW.databaseUrl,DW.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:OW,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:OW}),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 vx0($){if(uN8)return;uN8=!0,console.log(`
4329
4329
  [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{c75(),_x0.markShuttingDown();let J=dP1(DW.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await D$(J),await l75.stop(!0);let G=zZ0.executorID;await zZ0.shutdown(),await m75(G),await _x0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>vx0("SIGTERM"));process.on("SIGINT",()=>vx0("SIGINT"));process.on("SIGHUP",()=>vx0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),vx0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.495.1",
3
+ "version": "4.496.0",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c,j as s,_ as u}from"./index-CsOndfWq.js";import{C as f}from"./index-vXsAhBzz.js";import{a as x}from"./thread-route-Cl51Xz5G.js";import{u as g}from"./use-task-metadata-DSX2LZld.js";import{AppViewContent as h}from"./project-app-view-DfvTxGtE.js";import"./use-mobile-CSIXbJHF.js";import"./thread-button-VjZAd4E3.js";import"./agent-icon-B6BGlN8Z.js";import"./AlertCircle-CIcaLchq.js";import"./Tool01-BJxIe84T.js";import"./ArrowUp-B8mx1ol5.js";import"./ArrowLeft-DfXjYrQi.js";import"./LinkBroken01-t0qEt8Lb.js";import"./ShoppingBag01-C6V1h_2Z.js";import"./ZoomOut-BwebNTOr.js";import"./Building02-BPQ9fMgU.js";import"./CheckCircle-ChTvVqPO.js";import"./ChevronUp-DckC0O5o.js";import"./ChevronSelectorVertical-zoEWZ9sC.js";import"./UserSquare-B4EnRc3E.js";import"./Copy01-Corfj4_5.js";import"./CreditCard01-DlMgd9ia.js";import"./DotsVertical-uTiOtqeH.js";import"./Image01-gtPlqhVq.js";import"./Globe04-CL3-GeAh.js";import"./SwitchHorizontal01-DN4m9K18.js";import"./Key01-BQnNEHGn.js";import"./Link01-BSAGxXho.js";import"./Monitor01-BIhKjgAf.js";import"./Sun-DlWI3pkK.js";import"./Play-Ba5tQ65L.js";import"./Plus-4vFTW30B.js";import"./SearchMd-DqzvTdT2.js";import"./Trash01-Dvqfc9le.js";import"./Upload01-BxWCGLDw.js";import"./User01-Dh_l7uq-.js";import"./Users01-CIo5W1LA.js";import"./XClose-D59UZ-3l.js";import"./use-chat-layout-state-C60DGNO2.js";import"./use-file-configs-B6MWoy0P.js";import"./use-organization-settings-DxhpqnYO.js";import"./schema-D6ibRSPf.js";import"./task-board-B6zg05l8.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-CXF8Iqmd.js";import"./use-mcp-client-DaCLGUbW.js";import"./auth-CK5qaIjH.js";import"./use-panel-navigate-B75ATwR5.js";import"./use-project-scope-YpfqNFMB.js";import"./thread-intent-iex-fi8o.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-BxFXPxOj.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DDYhwyXr.js";import"./tooltip-UhT0N_rD.js";import"./index-DLLBoYqS.js";import"./toolbar-icon-button-D0koaCWD.js";import"./shell-layout-J-egCYHs.js";import"./avatar-CFdg60BT.js";import"./use-clock-tick-BKZqeY5S.js";import"./command-CdSfLL9P.js";import"./index-C759w8PG.js";import"./integration-icon-D2n5_i5E.js";import"./project-icon-EnEce15b.js";import"./new-project-dialog-DNSDpVVm.js";import"./label-PMOCFxAK.js";import"./repository-import-picker-DqDsZx5W.js";import"./use-navigate-to-agent-CyIa0H8E.js";import"./repository-picker-DLkKyJUN.js";import"./useInfiniteQuery-C6j7p53s.js";import"./infiniteQueryObserver-pU9pZci3.js";import"./collection-search-BPtx8G1f.js";import"./use-debounced-value-XS_u63Qy.js";import"./required-auth-layout-CVWrBxoR.js";import"./autosend-CACWNbxC.js";import"./use-org-sso-Bhc1WrbS.js";import"./resizable-DyTZr2pU.js";import"./icon-button-HZupTrz9.js";import"./tool-namespace-4DMlS5tP.js";import"./use-mcp-tools-B_v6Xc8f.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-URE_9VC7.js";import"./types-DHDp1Ix5.js";import"./chat-context-Dh5tO9W1.js";import"./use-decopilot-events-BatPvp4V.js";import"./use-ai-providers-Cz8n-q9d.js";import"./use-chat-navigation-CyFm8cEg.js";import"./location-BjlyegC2.js";import"./task-route-Da1wUewT.js";import"./core.esm-gbvtUb0d.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-DTmLU6ot.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-CJ_Xz43P.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-DYlwY_7i.js";import"./authenticate-and-persist-oauth-BqWfXARS.js";import"./mcp-oauth-CS7wEky-.js";import"./mcp-oauth-CtduGE9o.js";import"./track-BMoyL32N.js";import"./extract-connection-data-DKxAapkS.js";import"./connection-KGhvUETQ.js";import"./url-slug-QrQmlYwX.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 e,b2 as b,u as g}from"./index-CsOndfWq.js";import{C as j}from"./index-vXsAhBzz.js";import{F as v,H as S}from"./file-share-button-BFJJKHR1.js";import{u as k,b as y,e as _}from"./use-org-fs-DcHowQO9.js";import{S as w}from"./settings-tab-cuNoLFSI.js";import{b as M}from"./thread-route-Cl51Xz5G.js";import"./use-mobile-CSIXbJHF.js";import"./thread-button-VjZAd4E3.js";import"./agent-icon-B6BGlN8Z.js";import"./AlertCircle-CIcaLchq.js";import"./Tool01-BJxIe84T.js";import"./ArrowUp-B8mx1ol5.js";import"./ArrowLeft-DfXjYrQi.js";import"./LinkBroken01-t0qEt8Lb.js";import"./ShoppingBag01-C6V1h_2Z.js";import"./ZoomOut-BwebNTOr.js";import"./Building02-BPQ9fMgU.js";import"./CheckCircle-ChTvVqPO.js";import"./ChevronUp-DckC0O5o.js";import"./ChevronSelectorVertical-zoEWZ9sC.js";import"./UserSquare-B4EnRc3E.js";import"./Copy01-Corfj4_5.js";import"./CreditCard01-DlMgd9ia.js";import"./DotsVertical-uTiOtqeH.js";import"./Image01-gtPlqhVq.js";import"./Globe04-CL3-GeAh.js";import"./SwitchHorizontal01-DN4m9K18.js";import"./Key01-BQnNEHGn.js";import"./Link01-BSAGxXho.js";import"./Monitor01-BIhKjgAf.js";import"./Sun-DlWI3pkK.js";import"./Play-Ba5tQ65L.js";import"./Plus-4vFTW30B.js";import"./SearchMd-DqzvTdT2.js";import"./Trash01-Dvqfc9le.js";import"./Upload01-BxWCGLDw.js";import"./User01-Dh_l7uq-.js";import"./Users01-CIo5W1LA.js";import"./XClose-D59UZ-3l.js";import"./use-chat-layout-state-C60DGNO2.js";import"./use-file-configs-B6MWoy0P.js";import"./use-organization-settings-DxhpqnYO.js";import"./schema-D6ibRSPf.js";import"./task-board-B6zg05l8.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-CXF8Iqmd.js";import"./use-mcp-client-DaCLGUbW.js";import"./auth-CK5qaIjH.js";import"./use-panel-navigate-B75ATwR5.js";import"./use-project-scope-YpfqNFMB.js";import"./thread-intent-iex-fi8o.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-BxFXPxOj.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DDYhwyXr.js";import"./tooltip-UhT0N_rD.js";import"./index-DLLBoYqS.js";import"./toolbar-icon-button-D0koaCWD.js";import"./shell-layout-J-egCYHs.js";import"./avatar-CFdg60BT.js";import"./use-clock-tick-BKZqeY5S.js";import"./command-CdSfLL9P.js";import"./index-C759w8PG.js";import"./integration-icon-D2n5_i5E.js";import"./project-icon-EnEce15b.js";import"./new-project-dialog-DNSDpVVm.js";import"./label-PMOCFxAK.js";import"./repository-import-picker-DqDsZx5W.js";import"./use-navigate-to-agent-CyIa0H8E.js";import"./repository-picker-DLkKyJUN.js";import"./useInfiniteQuery-C6j7p53s.js";import"./infiniteQueryObserver-pU9pZci3.js";import"./collection-search-BPtx8G1f.js";import"./use-debounced-value-XS_u63Qy.js";import"./required-auth-layout-CVWrBxoR.js";import"./autosend-CACWNbxC.js";import"./use-org-sso-Bhc1WrbS.js";import"./resizable-DyTZr2pU.js";import"./icon-button-HZupTrz9.js";import"./popover-Cz5BF_3m.js";import"./extract-connection-data-DKxAapkS.js";import"./metadata-D72DunRR.js";import"./connection-KGhvUETQ.js";import"./url-slug-QrQmlYwX.js";import"./chat-context-Dh5tO9W1.js";import"./use-decopilot-events-BatPvp4V.js";import"./use-ai-providers-Cz8n-q9d.js";import"./use-chat-navigation-CyFm8cEg.js";import"./location-BjlyegC2.js";import"./build-improve-prompt-doc-D_-kPQOz.js";import"./empty-state-MzgkrW8i.js";import"./use-date-fns-locale-CoZazUfP.js";import"./differenceInSeconds-C3x8sHUj.js";import"./mcp-oauth-CS7wEky-.js";import"./mcp-oauth-CtduGE9o.js";import"./alert-dialog-G7y5OQF6.js";import"./textarea-DtmaxKHE.js";import"./use-connection-UE8r2cKi.js";import"./use-debounced-autosave-CYyabydu.js";import"./add-connection-dialog-BWXm_ufM.js";import"./connection-card-CmOjRIm5.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-C9byc45q.js";import"./form-CJ_Xz43P.js";import"./select-CMFCWFoG.js";import"./index-BdQq_4o_.js";import"./connection-form-helpers-DwH5XcOW.js";import"./authenticate-and-persist-oauth-BqWfXARS.js";import"./collection-tabs-rDrGFt87.js";import"./badge-2H20v0nO.js";import"./use-infinite-scroll-BD4__gTJ.js";import"./useSuspenseInfiniteQuery-LN6pz4nD.js";import"./file-type-icon-D_YzVdyI.js";import"./checkbox-BRl2nVIa.js";import"./search-input-ChI_JhrH.js";import"./use-mcp-auth-status-CDCKWbI3.js";import"./types-DHDp1Ix5.js";import"./use-mcp-tools-B_v6Xc8f.js";import"./use-mcp-prompts-Cj8TKxv6.js";import"./utils-CVEq3hMx.js";import"./switch-CkoldjL2.js";import"./scroll-area-C8BYcujI.js";import"./optimistic-project-sidebar-views-7KZes5Aj.js";import"./virtual-mcp-DUsuHWMj.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CxU-8m-r.js";import"./use-secrets-CkRBiULT.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 p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=p):p=t[0];let o;t[1]!==r?(o=r&&e.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=e.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[p,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p={refetchIntervalWhenAbsent:2e3},t[0]=p):p=t[0];const o=k(x,r,p),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=e.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=e.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=e.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),p=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==p?(m=o?e.jsx(D,{path:o},o):e.jsx(w,{virtualMcpId:p}),i[1]=o,i[2]=p,i[3]=m):m=i[3],m}function Zo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(C,{})}),i[0]=t):t=i[0],t}export{Zo as default};
@@ -1 +0,0 @@
1
- import{c as s,j as e}from"./index-CsOndfWq.js";import{C as a}from"./index-vXsAhBzz.js";import{L as n}from"./library-tab-De6d8NXP.js";import{u as c}from"./use-ensure-project-folder-D3lq0ueh.js";import{u}from"./use-project-scope-YpfqNFMB.js";import{p as l}from"./location-BjlyegC2.js";import"./use-mobile-CSIXbJHF.js";import"./thread-button-VjZAd4E3.js";import"./agent-icon-B6BGlN8Z.js";import"./AlertCircle-CIcaLchq.js";import"./Tool01-BJxIe84T.js";import"./ArrowUp-B8mx1ol5.js";import"./ArrowLeft-DfXjYrQi.js";import"./LinkBroken01-t0qEt8Lb.js";import"./ShoppingBag01-C6V1h_2Z.js";import"./ZoomOut-BwebNTOr.js";import"./Building02-BPQ9fMgU.js";import"./CheckCircle-ChTvVqPO.js";import"./ChevronUp-DckC0O5o.js";import"./ChevronSelectorVertical-zoEWZ9sC.js";import"./UserSquare-B4EnRc3E.js";import"./Copy01-Corfj4_5.js";import"./CreditCard01-DlMgd9ia.js";import"./DotsVertical-uTiOtqeH.js";import"./Image01-gtPlqhVq.js";import"./Globe04-CL3-GeAh.js";import"./SwitchHorizontal01-DN4m9K18.js";import"./Key01-BQnNEHGn.js";import"./Link01-BSAGxXho.js";import"./Monitor01-BIhKjgAf.js";import"./Sun-DlWI3pkK.js";import"./Play-Ba5tQ65L.js";import"./Plus-4vFTW30B.js";import"./SearchMd-DqzvTdT2.js";import"./Trash01-Dvqfc9le.js";import"./Upload01-BxWCGLDw.js";import"./User01-Dh_l7uq-.js";import"./Users01-CIo5W1LA.js";import"./XClose-D59UZ-3l.js";import"./use-chat-layout-state-C60DGNO2.js";import"./use-file-configs-B6MWoy0P.js";import"./use-organization-settings-DxhpqnYO.js";import"./schema-D6ibRSPf.js";import"./task-board-B6zg05l8.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-CXF8Iqmd.js";import"./use-mcp-client-DaCLGUbW.js";import"./auth-CK5qaIjH.js";import"./thread-route-Cl51Xz5G.js";import"./use-panel-navigate-B75ATwR5.js";import"./thread-intent-iex-fi8o.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-BxFXPxOj.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DDYhwyXr.js";import"./tooltip-UhT0N_rD.js";import"./index-DLLBoYqS.js";import"./toolbar-icon-button-D0koaCWD.js";import"./shell-layout-J-egCYHs.js";import"./avatar-CFdg60BT.js";import"./use-clock-tick-BKZqeY5S.js";import"./command-CdSfLL9P.js";import"./index-C759w8PG.js";import"./integration-icon-D2n5_i5E.js";import"./project-icon-EnEce15b.js";import"./new-project-dialog-DNSDpVVm.js";import"./label-PMOCFxAK.js";import"./repository-import-picker-DqDsZx5W.js";import"./use-navigate-to-agent-CyIa0H8E.js";import"./repository-picker-DLkKyJUN.js";import"./useInfiniteQuery-C6j7p53s.js";import"./infiniteQueryObserver-pU9pZci3.js";import"./collection-search-BPtx8G1f.js";import"./use-debounced-value-XS_u63Qy.js";import"./required-auth-layout-CVWrBxoR.js";import"./autosend-CACWNbxC.js";import"./use-org-sso-Bhc1WrbS.js";import"./resizable-DyTZr2pU.js";import"./icon-button-HZupTrz9.js";import"./search-toggle-CUWWqFsW.js";import"./alert-dialog-G7y5OQF6.js";import"./use-chat-navigation-CyFm8cEg.js";import"./use-org-fs-DcHowQO9.js";import"./use-org-repo-syncs-CpMqTwr0.js";import"./textarea-DtmaxKHE.js";import"./markdown-jtizwWYK.js";import"./use-copy-qR80P2m5.js";import"./file-share-button-BFJJKHR1.js";import"./popover-Cz5BF_3m.js";import"./preview-dialog-BrKZ8Eye.js";import"./preview-content-B68u7aBy.js";import"./file-preview-Cp_wgKZ4.js";import"./utils-VljhGZNh.js";import"./editor-vTtvQU6U.js";import"./file-type-icon-D_YzVdyI.js";import"./folder-icon-DDtGpklD.js";import"./empty-state-OuooYiXX.js";import"./view-mode-toggle-Bsl9fIVT.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-CxKhFuEH.js";import"./use-members-COPm4P5W.js";import"./use-org-auth-client-DYKRjiNi.js";function no(){const t=s.c(6),{project:o}=u();c(o);const m=o?.id??"pending";let r;t[0]!==o?(r=o?l(o):void 0,t[0]=o,t[1]=r):r=t[1];const p=o?.title??void 0;let i;return t[2]!==m||t[3]!==r||t[4]!==p?(i=e.jsx(a.Content,{children:e.jsx(n,{root:r,rootLabel:p},m)}),t[2]=m,t[3]=r,t[4]=p,t[5]=i):i=t[5],i}export{no as default};
@@ -1 +0,0 @@
1
- import{c as a,j as e,u as n}from"./index-CsOndfWq.js";import{C as c}from"./index-vXsAhBzz.js";import{L as l}from"./preview-panel-hieScKI7.js";import{a as u}from"./use-panel-navigate-B75ATwR5.js";import{S as f}from"./settings-tab-cuNoLFSI.js";import{b as h}from"./thread-route-Cl51Xz5G.js";import"./use-mobile-CSIXbJHF.js";import"./thread-button-VjZAd4E3.js";import"./agent-icon-B6BGlN8Z.js";import"./AlertCircle-CIcaLchq.js";import"./Tool01-BJxIe84T.js";import"./ArrowUp-B8mx1ol5.js";import"./ArrowLeft-DfXjYrQi.js";import"./LinkBroken01-t0qEt8Lb.js";import"./ShoppingBag01-C6V1h_2Z.js";import"./ZoomOut-BwebNTOr.js";import"./Building02-BPQ9fMgU.js";import"./CheckCircle-ChTvVqPO.js";import"./ChevronUp-DckC0O5o.js";import"./ChevronSelectorVertical-zoEWZ9sC.js";import"./UserSquare-B4EnRc3E.js";import"./Copy01-Corfj4_5.js";import"./CreditCard01-DlMgd9ia.js";import"./DotsVertical-uTiOtqeH.js";import"./Image01-gtPlqhVq.js";import"./Globe04-CL3-GeAh.js";import"./SwitchHorizontal01-DN4m9K18.js";import"./Key01-BQnNEHGn.js";import"./Link01-BSAGxXho.js";import"./Monitor01-BIhKjgAf.js";import"./Sun-DlWI3pkK.js";import"./Play-Ba5tQ65L.js";import"./Plus-4vFTW30B.js";import"./SearchMd-DqzvTdT2.js";import"./Trash01-Dvqfc9le.js";import"./Upload01-BxWCGLDw.js";import"./User01-Dh_l7uq-.js";import"./Users01-CIo5W1LA.js";import"./XClose-D59UZ-3l.js";import"./use-chat-layout-state-C60DGNO2.js";import"./use-file-configs-B6MWoy0P.js";import"./use-organization-settings-DxhpqnYO.js";import"./schema-D6ibRSPf.js";import"./task-board-B6zg05l8.js";import"./site-slug-DebpOoQq.js";import"./repository-binding-CXF8Iqmd.js";import"./use-mcp-client-DaCLGUbW.js";import"./auth-CK5qaIjH.js";import"./thread-intent-iex-fi8o.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-BxFXPxOj.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DDYhwyXr.js";import"./tooltip-UhT0N_rD.js";import"./index-DLLBoYqS.js";import"./toolbar-icon-button-D0koaCWD.js";import"./shell-layout-J-egCYHs.js";import"./avatar-CFdg60BT.js";import"./use-project-scope-YpfqNFMB.js";import"./use-clock-tick-BKZqeY5S.js";import"./command-CdSfLL9P.js";import"./index-C759w8PG.js";import"./integration-icon-D2n5_i5E.js";import"./project-icon-EnEce15b.js";import"./new-project-dialog-DNSDpVVm.js";import"./label-PMOCFxAK.js";import"./repository-import-picker-DqDsZx5W.js";import"./use-navigate-to-agent-CyIa0H8E.js";import"./repository-picker-DLkKyJUN.js";import"./useInfiniteQuery-C6j7p53s.js";import"./infiniteQueryObserver-pU9pZci3.js";import"./collection-search-BPtx8G1f.js";import"./use-debounced-value-XS_u63Qy.js";import"./required-auth-layout-CVWrBxoR.js";import"./autosend-CACWNbxC.js";import"./use-org-sso-Bhc1WrbS.js";import"./resizable-DyTZr2pU.js";import"./icon-button-HZupTrz9.js";import"./preview-content-B68u7aBy.js";import"./file-share-button-BFJJKHR1.js";import"./use-org-fs-DcHowQO9.js";import"./popover-Cz5BF_3m.js";import"./file-preview-Cp_wgKZ4.js";import"./utils-VljhGZNh.js";import"./editor-vTtvQU6U.js";import"./file-type-icon-D_YzVdyI.js";import"./markdown-jtizwWYK.js";import"./use-copy-qR80P2m5.js";import"./location-BjlyegC2.js";import"./extract-connection-data-DKxAapkS.js";import"./metadata-D72DunRR.js";import"./connection-KGhvUETQ.js";import"./url-slug-QrQmlYwX.js";import"./chat-context-Dh5tO9W1.js";import"./use-decopilot-events-BatPvp4V.js";import"./use-ai-providers-Cz8n-q9d.js";import"./use-chat-navigation-CyFm8cEg.js";import"./build-improve-prompt-doc-D_-kPQOz.js";import"./empty-state-MzgkrW8i.js";import"./use-date-fns-locale-CoZazUfP.js";import"./differenceInSeconds-C3x8sHUj.js";import"./mcp-oauth-CS7wEky-.js";import"./mcp-oauth-CtduGE9o.js";import"./alert-dialog-G7y5OQF6.js";import"./textarea-DtmaxKHE.js";import"./use-connection-UE8r2cKi.js";import"./use-debounced-autosave-CYyabydu.js";import"./add-connection-dialog-BWXm_ufM.js";import"./connection-card-CmOjRIm5.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-C9byc45q.js";import"./form-CJ_Xz43P.js";import"./select-CMFCWFoG.js";import"./index-BdQq_4o_.js";import"./connection-form-helpers-DwH5XcOW.js";import"./authenticate-and-persist-oauth-BqWfXARS.js";import"./collection-tabs-rDrGFt87.js";import"./badge-2H20v0nO.js";import"./use-infinite-scroll-BD4__gTJ.js";import"./useSuspenseInfiniteQuery-LN6pz4nD.js";import"./checkbox-BRl2nVIa.js";import"./search-input-ChI_JhrH.js";import"./use-mcp-auth-status-CDCKWbI3.js";import"./types-DHDp1Ix5.js";import"./use-mcp-tools-B_v6Xc8f.js";import"./use-mcp-prompts-Cj8TKxv6.js";import"./utils-CVEq3hMx.js";import"./switch-CkoldjL2.js";import"./scroll-area-C8BYcujI.js";import"./optimistic-project-sidebar-views-7KZes5Aj.js";import"./virtual-mcp-DUsuHWMj.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CxU-8m-r.js";import"./use-secrets-CkRBiULT.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(5),{path:m}=r,{closePanel:p}=u();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let s;return t[2]!==i||t[3]!==m?(s=e.jsx(l,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=s):s=t[4],s}function x(){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?e.jsx(b,{path:o},o):e.jsx(f,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Kr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(c.Content,{children:e.jsx(x,{})}),r[0]=t):t=r[0],t}export{Kr as default};